Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ Структура. Подправить программу
Автор: QweryS 4.03.2018 1:02
Код
Type rec=record FIO:string[30]; Vozr:integer; adress:string[30]; end; mas=array[1..10] of rec;
Var f:text; e1,j,Min_age,k:integer; m:mas;
Procedure inp(var a:mas); var i:integer; begin readln(f,a[i].FIO); readln(f,a[i].Vozr); readln(f,a[i].adress); end; Procedure output(var a:mas); var i:integer; begin Inc(i); writeln(f,a[i].FIO); writeln(f,a[i].Vozr); writeln(f,a[i].adress); end; procedure find (var a:mas); var i:integer; begin Min_age:=100; for i:=j to e1 do With m[j] do if (Vozr<Min_age) and (Vozr>=20) and (Vozr<=30) then begin k:=j; Min_Age:=Vozr; end; end; Begin assign(f,'file.txt'); reset(f); close(f); inp(m,e1); output(m,e1); find(m,e1);
Нужно поправить процедуры и сделать из глобальных переменных - локальные. p.s из списка должен выводиться работник с мин.возрастом, который попадает в диапазон 20-30 лет.file.txt ( 498 байт )
Кол-во скачиваний: 461
Автор: Федосеев Павел 4.03.2018 15:20
Ваша программа даже не компилируется.
Код
tak.pas(20,17) Warning: Local variable "i" does not seem to be initialized tak.pas(29,10) Warning: Local variable "i" does not seem to be initialized tak.pas(53,3) Error: Wrong number of parameters specified for call to "inp" tak.pas(54,3) Error: Wrong number of parameters specified for call to "output" tak.pas(55,3) Error: Wrong number of parameters specified for call to "find" tak.pas(58,11) Warning: Variable "m" does not seem to be initialized tak.pas(63) Fatal: There were 3 errors compiling module, stopping Fatal: Compilation aborted
Так что исправлять нечего.
Автор: QweryS 4.03.2018 17:14
Цитата(Федосеев Павел @ 4.03.2018 15:20)
Ваша программа даже не компилируется.
Код
tak.pas(20,17) Warning: Local variable "i" does not seem to be initialized tak.pas(29,10) Warning: Local variable "i" does not seem to be initialized tak.pas(53,3) Error: Wrong number of parameters specified for call to "inp" tak.pas(54,3) Error: Wrong number of parameters specified for call to "output" tak.pas(55,3) Error: Wrong number of parameters specified for call to "find" tak.pas(58,11) Warning: Variable "m" does not seem to be initialized tak.pas(63) Fatal: There were 3 errors compiling module, stopping Fatal: Compilation aborted
Так что исправлять нечего.
Вот:
Код
Type rec=record FIO:string[30]; Vozr:integer; adress:string[30]; end; mas=array[1..10] of rec;
Var f:text; e1,j,Min_age,k:integer; m:mas;
Procedure inp(var a:mas;var n:integer);{Процедура ввода} var i:integer; begin i:=0; Repeat Inc(i); readln(f,a[i].FIO); readln(f,a[i].Vozr); readln(f,a[i].adress); Until EoF(f); n:=i; end;
Begin assign(f,'file.txt'); reset(f); inp(m,e1); close(f); Min_age:=100; for j:=1 to e1 do With m[j] do if (Vozr<Min_age) and (Vozr>=20) and (Vozr<=30) then begin k:=j; Min_Age:=Vozr; end; Writeln('Result:'); Writeln(m[k].FIO); Writeln(m[k].Vozr); Writeln(m[k].adress); Readln End.
Нужно тут как писалось выше, сделать локальные переменные вместо глобальных и сделать Входную процедуру, Процедуру выхода и поиска(самого элемента из списка). Где выше программа которая не компилируется, это я как пример показал, как должна выглядеть программа, думал ее можно как-то исправить., как-тот так. За ранее спасибо.
Автор: Федосеев Павел 5.03.2018 3:20
Это только исключение глобальных переменных. Остальное - непонятно, т.к. программа что-то делает
program test;
type rec = record FIO: string[30]; Vozr: integer; adress: string[30]; end; mas = array[1..10] of rec;
procedure inp(var a: mas; var n: integer);{Процедура ввода} var f: Text; i: integer; begin Assign(f, 'file.txt'); reset(f); i := 0; repeat Inc(i); readln(f, a[i].FIO); readln(f, a[i].Vozr); readln(f, a[i].adress); until EOF(f); n := i; Close(f); end;
var e1, j, Min_age, k: integer; m: mas; begin inp(m, e1); Min_age := 100; for j := 1 to e1 do with m[j] do if (Vozr < Min_age) and (Vozr >= 20) and (Vozr <= 30) then begin k := j; Min_Age := Vozr; end; Writeln('Result:'); Writeln(m[k].FIO); Writeln(m[k].Vozr); Writeln(m[k].adress); Readln; end.
Автор: QweryS 5.03.2018 4:44
Цитата(Федосеев Павел @ 5.03.2018 3:20)
Это только исключение глобальных переменных. Остальное - непонятно, т.к. программа что-то делает
program test;
type rec = record FIO: string[30]; Vozr: integer; adress: string[30]; end; mas = array[1..10] of rec;
procedure inp(var a: mas; var n: integer);{Процедура ввода} var f: Text; i: integer; begin Assign(f, 'file.txt'); reset(f); i := 0; repeat Inc(i); readln(f, a.FIO); readln(f, a[i].Vozr); readln(f, a[i].adress); until EOF(f); n := i; Close(f); end;
var e1, j, Min_age, k: integer; m: mas; begin inp(m, e1); Min_age := 100; for j := 1 to e1 do with m[j] do if (Vozr < Min_age) and (Vozr >= 20) and (Vozr <= 30) then begin k := j; Min_Age := Vozr; end; Writeln('Result:'); Writeln(m[k].FIO); Writeln(m[k].Vozr); Writeln(m[k].adress); Readln; end.
Большое спасибо! Было бы не плохо если бы вы мне дальше помогли. Я Вам объясню. В файле который я прикрепил, содержаться данные о работниках(ФИО, их адрес, возраст), данная программа ищет работника с [i]Минимальным возрастом в диапазоне от 20 до 30 лет(из этого списка). Вы мне поправили глобальные переменные, но мне еще нужно сделать процедуру на каждое действие, т.е процедура Входная(она уже есть в программе), процедура Выхода и процедура самого вычисления работника с минимальным возрастом,т.е процедура Поиска, я Вам прикрепил код, как это должно выглядеть, но я конечно же сделал что-то не так..надеюсь вы мне поможете исправить данную ошибку. Буду Вам очень благодарен!Program11.pas ( 1.19 килобайт )
Кол-во скачиваний: 447 file.txt ( 498 байт )
Кол-во скачиваний: 445