|
|||
min1 := 20; min2 := 20; min3 := 20;min1 := 20; min2 := 20; min3 := 20; for i:=1 to N do begin if Info[i].sum < min1 then begin { новый min1 } min3 := min2; min2 := min1; min1 := Info[i].sum; end else if Info[i].sum < min2 then begin { новый min2 } min3 := min2; min2 := Info[i].sum; end else if Info[i].sum < min3 then { новый min3 } min3 := Info[i].sum; end; 16) обратим внимание на два момента: во-первых, когда переезжают два элемента, сначала нужно перемещать второй на место третьего, а потом – первый на место второго: min3 := min2; min2 := min1; эти операторы нельзя менять местами, иначе «старое» значение min2 будет потеряно; во-вторых, если проверять условие Info[i].sum < min2 нужно только тогда, когда очередная сумма не меньше, чем min1, поэтому каждый следующий условный оператор стоит в else-блоке предыдущего, то есть, выполняется только тогда, когда предыдущий не сработал 17) итак, мы нашли три минимальных результата, и остается вывести на экран фамилии и имена тех, у кого сумма баллов меньше или равна min3: for i:=1 to N do if Info[i].sum <= min3 then writeln(Info[i].name); 18) на всякий случай приведем полную программу, она получилась довольно длинная const LIM = 100; var Info: array[1..LIM] of record name: string; sum: integer; end; i, k, N, mark, min1, min2, min3: integer; c: char; begin readln(N); { ввод исходных данных } for i:=1 to N do begin Info[i].name := ''; for k:=1 to 2 do repeat read(c); Info[i].name := Info[i].name + c; until c = ' '; Info[i].sum := 0; for k:=1 to 3 do begin read(mark); Info[i].sum := Info[i].sum + mark; end; readln; end; { поиск трех минимальных } min1 := 20; min2 := 20; min3 := 20; for i:=1 to N do begin if Info[i].sum <min1 then begin min3 := min2; min2 := min1; min1 := Info[i].sum; end else if Info[i].sum <min2 then begin min3 := min2; min2 := Info[i].sum; end else if Info[i].sum <min3 then min3 := Info[i].sum;
|
|||
|