GAECHKA
Твоя помощница в решении задач

Program_LABA9.pas(100,43) Error: Incompatible type for arg no. 2: Got "Constant String", expected "LongInt"

Помогите решить проблему
Program_LABA9.pas(100,43) Error: Incompatible type for arg no. 2: Got "Constant String", expected "LongInt"
program lb9;
uses crt;
const ten=10;
type
  anketa=record
    name:string[20];
    mark1:byte;
    mark2:byte;
    born_date:integer;
   end;
   groupe = array[1..ten] of anketa;
var choice:integer; 
   f:file of anketa;
 
 
procedure fill;
  var r:anketa;
    begin
     writeln('Name:');
         readln(r.name);
         writeln('Born date(year):');
         readln(r.born_date);
         writeln('mark1 and mark2:');
         readln(r.mark1);
         readln(r.mark2);
 
     seek (f,filesize(f));
     write(f,r);
     end;
 
     procedure print_file;
       var r:anketa;
     begin
         seek (f,0);
         while not eof (f) do
         begin
         read (f,r);
         writeln (r.name:10, r.mark1:3, r.mark2:3, r.born_date:5);
         end;
     end;
     
     function to_arr():groupe;
        var r:anketa; i:integer; g:groupe;
        begin
            seek (f,0);
            i:=1;
            while not eof (f) do begin
                read (f,r);
                g[i]:=r;
                i:=i+1;
                end;
            to_arr:=g;
        end;
                
procedure del_2(arr:groupe);
  var i,j:integer; copy:groupe;
    begin
    j:=1;
      for i:=1 to ten do begin
          if (arr[i].mark1) and (arr[i].mark2) > 2 then begin
            copy[j]:=arr[i];
            j:=j+1;
            end;    
          end;
     rewrite(f);
     seek (f,0);
     for i:= 1 to j-1 do  
        write (f,copy[i]);
     end;
 
procedure print_name(arr:groupe);
          var i:integer; sr:real;
              begin
                   sr:=0;
                   for i:=1 to ten do begin
                       with arr[i] do begin
                            sr:=(mark1+mark2)/2;
                            writeln(name:10, ' ', sr:3);
                            end;
                       end;
              end;
 
 procedure print_2005;
    var r:anketa;
    begin
        seek (f,0);
        while not eof (f) do begin
            read (f,r);
            if r.born_date 2005 then writeln(r.name:10, r.born_date:5);
            end;
    end;
    
 
begin
clrscr;
writeln('Create new file (data.dat) ?');
writeln('1 - YES');
writeln('2 - NO');
readln(choice);
  if choice = 1 then rewrite (f,'data.dat')
    else begin 
      assign (f,'data.dat');
      reset (f);
      end;
    
    while true do 
        begin
            writeln();
                WriteLn('Menu':10);
                WriteLn('1. Add new student.');
                WriteLn('2. Print all records.');
                WriteLn('3. Print average marks.');
                WriteLn('4. Show students from 2005 year.');
                WriteLn('5. Delete students with 2.');
                WriteLn('6. Rewrite file.');
                WriteLn('0. Exit');
                
                readln(choice);
                
                if choice=1 then fill();
                
                if choice=2 then print_file();
 
                if choice=3 then print_name(to_arr);
                
                if choice=4 then print_2005();
                
                if choice=5 then del_2(to_arr);
                
                if choice=6 then rewrite(f);
                
                if choice=0 then break;         
        end;    
     close(f);
end.
0
вопрос задан

Источник


1 ответ
rewrite (f,'data.dat')
fpc не разрешает такой синтаксис. Это из pabc.net

program lb9;
 
uses crt;
 
const
  ten = 10;
 
type
  anketa = record
    name: string[20];
    mark1: byte;
    mark2: byte;
    born_date: integer;
  end;
  groupe = array[1..ten] of anketa;
 
var
  choice: integer; 
  f: file of anketa;
 
 
procedure fill;
var
  r: anketa;
begin
  writeln('Name:');
  readln(r.name);
  writeln('Born date(year):');
  readln(r.born_date);
  writeln('mark1 and mark2:');
  readln(r.mark1);
  readln(r.mark2);
  
  seek(f, filesize(f));
  write(f, r);
end;
 
procedure print_file;
var
  r: anketa;
begin
  seek(f, 0);
  while not eof(f) do
  begin
    read(f, r);
    writeln(r.name:10, r.mark1:3, r.mark2:3, r.born_date:5);
  end;
end;
 
function to_arr: groupe;
var
  r: anketa;
  i: integer;
  g: groupe;
begin
  seek(f, 0);
  i := 1;
  while not eof(f) do 
  begin
    read(f, r);
    g[i] := r;
    i := i + 1;
  end;
  to_arr := g;
end;
 
procedure del_2(arr: groupe);
var
  i, j: integer;
  copy: groupe;
begin
  j := 1;
  for i := 1 to ten do 
  begin
    if (arr[i].mark1) and (arr[i].mark2) > 2 then begin
      copy[j] := arr[i];
      j := j + 1;
    end;    
  end;
  rewrite(f);
  seek(f, 0);
  for i := 1 to j - 1 do  
    write(f, copy[i]);
end;
 
procedure print_name(arr: groupe);
var
  i: integer;
  sr: real;
begin
  sr := 0;
  for i := 1 to ten do 
  begin
    with arr[i] do 
    begin
      sr := (mark1 + mark2) / 2;
      writeln(name:10, ' ', sr:3);
    end;
  end;
end;
 
procedure print_2005;
var
  r: anketa;
begin
  seek(f, 0);
  while not eof(f) do 
  begin
    read(f, r);
    if r.born_date 2005 then writeln(r.name:10, r.born_date:5);
  end;
end;
 
 
begin
  clrscr;
      assign(f, 'data.dat');
  writeln('Create new file (data.dat) ?');
  writeln('1 - YES');
  writeln('2 - NO');
  readln(choice);
  if choice = 1 then
  rewrite(f)
  else
  begin
    reset(f);
  end;
  
  while true do 
  begin
    writeln();
    WriteLn('Menu':10);
    WriteLn('1. Add new student.');
    WriteLn('2. Print all records.');
    WriteLn('3. Print average marks.');
    WriteLn('4. Show students from 2005 year.');
    WriteLn('5. Delete students with 2.');
    WriteLn('6. Rewrite file.');
    WriteLn('0. Exit');
    
    readln(choice);
    
    if choice = 1 then fill();
    
    if choice = 2 then print_file();
    
    if choice = 3 then print_name(to_arr);
    
    if choice = 4 then print_2005();
    
    if choice = 5 then del_2(to_arr);
    
    if choice = 6 then rewrite(f);
    
    if choice = 0 then break;         
  end;    
  close(f);
end.