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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2011, 01:10   #1
hotkep
 
Аватар для hotkep
 
Регистрация: 12.12.2011
Сообщений: 6
По умолчанию Delphi. Определить два наибольших(хотя и ровных)произведения

Определить два крупнейших (хотя бы и равных) произведения A[i]*A[i-1].
У меня есть только код к условию :
Определить наибольшее значение произведения A[i]*A[i-1].

Код:
program Project2;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
Type_arr = array[1..10] of integer;

var
a : type_arr;
N : integer;
q,i : integer;

procedure FilledWithConstNumbers(var a: type_arr; var N : integer);
const
a_const : type_arr = (1, 2, 3, 6, 5, 6, 7, 8, 0, 3);
begin
a := a_const;
N := 10;
end;

procedure FilledWithRandomNumbers(var a: type_arr; var N : integer);
var
i : integer;
begin
randomize;
write('Quantity of elements (1..N) ? ');
readln(N);
for i := 1 to N do
a[i] := random(30);
end;

procedure FilledFromKeyboard(var a: type_arr; var N : integer);
var
i : integer;
begin
write('Quantity of elements (1..N) ? ');
readln(N);
for i := 1 to N do
begin
write('a[', i, '] = ');
read(a[i]);
end;
end;

function indx(const a: type_arr; N : integer): integer;
var
i : integer;
max : integer;
begin
max := 2;
for i := 2 to N do
if a[i]*a[i-1] > a[max]*a[max-1] then max := i;
indx := max;
end;

begin
writeln('How to fill array?');
writeln('1. As typed constants.');
writeln('2. Whith random numbers.');
writeln('3. From keyboard.');
write('Enter the number of variant:');
readln(q);

case q of
1: FilledWithConstNumbers(a,N);
2: FilledWithRandomNumbers(a,N);
3: FilledFromKeyboard(a,N);
end;

if q <> 3 then
for i := 1 to N do
writeln('a[', i, '] = ', a[i]);

writeln('Number of element that has the greatest value of multiplying a[i]*a[1-i] is ', indx(a, N));

readln;
readln;

end.
................................... ..........
Здесь нужно просто подправить програмку. А как не пойму.
Заранее спасибо!



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 12.12.2011 в 08:57.
hotkep вне форума Ответить с цитированием
Старый 12.12.2011, 01:36   #2
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Цитата:
Определить наибольшее значение произведения A[i]*A[i-1]
А в этой программе идет поиск индекса, когда это произведение максимально.
viron вне форума Ответить с цитированием
Старый 12.12.2011, 01:44   #3
hotkep
 
Аватар для hotkep
 
Регистрация: 12.12.2011
Сообщений: 6
По умолчанию

Я вас не понял...
hotkep вне форума Ответить с цитированием
Старый 12.12.2011, 09:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

hotkep
подобную задачу можно решить разными способами..

на поверхности я вижу следующие два способа.
Способ 1). Сделать всё за один проход, но завести ещё одну переменную (например, max2) и в условии проверки/запоминания результатов учитывать, что если текущее произведение не больше, чем произведение A[max]*A[max-1], то проверять, не большее ли это произведение, чем A[max2]*A[max2-1] (при условии, что max2<>max)

Способ 2) ещё проще. Первый проход. находите максимальное произведение (его индекс). Второй проход по массиву. Тот же самый поиск, только при поиске элемент i=max - ПРОПУСКАЕТЕ.
Второй способ удобно реализовать в виде функции/процедуры, куда передавать индекс уже найденного ранее максимального произведения. При поиске первого максимума в качестве такого индекса можно передать заведомо несущестующий индекс (например, -1). При поиске второго - передавать индекс первого максимума.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.12.2011, 10:57   #5
hotkep
 
Аватар для hotkep
 
Регистрация: 12.12.2011
Сообщений: 6
По умолчанию

Спасибо Вам за ответ, но можете мне сам код написать с комментариями?
hotkep вне форума Ответить с цитированием
Старый 12.12.2011, 13:28   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

можно еще 2 мерный массив завести в 1 строке хранить произведения во второй индексы потом отсортировать столбцы по 1 строке по убыванию и забрать первые 2 значения строки #2
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 12.12.2011, 14:21   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Спасибо Вам за ответ, но можете мне сам код написать с комментариями?
А что там комментировать то?!
Надеюсь приведённый Вами код Вы сами писали? (ну или хотя бы понимаете, что он делает?!)

тогда всё просто:
Код:
....
function indx(const a: type_arr; N : integer; PrevMaxIndex : integer): integer;
var
  i : integer;
  max : integer;
begin
  if PrevMaxIndex = 2 
       then max := 3
     else max := 2;
  for i := 2 to N do
     if i<>PrevMaxIndex then
        if a[i]*a[i-1] > a[max]*a[max-1] then max := i;
  indx := max;
end;

....
var Max1 : integer;
....

Max1 := indx(a, N, -1);
writeln('Index of element that has the greatest value of multiplying a[i]*a[1-i] is ', Max1);

writeln('Index of element that has the NEXT greatest value of multiplying a[i]*a[1-i] is ', indx(a, N, Max1) );
...

p.s. свой код я не проверял, но думаю, что крупных ошибок я не допустил. Ну, если что - подправить можно. Будем считать это домашним заданием...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
матрица размером NxM. Упорядочить ее столбцы по невозрастанию их наибольших элементов (в Delphi) virgin_sova Помощь студентам 0 28.06.2011 22:22
логическая функция same(t), определяющая, есть ли в бинарном дереве T хотя бы два одинаковых элемента 123456789igor Паскаль, Turbo Pascal, PascalABC.NET 1 30.05.2011 00:22
Народ у каво есть программа Биоритмов в Delphi или хотя бы исходник для Delphi Student_174 Помощь студентам 0 20.04.2011 12:53
Delphi:Определить имеется ли среди чисел a,b,c хотя бы одна пара взаимно противоположных чисел. Skvot Помощь студентам 6 27.04.2009 11:47
Найти два наибольших отрицательных числа Makarov Паскаль, Turbo Pascal, PascalABC.NET 8 14.06.2008 17:57