![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
CormiX |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Очень прошу помочь с решением даной задачи:
Багаж пассажира характеризуется количеством и общим весом вещей. Создать файл f, содержащий информацию о багаже n пассажиров. Информацию о багаже вывести на экран в виде таблицы. Выяснить пассажира багаж которого состоит из 1-го чемодана весом менее z килограмм. |
CormiX |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ну вот я кое что сделал, но как видите это еще нужно внести в файл и сделать так чтоб инфо о пасажирах виводилась на экран в виде таблицы.
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я |
![]()
Сообщение
#3
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 220 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата нужно внести в файл 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);
Сообщение отредактировано: Ozzя - |
CormiX |
![]()
Сообщение
#4
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
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.
Сообщение отредактировано: CormiX - |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
У тебя элементарно N = 0, файл остается пустым, ты его переоткрываешь и хочешь что-то прочесть. И что будет? Ошибка, как положено...
|
CormiX |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Аммм....А что надос сделать? Присвоить N значение и записать в файл?
|
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Аммм....А что надос сделать? Присвоить N значение и записать в файл? Это на твое усмотрение. Можешь, например, запрашивать количество пассажиров перед вводом данных. Или же можно определять конец ввода, например, по пустому имени. В последнем случае FOR следует заменить на REPEAT, а n тогда просто не нужно (при вводе).Еще у тебя ошибка при чтении: ты считываешь только одну запись. Следует читать в цикле while not EoF(f) do , тогда прочтешь все записи. В процессе чтения увеличивай n, начав с 0. И еще: дай пользователю возможность выбрать, что он будет делать: вводить данные в файл или читать файл и обрабатывать данные. Иначе выходит, что программа действительно создает файл и оставляет его на диске, но потом при новом запуске СРАЗУ его стирает. Где смысл?.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
CormiX |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо всем! Сделал!
|
CormiX |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 42 Пол: Мужской Репутация: ![]() ![]() ![]() |
Простите за беспокойство но мне б еще с табличкой помочь.
Я сделал таблицу, ну не совсем с помошью 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 |
![]()
Сообщение
#10
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Простите за беспокойство но мне б еще с табличкой помочь. Беспокойства нет никакого, для того и форум )).Я сделал таблицу, ну не совсем с помошью gotoxy. А теперь не знаю как запустить цыкл, чтоб в таблицу входил не тролько 1-ый пассажир. Послушай, ты чересчур увлекся модулем CRT с его малиновыми цветами, позиционным выводом и - главное! - очисткой экрана. Тебе она ТАК понравилась, что ты как только что-то выведешь - так сразу и стираешь! ![]() Я тебе больше скажу, только ты не обижайся ![]() Я тебе набросал образец, как приблизительно надо делать. К сожалению, совсем без CRT обойтись не удается, поскольку в этом модуле по какой-то странной причине еще и управление клавиатурой. Но я использую только ReadKey из него, обрати на это внимание. Сначала тебе, может быть, покажется, что это не очень красиво, но потом (немного поигравши с этой простейшей прогой) ты поймешь, что так гораздо лучше. Стирать экран нецелессобразно иногда, лучше его проматывать. Представь себе, что у тебя число пассажиров превышает количество строк на экране - что ты будешь делать? Если ты сейчас ответил "листать постранично", то, извини, с того и следует начинать, что делать всю эту кухню. И за ней ты забудешь про основную задачу.. А тем не менее, простейшими средствами типа Write и WriteLn можно добиться очень неплохих результатов. И обычная промотка окна командной строки позволит просмотреть таблицу любого размера. Постарайся разобраться с моим кодом. Если что-то неясно - спрашивай. Тут есть начальная функциональность. Что еще нужно - можно добавить. И еще: обрати МАКСИМАЛЬНОЕ ВНИМАНИЕ на форматирование (сдвиги). Вникни в то, как у меня сделано - там КАЖДАЯ строчка и каждое слово на СВОЕМ месте. Будешь соблюдать эти простые правила - будешь находить свои ошибки (типа той же очистки экрана в цикле) в несколько раз быстрее. Давай, успехов тебе. uses
crt;
const
c1= 10;
c2= 20;
c3= 15;
c4= 20;
Filename= 'passazh.dat';
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;
var
c: char;
begin
n:=0;
repeat
WriteLn('Dobavitj Udalitj Ochistitj Pokazatj Read Write Exit');
c:=ReadKey;
case UpCase(c) of
'D': AddRecord;
'U': DelRecord;
'O': ClearBase;
'P': ShowBase;
'R': ReadFile;
'W': WriteFile;
'E',#27: begin
WriteLn('Rabota s programmoi zavershena');
Exit
end;
else WriteLn('Nevernyi vybor')
end
until false
END.
-------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 22.04.2025 4:11 |