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

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

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

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


Новичок
*

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

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


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

Багаж пассажира характеризуется количеством и общим весом вещей. Создать файл f, содержащий информацию о багаже n пассажиров. Информацию о багаже вывести на экран в виде таблицы. Выяснить пассажира багаж которого состоит из 1-го чемодана весом менее z килограмм.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
CormiX
сообщение 23.03.2010 18:23
Сообщение #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 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 24.03.2010 9:18
Сообщение #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я - 24.03.2010 9:19
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
CormiX
сообщение 24.03.2010 19:08
Сообщение #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 - 24.03.2010 19:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.03.2010 19:15
Сообщение #5


Гость






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


Новичок
*

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

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


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


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

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

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


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

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

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


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


Новичок
*

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

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


Спасибо всем! Сделал!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
CormiX
сообщение 25.03.2010 19:04
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 26.03.2010 9:09
Сообщение #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

 



- Текстовая версия 20.07.2025 2:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"