IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Наибольшее число в последовательности и его размещение
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Задана последовательность N чисел. N<=1000. Найдите наибольшее число в этой последовательности и укажите на какой позиции оно находится. Если число повторяется, то указать все его позиции.
Например: для последовательности 569 3 567 94 569 219 546
Ответ:
569
1 5
Впорос: как выглядит функция определения наибольшего числа и расчета его размещений?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Последовательность как хранится? В массиве? Или массивы использовать нельзя?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Цитата(Ozzя @ 9.12.2008 15:35) *

Последовательность как хранится? В массиве? Или массивы использовать нельзя?

В массиве.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


один из ваирантов;
 
var a,b:array [1..7] of integer; max,i,j:integer;
begin
max:=1;
j:=1;
for i:=1 to 7 do
if a[i]>max then max:=a[i]; //находим в цикле максимальный элемент

for i:=1 to 7 do
if a[i]=max then
begin
b[j]:=i; //нормируем новый массив состоящий из позиций максимального элеммента
j:=j+1;
end;
// вывод позиции
// for i:=1 to j-1 do wrie(' ',j);
//

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Это можно сделать за один проход по основной последовательности... В случае, когда N может достигать 1000, это желательно делать именно за один, а не за два прохода...

P.S. К тому же, amega, твой вариант не отработает, если в исходной последовательности нет чисел больше 0...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


тогда поменять прото начальное max:=0;

а можеш выложить алгоритм за один проход ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата
тогда поменять прото начальное max:=0;
smile.gif Тогда не отработает, если все числа - меньше чем 0... Все проще: надо присваивать max первому элементу последовательности...

Вот однопроходный алгоритм:
  max := a[1];
j := 0;
for i := 1 to n do begin
if a[i] = max then begin
inc(j); b[j] := i;
end
else
if a[i] > max then begin
max := a[i];
j := 1; b[j] := i;
end;
end;

for i := 1 to j do
write(b[i]:5);



Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


смотри а если у нас 1ий елент максимальный И он только один что происходит (например 99 1 2 3 2 1 1 5)

max := a[1];
j := 0; <------------------------------------------------ j=0
for i := 1 to n do begin
if a[i] = max then begin <-------------------------------------------- 1ий елемент максимальній
inc(j); b[j] := i; <------------------------------------------- b[0]:=1;
end
else
if a[i] > max then begin <---- вариант на елс выполнятся не будет
max := a[i];
j := 1; b[j] := i; <---- а значит j не присвоится 1
end;
end;

for i := 1 to j do <------------------------------------------ кода выводим начинаем выводить с b[1] !!!!!
write(b[i]:5);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


  if a[i] = max then begin
inc(j); //а вот это что по твоему? как раз таки увеличение j на 1цу
b[j] := i;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


?
***

Группа: Пользователи
Сообщений: 283
Пол: Мужской

Репутация: -  4  +


а, ну да недогледел чуть-чуть !yessir.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 18
Пол: Мужской

Репутация: -  0  +


Да, все правильно. Вот полное решение, всем спасибо.

Код

var J,i,n,max: integer;
    a :array[1..1000] of integer;
     b:array[1..1000] of integer;
begin
n:=0;
while not eoln do begin
  inc(n); read(a[n]);
end;
   begin
   max := a[1];
  j := 0;
  for i := 1 to n do begin
    if a[i] = max then begin
      inc(j); b[j] := i;
    end
    else
      if a[i] > max then begin
        max := a[i];
        j := 1; b[j] := i;
      end;
  end;
    writeln(max);
  for i := 1 to j do
    write(b[i]:5);

readln;
readln
end;
end.


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 3:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name