
- •Описание постановки задачи
- •Характеристика задачи
- •Исходные данные
- •Результаты решения
- •Описание проектных решений
- •Функциональная структура задачи, программы
- •Описание алгоритма задачи
- •I, attempt
- •Intquanp
- •Intquanp
- •Input (q, I, f)
- •Структура программы
- •Текст программы
- •Исполнение программы
- •Описание результатов испытаний программы
- •Приложения
Приложения
Приложение 1
Исходный текст программы решения задачи «Получение сведений о результативности футболистов»
Приложение 2
Тексты содержимого файлов
Приложение 3
Текст программ создания и печати тестовых файлов
Приложение 4
Контрольные примеры исполнения программы
Приложение 1. Исходный текст программы.
Основная программа
Program Resultat_futbolistov;
uses u1,u2,u3,u4,u5,u6,u7,crt;
Var
q:st;
I,t,l: integer;
s:arr1;
tab:arr;
f,p:Boolean;
a:kol_gol;
b:name;
c:komands;
Begin
clrscr;
textcolor(15);
Writeln (‘Добро пожаловать в базу данных результативности футболистов’);
Writeln (‘У вас есть 5 попыток, чтобы ввести запрос’);
input (q,i,f);
if f=true then begin
calculation (a,s,l);
Search (i,l,s,tab,t,p); end;
if p=true then begin
NameSearch (b,t,tab);
KomSearch (c,t,tab);
Sort (tab,t);
Output (tab,t); end;
readln;
End.
Модуль «U1»
Unit u1;
interface
uses u7,crt;
Procedure input (quanp:st; var intquanp:integer; var f:boolean);
Implementation
Procedure input;
Var
f1,f2;boolean;
I,attempt,err:integer;
Begin
attempt:=attempt+1;
textcolor(15);
Write (‘Введите минимальное количество голов: ’);
textcolor(3);
readln (quanp);
textcolor (15);
f1:=fasle;
f2:=false;
While (quanp>’’) and (pos(‘ ‘,quanp)>0) do
delete (quanp,(pos(‘ ‘,quanp)),1);
if quanp=” then Begin
textcolor(12);
Writeln (‘Вы ничего не ввели. Попробуйте ввести запрос снова.’);
textcolor(15);
end else
Begin
i:=1;
if quanp[i]=’-‘ then Begin
f1:=true; i:=i+1; end;
While i<=length(quanp) do Begin
if (quanp[i]<’0’) or (quanp[i]>’9’) then
f2:=true;
i:=i+1;
end;
if (f1=true) and (f2=false) then Begin
textcolor(12);
Writeln (‘Значение не может быть отрицательным. Попробуйте ввести его снова.’);
textcolor(15); end else
if (f2=true) or ((f2=true) and (f1=true)) then Begin
textcolor(12);
Writeln (‘Запрос должен состоять только из цифр. Попробуйте ввести его снова);
textcolor(15);
end else f:=true;
end;end;
if f=true then
Val(quanp,intquanp,err)
else Begin
textcolor(7);
Writeln (‘Вы пытаетесь ввести некорректный запрос. Попытки закончились.’);
Writeln (‘Для того, чтобы попробовать снова, перезапустите программу.’);
end;end;
end.
Модуль «U2»
Unit u2;
interface
uses u7,crt;
Procedure Calculation (x:kol_gol; var y:arr1; var c:integer);
Procedure Search(intquanp,c:integer; y:arr1; var z_tablica:arr; var u:integer; var p:boolean);
implementation
Procedure Calculation;
var
goli:file of kol_gol;
Begin
assign(goli,adr_gol);
reset(goli);
read(goli,x);
c:=1;
y[c].allkol:=x.kol;
y[c].numk:=x.numk;
y[c].numf:=x.numf;
While not Eof(goli) do
Begin
read(goli,x);
y[c].allkol:=y[c].allkol+x.kol;
if not (y[c].numk=x.numk) or not (y[c].numf=x.numf) then
Begin
c:=c+1;
y[c].numk:=x.numk;
y[c].numf:=x.numf;
y[c].allkol:=y[c].allkol+x.kol;
y[c-1].allkol:=y[c-1].allkol-x.kol;
end;
end;
close(goli);
end;
Procedure Search;
Var
i,j:integer;
Begin
P:=true;
u:=0;
i:=1;
j:=0;
while i<=c do Begin
if y[i].allkol>=intquanp then Begin
u:=u+1;
z_tablica[u].allkol:=y[i].allkol;
z_tablica[u].numf:=y[i].numf;
z_tablica[u].numk:=y[i].numk;
end else
j:=j+1;
i:=i+1;
end;
if j=c then Begin
p:=false;
textcolor(12);
Writeln(‘К сожалению, в списке нет футболистов, забивших столько голов’);
textcolor(7);
Wtireln(‘Для того, чтобы попробовать снова, перезапустите программу.’);
end;end;
end.
Модуль «U3»
Unit U3;
interface
uses u7;
procedure NameSearch (x:name; u; integer; var z_tablica:arr);
implementation
procedure NameSearch;
var
imena:file of name;
i:integer;
f1:boolean;
Begin
assign (imena, adr_name);
reset (imena);
while not Eof(imena) do begin
read(imena,x);
i:=0;
f1:=false;
while (f1=false) and (i<u) do Begin
i:=i+1;
if (z_tablica[i].numk=x.numk) and (z_tablica[i].numf=x.numf) then Begin
f1:=true;
z_tablica[i].namef:=x.namef; end;
end;
end;
close(imena);
end.
Модуль «U4»
Unit u4;
interface
uses u7;
Procedure KomSearch (x:komands; u:integer; var z_tablica:arr);
implementation
procedure KomSearch;
var
komandi:file of komads;
i:integer;
Begin
assign (komandi, adr_komands);
reset(komandi);
while not Eof(komandi) do begin
read(komandi,x);
i:=0;
while i<u do Begin
i:=i+1;
if z_tablica[i].numk=x.numk then Begin
z_tablica[i].namekom:=x.namekom; end;
end;
end;
close(komandi);
end;
end.
Модуль «U5»
Unit U5;
interface
uses u7;
Procedure Sort (var z_tablica:arr; u:integer);
implementation
Procedure Sort;
var
c:tablica;
i,j:integer;
Begin
for i:=1 to u do
for j:=i+1 to u do
if z_tablica[i].allkol<z_tablica[j].allkol then Begin
c:=z_tablica[j];
z_tablica[j]:=z_tablica[i];
z_tablica[i]:=c;
end;
end;
end.
Модуль «U6»
Unit U6;
interface
uses crt,u7;
procedure output(z_tablica:arr; u:integer);
implementation
procedure output;
var
i:integer;
Begin
writeln;
writeln;
textcolor(14);
writeln (‘Сведения о результативности футболистов’);
writeln;
writeln(‘╔═════════════╦════════╦═════════════════╗’);
writeln(‘║Фамилия и инициалы║ Команда ║Количество забитых голов ║’);
writeln(‘╠═════════════╬════════╬═════════════════╣’);
for i:=1 to u do Begin
writeln(‘║’,z_tablica[i].namef:18,’║’,z_tablica[i].namekom:16,’║’,z_tablica[i].allkol,’║’);
end;
writeln(‘╚═════════════╩════════╩═════════════════╝’);
writeln;
end;
end.
Модуль «U7»
Unit u7;
interface
const n=26;
adr_gol=’F:\dosbox1\kursa4\kolgol.dat’;
adr_name=’F:\dosbox1\kursa4\spisokfu.dat’;
adr_komands=’F:\dosbox1\kursa4\spisokko.dat’;
Type
kol_gol=record
dat:string[10];
numf:integer;
numk:integer;
kol:integer;
end;
obsh_kol=record
numk:integer;
numf:integer;
allkol:integer;
end;
Name=record
Namef:string[30];
numk:integer;
numf:integer;
end;
Komands=record
namekom:string[30];
numk:integer;
end;
Tablica=record
namef:string[30];
namekom:string[30];
allkol:integer;
numf:integer;
numk:integer;
end;
st=string;
arr1=array[1..n] of obsh_kol;
arr=array[1..n] of tablica;
implementation
end.
Приложение 2. Тексты содержимого файлов
Тестовый файл «Сведения о голах»
Дата |
Код футболиста |
Количество забитых голов |
||
Номер команды |
Номер футболиста |
|||
22.12.2012 |
1 |
1 |
3 |
|
15.12.2012 |
1 |
1 |
1 |
|
29.12.2012 |
1 |
1 |
0 |
|
07.01.2013 |
1 |
2 |
2 |
|
02.02.2012 |
1 |
2 |
1 |
|
15.02.2013 |
1 |
2 |
4 |
|
31.03.2013 |
1 |
3 |
2 |
|
27.02.2013 |
1 |
3 |
1 |
|
15.01.2013 |
1 |
3 |
2 |
|
30.02.2013 |
2 |
1 |
3 |
|
21.01.2013 |
2 |
1 |
1 |
|
01.02.2013 |
2 |
1 |
0 |
|
24.09.2012 |
3 |
3 |
0 |
|
01.10.2012 |
3 |
3 |
1 |
|
27.08.2012 |
3 |
3 |
1 |
|
05.04.2013 |
2 |
3 |
2 |
|
29.03.2013 |
2 |
3 |
2 |
|
21.03.2013 |
2 |
3 |
2 |
|
27.01.2013 |
3 |
1 |
3 |
|
21.01.2013 |
3 |
1 |
0 |
|
31.01.2013 |
3 |
1 |
0 |
|
14.05.2012 |
4 |
1 |
4 |
|
07.05.2012 |
4 |
1 |
1 |
|
01.06.2012 |
4 |
1 |
0 |
|
31.03.2012 |
4 |
2 |
1 |
|
07.04.2012 |
4 |
2 |
1 |
|
18.04.2012 |
4 |
2 |
0 |
Тестовый файл «Список футболистов»
Фамилия и инициалы футболиста |
Код футболиста |
|
Номер команды |
Номер футболиста |
|
Тючин П.С. |
1 |
1 |
Харьков А.Н. |
1 |
2 |
Патренко М.В. |
2 |
1 |
Малкин Л.П. |
3 |
3 |
Прандеев О.Д. |
2 |
3 |
Хваленко Я.Ю. |
3 |
1 |
Федотов Р.Г. |
4 |
1 |
Иванов Е.И. |
4 |
2 |
Воевода Т.Н. |
1 |
3 |
Тестовый файл «Список команд»
Название команды |
Номер команды |
Спартак М. |
1 |
Свобода |
2 |
Стрела |
3 |
Торпедо |
4 |
Приложение 3. Тексты программ создания и печати файлов
Создание тестового файла «Сведения о голах»:
Program create;
uses crt;
type
kol_gol=record
dat:string[10];
numf:integer;
numk:integer;
kol:integer;
end;
var
goli:file of kol_gol;
x:kol_gol;
k:integer;
Begin
clrscr;
k:=0;
assign(goli,’F:\dosbox1\kursa4\kolgol.dat’);
rewrite(goli);
while not (readkey=’*’) do
with x do Begin
k:=k+1;
writeln(k);
write(‘дата:’);readln(dat);
writeln(‘Введите код футболиста’);
write(‘Номер команды:’);readln(numk);
write(‘Номер футболиста:’);readln(numf);
writeln(‘Введите количество забитых футболистом голов:’)readln(kol);
write(goli,x);
end;
close(imena);
end.
Создание тестового файла «Список футболистов»:
Program create;
uses crt;
type
name=record
namef:string[30];
numf:integer;
numk:integer;
end;
var
imena:file of name;
x:name;
k:integer;
Begin
clrscr;
k:=0;
assign(imena,’F:\dosbox1\kursa4\spisokfu.dat’);
rewrite(imena);
while not (readkey=’*’) do
with x do Begin
k:=k+1;
writeln(k);
writeln(‘Введите код футболиста’);
write(‘Номер команды:’);readln(numk);
write(‘Номер футболиста:’);readln(numf);
writeln(‘Фамилия и инициалы:’)readln(namef);
write(imena,x);
end;
close(imena);
end.
Создание тестового файла «Список команд»:
Program create;
uses crt;
type
komands=record
namekom:string[30];
numk:integer;
end;
var
komandi:file of komands;
x:komands;
k:integer;
Begin
clrscr;
k:=0;
assign(komandi,’F:\dosbox1\kursa4\spisokko.dat’);
rewrite(komandi);
while not (readkey=’*’) do
with x do Begin
k:=k+1;
writeln(k);
write(‘Номер команды:’);readln(numk);
writeln(‘Название команды:’)readln(namekom);
write(komandi,x);
end;
close(komandi);
end.
Приложение 4. Контрольные примеры исполнения программы
Пример 1.
Запрос:
Введите минимальное количество голов:7 ;
Результат:
Пример 2.
Запрос:
Введите минимальное количество голов:4 ;
Результат:
Пример 3.
Запрос:
Введите минимальное количество голов:1 ;
Результат:
Пример 4.
Запрос:
Введите минимальное количество голов:-1 ;
Результат:
Пример 5.
Запрос:
Введите минимальное количество голов:13 ;
Результат:
Пример 6.
Запрос:
Введите минимальное количество голов:аа ;
Результат: