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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2010, 21:49   #1
boing
 
Регистрация: 13.04.2010
Сообщений: 7
Сообщение произведение трех наименьших элементов массива

Написать программу, вводящую массив из N целых чисел с клавиатуры и вычисляющую произведение трех наименьших элементов массива с использованием процедуры сортировки.

объясните пожалуйста про сортировку немного
boing вне форума Ответить с цитированием
Старый 13.04.2010, 23:36   #2
danaster
Новичок
Джуниор
 
Регистрация: 13.04.2010
Сообщений: 2
По умолчанию

Код:
var
a:array [0..100] of integer;
x,max,N,i,min1,min2,min3:integer;
begin
writeln ('Введите N');
readln (N);
 for i:=1 to N do begin
 writeln ('a[',i,']=');
 read (a[i]);
 end;

max:=a[1];
for i:=1 to n do begin
if a[i]>max then max:=a[i];
end;

min1:=a[1];
for i:=1 to n do begin
  if a[i]<=min1 then
  begin
  min1:=a[i]; x:=i;
  end;
 end;
a[x]:=max;

min2:=a[1];
for i:=1 to n do begin
 if a[i]<=min2 then begin min2:=a[i]; x:=i; end;
 end;
a[x]:=max;

min3:=a[1];
for i:=1 to n do begin
 if a[i]<=min3 then begin min3:=a[i]; x:=i; end;
 end;
a[x]:=max;

writeln ('минимальные числа: ',min1,' ',min2,' ',min3);
writeln ('ответ: ',min1*min2*min3);

end.
я в паскале пару месяцев, так что способ не самый рациональный но сделал так:
сначала среди массива нашел максимальное число, чтобы в дальнейшем заменять на него найденное минимальное, значение которого в свою очередь присваиваем новой переменной, если это не сделать, то сортировка будет находить одно и тоже число.
потом отсортировал min1 сравнив все члены массива, присвоил, заменил
так со 2-м и с 3-м.
вобщем-то всё.

Последний раз редактировалось Stilet; 14.04.2010 в 07:26.
danaster вне форума Ответить с цитированием
Старый 14.04.2010, 00:21   #3
ROMA2PVT
ТАМБОВСКИЙ ВОЛК.
Участник клуба
 
Аватар для ROMA2PVT
 
Регистрация: 16.03.2010
Сообщений: 1,354
По умолчанию

Ему уже на сайберфоруме всё написали.
にんじゃ
ROMA2PVT вне форума Ответить с цитированием
Старый 14.04.2010, 05:54   #4
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Danaster, и где же у тебя процедура сортировки? Нужно выполнить сортировку элементов в массиве (допустим по убыванию), а затем взять три последних и найти их произведение...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 14.04.2010, 06:49   #5
boing
 
Регистрация: 13.04.2010
Сообщений: 7
По умолчанию

Цитата:
Сообщение от ROMA2PVT Посмотреть сообщение
Ему уже на сайберфоруме всё написали.
да написали это ведь неплохо
boing вне форума Ответить с цитированием
Старый 14.04.2010, 07:04   #6
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Danaster, вот это
Код:
for i:=1 to N do begin
writeln ('a[',i,']=');
read (a[i]);
end;
лучше сделать так
Код:
for i:=1 to N do begin
write ('a[',i,']=');
readln (a[i]);
end;
будет выглядеть более логично...
А если юзверь с бодуна введет значение N=150??? Кирдык, "Out of range" обеспечено...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 14.04.2010 в 07:06.
Grag вне форума Ответить с цитированием
Старый 14.04.2010, 07:28   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А если юзверь с бодуна введет значение N=150??? Кирдык, "Out of range" обеспечено...
А как твой пример решает эту проблему?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2010, 07:51   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

А мой пример бы выглядел так:
Код:
Const
  MaxRange=100;
Var
  a:array[0..MaxRange] of integer;
  N:integer;
Begin
  repeat
    write('Please, input N = ');
    readln(N);
    if not (N in [0..MaxRange] then
      writeln('Warning! Input with error! Try again.')
  until (N in [0..MaxRange])
End.
Это касается только ввода и валидности размера массива...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 14.04.2010, 07:54   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну вот это уже другое тело...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.04.2010, 07:56   #10
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Ой, ну тока не надо мне экзамены устраивать. Я уже с этим делом с 1985 года "на ты"...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей NoUserName Помощь студентам 3 01.03.2009 18:10
найти сумму трех последовательно стоящих элементов массива d00ker Помощь студентам 6 25.12.2008 15:07
Сумма и произведение элементов массива Zid@ne Общие вопросы C/C++ 5 23.12.2008 19:22
Произведение элементов массива gamer123 Помощь студентам 5 19.01.2008 22:02