Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ 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);

Writeln('Результат:');
Writeln(m[k].FIO);
Writeln(m[k].Vozr);
Writeln(m[k].adress);
Readln
End.

Нужно поправить процедуры и сделать из глобальных переменных - локальные.
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

Автор: Федосеев Павел 5.03.2018 11:10

Что такое Входная и Выходная процедуры?