IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Прошу помощи. (тип данных запись), Багаж пасажиров...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Очень прошу помочь с решением даной задачи:

Багаж пассажира характеризуется количеством и общим весом вещей. Создать файл f, содержащий информацию о багаже n пассажиров. Информацию о багаже вывести на экран в виде таблицы. Выяснить пассажира багаж которого состоит из 1-го чемодана весом менее z килограмм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Ну вот я кое что сделал, но как видите это еще нужно внести в файл и сделать так чтоб инфо о пасажирах виводилась на экран в виде таблицы.
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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Цитата
нужно внести в файл

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я -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






У тебя элементарно N = 0, файл остается пустым, ты его переоткрываешь и хочешь что-то прочесть. И что будет? Ошибка, как положено...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Аммм....А что надос сделать? Присвоить N значение и записать в файл?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(CormiX @ 24.03.2010 21:44) *
Аммм....А что надос сделать? Присвоить N значение и записать в файл?
Это на твое усмотрение. Можешь, например, запрашивать количество пассажиров перед вводом данных. Или же можно определять конец ввода, например, по пустому имени. В последнем случае FOR следует заменить на REPEAT, а n тогда просто не нужно (при вводе).

Еще у тебя ошибка при чтении: ты считываешь только одну запись. Следует читать в цикле while not EoF(f) do , тогда прочтешь все записи. В процессе чтения увеличивай n, начав с 0.

И еще: дай пользователю возможность выбрать, что он будет делать: вводить данные в файл или читать файл и обрабатывать данные. Иначе выходит, что программа действительно создает файл и оставляет его на диске, но потом при новом запуске СРАЗУ его стирает. Где смысл?..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Спасибо всем! Сделал!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 42
Пол: Мужской

Репутация: -  0  +


Простите за беспокойство но мне б еще с табличкой помочь.
Я сделал таблицу, ну не совсем с помошью 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(CormiX @ 25.03.2010 19:04) *
Простите за беспокойство но мне б еще с табличкой помочь.
Я сделал таблицу, ну не совсем с помошью gotoxy. А теперь не знаю как запустить цыкл, чтоб в таблицу входил не тролько 1-ый пассажир.
Беспокойства нет никакого, для того и форум )).
Послушай, ты чересчур увлекся модулем CRT с его малиновыми цветами, позиционным выводом и - главное! - очисткой экрана. Тебе она ТАК понравилась, что ты как только что-то выведешь - так сразу и стираешь! smile.gif Зачем ты вставил clrscr в цикл вывода? Убери.

Я тебе больше скажу, только ты не обижайся smile.gif. Забудь пока (на время) вообще про всякие TextColor и GoToXY. Позаботься о ЛОГИКЕ программы. Красивости (если не расхочется) будешь наводить потом. 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© 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.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.04.2024 23:50
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name