Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.10.2008, 22:18   #1
bender90
Новичок
Джуниор
 
Регистрация: 21.10.2008
Сообщений: 2
По умолчанию помогите пожалуйста с массивом

Задание такое: Дан массив из n элементов. Найти max и его позиции (с учетом повторений)

вот найти max я смог:

program massiv;
type
mas = array [1..5] of Integer;
var
a: mas;
i: byte;
max,t: Integer;
begin
{Заполняем массив}
for i := 1 to 5 do
begin
Write('Введите значение элемента a[',i,']=');
Readln(a[i]);
end;
{Найдем максимальный элемент}
max:=a[1];
for i:=2 to 5 do
begin
if a[i]>max then
max:=a[i];
end;
writeln('Максимальный элемент = ',max);
Readln;
end.

а как найти позиции?
bender90 вне форума Ответить с цитированием
Старый 21.10.2008, 23:20   #2
Stepler
Форумчанин
 
Аватар для Stepler
 
Регистрация: 03.02.2008
Сообщений: 213
По умолчанию

Цитата:
Найти max и его позиции (с учетом повторений)
Если правильно понял то нужно вывести все позиции когда был найден каждый следующий елемент массива который больше предидущего max.
Код:
program massiv;
type
mas = array [1..5] of Integer;
var
a: mas;
i: byte;
max,t: Integer;
begin
{Заполняем массив}
for i := 1 to 5 do
begin
Write('Введите значение элемента a[',i,']=');
Readln(a[i]);
end;
{Найдем максимальный элемент}
max:=a[1];
write('1 ');
for i:=2 to 5 do
begin
if a[i]>max then
 begin
  max:=a[i];
  write(i,' ');
 end;
end;
writeln('Максимальный элемент = ',max);
Readln;
end.
Пишу программы на заказ, контакты под аватаром!
Отзывы тут
Stepler вне форума Ответить с цитированием
Старый 21.10.2008, 23:27   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
program massiv;
type
mas = array [1..5] of Integer;
var
a: mas;
i: byte;
max,t: Integer;
begin
{Заполняем массив}
for i := 1 to 5 do
begin
Write('Введите значение элемента a[',i,']=');
Readln(a[i]);
end;
{Найдем максимальный элемент}
max:=a[1];
for i:=2 to 5 do
begin
if a[i]>max then
max:=a[i];
end;
writeln('Максимальный элемент = ',max);
for i:=1 to 5 do
if a[i]=max then write(i,' ');Readln;
end.
puporev вне форума Ответить с цитированием
Старый 22.10.2008, 00:02   #4
bender90
Новичок
Джуниор
 
Регистрация: 21.10.2008
Сообщений: 2
По умолчанию

спасибо!!!, оказывается все так просто, а я голову ломал)
bender90 вне форума Ответить с цитированием
Старый 22.10.2008, 08:22   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

to puporev, а если в массиве 1 миллион элементов
то вы будете весь массив просматривать и сравнивать
текущий элемент с максимальным?
Это не оптимально.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 22.10.2008, 11:11   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
а если в массиве 1 миллион элементов
Вы случайно ничего не объелись?
puporev вне форума Ответить с цитированием
Старый 22.10.2008, 11:29   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от puporev
Цитата:
Сообщение от Plague
а если в массиве 1 миллион элементов
Вы случайно ничего не объелись?
:-))))


2 Plague, во первых, Вы не обратили внимание, что тут рассматривается Паскаль?
Напоминаю, что под переменные (все!) выделяется один сегмент данных - это в MS DOS 64 Кб и ни байтом больше!
a: array[1..32768] of integer;
уже не откомпилируется (даже если не будет других переменных)...

во 2-х - это учебная задача. Люди изучают циклы, условные операторы и т.д. а оптимальный алгоритм - в данной задаче, например, я красивого решения НЕ ВИЖУ ;-( можно динамические списки мутить... но с ними накладных расходов будет - мама не горюй! вся оптимизация на на создание/удаление динамических элементов и уйдёт... ;-(
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2008, 11:41   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

хотя нет. Мне кажется, есть эффективный способ.
Тут как раз можно использовать строки.
Куда дописывать найденные индексы максимальных элементов!
При нахождении очередного максимума - обнулять строку и писать туда новый индекс:
Код:
begin
  if a[i]=max then begin
    max:=a[i];
    Val(ss,i);
    s := s + ',' + ss;
  end
  else
  if a[i]>max then begin
    max:=a[i];
    Val(s,i);
  end;
end;
Writeln('Максимальный элемент = ',max);
WriteLn('найдено в позициях: ',s);

Последний раз редактировалось Serge_Bliznykov; 22.10.2008 в 11:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.10.2008, 12:01   #9
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Как раз на это и обратил внимание что тут исползуется паскаль.
Borland Pascal, Turbo Pascal, Free Pascal, PascalABC.Net, может
console Borland Delphi или Lazarus? Какой?
определитесь.
И не надо говорить что размер массива может быть 32768.
Его размер в Паскале может быть гораздо больше
смотря конечно в каком Паскале.
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с динамическим массивом!!!! vish25 Помощь студентам 2 31.05.2008 19:20
Помогите с массивом Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 21.08.2007 22:54
Помогите с массивом mishel Общие вопросы Delphi 1 04.03.2007 00:15