2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Поиск максимального элемента [Pascal]
Сообщение12.03.2015, 17:11 
Аватара пользователя
Нужно вывести массив случайных целых чисел, вывести максимальный элемент max и количество максимальных элементов count.
Я выбрал такой алгоритм:
Используется синтаксис Pascal
  count:=0;
  max:=a[0,0];
    for i:=0 to m-1 do
       begin
        for j:=0 to n-1 do
                      begin
                        a[i,j]:=random(maxD-minD+1)+minD;
                        if a[i,j]>=max then
                                          begin
                                            max:=a[i,j];
                                            count:=count+1;
                                          end;

Я не могу понять, почему он работает не так, как я ожидал, голову сломал уже.

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:24 
Во-первых, что вы можете сказать об a[0,0] перед инициализацией массива? И что происходит с count, когда a[i,j]>max?

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:29 
Аватара пользователя
Sender в сообщении #989336 писал(а):
Во-первых, что вы можете сказать об a[0,0] перед инициализацией массива? И что происходит с count, когда a[i,j]>max?

Перед инициализацией $a[0,0]$ равно нулю? Ну либо тому мусору, который в оперативной памяти на этом месте хранится. А что с count может происходить? Там написано больше либо равно, т.е. если элемент больше либо равен max, то к count прибавляется единица. А что делать с $a[0,0]$?

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:36 
В таком случае, чего вы рассчитываете добиться инструкцией
Используется синтаксис Pascal
max:=a[0,0];

?

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:47 
Аватара пользователя
Вынес в отдельный цикл, все равно не работает.
Используется синтаксис Pascal
    max:=a[0,0];
    for i:=0 to m-1 do
      begin
        for j:=0 to n-1 do
                        begin
                        if a[i,j]>=max then
                                          begin
                                            max:=a[i,j];
                                            count:=count+1;
                                          end;
                        end;
      end;

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:50 
Интересно, учат ли сейчас пользоваться отладчиком? Я вот не помню чтобы нас учили - а ведь это весьма полезный навык :-)

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:53 
Аватара пользователя
Нас не учили, я не знаю, как им пользоваться.

-- 12.03.2015, 16:54 --

Вообще я работаю в делфи в режиме application.

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 17:54 
Возьмите для простоты массив из трёх элементов [1, 2, 3] и смотрите что происходит с count

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 18:12 
Аватара пользователя
Все, я понял, сделал отдельный массив для подсчета count, единица должна добавляться в этот счетчик лишь при условии того, что текущий элемент равен максимальному. Спасибо.

 
 
 
 Re: Поиск максимального элемента
Сообщение12.03.2015, 19:34 
Довольно странно видеть такие вопросы :shock: от чела, который не столь давно спрашивал, как написать "Эмулятор сервера WoW".

 
 
 
 Re: Поиск максимального элемента
Сообщение13.03.2015, 12:00 
Аватара пользователя
В принципе, задача может быть решена и за один проход. В котором и находится значение максимального элемента, и считается его встречаемость. Просто если текущий элемент равен значению максимума, то счётчик инкрементируется, если текущий меньше - то ничего не делаем, но вот если больше - значит то, что мы доверчиво принимали за максимум, максимумом не было, максимумом является либо текущий, либо какой-то иной, больший текущего, и счётчик надо сбросить и установить равным единице (в надежде, что текущий и есть максимальный).
И, разумеется, до инициализации ячейки использовать её бессмысленно, даже если данный транслятор использует какую-то инициализацию по умолчанию (нулём, скажем). В этом, далеко не всегда встречающемся случае, врать будет, если значения в матрице все отрицательны, а если нет инициализации, то примерно в половине случаев будет врать, в половине получит что-то осмысленное (но не обязательно верное).

 
 
 [ Сообщений: 11 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group