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

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

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

var a : array [1..7] of integer;
    i, b, c,k : integer;
begin
  for i := 1 to 7 do
    begin
      writeln('vvedi chislo');
      readln(b);
      a[i] := b;
    end;
  c := a[1];
  k := a[1];
  for i := low(a) to high(a) do
    begin
      if(a[i]>=(c)) then
        begin
          k := c;
          c := a[i];
        end;
    end;
  writeln('max1 = ', c);
  writeln('max2 = ', k);
  readln();
end.  
vedro-compota's picture

var a : array [1..3] of integer;
    i, b, c,k : integer;
begin

  a[1] := 1;
  a[2] := 0;
  a[3] := 0;

  c := a[1];
  k := a[1];
  for i := low(a) to high(a) do
    begin
      if(a[i]>=(c)) then
        begin
          k := c;
          c := a[i];
        end;
    end;
  writeln('max1 = ', c);
  writeln('max2 = ', k);
  readln();
end.

-- проверить

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

var a : array [1..7] of integer;
    i, b, c, k : integer;
    t:boolean;
begin
  for i := 1 to 7 do
    begin
      writeln('vvedi chislo');
      readln(b);
      a[i] := b;
    end;
  t := true;
  c := 0;
  k := 0;
  for i := low(a) to high(a) do
    begin
      if((a[i] >= c) and (a[i] >= k)) then
         begin
           if(c>k) then
             k := a[i]
           else
             c := a[i];
         end
      else if((a[i] >= c) and (t = true)) then
        begin
          c := a[i];
          t:= false;
        end
      else if(a[i] >= k) then
        begin
           k := a[i];
           t:= true;
        end;
    end;
  writeln('max1 = ', c);
  writeln('max2 = ', k);
  readln();
end.   
vedro-compota's picture

1)

 c := 0;
  k := 0;

-- а если в массиве отрицательные?
2)

else if((a[i] >= c) and (t = true)) then

решить без флага

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

var a : array [1..7] of integer;
    i, b, c, k : integer;

begin
  for i := 1 to 7 do
    begin
      writeln('vvedi chislo');
      readln(b);
      a[i] := b;
    end;
  c :=  a[1];
  k :=  a[2];
  for i := low(a) to high(a) do
    begin
      if((a[i] > k) and (a[i] > c) )then
        c := a[i]
      else if((a[i] > k) and (a[i] < c) )then
        k := a[i];
    end;
  writeln('max1 = ', c);
  writeln('max2 = ', k);
  readln();
end.       

результат

vvedi chislo
-15
vvedi chislo
-4
vvedi chislo
-2
vvedi chislo
5
vvedi chislo
9
vvedi chislo
2
vvedi chislo
-23
max1 = 9
max2 = 2
vedro-compota's picture

 c :=  a[1];
  k :=  a[2];

определиться кто больше изначально.
Рекомендую для имен переменных использовать max1 и max2

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

var a : array [1..7] of integer;
    i, k, max1, max2, killKey, saveKillKey: integer;
begin
  a[1] := -10;
  a[2] := 0;
  a[3] := 0;
  a[4] := 4;
  a[5] := 7;
  a[6] := -5;
  a[7] := -1;

  max1 := a[1];
  for k := 1 to 2 do
    begin
      for i := low(a) to high(a) do
        begin
          if((a[i] >= max1) and (i<>saveKillKey)) then
            begin
              max1 := a[i];
              killKey := i;
            end;
        end;
      if (k=1) then 
        begin
          saveKillKey := killKey; // сохраняем ключ элемента чтобы не перезаписать его при 2м проходе
          max2 := max1;
          max1 := a[1]; // возвращаем исходное значение для 2го прогона
        end;
    end;
  writeln('max1 = ', max1);
  writeln('max2 = ', max2);
  readln();
end.     
vedro-compota's picture

1) Предлагаю начать так:

if (a[1] > a[2]) {
  //
} else {

}
// цикл далее

2) Предлагаю просто сравнивать два максимума - переменные " killKey, saveKillKey" не нужны

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

var a : array [1..7] of integer;
    i, k, max1, max2, killKey, saveKillKey: integer;
begin
  a[1] := -10;
  a[2] := 0;
  a[3] := 0;
  a[4] := 4;
  a[5] := 7;
  a[6] := -5;
  a[7] := -1;

  max1 := a[1];
  max2 := a[2];
  if(max1 < max2) then
    begin
      max1 := a[2];
      max2 := a[1];
    end;
  for i := 3 to high(a) do
    begin
      if(a[i] > max2) then
        if(a[i] > max1) then
          begin
            max2:=max1;
            max1:=a[i];
          end
        else
          max2:=a[i];
    end;
  writeln('max1 = ', max1);
  writeln('max2 = ', max2);
  readln();
end.    
vedro-compota's picture

решение засчитано

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