Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ С текстового в типизированный

Автор: Feiqin 27.02.2007 1:32

Вот у меня есть задача сделанная через текстовый файл, но мне ёё надо сделать для работы с типизированным файлом, и переделать у меня не получается если не трудно накидайте хотябы сам код считывания с типизированного файла. Вот сама задача: Дан файл Assort, содержащий сведения об игрушках: указывается название игрушки, её стоимость в рублях и возрастные границы (например игрушка может предназначаться для детей от 2 до 5 лет)
а)Получить название игрушек, цена которых не превышает 140 руб и которые подходят детям 5 лет б)определить стоимость свмого дорогого конструктора в)напечатать название наиболее дорогих игрушек (цена которых отличается от цены самой дорогой игрушки не более чем на 50 рублей) г)получить названия игрушек, которые подходят детям как четырех так и десяти лет.


type
aaa = record
naz: string[30];
cena: real;
age_1,age_2: byte;
end;
var
maxp,max,max2:real;
v:byte;
i,n:byte;
mas: array[1 .. 255] of aaa;
s:string;
f:text;
z:integer;
begin
assign(f,'c:\data.txt');
reset(f);
maxp:=0; max:=0;
repeat
n:=n+1;
i:=i+1;
readln(f,mas[i].naz);
readln(f,s);
val(s,mas[i].cena,z);
if mas[i].cena>maxp then maxp:=mas[i].cena; //samaya dorogaya igrushka
readln(f,s);
val(s,mas[i].age_1,z);
readln(f,s);
val(s,mas[i].age_2,z);
until eof(f);
close(f);
writeln('-----------------------------------');
writeln('cena<140 i po vozrastu=5');
writeln('NaZvaNiE : ');
for i:=1 to n do begin
if (mas[i].cena<140)and(mas[i].age_1>5) then begin
writeln(mas[i].naz);
end;
end;
writeln('-----------------------------------');
for i:=1 to n do
begin
if (mas[i].naz='constructor') then
if mas[i].cena>max then max:=mas[i].cena;
end;

writeln('Samii dorogoy constructor: ',max:5:1);
writeln('-----------------------------------');
max2:=maxp-50;
writeln('Samie dorogie igrushki: ');
for i:=1 to n do
begin
if mas[i].cena>max2 then writeln(mas[i].naz);
end;
writeln('-----------------------------------');
writeln('Podhodyat detyam 4 i 10-ti let :');
for i:=1 to n do
begin
if (mas[i].age_1>=4)and(mas[i].age_2<=10) then writeln(mas[i].naz);
end;
writeln('-----------------------------------');
readln;
end.


Вид файла Assort:
constructor
91
4
10
parovoz
30
6
20
velosiped
110
10
99
constructor
95
9
20
kubik
10
1
10
myach
70
6
90

Автор: volvo 27.02.2007 1:37

Вот решение очень похожей на твою задачи с типизированным файлом:
http://forum.pascal.net.ru/index.php?s=&showtopic=3013&view=findpost&p=26957

Автор: vadim(b) 5.03.2007 19:40

нет, нет. Я под типизированным файлом подразумевал файлы оприделенного типа file of byte, file of char и т.д. Но моя программа сделанна через обычный текстовый файл f:text; соответсвенно эту программу надо переделать так чтобы в место типа text был тип file of (тип). Извиняюсь за тупость :)

Автор: Алена 5.03.2007 19:58

То есть, по ссылке, я так понимаю, ты не ходил... Ну, как знаешь... Надо тебе в первую очередь...

(ПЕРЕделывать на порядок сложнее, чем ДЕЛАТЬ...)

Автор: vadim(b) 5.03.2007 22:50

вот тот отрывок программы по ССЫЛКЕ

var
i,n:byte;
maxp:real;
info: array[1 .. 255] of item;
s:string;

f:text; // МНЕ НАДО чтобы место этой строчки была f:file; !!!!

er:integer;

моя программа и так сделана на подобие этой.

 ! 
Во первый пользуйся тегами, во вторых мы за тебя очень рады, но к чему это сообщение ? Флуд в этом разделе карается очень строго.