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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2014, 09:22   #1
Katerina_K
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 19
По умолчанию Поиск минимальных элементов массива

Добрый день!Не могли бы вы подсказать как найти минимальные элементы и их индексы.Как найти один минимальный элемент знаю,но что делать дальше не понимаю.Например,допустим у нас несколько единиц и их надо вывести.

Код:
const
     N=10;
var i,min,indmin:integer;
     Mass:array [1..N] of integer;  
begin
  min:=1;
  indmin:=1;
  for i:=1 to N do
  if Mass[i]<Mass[min] then
  min:=Mass[i];
  indmin:=i;
end;
Katerina_K вне форума Ответить с цитированием
Старый 07.07.2014, 09:42   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Катенька, вы всё перепутали. Если в переменной хранится значение, то, в данном случае, НЕЛЬЗЯ использовать переменную для указания НОМЕРА элемента (индекса).

вот так можно найти ОДНО минимальное значение (используем переменную для хранения минимального значения):
Код:
  min:=Mass[1];
  for i:=2 to N do
  if Mass[i]<min then
       min:=Mass[i];
  WriteLn('Минимальное значение = ', min);
или вот так можно найти ОДНО минимальное значение (используем переменную для хранения ИНДЕКСА минимального значения):
Код:
  indmin:=1;
  for i:=2 to N do
    if Mass[i]<Mass[indmin] then
       indmin:=i;
  WriteLn('Минимальное значение = ', Mas[indmin], ' имеет элемент с индексом ', indmin);
разберитесь, чем отличаются эти примеры, как они работают!


теперь к вашей задаче ("как найти минимальные элементы и их индексы")
Задача чуть-чуть посложнее, чем найти один минимальный элемент.
Решать её можно по разному.
Проще всего - за два прохода (цикла).
За первый проход находим минимальный элемент (всё равно, само значение или его индекс, как Вам понятней/удобней).
За второй проход по массиву проверяем на совпадение значения с минимальным и выдаём индекс элемента.

вот так, например:
Код:
  min:=Mass[1];
  for i:=2 to N do
  if Mass[i]<min then
       min:=Mass[i];

 {второй проход, поиск элементов, совпадающих с минимальным}
  WriteLn('Минимальное значение = ', min, ' имеют элементы с индексами: ' );
  for i:=1 to N do
  if Mass[i] = min then
      WriteLn('индекс = ', i);
если есть вопросы - спрашивайте...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2014, 09:43   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

За один проход + массив индексов так можно
Код:
const N=10;
var i,m: integer;
    Mass,Indexs: array [1..N] of integer;
begin
  m:=1; Indexs[1]:=1;
  for i:=2 to N do
    if Mass[i]<=Mass[Indexs[1]] then begin
      if Mass[i]<Mass[Indexs[1]] then m:=1 else Inc(m);
      Indexs[m]:=i;
    end;
// в Indexs[i] i от 1 до m индексы минимального элемента
// значение минимального элемента в Mass[Indexs[1]]
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.07.2014, 09:50   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
За один проход + массив индексов так можно
можно то можно, но не уверен, что автору топика это будет просто и понятно

А так решение вполне себе годное!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2014, 10:00   #5
Katerina_K
Пользователь
 
Регистрация: 11.05.2013
Сообщений: 19
По умолчанию

Спасибо большое за подробное объяснение!вроде поняла.
Katerina_K вне форума Ответить с цитированием
Старый 07.07.2014, 13:14   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Katerina_K, пожалуйста.

Попытайтесь рассмотреть/разобрать код (с) Аватар из пост #3
Там задача решается с помощью дополнительного массива, в котором хранятся нужные индексы, поэтому задача решается за один проход по массиву.
Думаю, что Вам будет полезно.
Успехов в учёбе!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму минимальных элементов массивов Vitalii.Gushin Помощь студентам 0 16.12.2013 00:15
замена минимальных элементов массива на число L sens69 Помощь студентам 0 03.06.2012 12:43
Поиск минимальных значений Black_Shem Общие вопросы Delphi 3 29.12.2011 17:39
среднее арифметическое значение элементов матрицы mxm. вектор из минимальных элементов (Бейсик) Люстик Помощь студентам 1 17.03.2011 08:20