1 Востаннє редагувалося Torbins (17.10.2014 09:45:33)

Тема: Робота зі списком країн (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.

2

Re: Робота зі списком країн (pascal)

Умова є, код є. Немає тільки одного - опису помилок. З чого ви взяли, що там є помилки?