Старый 03.03.2011, 14:36   #1   
Форумец
 
Сообщений: 7
Регистрация: 02.03.2011

Naiskosok вне форума Не в сети
Помогите пожалуйста! Паскаль!

Среди строк матрицы, которые упорядочены по убыванию, напечатать номер строки с наименьшим произведением элементов.

Если не сложно напишите решение, последняя задача осталась и я не могу её решить.
  Ответить с цитированием
Старый 03.03.2011, 16:09   #2   
Форумец
 
Сообщений: 286
Регистрация: 17.09.2010

Battle Coder вне форума Не в сети
Naiskosok, http://bvf.ru/forum/showthread.php?t=319756
На каком языке хоть? в каком формате ввод-вывод данных?
P.S. Готов сделать за 200 рублей.
  Ответить с цитированием
Старый 03.03.2011, 18:32   #3   
старый хрыч
 
Аватар для X0R
 
Сообщений: 6,334
Регистрация: 17.12.2006
Возраст: 39

X0R вне форума Не в сети
готов написать за 150)
  Ответить с цитированием
Старый 03.03.2011, 18:47   #4   
Глаза пучит
 
Аватар для Нестрашный Му
 
Сообщений: 1,689
Регистрация: 12.07.2003
Возраст: 58

Нестрашный Му вне форума Не в сети
За пузырь! Организм требует.
  Ответить с цитированием
Старый 03.03.2011, 20:15   #5   
старый хрыч
 
Аватар для X0R
 
Сообщений: 6,334
Регистрация: 17.12.2006
Возраст: 39

X0R вне форума Не в сети
Нестрашный Му, за пузырь и закусь. Пишем пополам, пьем вместе!
  Ответить с цитированием
Старый 03.03.2011, 21:28   #6   
Форумец
 
Сообщений: 7
Регистрация: 02.03.2011

Naiskosok вне форума Не в сети
Ладно-ладно. я сама) предполагается программа в одно действие на языке паскаль.
что-нибудь сделаю))
  Ответить с цитированием
Старый 04.03.2011, 11:40   #7   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 42

DWanek вне форума Не в сети
Как вариант так:

Код:
//в примере элементы матрицы целочисленные
var
  M : array[0..X, 0..Y] of Integer; //Матрица размером X на Y (не знаю, как там у вас)
  N : array[0..X] of Integer; //Список значений произведений
  Min : Integer; //Требуемый номер строки
  MinValue : Integer; //Минимальное значение
  I, J : Integer;
begin
  //Считаем произведения
  for I := 0 to X do
    begin
      N[I] := 1;
      for J := 0 to Y do
        N[I] := N[I] * M[I, J];
    end;
  //Находим минимальное значение
  MinValue := N[0];
  Min := 0;
  for I := 1 to X do
    if N[I] < MinValue then
      begin
        MinValue := N[I];
        Min := I;
      end;
  //Выводим
  WriteLn(Min);
end;
  Ответить с цитированием
Старый 04.03.2011, 11:43   #8   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
Код:
int sum = 1 , min = 99999 , id = 0 ; 
for (int i=0; i < n; i++ )
{
    for (int j=0; j < m; j++ ) //n m - размерности
        sum *=arr[i,j]; // произведение элементов одной строки
    if (sum<min)
    {
        min=sum;
        id = i;
    }
    if (i==0) min = sum;
    sum = 1;
//id - строка с наименьшим произведением
}

Последний раз редактировалось demid; 07.03.2011 в 20:39.
  Ответить с цитированием
Старый 04.03.2011, 11:45   #9   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 42

DWanek вне форума Не в сети
demid, так кажется:
Цитата:
Сообщение от Naiskosok Посмотреть сообщение
на языке паскаль
  Ответить с цитированием
Старый 04.03.2011, 11:56   #10   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
логику, думаю можно проследить, синтаксис значения не имеет. На паскале давно ни че не писал.
И еще, не в обиду конечно, но ваш код это хороший пост для http://govnokod.ru
  Ответить с цитированием
Старый 04.03.2011, 12:13   #11   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
Код:
var
  m : array[0..x, 0..y] of integer; //Матрица размером X на Y (не знаю, как там у вас)
  id : integer; //Требуемый номер строки
  mV : integer; //Минимальное значение
  i , j , sum: integer;
begin
  sum = 1;
  mV := 999999;
  for i := 0 to x do 
  begin
    for j := 0 to y do
    Sum := Sum * m[i, j];  //Считаем произведения
    if (Sum < MinValue) then
      begin
        id : = i; 
        mV := sum;
      end;
    if (i=0) then mV := sum;
    sum := 1;
  end; // id - номер строки
end;

Последний раз редактировалось demid; 07.03.2011 в 20:39.
  Ответить с цитированием
Старый 04.03.2011, 13:10   #12   
Мы вместе
 
Аватар для DWanek
 
Сообщений: 917
Регистрация: 15.04.2005
Возраст: 42

DWanek вне форума Не в сети
Цитата:
Сообщение от demid Посмотреть сообщение
ваш код это хороший пост для http://govnokod.ru
Как я посмотрю, вы свой первоначальный тоже подправили
1. 2 цикла и отдельный список для произведений в данном случае облегчают понятие алгоритма для новичка
2. Написали переменные в нижнем регистре? Посмотрите исходники и рекомендации Борланда или Эмбаркадеро:
Код:
function TControl.GetDockEdge(MousePos: TPoint): TAlign;

  function MinVar(const Data: array of Double): Integer;
  var
    I: Integer;
  begin
    Result := 0;
    for I := Low(Data) + 1 to High(Data) do
      if Data[I] < Data[Result] then Result := I;
  end;

var
  T, L, B, R: Integer;
begin
  Result := alNone;
  R := Width;
  B := Height;
3. Минимальное значение произведения может быть больше 999999.

Говнокод?
  Ответить с цитированием
Старый 04.03.2011, 13:33   #13   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
В начале немного накасячил)) На счет понимание, даже и не знаю. По моему новичков нужно сразу учить писать по человечески, а то так и будут объявлять массивы для всех временных нужд. С такими "прозрачными умениями" их только кассиром или сис. админом в пятерочку возьмут. Я конечно не считаю себя богом кода, но в данном случаи делать массив под выборку всех произведений - это точно гавнокод. А на счет назвать переменную i или I , это кажется маразматическая придирка, разве нет? Тут-же нету перемнной типо "peremennayadlyashetchika1" ))

ps Нет войне. Что-бы дальше не было споров, скажу так. Я обдумал ваш код и считаю что он эталонный для этой задачи.
  Ответить с цитированием
Старый 07.03.2011, 12:42   #14   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58

Hopkroft вне форума Не в сети
Цитата:
Сообщение от demid Посмотреть сообщение
логику, думаю можно проследить, синтаксис значения не имеет. На паскале давно ни че не писал.
А откуда тогда у тебя обращение к двумерному массиву в стиле аля Паскаль?
Цитата:
Сообщение от demid Посмотреть сообщение
Код:
int sum = 1 , min = 99999 , id = 0 ; 
        sum *=arr[i,j]; // произведение элементов одной строки
}
Вроде как должно быть sum *=arr[i][j]. Или бывают исключения?!

Цитата:
Сообщение от demid Посмотреть сообщение
И еще, не в обиду конечно, но ваш код это хороший пост для http://govnokod.ru
Ага, вместе с твоим кодом, где есть строчка.
Цитата:
Сообщение от demid Посмотреть сообщение
Код:
 
    if (i==0) min = sum;
Даже индус бы так не написал ))
Ну ведь можно было что-то вроде этого изобразить...
Код:
if (!i) 
{
   min_p=p;
   ind = 0;
}
else if (p<min_p)
{
   min_p=p;
   ind=i;
}
Или ты хотел ясность внести?
И ещё, если есть произведение, его лучше "копить" его в переменной размерность которой больше перемножаемых элементов.
Например в double. Дабы не вызвать переполнения, которое ты легко получишь при длинной строке массива.
  Ответить с цитированием
Старый 07.03.2011, 13:42   #15   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Например в double. Дабы не вызвать переполнения
при желании, с любым типом можно влететь, даже с long long. а использовать дабл для целочисленных операций, это вообще тяжкий грех.
  Ответить с цитированием
Старый 07.03.2011, 14:09   #16   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Part!zan Посмотреть сообщение
при желании, с любым типом можно влететь, даже с long long.
Согласен, это очень тонкий момент.
Цитата:
Сообщение от Part!zan Посмотреть сообщение
а использовать дабл для целочисленных операций, это вообще тяжкий грех.
ну это если ты будешь дальше с ним работать то да, а если результат хранить, тем более зная что он может получится ОГРОМНЫЙ, то какой тут грех?
  Ответить с цитированием
Старый 07.03.2011, 20:21   #17   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
А кто, говорил что это C++ ))
1) В Шарпе можно обращаться к двумерному массиву в стиле аля Паскаль;
2) Шарп не приводит в if все подряд к логическому типу.
На счет проверки i на 0, окей... спорить не буду, не самый лучший вид, но это однозначно более выгодно по сравнению с первым примером. А если уш совсем себя оправдать, то лишняя проверка на каждой терции, которая всегда будет ложной, особо сильно не нагрузит эту программу)))
3) Зачем брать double для произведения целых? Тогда уж long. Места занимают одинаково, но в данном случаи точность после запятой нас точно не волнует. )

Последний раз редактировалось demid; 07.03.2011 в 20:48.
  Ответить с цитированием
Старый 07.03.2011, 22:20   #18   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58

Hopkroft вне форума Не в сети
Цитата:
Сообщение от demid Посмотреть сообщение
А кто, говорил что это C++ ))
1) В Шарпе можно обращаться к двумерному массиву в стиле аля Паскаль;
Ну раз пошла такая фигня, вроде как линк есть в шарпе. Можно было с ним написать

Цитата:
Сообщение от demid Посмотреть сообщение
2) Шарп не приводит в if все подряд к логическому типу.
На счет проверки i на 0, окей... спорить не буду, не самый лучший вид, но это однозначно более выгодно по сравнению с первым примером. А если уш совсем себя оправдать, то лишняя проверка на каждой терции, которая всегда будет ложной, особо сильно не нагрузит эту программу)))
Меня другое интересно, зачем в условии сказано, что строки уже отсортированы по убыванию. Что конкретно в них отсортировано?

Цитата:
Сообщение от demid Посмотреть сообщение
3) Зачем брать double для произведения целых? Тогда уж long. Места занимают одинаково, но в данном случаи точность после запятой нас точно не волнует. )
Ну я же написал к примеру Т.е. можно было и long взять.
  Ответить с цитированием
Старый 07.03.2011, 23:46   #19   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
говорить откровенно, я тоже не понял...
  Ответить с цитированием
Старый 07.03.2011, 23:52   #20   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58

Hopkroft вне форума Не в сети
Что-то мне подсказывает что автор с условием намудрил. и задача ещё проще решается.
  Ответить с цитированием
Старый 08.03.2011, 00:53   #21   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
какой тут грех?
основной - замедление вычислений. конечно, этот пример не показателен, но в более других случаях это может быть заметно. плюс - дабл имеет меньшее кол-во значащих цифр, чем тот же long long.

Цитата:
Сообщение от demid Посмотреть сообщение
Зачем брать double для произведения целых? Тогда уж long. Места занимают одинаково
В 32-битный системах инт равен лонгу, так что, надолго лонга может не хватить. Впрочем, я уже говорил...

Интересно, топикстартеру все это пригодится? )
  Ответить с цитированием
Старый 08.03.2011, 08:42   #22   
Форумец
 
Сообщений: 286
Регистрация: 17.09.2010

Battle Coder вне форума Не в сети
Цитата:
Сообщение от Part!zan Посмотреть сообщение
В 32-битный системах инт равен лонгу, так что, надолго лонга может не хватить. Впрочем, я уже говорил...
Насколько я помню, double как раз-таки вдвое больше, и занимает 64 бита... так что он ну никак не равен long =)
  Ответить с цитированием
Старый 08.03.2011, 12:07   #23   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
Нажмите на изображение для увеличения
Название: Снимок1.PNG
Просмотров: 18
Размер:	7.0 Кб
ID:	1193501
Нажмите на изображение для увеличения
Название: Снимок2.PNG
Просмотров: 15
Размер:	6.8 Кб
ID:	1193502
опять же, с точки зрения .net
  Ответить с цитированием
Старый 08.03.2011, 12:28   #24   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Цитата:
Сообщение от Battle Coder Посмотреть сообщение
Насколько я помню, double как раз-таки вдвое больше, и занимает 64 бита
точность больше лонга, но меньше лонг лонга. кстати, на 64-битных системах, int равен 64-битам, и в этом случае дабл будет хуже, потому что у него в это 64 бита еще и порядок входит. вообще, у дабла всего 15 значащих цифр.
  Ответить с цитированием
Старый 08.03.2011, 12:59   #25   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58

Hopkroft вне форума Не в сети
Цитата:
Сообщение от Part!zan Посмотреть сообщение
потому что у него в это 64 бита еще и порядок входит. вообще, у дабла всего 15 значащих цифр.
Кстати, важное замечание. А то обычно на размер типа посмотрят, а про место для хранения порядка забывают.

Так собственно вопрос в другом что значит Среди строк матрицы, которые упорядочены по убыванию ?
  Ответить с цитированием
Старый 08.03.2011, 13:22   #26   
Форумец
 
Аватар для demid
 
Сообщений: 153
Регистрация: 23.12.2006

demid вне форума Не в сети
ТопикСтартеру уже наверно вообще все равно... он получил зачет по программированию и больше ни когда в этот раздел вообще не сунется... мне так кажется...)
  Ответить с цитированием
Старый 08.03.2011, 14:55   #27   
Out There
 
Аватар для Part!zan
 
Сообщений: 5,910
Регистрация: 13.12.2004
Возраст: 47

Part!zan вне форума Не в сети
Цитата:
Сообщение от Hopkroft Посмотреть сообщение
Среди строк матрицы, которые упорядочены по убыванию
Наверное, члены строк упорядочены. Для чего - загадка. Чтобы запутать )
  Ответить с цитированием
Старый 09.03.2011, 08:03   #28   
Форумец
 
Аватар для MadFish
 
Сообщений: 340
Регистрация: 25.07.2002

MadFish вне форума Не в сети
Цитата:
Сообщение от Part!zan Посмотреть сообщение
Наверное, члены строк упорядочены. Для чего - загадка. Чтобы запутать )
не согласен!!! ИМХО все решения которые тут привели не верны.
как ты сам прекрасно понимаешь мы НЕ можем тупо перемножать элементы строки-в ПРОИЗВОЛЬНОЙ матрице мы не влезим ни в один тип(произведение будет расти быстрее даже факториальной функции). Упорядоченность строк убирает перестановки и соответственно более поздние элементы вносят больший вклад в произведение. На этом можно построить критерий оценки конечного произведения.Таким образом задачка перерождается в тупо сортировку N размерных "чисел"(строки матрицы) по модулю M(где N размерность строки по горизонтали, а M размерность одного элеента строки). Я бы в такой задаче применил поразрядную сортировку как более наглядную.

Последний раз редактировалось MadFish; 09.03.2011 в 08:29.
  Ответить с цитированием
Старый 09.03.2011, 08:48   #29   
Форумец
 
Аватар для Palych
 
Сообщений: 44
Регистрация: 14.09.2010

Palych вне форума Не в сети
Мне кажется большинсто отписавшихся забыли, что это всего - навсего СТУДЕНЧЕСКАЯ задача, которую надо тупо решить не анализируя постановку (она не должна обсуждаться - принимается как есть). Решение абсолютно простое и один из вариантов был приведен в посте DWanek. Может он и не оптимальный, но для сдачи сойдет.
А вставка поразрядной сортировки для сортировки уже отсортированных строк добавит минимум строк 30 - 40 в программный код и головную боль при сдаче.
  Ответить с цитированием
Старый 09.03.2011, 09:57   #30   
Форумец
 
Аватар для MadFish
 
Сообщений: 340
Регистрация: 25.07.2002

MadFish вне форума Не в сети
Palych, Вот всегда умиляют меня такие выссказывания "которую надо тупо решить не анализируя постановку" ))) это сразу 5 с плюсом на любой даже школьной задаче))))Решать надо поставленную задачу, а не накладывать ограничения на условия, чтобы упростить себе жизнь.
Из приведенных не было ни одного правильного варианта решения поставленной задачи !!!
Были приведены варианты решения ПОДОБНОЙ задачи, когда число элементов в строке не больше нескольких десятков и сами числа не больше 100, а это гораздо более узкая задача)))
для справки факториал 255 ~3,35*10^504 (а это всего лишь строка БАЙТОВ а не Интежеров) а в double влезает ~10^308. решаем тупо дальше да?

Последний раз редактировалось MadFish; 09.03.2011 в 10:15.
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind