Тема: Робота зі списком країн (pascal)
Виправте помилки в коді. Програма створення файлу не працює. Виправте будь ласка помилки і як потрібно переробіть її.
Підготувати дані містять інформацію про країни світу, дані оформити у вигляді запису, що містить наступні поля: Країна, Столиця, Частина світу, Населення, Площа. Створити програму записів підготовлених даних у зовнішній файл, і програму обробки цього файлу виконує наступні команди:
1 Виводить на екран введені дані.
2 Додає записи в початок або кінець файлу.
3 Видаляє всі дані про країну, найменівання якої задано з клавіатури і виводить на екран оновлений вміст файлу.
4 Сортування назви столиць за алфавітом.
5 Список країн, площа яких перевищує 500 000 км квадратних
Наперед дякую тим хто будь-чим допоможе!
program bigger;
uses crt;
const n=40;
type
Dani=record
Kraina:string[20];
Stolutsa:string[15];
Chastuna_svity:string[30];
Naselenna:integer;
Ploshcha:integer;
end;
var
f, f1:text;
t:dani;
mas:array[1..n] of dani;
mas1:array[1..n] of dani;
mas2:array[1..n] of dani;
i,j,k,p,zm,s,a,y,u,m,km,l,f:integer;
x,o,q:string[75];
klav,GG:char;
procedure vvedenna(var zm1:integer);
begin
i:=1;
clrscr;
assign(f,'krainu.dat');
reset(f);
while not eof(f) do
begin
readln(f, mas[i].Kraina);
readln(f, mas[i].Stolutsa);
readln(f, mas[i].Chastuna_svity);
readln(f, mas[i].naselenna);
readln(f, mas[i].Ploshcha);
i:=i+1;
zm:=i-1;
end;
close(f);
end;
procedure druk(p1:integer);
begin
l:=1;
for j:=1 to 10000 do begin
window(1,1,80,25);
clrscr;
textcolor(green);
writeln('--Spusok krain');
write(' +--+----------+------------+---------------------+------------+----------+');
write('|# |Kraina |Stolutsa |Chastuna svity |Naselenna |Ploscsha |');
write(' |--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write('|--|----------|------------|---------------------|------------|----------|');
write(' +--+----------+------------+---------------------+------------+----------+');
textcolor(white);
m:=4;
for i:=f to p1 do
begin
gotoXY(2,m);
write(i);
gotoXY(5,m);
write(mas1[1].kraina);
gotoXY(16,m);
write(mas1[i].stolutsa);
gotoXY(27,m);
write(mas1[i].chastuna_cvity);
gotoXY(39,m);
write(mas1[i].naselenna);
gotoXY(44,m);
write(mas1[i].ploscha);m:=m+1;
end;
if p1>20 then begin
window(1,25,80,25);
write('+ -next | - -prepear | ENTER - EXIT'); end
else begin window(1,25,80,25); write('ENTER - vvutu'); end;
GG:=readkey;
if(GG=#43) and (i<p1) and (p1>20) then f:=f+20;
if(GG=#45) and (i<>20) and (i<=p1) then f:=f-20;
if GG=#13 then break;
end;
window(1,1,y,u);
clrscr;
end;
procedure delete(p1:integer; var zm1:integer);
begin
window(1,1,80,25);
clrscr;
window(15,4,80,25);
write(' vvedt krainu dla vudalenna : '); readln(q);
k:=0;
for i:=1 to p1 do
for l:=1 to p1 do
begin
if (q=mas1[i].kraina) then
begin
k:=k+1;
zm1:=p1-k;
for j:=i to p1 do
begin
mas1[j]:=mas1[j+1];
end;
end;
end;
if k>0 then begin writeln( ' vudaleno ',k,' krain z bazu');
readkey; end;
if k<=0 then begin writen(' takoi krainu nemae y bazi');
readkey; end;
end;
procedure vvid(p1:integer; var zm1:integer);
begin
k:=1;
zm1:=0;
l:=p1;
window(1,1,80,25);
clrscr;
window(15,4,80,25);
write(' Kilkist krain dla vvedenna : ');
readln(j);
for i:=1 to j do
begin
clrscr;
zm1:=zm1+1;
writeln('Vvedin nomer krainu #',l+1);
write('Vvedit nazvu krainu : '); readln(mas1dod[i].kraina);
write('Vvedit stolutsu : '); readln(mas1dod[i].stolutsa);
write('Vvedit chastuny svity : '); readln(mas1dod[i].chastuna_svity);
write('Vvedit naselenna : '); readln(mas1dod[i].naselenna);
write('Vvedit ploschy : '); readln(mas1dod[i]. ploscha);
writeln;
l:=l+1;
if j=i then break;
if (j>1) and (j<>i) then begin
Writeln(' natusnit "SPACE" - dla prodovzenna');
writeln(' abo inshy klavishy dla zakinchenna vvody');
klav:=readkey;
if klav<>#32 then break;
clrscr;
end;
end;
clescr;
if j>=1 then begin
writeln('Vvedeni krainu povunni bytu dodani y :');
writeln('pochatok spusky - 1');
writeln('kinets spusky - 2');
readln(a);
end;
for i:=1 to p1 do
begin
mas1per[i]:=mas1[i];
end;
if a=1 then
begin
for i:=1 to zm1 do
begin
mas1[i]:=mas1dod[i];
end;
for i:=zm1 to p1+zm1 do
begin
mas1[i+1]:=mas1per[k];
k:=k+1;
end;
end;
zm1:=zm1+p1;
end;
procedure sort(p1:integer);
begin
window(1,1,80,25);
clrscr;
window(23,4,80,25);
for s:=1 to p1 do
for i:=p1-1 downto 1 do
for j:=1 to i do
if (mas1[i].kraina)>(mas1[i+1].kraina) then begin
v:=mas1[i];
mas1[i]:=mas1[i+1];
mas1[i+1]:=v;
end;
writeln(' Krainu vidsortovano ' );
readkey;
end;
procedure poshyk(p1:integer);
begin
s:=0;
window(1,1,80,25);
clrscr;
window(15,3,65,6);
writeln(' poshyk y bazi: ' );
window(1,1,80,25);
clrscr;
write(' +--+----------+------------+---------------------+------------+----------+');
write('|# |Kraina |Stolutsa |Chastuna svity |Naselenna |Ploscsha |');
write(' |--|----------|------------|---------------------|------------|----------|');
m:=4;
textcolor(white);
for i:=1 to p1 do
if (mas[i].ploscsha>500000) then
write(' | | | | | | |');
s:=s+1;
gotoXY(2,m);
write(i);
gotoXY(5,m);
write(mas1[i].kraina);
gotoXY(16,m);
write(mas1[i].stolutsa);
gotoXY(27,m);
write(mas1[i].chastuna_svity);
gotoXY(39,m);
write(mas1[i].naselenna);
gotoXY(44,m);
write(mas1[i].ploscsha);
m:=m+1;
end;
begin
write(' |--+----------+------------+---------------------+------------+----------| ');
if s>0 then readkey;
window(1,1,y,u);
if s=0 then begin
clrscr;
window(23,4,80,25);
writeln(' Krain z zadanum parametrom poshykt namae');
readkey;
end;
clrscr;
end;
end;
procedure reserve(p1:integer);
begin
assign(f1,'krainu.dat');
rewrite(f1);
for i:=1 to p1 do begin
writeln(f2,mas1[i].kraina);
writeln(f2,mas1[i].stolutsa);
writeln(f2,mas1[i].chastuna svity);
writeln(f2,mas1[i].naselenna);
writeln(f2,mas1[i].ploscha);
end;
close(f1);
end;
begin
zm:=n;
p:=zm;
vvid(zm);
while km<>(n+228) do
begin
window(1,1,80,25);
textbackground(black);
textcolor(while);
p:=zm;
clrscr;
textcolor(13);
window(20,3,80,25);
clrscr;
writeln('//////////////////Menu/////////////////');
writeln('// 1 // Baza krain //');
writeln('// 2 // Dodavanna krain //');
writeln('// 3 // Vudalenna krain //');
writeln('// 4 // Sortuvanna //');
writeln('// 5 // Poshyk po parametrah //');
writeln('// 6 // SAVE //');
writeln('// 7 // Vuhid //');
window(24,15,80,25);
write('Vuberit punkt menu : ');
readln(km);
case km of
1: druk(p);
2: vnesen(p,zm);
3: begin (delete(p,zm); druk(zm); end;
4: sort(p);
5: poshyk(p);
6: reserve(p);
7: exit;
end;
end;
end.