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

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

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

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


Новичок
*

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

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


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


Гуру
*****

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

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


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


Новичок
*

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

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


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

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

В массиве.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
amega
сообщение 9.12.2008 19:09
Сообщение #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 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.12.2008 19:13
Сообщение #5


Гость






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

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

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


?
***

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

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


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

а можеш выложить алгоритм за один проход ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.12.2008 19:37
Сообщение #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 - 9.12.2008 19:39
 К началу страницы 
+ Ответить 
amega
сообщение 9.12.2008 19:51
Сообщение #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.12.2008 20:24
Сообщение #9


Профи
****

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

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


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

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


?
***

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

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


а, ну да недогледел чуть-чуть !yessir.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Kolyancz
сообщение 10.12.2008 15:00
Сообщение #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

 



- Текстовая версия 20.07.2025 18:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"