alexalisa
Новичок
|
Есть задача. Сведения об участниках конкурса содержат следующую информацию: фамилия, имя, адрес(город, улица, № дома, № квартиры), секция, набранный балл. Составить программу, которая считывает эти данные из текстового файла в массив записей (не менее 20-ти элементов). Составить процедуры и/или функции, которые позволяют: 1) найти средний балл по каждой секции 2) определить фамилии победителей по каждой секции 3) по каждому из городов определить фамилии участников, набравших наибольшие баллы (независимо от секции). Процедура считывания из текстового файла в массив записей я сделала, но процедура вывода работает не совсем верно, выводит только фамилии в строке записи. 1) Как вывести все значения в строке записи, и все записи? 2) Процедуру определения среднего значения по каждой секции я практически выполнила, но она тоже работает не совсем верно, думаю потому что процедура вывода подводит. процедура находит количество различных секций, мне теперь нужно вычислить средний балл по каждой секции. Очень нужна ваша помощь. ________________________________________ program p; uses crt; const n = 45; type T_address=record gorod:string[11]; ulica:string[11]; dom:string[4]; kv:string[4]; end; T_conkurs= record fam: string[10]; name: string[11]; address: T_address; cekciya: string[9]; ball:string[4]; end; var inf:array[1..n] of T_conkurs; kol_zap:word; i, j, num:integer; procedure Dannye_vvod;// процедура считывания из текстового файла var f:text; begin i := 0; assign(f,'anketa.txt'); reset(f); while not Eof(f) do begin i := i + 1; with inf do readln(f,fam,name,address.gorod,address.ulica,address.dom,address.kv,cekciya,ball); end; kol_zap:=i; close(f); end; procedure Dannye_vyvod; //процедура вывода на экран var i:integer; begin writeln(' Фамилия Имя Адрес Секция Набранный балл'); for i:=1 to kol_zap do begin with inf do begin writeln(fam); write(name); write(address.gorod); write(address.ulica); write(address.dom); write(address.kv); write(cekciya); write(ball); ///writeln(' ',,,,,,,,); // writeln(' ',fam,name,address.gorod,address.ulica,address.dom,address.kv,cekciya,ball); end; end; end; procedure Sred_bal; begin for i := 1 to kol_zap - 1 do for j := i + 1 to kol_zap do if (inf.cekciya = inf[j].cekciya) then inf.cekciya := 'duplicate'; writeln('Результат:'); for i := 1 to kol_zap do if inf.cekciya <> 'duplicate' then inc(num); writeln('В массиве ',num,' различных записей:'); for i := 1 to kol_zap do if inf.cekciya <> 'duplicate' then write(inf.cekciya,' '); end; begin clrscr; Dannye_vvod; Dannye_vyvod; Sred_bal; end.
|