Задача 4 Урок 15

Урок 15

Пользователь вводит массив целых чисел из 7 элементов.
Найдите из них два самых больших числа и выведите их на экран.

type myArr = array[1..7] of integer;

var a: myArr;
    i, k, l, m: integer;
begin
  m := 0;
  for i := low(a) to high(a) do
  begin
    writeln('Vvedite element massiva nomer ', i);
    readln(a[i]);
  end;
  writeln('Elementi massiva');
  for i := low(a) to high(a) do
  begin
    write(a[i], ' ');
    if a[i] > k then
      k := a[i]
  end;
  for i := low(a) to high(a) do //без второго цикла может пропустить пример 87000025
  begin
    if (a[i] > l) and (a[i] < k) then
      l := a[i]
    else
      inc(m); //требуется на случай, если все числа одинаковые, но исключить, когда только несколько чисел совпадают.
  end;
  writeln();
  writeln('Samoe bolshoe chislo = ', k);
  if m = 7 then
    writeln('Vtoroe samoe bolshoe chislo otsutstvuet')
  else
    writeln('Vtoroe samoe bolshoe chislo = ', l);
  readln();
end.

КОНСОЛЬ

Vvedite element massiva nomer 1
15
Vvedite element massiva nomer 2
15
Vvedite element massiva nomer 3
0
Vvedite element massiva nomer 4
-15
Vvedite element massiva nomer 5
26
Vvedite element massiva nomer 6
26
Vvedite element massiva nomer 7
90
Elementi massiva
15 15 0 -15 26 26 90
Samoe bolshoe chislo = 90
Vtoroe samoe bolshoe chislo = 26
vedro-compota's picture

  1. два числа могут быть одинаковыми
  2. постараться решить за одно прочтение массива

_____________
матфак вгу и остальная классика =)

type myArr = array[1..7] of integer;

var a: myArr;
    i, k, l, m: integer;
begin
  m := 0;
  for i := low(a) to high(a) do
  begin
    writeln('Vvedite element massiva nomer ', i);
    readln(a[i]);
  end;
  writeln('Elementi massiva');
  for i := low(a) to high(a) do
  begin
    write(a[i], ' ');
    if a[i] > k then
      k := a[i];
    if (a[i] > l) and (a[i] < k) then
    begin
      l := a[i];
      inc(m);
    end;
  end;
  if m = 0 then
    l := k;
  writeln();
  writeln('Samoe bolshoe chislo = ', k);
  writeln('Vtoroe samoe bolshoe chislo = ', l);
  readln();
end.

КОНСОЛЬ

Vvedite element massiva nomer 1
3
Vvedite element massiva nomer 2
3
Vvedite element massiva nomer 3
3
Vvedite element massiva nomer 4
3
Vvedite element massiva nomer 5
3
Vvedite element massiva nomer 6
3
Vvedite element massiva nomer 7
3
Elementi massiva
3 3 3 3 3 3 3
Samoe bolshoe chislo = 3
Vtoroe samoe bolshoe chislo = 3
vedro-compota's picture

что есть пользователь будет вводить только отрицательные числа?
+ в условие добавлены примеры для проверки:

1 2 2 1 1 1 1
Ответ: 2 2
-1 -2 -2 -1 -1 -1 -1
Ответ: -1 -1
-1 -2 -2 5 4 -1 -1
Ответ: 5 4

_____________
матфак вгу и остальная классика =)

type myArr = array[1..7] of integer;

var a: myArr;
    i, k, l: integer;
begin
  for i := low(a) to high(a) do
  begin
    writeln('Введите элемент массива номер ', i);
    readln(a[i]);
  end;

  writeln('Элементы массива ');
  for i := low(a) to high(a) do
  begin
    write(a[i], ' ');
    if i = 1 then
      k := a[i]
    else if (i = 2) and (a[2] < a[1]) then
    begin
      l := a[i];
    end
    else if a[i] > k then
    begin
      l := k;
      k := a[i]
    end
    else if (a[i] > l) and (a[i] <= k) then
    begin
      l := a[i];
    end;
  end;
  writeln();
  writeln('Самое большое число = ', k);
  writeln('Второе самое большое число = ', l);
  readln();
end.
vedro-compota's picture

    if i = 1 then
      k := a[i]
    else if (i = 2) and (a[2] < a[1]) then
    begin
      l := a[i];
    end

-- вынести за цикл

_____________
матфак вгу и остальная классика =)

type myArr = array[1..7] of integer;

var a: myArr;
    i, k, l: integer;
begin
  for i := low(a) to high(a) do
  begin
    writeln('Введите элемент массива номер ', i);
    readln(a[i]);
  end;
  k := a[1];
  if (a[2] <= a[1]) then
  begin
    l := a[2];
  end
  else
  begin
    l := k;
    k := a[2];
  end;
  writeln('Элементы массива ');
  for i := 3 to high(a) do
  begin
    write(a[i], ' ');
    if a[i] > k then //назначает новое k, а старое пишет в l, если новое k больше прошлого
    begin
      l := k;
      k := a[i]
    end
    else if (a[i] > l) and (a[i] <= k) then //находит второе большое число
    begin
      l := a[i];
    end;
  end;
  writeln();
  writeln('Самое большое число = ', k);
  writeln('Второе самое большое число = ', l);
  readln();
end.
vedro-compota's picture

засчитано

_____________
матфак вгу и остальная классика =)