Исправить ошибки в программе о читателях - Turbo Pascal
Формулировка задачи:
- program biblioteka1;
- const
- n = 5;
- type
- Date=record
- Fam: string[20];
- DatZ :boolean;
- DatV:integer;
- end;
- var j:integer;
- d: array[1..5] of date;
- begin
- writeln('Заполните данные о читателях: ');
- for j:=1 to n do
- begin
- writeln('Фамилия: ');
- readln(d[j].Fam);
- writeln('Дата заказа(дд.мм.гг): ');
- readln(d[j].DatZ);
- writeln('Дата выдачи(дд.мм.гг): ');
- readln(d[j].DatV);
- end;
- writeln(' Кто чаще всего берет книги: ');
- for j:=1 to n do
- if (d[j].DatV ) then write(d[j].Fam, ' ');
- writeln;
- writeln('Кому выдали книги 15.09.13: ');
- for j:=1 to n do
- if (d[j].DatV) then write(d[j].Fam, ' ');
- writeln;
- writeln(' Cколько человек заказывали книги 25.04.13: ');
- for j:=1 to n do
- if (d[j].DatZ ) then write(d[j].Fam, ' ');
- writeln;
- end.
Решение задачи: «Исправить ошибки в программе о читателях»
- program biblioteka1;
- const
- n = 5;
- type
- tStr=string[20];
- tData=record
- d,m,y:integer;
- end;
- tUser=record
- Fam:tStr;
- DatZ,DatV:tData;
- end;
- var
- i,j:integer;
- d:array[1..n] of tUser;
- e:array[1..n] of integer;
- procedure readData(var a:tData);
- var
- b:string;
- begin
- readln(b);
- a.d:=(ord(b[1])-ord('0'))*10+ord(b[2])-ord('0');
- a.m:=(ord(b[4])-ord('0'))*10+ord(b[5])-ord('0');
- a.y:=(ord(b[7])-ord('0'))*10+ord(b[8])-ord('0');
- end;
- begin
- writeln('Заполните данные о читателях: ');
- for j:=1 to n do
- begin
- write('Фамилия: ');
- readln(d[j].Fam);
- write('Дата заказа(дд.мм.гг): ');
- readData(d[j].DatZ);
- write('Дата выдачи(дд.мм.гг): ');
- readData(d[j].DatV);
- end;
- {}
- writeln('самый маленький срок, за который нашли книгу');
- for j:=1 to n do
- begin
- e[j]:=d[j].DatV.y-d[j].DatZ.y;
- if d[j].DatV.m<d[j].DatZ.m then e[j]:= e[j]+30*12;
- e[j]:=e[j]+d[j].DatV.y-d[j].DatZ.y;
- if d[j].DatV.d<d[j].DatZ.d then e[j]:= e[j]+30;
- e[j]:=e[j]+d[j].DatV.d-d[j].DatZ.d
- end;
- i:=1;
- for j:=2 to n do
- if e[i]>e[j]then i:=j;
- writeln('Result:',e[i],'days');
- {}
- writeln('сколько заказов было не удовлетворено');
- i:=0;
- for j:=1 to n do
- if d[j].DatV.d=0 then inc(i);
- writeln('Result:',i,' ');
- {}
- writeln(' Кто чаще всего берет книги: ');
- for i:=1 to n do
- e[i]:=0;
- for j:=1 to n-1 do
- for i:=j+1 to n do
- if(d[j].Fam=d[i].Fam) then
- begin
- inc(e[j]);
- e[i]:=-n
- end;
- i:=1;
- for j:=2 to n do
- if e[i]<e[j] then i:=j;
- writeln(d[i].Fam);
- writeln;
- {}
- writeln('Кому выдали книги 15.09.13: ');
- for j:=1 to n do
- if(d[j].DatZ.d=15)and(d[j].DatZ.m=9)and(d[j].DatZ.d=13)then
- write(d[j].Fam, ' ');
- writeln;
- {}
- writeln(' Cколько человек заказывали книги 25.04.13: ');
- i:=0;
- for j:=1 to n do
- if(d[j].DatZ.d=25)and(d[j].DatZ.m=4)and(d[j].DatZ.d=13)then inc(i);
- { write(d[j].Fam, ' ');}
- writeln('Result:',i);
- end.
Объяснение кода листинга программы
program biblioteka1; const n = 5; type tStr=string[20]; tData=record d,m,y:integer; end; tUser=record Fam:tStr; DatZ,DatV:tData; end; var i,j:integer; d:array[1..n] of tUser; e:array[1..n] of integer; procedure readData(var a:tData); var b:string; begin readln(b); a.d:=(ord(b[1])-ord('0'))10+ord(b[2])-ord('0'); a.m:=(ord(b[4])-ord('0'))10+ord(b[5])-ord('0'); a.y:=(ord(b[7])-ord('0'))10+ord(b[8])-ord('0'); end; begin writeln('Заполните данные о читателях: '); for j:=1 to n do begin write('Фамилия: '); readln(d[j].Fam); write('Дата заказа(дд.мм.гг): '); readData(d[j].DatZ); write('Дата выдачи(дд.мм.гг): '); readData(d[j].DatV); end; {} writeln('самый маленький срок, за который нашли книгу'); for j:=1 to n do begin e[j]:=d[j].DatV.y-d[j].DatZ.y; if d[j].DatV.m<d[j].DatZ.m then e[j]:= e[j]+3012; e[j]:=e[j]+d[j].DatV.y-d[j].DatZ.y; if d[j].DatV.d<d[j].DatZ.d then e[j]:= e[j]+30; e[j]:=e[j]+d[j].DatV.d-d[j].DatZ.d end; i:=1; for j:=2 to n do if e[i]>e[j]then i:=j; writeln('Result:',e[i],'days'); {} writeln('сколько заказов было не удовлетворено'); i:=0; for j:=1 to n do if d[j].DatV.d=0 then inc(i); writeln('Result:',i,' '); {} writeln(' Кто чаще всего берет книги: '); for i:=1 to n do e[i]:=0; for j:=1 to n-1 do for i:=j+1 to n do if(d[j].Fam=d[i].Fam) then begin inc(e[j]); e[i]:=-n end; i:=1; for j:=2 to n do if e[i]<e[j] then i:=j; writeln(d[i].Fam); writeln; {} writeln('Кому выдали книги 15.09.13: '); for j:=1 to n do if(d[j].DatZ.d=15)and(d[j].DatZ.m=9)and(d[j].DatZ.d=13)then write(d[j].Fam, ' '); writeln; {} writeln(' Cколько человек заказывали книги 25.04.13: '); i:=0; for j:=1 to n do if(d[j].DatZ.d=25)and(d[j].DatZ.m=4)and(d[j].DatZ.d=13)then inc(i); write(d[j].Fam, ' '); writeln('Result:',i); end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д