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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2012, 21:27   #1
Мижорка
Новичок
Джуниор
 
Регистрация: 28.05.2012
Сообщений: 1
Лампочка Решение задачи с использованием функции (Delphi)

С помощью функции решить задачу: Дан набор из 20 вещественных элементов. Найти количество элементов, содержащиеся между первым и вторым максимальным, если в наборе единственный максимальный, то вывести 0.
Мижорка вне форума Ответить с цитированием
Старый 30.05.2012, 16:52   #2
studen
Пользователь
 
Регистрация: 21.05.2012
Сообщений: 88
По умолчанию

Думаю, нужна переменная для максимума, две переменных для первого и второго максимального. В цикле сравниваем элемент с максимумом, если больше, записать его в максимум, номер записать в обе переменных для первого и второго. Если равен, то если номера 1го и 2го максимума равны, записать его(элемента) номер во второй. В конце вывести 2-й минус 1-й минус 1, а если равны, то максимум один, по заданию.
Цикл советую начать с 2, т.к. перед ним надо записать в максимум первый элемент и в оба номера единицу.
studen вне форума Ответить с цитированием
Старый 30.05.2012, 17:10   #3
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

для Delphi XE2
Код:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

var
  набор: array [1 .. 20] of double;
  ГлобальныйИндекс: byte;

function ПервыйМаксимум: integer;
var
  индекс: integer;
  буфер: integer;
begin
  буфер := 1;
  for индекс := 2 to 20 do
    if набор[индекс] > набор[буфер] then
      буфер := индекс;
  ПервыйМаксимум := буфер;
end;

function ВторойМаксимум: integer;
var
  индекс: integer;
  буфер: integer;
begin
  буфер := ПервыйМаксимум;
  for индекс := буфер + 1 to 20 do
    if набор[индекс] = набор[буфер] then
    begin
      ВторойМаксимум := индекс;
      exit;
    end;
  ВторойМаксимум := 0;
end;

begin
  for ГлобальныйИндекс := 1 to 20 do
  begin
    набор[ГлобальныйИндекс] := random(50) - 25 + random(100) / 100;
    write(набор[ГлобальныйИндекс]:6:3);
  end;
  writeln;
  if ВторойМаксимум = 0 then
    writeln(0)
  else
    writeln(ВторойМаксимум - ПервыйМаксимум);
  readln;

end.
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 30.05.2012 в 17:19. Причина: Добавил форматирование
Mad_Cat вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи с использованием численных методов (Delphi) Conte Помощь студентам 0 21.05.2012 19:34
Очень нужно решение задачи Обедающих философов с использованием событий RAZOR1703 Помощь студентам 0 19.10.2011 00:08
Решение задачи с использованием функции ЕСЛИ Alhorene Microsoft Office Excel 6 30.04.2011 08:06
РЕШЕНИЕ ЗАДАЧИ В DELPHI mastervos Помощь студентам 0 04.12.2010 23:43