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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2014, 00:15   #1
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию Массивы. Поменять местами все min и max (даже если будет 4 -min и 1-max).

Дан вектор (одномерный массив). Определить min и max элементы, поменять все минимальные и максимальные элементы даже если 1 - максимальный и
5 - минимальных, чтобы все они менялись местами! Пожалуйста!

Ниже программа, которая меняет местами min и max, но только делает один обмен!

Код:
program pomenyat_mestami_max_i_min;

var
  min, m_min, max, m_max, i, n, k: integer;
  a: array[-100..100] of integer;

begin
  randomize;
  writeln('vvedite_razmernost_vektora');
  readln(n);
  for i := 1 to n do
  begin
    a[i] := random(10) - 3;
    write('  ', a[i]);
  end;
  min := a[1];
  for i := 2 to n do
  begin
    if a[i] < min then
      min := i;
  end;
  max := a[n];
  for i := 1 to n do
  begin
    if a[i] > max then
      max := i; 
  end;
  writeln;
  writeln('MESTO MAX = ', max);
  writeln('MESTO MIN = ', min);
  k := a[min];
  a[min] := a[max];
  a[max] := k;
  writeln('otsortirovannaya : ');
  for i := 1 to n do 
    write('  ', a[i]);
end.
Виталик124 вне форума Ответить с цитированием
Старый 19.02.2014, 00:24   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

1) В данном коде происходит непонятно что (min и max интерпретируются то как значения экстремумов, то как их позиция)
2) Алгоритм:
Проходите по массиву и находите значения максимального и минимального
Проходите второй раз, если текущий элемент равен максимальному значению, то присваиваете минимальное, и наоборот
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 19.02.2014, 09:21   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

В принципе я полностью согласен с BDA!

для автора топика... уточняющий вопрос...
Цитата:
Определить min и max элементы, поменять все минимальные и максимальные элементы даже если 1 - максимальный и 5 - минимальных, чтобы все они менялись местами!
вот тут возможны нюансы в понимании, что значит "все они поменялись местами"!

Вот, например, дан такой массив:
5 5 5 5 4 1 2 3

после выполнения (всех замен), какой массив должен получится?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2014, 19:37   #4
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Спасибо! Всё получилось! Программа ниже!
Виталик124 вне форума Ответить с цитированием
Старый 19.02.2014, 19:40   #5
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
В принципе я полностью согласен с BDA!

для автора топика... уточняющий вопрос...

вот тут возможны нюансы в понимании, что значит "все они поменялись местами"!

Вот, например, дан такой массив:
5 5 5 5 4 1 2 3

после выполнения (всех замен), какой массив должен получится?
Вообщем должно получится так: вместо 5 должна быть 1, а вместо 1- пятерка, то-есть:1 1 1 1 4 5 2 3.

Вот программа которая это делает:

Код:
program pomenyat_mestami_vse_MIN_I_MAX;

var
  n, i, j, max, min, p_max, p_min: integer;
  a: array[1..100] of integer;

begin
  randomize;
  writeln('vvedite_vektor');
  readln(n);
  for i := 1 to n do
  begin
    a[i] := random(10) - 4;
    write('  ', a[i]);
  end;
  max := a[1];
  p_max := 1;
  for i := 1 to n do
  begin
    if a[i] > max then
    begin
    max:=a[i];
      p_max := i;
    end;
  end;
  min := a[1];
  p_min := 1;
  for i := 1 to n do
  begin
    if a[i] < min then
    begin
    min:=a[i];
      p_min := i;
    end;
  end;
  writeln;
  writeln('MAX = ', max);
  writeln('MIN = ', min);
  writeln('POZ_MAX = ', p_max);
  writeln('POZ_MIN = ', p_min);
  for i := 1 to n do
    if a[i] = max then
      a[i] := min
  else
    if a[i] = min then
      a[i] := max;
  for i := 1 to n do
  begin
    write('  ', a[i]);
  end;
end.

Последний раз редактировалось Виталик124; 19.02.2014 в 23:25.
Виталик124 вне форума Ответить с цитированием
Старый 19.02.2014, 22:33   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

пропустили строчку (выделил):
Код:
max := a[1];
p_max := 1;
  for i := 1 to n do
  begin
    if a[i] > max then
    begin
    max:=a[i];
      p_max := i;
    end;
  end;
неверно написали сравнение (исправил):
Код:
min := a[1];
  p_min := 1;
  for i := 1 to n do
  begin
    if a[i] < min then
    begin
    min:=a[i];
      p_min := i;
    end;
  end;
ну и поиск мин/макс немного избыточный. (я бы проще написал!)
Но, в целом, после моих исправлений, должно работать!

Если написали самостоятельно, то уже неплохо, зачёт!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2014, 22:44   #7
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Нормально, я только учусь! Спасибо!
Виталик124 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
n - массивов, разной размерности, нужно найти min и max в этих массивах. Из полученных min найти наименьший элемент, из max наибол dmks Помощь студентам 5 09.10.2013 20:48
списке целых чисел все элементы между max и min заменить полусуммой max и min Roman one C/C++ Базы данных 0 20.12.2012 12:14
Одномерный массив(найти max и min и поменять их местами в массиве) Monry Паскаль, Turbo Pascal, PascalABC.NET 1 09.04.2012 18:28
В действительной матрице n*n поменять местами строку с MAX со строкой содержащей MIN элемент drnokaut Помощь студентам 1 06.06.2011 08:53
Как поменять местами в массиве max и min элемент. Stager Общие вопросы C/C++ 2 13.01.2009 02:03