Багаж пассажира характеризуется количеством и общим весом вещей. Создать файл f, содержащий информацию о багаже n пассажиров. Информацию о багаже вывести на экран в виде таблицы. Выяснить пассажира багаж которого состоит из 1-го чемодана весом менее z килограмм.
CormiX
23.03.2010 18:23
Ну вот я кое что сделал, но как видите это еще нужно внести в файл и сделать так чтоб инфо о пасажирах виводилась на экран в виде таблицы.
program avia; uses crt; type dani=record imya:string; vaga_re4ej:byte; kiljkistj_re4ej:integer; end; pasazhur=array [0..100] of dani; var vaga_re4ej:byte; Q:pasazhur; k:byte; f:file of dani; n,m,i,j,z :integer; begin textcolor(yellow); textbackground(black); clrscr; k:=0; writeln('vveditj kiljkistj pasagyriv'); readln(n); for i:=1 to n do with q[i] do begin writeln('Vveditj dani pro ',i,'-go pasazhura'); writeln('Imja'); readln(imya); writeln('Kiljkistj re4ej'); readln(kiljkistj_re4ej); writeln('Vaga'); readln(vaga_re4ej); end;
writeln('vvedu vagu valizy'); readln(m); for i:=1 to n do if q[i].vaga_re4ej>m then writeln( q[i].imya) ;
readln;
end.
Ozzя
24.03.2010 9:18
Цитата
нужно внести в файл
Assign(f,'data.dat'); ReWrite(f); for i:=1 to n do begin with q[i] do begin writeln('Vveditj dani pro ',i,'-go pasazhura'); writeln('Imja'); readln(imya); writeln('Kiljkistj re4ej'); readln(kiljkistj_re4ej); writeln('Vaga'); readln(vaga_re4ej); end; write(f,q[i]); end; close(f);
CormiX
24.03.2010 19:08
Disc read error....:
program Sumki; uses crt; type dani=record imya:string; vaga_re4ej:byte; kiljkistj_re4ej:integer; end; pasazhur=array [0..100] of dani; var vaga_re4ej:byte; Q:pasazhur; f:file of dani; n,m,i,j,z :integer; BEGIN textcolor(yellow); textbackground(black); clrscr; assign(f,'data.dat'); rewrite(f); for i:=1 to n do begin with q[i] do begin writeln('Vveditj dani pro ',i,'-go pasazhura'); writeln('Imja'); readln(imya); writeln('Kiljkistj re4ej'); readln(kiljkistj_re4ej); writeln('Vaga'); readln(vaga_re4ej); end; write(f,q[i]); end; reset(f); read(f,q[i]); writeln('Vvedu vagu re4ey jaku tobi potribno znaty:'); readln(m); for i:=1 to n do if q[i].vaga_re4ej=m then writeln( q[i].imya); readln; repeat until keypressed; END.
volvo
24.03.2010 19:15
У тебя элементарно N = 0, файл остается пустым, ты его переоткрываешь и хочешь что-то прочесть. И что будет? Ошибка, как положено...
CormiX
24.03.2010 21:44
Аммм....А что надос сделать? Присвоить N значение и записать в файл?
Lapp
24.03.2010 23:06
Цитата(CormiX @ 24.03.2010 21:44)
Аммм....А что надос сделать? Присвоить N значение и записать в файл?
Это на твое усмотрение. Можешь, например, запрашивать количество пассажиров перед вводом данных. Или же можно определять конец ввода, например, по пустому имени. В последнем случае FOR следует заменить на REPEAT, а n тогда просто не нужно (при вводе).
Еще у тебя ошибка при чтении: ты считываешь только одну запись. Следует читать в цикле while not EoF(f) do , тогда прочтешь все записи. В процессе чтения увеличивай n, начав с 0.
И еще: дай пользователю возможность выбрать, что он будет делать: вводить данные в файл или читать файл и обрабатывать данные. Иначе выходит, что программа действительно создает файл и оставляет его на диске, но потом при новом запуске СРАЗУ его стирает. Где смысл?..
CormiX
25.03.2010 18:15
Спасибо всем! Сделал!
CormiX
25.03.2010 19:04
Простите за беспокойство но мне б еще с табличкой помочь. Я сделал таблицу, ну не совсем с помошью gotoxy. А теперь не знаю как запустить цыкл, чтоб в таблицу входил не тролько 1-ый пассажир.
program Operation Valiza; uses crt; type dani=record imya:string; vaga_re4ej:byte; kiljkistj_re4ej:integer; end; pasazhur=array [0..100] of dani; var vaga_re4ej:byte; Q:pasazhur; f:file of dani; n,m,i,j,z :integer; BEGIN textcolor(yellow); textbackground(black); clrscr; writeln('Vveditj kiljkistj pasagiriv:'); readln(n); assign(f,'data.dat'); rewrite(f); for i:=1 to n do with q[i] do begin writeln('Vveditj dani pro ',i,'-go pasazhura'); writeln('Imja:'); readln(imya); writeln('Kiljkistj valiz:'); readln(kiljkistj_re4ej); writeln('Vaga:'); readln(vaga_re4ej); write(f,q[i]); end; reset(f); while not EoF(f) do begin read(f,q[i]); end; for i:=1 to n do begin textcolor(0); textbackground(5); clrscr; gotoxy(32,1); writeln('Tablica Informacji:'); gotoxy(20,4); writeln('Imja:'); gotoxy(37,4); writeln('Valizy:'); gotoxy(54,4); writeln('Vaga Valiz:'); textcolor(white); gotoxy(20,i*+4+6); write(q[i].imya); gotoxy(37,i*+4+6); write(q[i].kiljkistj_re4ej); gotoxy(54,i*+4+6); write(q[i].vaga_re4ej); repeat until keypressed; end; begin clrscr; writeln('Vvedu vagu re4ey jaku tobi potribno znaty:'); readln(m); for i:=1 to n do if q[i].vaga_re4ej=m then writeln(q[i].imya); readln; end; END.
Lapp
26.03.2010 9:09
Цитата(CormiX @ 25.03.2010 19:04)
Простите за беспокойство но мне б еще с табличкой помочь. Я сделал таблицу, ну не совсем с помошью gotoxy. А теперь не знаю как запустить цыкл, чтоб в таблицу входил не тролько 1-ый пассажир.
Беспокойства нет никакого, для того и форум )). Послушай, ты чересчур увлекся модулем CRT с его малиновыми цветами, позиционным выводом и - главное! - очисткой экрана. Тебе она ТАК понравилась, что ты как только что-то выведешь - так сразу и стираешь! Зачем ты вставил clrscr в цикл вывода? Убери.
Я тебе больше скажу, только ты не обижайся . Забудь пока (на время) вообще про всякие TextColor и GoToXY. Позаботься о ЛОГИКЕ программы. Красивости (если не расхочется) будешь наводить потом. CRT - это ЗЛО, и зло немалое.. За этими глупостями ты не видишь главного. Я тебе в прошлый писал, что НЕТ СМЫСЛА записывать файл, если ты его СТИРАЕШЬ СРАЗУ после входа в программу. Ну, сам посуди - кому такой файл нужен?? Но ты не счел нужным обратить внимание на мои слова ((.
Я тебе набросал образец, как приблизительно надо делать. К сожалению, совсем без CRT обойтись не удается, поскольку в этом модуле по какой-то странной причине еще и управление клавиатурой. Но я использую только ReadKey из него, обрати на это внимание. Сначала тебе, может быть, покажется, что это не очень красиво, но потом (немного поигравши с этой простейшей прогой) ты поймешь, что так гораздо лучше. Стирать экран нецелессобразно иногда, лучше его проматывать. Представь себе, что у тебя число пассажиров превышает количество строк на экране - что ты будешь делать? Если ты сейчас ответил "листать постранично", то, извини, с того и следует начинать, что делать всю эту кухню. И за ней ты забудешь про основную задачу.. А тем не менее, простейшими средствами типа Write и WriteLn можно добиться очень неплохих результатов. И обычная промотка окна командной строки позволит просмотреть таблицу любого размера.
Постарайся разобраться с моим кодом. Если что-то неясно - спрашивай. Тут есть начальная функциональность. Что еще нужно - можно добавить.
И еще: обрати МАКСИМАЛЬНОЕ ВНИМАНИЕ на форматирование (сдвиги). Вникни в то, как у меня сделано - там КАЖДАЯ строчка и каждое слово на СВОЕМ месте. Будешь соблюдать эти простые правила - будешь находить свои ошибки (типа той же очистки экрана в цикле) в несколько раз быстрее.
type tPassazhir=record imya: string; vaga: byte; kilkist: integer; end;
var f: file of tPassazhir; pass: array [1..100] of tPassazhir; n: integer;
procedure AddRecord; BEGIN Inc(n); with pass[n] do begin write('Imja: '); readln(imya); write('Kiljkistj valiz: '); readln(kilkist); write('Vaga: '); readln(vaga); end end;
procedure DelRecord; var i: integer; begin Write('Vvedite nomer zapisi dlya udaleniya (0 dlya otkaza): '); ReadLn(i); if i>0 then begin for i:=i to n-1 do pass[i]:=pass[i+1]; Dec(n); WriteLn('Zapis udalena') end end;
procedure ClearBase; begin n:=0; WriteLn('Vse zapisi udaleny'); end;
function IStr(i: integer): string; begin Str(i,IStr) end;
function FillStr(c: char; i: integer): string; var s: string; begin s:=''; while Length(s)<i do Insert(c,s,1); FillStr:=s end;
procedure FillStr(c: char; s1,s2,s3,s4: string); begin WriteLn(c,s1:c1,c,s2:c2,c,s3:c3,c,s4:c4) end;
function CenterStr(s: string; l: integer):string; begin CenterStr:= s+FillStr(' ',(l-Length(s))div 2) end;
procedure ShowBase; var i: integer; begin WriteLn; WriteLn('+',FillStr('=',c1+c2+c3+c4+3),'+'); WriteLn('|',CenterStr('Baza Dannyh Bagazha Passazhirov',c1+c2+c3+c4+3):c1+c2+c3+c4+3,'|'); WriteLn('+',FillStr('-',c1+c2+c3+c4+3),'+'); Write('|',CenterStr('Nomer',c1):c1); Write('|',CenterStr('Imja',c2):c2); Write('|',CenterStr('Valizy',c3):c3); Write('|',CenterStr('Vaga Valiz, kg',c4):c4); WriteLn('|'); Write('|',FillStr('-',c1)); Write('+',FillStr('-',c2)); Write('+',FillStr('-',c3)); Write('+',FillStr('-',c4)); WriteLn('|'); for i:=1 to n do with pass[i] do begin Write('|',CenterStr(IStr(i),c1):c1); Write('|',CenterStr(imya,c2):c2); Write('|',CenterStr(IStr(kilkist),c3):c3); Write('|',CenterStr(IStr(vaga),c4):c4); WriteLn('|'); end; WriteLn('+',FillStr('-',c1+c2+c3+c4+3),'+'); end;
procedure ReadFile; begin assign(f,FileName); ReSet(f); while not EoF(f) do begin Inc(n); read(f,pass[n]) end; Close(f); WriteLn('File '+FileName+' prochitan'); end;
procedure WriteFile; var i: integer; begin assign(f,Filename); rewrite(f); for i:=1 to n do write(f,pass[i]); Close(f); WriteLn('File '+FileName+' zapisan'); end;