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

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

Форум «Всё о Паскале» _ Задачи _ Процедура поиска

Автор: DLF 27.12.2007 13:39

Слепил прогу.В ней вводятся фамилия,имя,отчество студента,его порядковый номер и всё сохраняется в текстовый файл.Вот только не могу написать процедурку,с помощью которой осуществляется поиск студента по его порядковому номеру...т.е.вводишь номер студента и прога выдаёт те его фам.имя.отч.Помогите плиз.=))Вот сама программа:


uses
SysUtils;

type mas=array[1..100] of string;

var
f,f1:textfile;
txt,way,filename,fullname,fn1,fullname2,filename2:string;
act1:char;
kol:integer;

procedure zapis(fname:string);
var f1:textfile;
surname,name,ochestvo,nomer:string;
begin
assign(f1,fname);
append(f1);
writeln('Enter surname');
readln(surname);
writeln('Enter name');
readln(name);
writeln('Enter ochestvo');
readln(ochestvo);
writeln('Enter nomer');
readln(nomer);
write(f1,surname+' ');
write(f1,name+' ');
write(f1,ochestvo+' ');
writeln(f1,nomer+' ');
close(f1);
end;

procedure sortirovka(fname:string;n:integer);
var f1:textfile;
i,a,j:integer;
t,str:string;
k,f:mas;
begin
i:=1;
assign(f1,fname);
reset(f1);
repeat
readln(f1,str);
k[i]:=str;
f[i]:=str[1];
i:=i+1;
until eof(f1);
close(f1);
for a:=1 to n do
begin
for j:=1 to n-a do
begin
if (f[j]>f[j+1]) then
begin
t:=k[j];
k[j]:=k[j+1];
k[j+1]:=t;
end;
end;
end;
assign(f1,fname);
rewrite(f1);
for i:=1 to n do
writeln(f1,k[i]);
close(f1);
end;

procedure vivod(fname:string);
var f1:textfile;
str:string;
begin
assign(f1,fname);
reset(f1);
repeat
readln(f1,str);
writeln(str);
until eof(f1);
close(f1);
end;

procedure vivod2(fname1,fname2:string);
var f1,f2:textfile;
str,prob:string;
i,o,j,k:integer;
r:mas;
begin
prob:=' ';
o:=1;
k:=1;
assign(f1,fname1);
reset(f1);
repeat
readln(f1,str);
for i:=1 to length(str) do
if str[i]<>' 'then
r[o]:=r[o]+str[i]
else
if str[i+1]<>' ' then
o:=o+1;
until eof(f1);
assign(f2,fname2);
rewrite(f2);
close(f2);
append(f2);
for j:=1 to (o div 4) do
begin
k:=4*j;
write(f2,r[k]);
write(f2,prob);
write(f2,r[K-1]);
write(f2,prob);
write(f2,r[k-2]);
write(f2,prob);
write(f2,r[k-3]);
writeln(f2,prob);
end;
close(f2);
vivod(fname2);
end;
begin
kol:=0;
txt:='.txt';
way:='E:\For files\';
writeln('Vvedite imya faila kuda vi xotite soxranitb vash spisok');
readln(filename);
fullname:=way+filename+txt;
assign(f,fullname);
rewrite(f);
close(f);
repeat
writeln(' "1"-vvod novogo elementa');
writeln;
writeln(' "2"-pokazatb spisok');
writeln;
writeln(' "3"-pokazatb spisok v novom formate');
writeln;
writeln(' "q"-vihod ');
writeln;
write('Viberite deistvie: ');
writeln;
readln(act1);
case act1 of
'1':begin
zapis(fullname);
kol:=kol+1;
end;
'2':begin
sortirovka(fullname,kol);
writeln('Familiya',' ','Imya',' ','Otchestvo',' ','Nomer');
vivod(fullname);
end;
'3':begin
writeln('Enter the name of the file where you want to save your new spisok');
readln(filename2);
fullname2:=way+filename2+txt;
{assign(f1,) }
writeln('Nomer',' ','Familiya',' ','Imya',' ','Otchestvo');
vivod2(fullname,fullname2)
end;
'q':exit;
end;
until false;
end.


Автор: Ozzя 27.12.2007 14:12

Я бы так сделал:

writeln('Введите номер записи');
readln(n_zapisi);
while not eof(f1) do
begin
readLn(f1,surname);
readLn(f1,name);
readLn(f1,ochestvo);
readln(f1,nomer);
if nomer=n_zapisi then
begin
write(surname+' ');
write(,name+' ');
write(ochestvo);
WriteLn;
end;
end;


Единственное, в программе поменять ввод данных. Чтобы избежать парсинга вводимиых данных.
  
writeLn(f1,surname+' ');
writeLn(f1,name+' ');
writeLn(f1,ochestvo+' ');