- •Ответы на задачи с4:
- •Var tMonth: array[1..12] of real;
- •I, month: integer;
- •Var count: array[1..26] of integer;
- •Var count:array[1..26] of integer;
- •I, k, cA, cAm, iMax:integer;
- •Var count:array['a'..'z']of integer;
- •Var Info: array[1..100] of record
- •I, k, p, n, c: integer;
- •Var Info: array[1..Lim] of record
- •I, k, n, mark, max: integer;
- •Var names: array[1..Lim] of string;
- •I, k, n, ball, mark, max, count: integer;
- •Var Info: array[1..Lim] of record
- •I, k, n, mark, max1, max2, max3: integer;
- •Var name: array[1..Lim] of string;
- •I, k, count, mark1, mark2, n: integer;
- •Var podr: array[1..100] of integer;
- •If not exist then begin
- •Var podr: array[1..100] of integer;
- •I, k, p, count, n: integer;
- •If not exist then begin
- •Var podr: array[0..99] of boolean;
- •I, k, p, count, n: integer;
- •Var podr: set of 0..99;
- •Var ballBest: array[1..2] of integer; { результат (баллы) }
- •Var ballBest: array[1..2] of integer;
- •I, j, k, ball: integer; { вспомогательные переменные }
- •Var Best: array[1..2] of record
- •I, j, k, ball: integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •I, j, k, price: integer;
- •Var Total: array[0..Max] of integer;
- •Var Count: array[0..Max,7..11] of integer;
- •I, j, class, ball, minBall, Sum: integer;
- •Var List: array[1..500] of string;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, count: integer;
- •Var List: array[1..500] of string;
- •I, j, n, ball1, ball2, count: integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •Var MinPrice, Count: array[1..3] of integer;
- •I, j, k, price: integer;
- •Var count: array[1..26] of integer;
- •Var count: array['a'..'z'] of integer;
- •Inc(nOdd);
- •Var count: array['a'..'z'] of integer;
- •I, nOdd: integer;
- •Inc(nOdd);
- •Var Info: array[1..1000] of tInfo;
- •Var temp: tInfo;
- •Var Info: array[1..1000] of tInfo;
- •Var h, m, code0: integer;
- •Var Info: array[1..1000] of tInfo;
- •Var Info: array[1..1000] of tInfo;
- •Var h, m, code0: integer;
- •If c in ['a'..'z', 'a'..'z'] then ...
- •If c in['a'..'z','a'..'z'] then
- •Var Names: array[1..Max] of string;
- •Var count: array[1..Max] of integer;
- •Var nParties: integer;
- •Var Names: array[1..Max] of string;
- •Var Parties: array[1..Max] of tParty;
- •Var Parties: array[1..Max] of tParty;
- •Val(Copy(s,1,2), d, c);
- •Val(Copy(s,4,2), m, c);
- •Val(Copy(s,7,4), y, c);
- •Var s, Name, minName: string;
- •Val(Copy(s,1,2), d, c);
- •Val(Copy(s,4,2), m, c);
- •Val(Copy(s,7,4), y, c);
- •Var s, Name, specDate, minName, minDate: string;
- •Var name,name1,name2:string;
- •I, j, n, school, ball,
- •Var sum, count: array[1..99] of integer;
- •Var sum, count: array[1..99] of integer;
- •I, n, sch, ball, k, total: integer;
- •If s[I] in ['a'..'z','a'..'z'] then
- •If inside then begin
- •Var s: string;
- •Var word: string;
- •Var count:array[0..100] of integer;
- •I, n, sch, ball, m, s: integer;
- •Var c: char;
- •I, k, count: integer;
- •Var c, I: char;
- •Var c: char;
- •I, j, k: integer;
- •Var c:char;
- •I, j, k:integer;
- •Var num: array['0'..'9'] of integer;
- •I, min: integer;
- •Var c: char;
- •I, k, count: integer;
- •Var c, I: char;
- •Var c: char;
- •Var num: array['1'..'9'] of integer;
- •Var num: array['1'..'9'] of integer;
- •Val(Copy(s,1,2), d, I);
- •Var dm: array[1..12] of integer;
- •Val(Copy(s,1,p-1), c.No, k); { номер слева от пробела }
- •Var maxStip: array[1..5] of integer;
- •Var I, k, n: integer;
- •Var first: array[1..5] of integer;
- •Var I, n, kurs, stip: integer;
- •Var people: array[1..Max-1] of integer;
- •Var Delta: array[1..Max] of integer;
- •Var Delta: array[1..Max] of integer;
- •I, s1, s2, n, p, min: integer;
- •Var people: array[1..Max-1] of integer;
- •I, j, s1, s2, n, p, min: integer;
- •Var schMax, schCount: array[1..Max] of integer;
- •Var schMax, schCount: array[1..Max] of integer;
- •I, n, sch, ball, count: integer;
- •Var f: Text; { указатель на текстовый файл }
- •X1, x2: real; { корни уравнения }
- •I, r: integer; { вспомогательные переменные }
- •Val(Copy(s,1,I-1), c, r);
- •Var Info: array[1..Max] of tInfo;
- •Var Info: array[1..Max] of tInfo;
- •I, j, n, zNo: integer;
- •Var count: array[1..Max] of integer;
- •Var count: array[1..Max] of integer;
- •I, j, nMin, n, zNo: integer;
- •Var Info: array[1..Max] of tInfo;
- •I, j, n, k: integer;
- •Var X, count, c, c0, max, max2, max3, max6: integer;
- •Var X, Xprev, n, l, lMax: integer;
- •Var X, Xprev, Xstart, n, lMax: integer;
- •Var k: char;
- •Var I, sumFf: integer;
- •Var I, count1, count2, sumFf: integer;
- •Var I, j, count1, count2, sumFf: integer;
- •Var words: array[1..27] of string;
- •Var sum, p, I, j, n, number: integer;
- •Var j: integer;
- •Var sum, p, I, V, n,number: integer;
- •Var j: integer;
- •Var words: array[1..99] of string;
- •Var sum, I, j, n: integer;
- •Var count: array['a'..'z'] of integer;
- •Var s: string;
- •Var letters: array['a'..'z'] of char;
- •Var count: array['a'..'z'] of integer;
- •I: integer;
- •Var count: array[1..26] of integer;
- •I, k: integer;
- •Var count: array[1..26] of integer;
- •I, k: integer;
- •Var w: array[1..26] of structW;
- •I, k: integer;
- •Var count: array[1..26] of integer;
- •I, k, max: integer;
- •97 Http://kpolyakov.Narod.Ru
Val(Copy(s,1,p-1), c.No, k); { номер слева от пробела }
Delete(s, 1, p); { в "s" остается дата }
c.day := dayFromStart(s);
if curDay - c.day > 3 then begin
count := count + 1;
cells[count] := c;
end;
end;
{ сортировка по возрастанию поля day }
for i:=1 to count-1 do
for j:=count-1 downto 1 do
if cells[j].day > cells[j+1].day then begin
c:=cells[j]; cells[j]:=cells[j+1];
cells[j+1]:=c;
end;
{ вывод результата }
for i:=1 to count do
writeln(cells[i].no);
end.
Отметим, что большинство сред для программирования на языке Паскаль допускает более красивое объявление массива dm как массива целых констант:
const dm: array[1..12] of integer =
(31,28,31,30,31,30,31,31,30,31,30,31);
Сложность этой задачи состоит в том, что студентов с максимальной стипендией на каждом курсе может быть несколько (хоть все!). Поэтому придется хранить все входные данные в массиве. Сведения о студенте будем записывать в структуру (запись)
type TStud = record
name: string;
kurs, stip: integer;
end;
В поле name хранятся фамилия и имя, в поле kurs – номер курса, в поле stip – размер стипендии.
Для поиска максимальной стипендии по каждому курсу введем массив счетчиков и обнулим его:
Var maxStip: array[1..5] of integer;
...
for i:=1 to 5 do maxStip[i] := 0;
Из первой строки исходных данных читаем число студентов в переменную N, затем в цикле от 1 до N читаем строки с данными о студентах. Информацию записываем прямо в поля структуры. В поле name записываем все символы до второго пробела:
stud[i].name := '';
repeat
read(c);
stud[i].name := stud[i].name + c;
until c = ' ';
repeat
read(c);
stud[i].name := stud[i].name + c;
until c = ' ';
Затем читаем номер курса и размер стипендии (до конца строки, поэтому readln):
readln(stud[i].kurs, stud[i].stip);
После этого проверяем, не превышает ли эта стипендия максимальную на этом курсе; если превышает, обновляем максимальное значение:
if stud[i].stip > maxStip[stud[i].kurs] then
maxStip[stud[i].kurs] := stud[i].stip;
Когда все данные прочтены, нужно вывести фамилии и имена всех студентов, стипендия которых равна максимальной на курсе. Для этого требуется вложенный цикл: во внешнем цикле меняется номер курса k (от 1 до 5), а во внутреннем просматривается весь массив сведений о студентах:
for k:=1 to 5 do begin
writeln('Курс ', k);
for i:=1 to N do
if (stud[i].kurs = k) and
(stud[i].stip = maxStip[k]) then
writeln(stud[i].name);
end;
Вот полная программа:
const MAX = 100;
type TStud = record
name: string;
kurs, stip: integer;
end;
Var I, k, n: integer;
c: char;
maxStip: array[1..5] of integer;
stud: array[1..MAX] of TStud;
begin
for i:=1 to 5 do maxStip[i] := 0;
readln(N);
for i:=1 to N do begin
stud[i].name := '';
repeat read(c); stud[i].name := stud[i].name + c;
until c = ' ';
repeat read(c); stud[i].name := stud[i].name + c;
until c = ' ';
readln(stud[i].kurs, stud[i].stip);
if stud[i].stip > maxStip[stud[i].kurs] then
maxStip[stud[i].kurs] := stud[i].stip;
end;
for k:=1 to 5 do begin
writeln('Курс ', k);
for i:=1 to N do
if (stud[i].kurs = k) and
(stud[i].stip = maxStip[k]) then
writeln(stud[i].name);
end;
end.
Альтернативное решение задачи предложил А. Тарасов (с. Красноусольский, Республика Башкортостан). Идея состоит в том, чтобы фактически составить из студентов, имеющих максимальную стипендию на курсе, линейный список. В структуру включаем фамилию, имя и поле next, в котором будем хранить номер следующего в списке студента:
type TStud = record
name: string;
next: integer;
end;
Номер первого студента в списке (для каждого курса) будем хранить в массиве