Здравствуйте, помогите пожалуйста с написанием программы. я уже запуталась в файлах. Над прошлой программой с записями сидела очень долго,но написала сама, с файлами без вашей помощи обойтись не могу.
Условие задачи прошлой лаб. такое:
1. Сформировать массив записей с полями улица, номер дома, квартира, кол-во жильцов и вывести его на экран в виде таблицы.
2. Найти и вывести на экран кол-во жильцов по заданному пользователем адресу.
3.Сформировать новый массив не включающий поля "улица".
4.Вывести новый массив в виде таблицы.
в этой лаб. условие не меняестся, только надо все это сделать через файлы и добавить сортировку по чему либо.
Вот, что у меня получилось, программа запускается, но ничего не делает и тут не хватает сортировки. Заранее извиняюсь за безобразие в программе.
program zapis;
uses crt;
const
n=10;
type
adres=record
street:string;
dom,kv,zilci:integer;
end;
ff=file of adres;
mas_adres=array [1..n] of adres;
mas_nov=array [1..n] of adres;
var
f:ff;
f1:file of real;
z:adres;
m:mas_adres;
ma:mas_nov;
i,t,p:integer;
k:word;
v:boolean;
st,sp:string;
Procedure vvod(var zt:adres;stt:string);
begin
for i:=1 to 2 do
with m[i] do
begin
street:=stt;
write('street ');
readln(street);
write('# doma ');
readln(dom);
write('# kvartiri ');
readln(kv);
write('kol-vo zilcov ');
readln(zilci);
end;
end;
Procedure poisk(nt:byte;mt:mas_adres);
var
i:byte;
st,st1:string;
begin
write('fileadres');
readln(st1);
assign(f1,st1);
rewrite(f1);
v:=true;
writeln('st');
readln(st);
for i:=1to 2 do
if mt[i].street=st
then
if v
then
begin
writeln('kolvo zilcov');
with mt[i] do
writeln(zilci:4);
v:=false;
end
else
with mt[i] do
writeln(zilci:10);
close(f1);
end;
{for i:=1 to 2 do
with zt do
begin
readln(street);
readln(dom);
readln(kv);
for i:=1 to 2 do
if ((zt.street=m[i].street) and (zt.dom=m[i].dom)) and (zt.kv=m[i].kv)
then
begin
write('Kol-vo zilcov: ');
write(m[i].zilci);
writeln;
v:=true;
end;
if v=false then
writeln('takogo adresa ne naideno')
end;
end;}
begin
clrscr;
writeln('viberite 1,2,3,4,5 ');
readln(t);
case t of
1:begin
write('file street');
readln(st);
assign(f,st);
rewrite(f);
p:=0;
repeat
writeln('street or enter');
readln(sp);
if sp<>''
then
begin
p:=p+1;
vvod(m[p],sp);
write(f,m[p]);
end;
until sp='';
close(f);
end;
2:begin
repeat
writeln('filestreet or enter');
readln(st);
if st<>''
then
begin
assign(f,st);
{$I-}
reset(f);
k:=ioresult;
if k<>0
then
writeln('error');
{$I-}
end;
until (st='') or (k=0);
p:=0;
while not eof (f) do
begin
p:=p+1;
read(f,m[p]);
end;
close(f);
end;
3:begin
clrscr;
assign(f,st);
reset(f);
write('--------------------------------------------------');
writeln;
write('| street | #doma | #kv | kol-vo zilcov |');
for i:=1 to 2 do
with m[i] do
begin
writeln;
write(street:12,' ');
write(dom:6, ' ' ,kv:9, ' ', zilci:8, ' ');
writeln;
end;
write('---------------------------------------------------');
writeln;
close(f);
end;
{ 4:sort; }
5:poisk(n,m)
end;
{Procedure novmas(var zet:mas_adres; var zit:mas_nov);
var
i:integer;
begin
for i:=1 to 2 do
begin
ma[i].dom:=m[i].dom;
ma[i].kv:=m[i].kv;
ma[i].zilci:=m[i].zilci;
end;
end;
Procedure novmasa(var zit:mas_nov);
begin
write('-------------------------------------');
writeln;
write('| #doma | #kv | kol-vo zilcov |');
for i:=1 to 2 do
with ma[i] do
begin
writeln;
write(dom:6, ' ' ,kv:8, ' ', zilci:8, ' ');
writeln;
end;
write('-------------------------------------');
writeln;
end;}
{begin
clrscr;
{vvod(z,st);}
{vivod(z);
poisk(n,m);
{for i:=1 to 2 do
novmas(m,ma);
novmasa(ma);
readln; }
end.
Ну подскажите хоть что-нибудь, пожалуйста(((
а что ты хочешь чтобы подсказали?
program files;
uses crt;
type
adres=record
street:string;
dom,kv,zilci:integer;
end;
mas_adres=array [1..10] of adres;
mas_nov=array [1..10] of adres;
ff=file of adres;
var
z:adres;
m:mas_adres;
ma:mas_nov;
i,t:integer;
v:boolean;
f:ff;
s:string;
n:byte;
Procedure vvod(var ft:ff);
var
st:string;
zt:adres;
begin
writeln('vvedite filename');
readln(st);
assign(ft,st);
rewrite(ft);
repeat
write('vvedite street or nagmite enter ');
readln(st);
if st<>'' then
begin
with zt do
begin
street:=st;
write('# doma ');
readln(dom);
write('# kvartiri ');
readln(kv);
write('kol-vo zilcov ');
readln(zilci);
end;
write(ft,zt);
end;
until st='';
close(ft);
end;
Procedure vivod(var ft:ff);
begin
reset(ft);
while not eof(ft) do
begin
read(ft,m[i]);
clrscr;
write('--------------------------------------------------');
writeln;
write('| street | #doma | #kv | kol-vo zilcov |');
for i:=1 to 2 do
with m[i] do
begin
writeln;
write(street:12,' ');
write(dom:6, ' ' ,kv:9, ' ', zilci:8, ' ');
writeln;
end;
write('---------------------------------------------------');
writeln;
end;
close(ft);
end;
Procedure poisk(var ft:ff; zt:adres);
begin
reset(ft);
writeln('Vvedite street, dom, kv cheres enter');
for i:=1 to 2 do
with m[i] do
begin
readln(street);
readln(dom);
readln(kv);
while not eof(ft) do
begin
read(ft,m[i]);
for i:=1 to 2 do
if ((zt.street=m[i].street) and (zt.dom=m[i].dom)) and (zt.kv=m[i].kv)
then
begin
write('Kol-vo zilcov: ');
write(m[i].zilci);
writeln;
v:=true;
end;
if v=false then
writeln('takogo adresa ne naideno')
end;
end;
close(ft);
readln;
end;
Procedure novmas(var ft:ff;var zet:mas_adres; var zit:mas_nov);
begin
reset(ft);
for i:=1 to 2 do
begin
ma[i].dom:=m[i].dom;
ma[i].kv:=m[i].kv;
ma[i].zilci:=m[i].zilci;
end;
close(ft);
end;
Procedure novmasa(var ft:ff;var zit:mas_nov);
begin
reset(ft);
write('-------------------------------------');
writeln;
write('| #doma | #kv | kol-vo zilcov |');
for i:=1 to 2 do
with ma[i] do
begin
writeln;
write(dom:6, ' ' ,kv:8, ' ', zilci:8, ' ');
writeln;
end;
write('-------------------------------------');
writeln;
close(ft);
end;
begin
clrscr;
vvod(f);
clrscr;
vivod(f);
poisk(f,z);
for i:=1 to 2 do
novmas(f,m,ma);
novmasa(f,ma);
readln;
end.
М | используй тэги code=pas и /code, пожалуйста |
Procedure poisk(var ft:ff; zt:adres);
begin
reset(ft);
writeln('Vvedite street, dom, kv cheres enter');
for i:=1 to 2 do with m[i] do begin { <-- here }
readln(street);
readln(dom);
readln(kv);
while not eof(ft) do begin
read(ft,m[i]);
for i:=1 to 2 do if { <-- and here }
(zt.street=m[i].street) and
(zt.dom=m[i].dom) and
(zt.kv=m[i].kv)
then begin
write('Kol-vo zilcov: ');
write(m[i].zilci);
writeln;
v:=true
end;
if v=false then
writeln('takogo adresa ne naideno')
end;
end;
close(ft);
readln;
end;
Спасибо, ошибку исправила. Но у меня еще есть вопрос, почему в процедуре вывода у меня вместо введенного мною первого адреса на экране высвечиваются нули и еще не работает процедура процедура создания и вывода нового массива на экран.
Впринципи, я только убрала в поиске лишний счетчик, вот.
Oй , забыла зайти на форум(пред. сообщение от меня))))