Поиск максимумов и минимумов

Книга адресована школьникам средних и старших классов, желающим испытать себя в «олимпийских схватках». Может быть полезна студентам-первокурсникам и преподавателям информатики.

Модераторы: Oleg_D, Модераторы

Re: Редактирование и вычитка книги

Сообщение deka47 » 06.12.2012 21:42:31

Опять застрял:
Код: Выделить всё
for i:=1 to n do begin max:=0;
    for j:=1 to n do
    if a[j]>max then max:=a[j];
       cmax:=cmax+inttostr(max);
end;


Вот вам кусок кода, что я хочу сделать? Суть такая: я сверяю элементы массива, первый элемент (i) с всема (j), потом второй - (i) опять же со всема (j). И нахожу максимальное значение среди этих элементов. Мне нужно элемент под индексом максимального числа сделать отрицательным. Т.е., к примеру, 4-й элемент был максимальным, сделать его -1, чтобы при повторной прогонке он не рассматривался, как максимальный. Потому, что мне нужно вывести элементы по спаданию. Как мне "заминусовать" элемент под этим индексом?

Код: Выделить всё
if a[j]>max then begin max:=a[j]; a[j]:=-1; end;

Так сделать я не могу, потому что, скажем, 3-й элемент был больше 1-ого, а потом 7-й больше этого 3-его. И заминусуется уже и 3-й и 7-й - мне так не подходит.

Код: Выделить всё
if a[j]>max then max:=a[j];
a[j]:=-1
cmax:=cmax+inttostr(max);

Так тоже не могу, потому что "заминусует" последний (j).

Прошу помощи, как это сделать?

Добавлено спустя 5 минут 51 секунду:
Код: Выделить всё
for i:=1 to n do begin max:=0;
    for j:=1 to n do
    if a[j]>max then begin max:=a[j]; k:=j; end;
       cmax:=cmax+inttostr(max);
       a[k]:=-1;
end;


Мда, дошло. Через 5 минут, как написал здесь.
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26

Re: Редактирование и вычитка книги

Сообщение bormant » 06.12.2012 23:08:09

deka47,
а можно полюбопытствовать об изначально поставленной задаче? Сортировка массива? Что-то еще?
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Редактирование и вычитка книги

Сообщение deka47 » 06.12.2012 23:47:12

bormant, пользователь вводит любое число, с цифр введенного числа создать максимальное возможное и минимальное.
К примеру:
Код: Выделить всё
Ввод: 2841
Вывод: Максимальное - 8421
       Минимальное - 1248
deka47
новенький
 
Сообщения: 33
Зарегистрирован: 07.10.2012 22:43:26

Поиск максимумов и минимумов

Сообщение Oleg_D » 07.12.2012 09:06:05

Три предыдущих поста перенёс в новую тему.
Рассматривается задача:
пользователь вводит число, из цифр которого надо составить два числа: максимально возможное и минимально возможное.
Oleg_D
постоялец
 
Сообщения: 390
Зарегистрирован: 09.05.2011 11:28:36

Re: Поиск максимумов и минимумов

Сообщение bormant » 07.12.2012 11:08:06

deka47,
достаточно отсортировать символы введённой строки и вывести их в прямом и обратном порядке. Поскольку строка не очень длинная, достаточно сортировки пузырьком, как-то так:
Код: Выделить всё
var
  i: integer;
  done: boolean;
  c: char;
  s: string;
begin
  write('Введите число: '); readln(s);
  repeat
    done := true;
    for i := length(s) downto 2 do
      if s[i-1] < s[i] then begin
        done := false;
        c := s[i-1];
        s[i-1] := s[i];
        s[i] := c;
      end;
  until done;
  write('Наименьшее: ');
  for i := length(s) downto 1 do
    if s[i] > '0' then write(s[i]);
  writeln;
  writeln('Наибольшее: ', s);
end.
Прогон:
Код: Выделить всё
Введите число: 1009
Наименьшее: 19
Наибольшее: 9100
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01


Вернуться в Книга "Песни о Паскале"

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru