вот ещё одну задачу никак осилить не могу
Дано файл Assort , содержащий свединья об игрушках: указывается название игрушки, ее стоимость в рублях и возрастные границы(например, игрушка может предназаначатся для детей от двух до пяти лет)
Определить:
б.) Стоимость самого дорогого конструктора
тут вообще то удобней бы было использовать БД а не файл, хотя мы этого ещё не учили.
&
предположения такие(мысли в слух):
так я вижу структуру:
*************************************** ***********
* ID * Название игрушки * Цена р * Возраст. категория *
*************************************** ***********
* 1 * Конструктор Lego * 100 * 2-5 *
......................................................................................... и т.д
предпологаю сделать так (если так возможно):
загнать всё это в двухмерный массив(или в одномерный но с record'дами) и как то записать в файл... потом считывать с файла и в цыкле по "Цене"
вывести на Дисплей самый догогой продукт!
по дргуму пока ни вижу(глаза закрыты ещё)
----
обясните как это сделать или как по другому поступить ?
лады сейчас попытаюсь написать
ну хоть убей не могу разобратся в чужом коде по ссылке volvo
непойму как происходит процедура считывания с файла...
а что бы понять как оно считывается надо знать как оно туда записывается..
общем так написал эту задачу для начала без файла:
Program z1280b;
uses crt;
const n = 2; {количесво}
{-----------Запись------------}
type
Assort = record
title: string[20];{название}
price: integer;{Цена}
age1,age2: integer;{Возраст}
end;
{-----------end----------------}
var
info: array[1 .. n] of Assort;
f:text;
i,price,max:integer;
Begin
ClrScr;
{Вместо этого занесения в масив, мне надо что бы оно считывало с файла и присвоивало, НО КАК ??? }
info[1].title:='traktor';
info[1].price:=50;
info[1].age1:=7;
info[1].age2:=12;
info[2].title:='Lego';
info[2].price:=77;
info[1].age1:=4;
info[1].age2:=7;
{-------------from file----------------}
{ assign(f,'data.txt'); {file}
reset(f); }
{----------------end-------------------}
{0}
price:=0;
max:=0;
{------------цыкл для того что бы узнать наибольшую цену------------------}
for i:=1 to n do
Begin
if (price < info[i].price)
then
Begin
price:=info[i].price;
max:=i;
end;
end;
{----------------end--------------}
writeln(info[max].title,' ',info[max].price);
readkey;
end.
А ты до конца ту тему дочитал? Там же в последнем посте что написано?
Тогда, если ты хочешь делать примерно такой файл, как описал в первом посте - то тебе пригодится вот эта тема: http://forum.pascal.net.ru/index.php?s=&showtopic=9488&view=findpost&p=62651
Использовать то, что там написано - так: читаешь строку из файла, разбиваешь на составляющие (строки/числа), и заносишь данные в СВОЮ структуру... Для твоего случая это может выглядеть примерно так:
i := 1;
while not eof(f) do begin
readln(f, s);
with info[i] do begin
title := get_str(s, 1); { название }
price := StrInt(get_str(s, 2)); { цена }
age1 := StrInt(get_str(s, 3));
age2 := StrInt(get_str(s, 4)); { возраст }
end;
inc(i);
end;
1:Конструктор Lego :100: 2: 5
2:Другой конструктор :150: 4: 7
Посидел я пасатрел и понял что для меня это будет сложно...
решил написать по своему....
Итак написал две проги. Первая - записывает в типизированый файл данные, вторая считывает эти данные
и считает наибольшую цену...
вот исходник первой проги:
Program Z1280b;
uses crt;
const n = 5;
type
Assort = record
title : string; {Hазвание}
price : integer; {Цена}
age1,age2 : integer; {Возрастные границы}
end;
var
f: file of Assort;
mass:array[1..n] of Assort;
i:integer;
{---------------main program----------------}
Begin
Clrscr;
textcolor(4);
writeln(' ____________________________________________________________');
textcolor(7);
writeln('Програма для ввода данных в массив и запись в файл data.txt ');
textcolor(4);
writeln(' ____________________________________________________________');
textcolor(7);
{---Ввод данных в массив---}
for i:=1 to n do
begin
writeln('Введите название игрушки, для id=',i);
readln(mass[i].title);
writeln('Введите цену игрушки, для id=',i);
readln(mass[i].price);
writeln('Введите первую возрастную границу игрушки, для id=',i);
readln(mass[i].age1);
writeln('Введите вторую возрастную границу игрушки, для id=',i);
readln(mass[i].age2);
textcolor(4);
writeln(' ____________________________________________________________');
textcolor(7);
end;
{------------------------}
{________________Действия с файлом____________________}
assign(f,'data.txt');
rewrite(f);
{Цыкл записи с массива в типизированый файл}
for i:=1 to n do
begin
write(f,mass[i]);
end;
close(f);
{______________________________________________________}
{-----------Цыкл для вывода с массива уже введенных данных-----------------}
for i:=1 to n do
begin
writeln(mass[i].title,' ',mass[i].price,' ',mass[i].age1,'-',mass[i].age2);
textcolor(2);
writeln(' ____________________________________________________________');
textcolor(7);
end;
{------------------------}
writeln('press key');
readkey;
end.
Program Z1280b;
uses crt;
const n = 5;
type
Assort = record
title : string; {Hазвание}
price : integer; {Цена}
age1,age2 : integer; {Возрастные границы}
end;
var
f: file of Assort;
mass:array[1..n] of Assort;
i,max,price:integer;
{---------------main program----------------}
Begin
Clrscr;
textcolor(4);
writeln(' ____________________________________________________________');
textcolor(7);
writeln('Програма для чтения данных из файла data.txt и вывод на дисплей:');
writeln('Название,цену,возрастные границы - Самой дорогой игрушки!');
textcolor(4);
writeln(' ____________________________________________________________');
textcolor(7);
{________________Действия с файлом____________________}
assign(f,'data.txt');
reset(f);
{Цыкл чтения из типизированого файла и занесения данных в массив}
for i:=1 to n do
begin
read(f,mass[i]);
end;
close(f);
{______________________________________________________}
{-----------Цыкл для вывода с массива данных которые были прочитаны из файла-----------------}
textcolor(2);
writeln('Ниже таблица отображения всех данных с файла:');
Writeln('*************************************************************************');
textcolor(7);
textcolor(4); writeln('id | Название | цена | Возрастыне границы |');
textcolor(2);
Writeln('*************************************************************************');
textcolor(7);
{------------------------цыкл для вывода на дисплей всех данных-----------------------------}
for i:=1 to n do
begin
writeln(' ',i,' | ',mass[i].title,' | ',mass[i].price,' | ',mass[i].age1,' - ',mass[i].age2,' |');
textcolor(2);
writeln('____________________________________________________________');
textcolor(7);
end;
{------------------------------------------------------------------------------}
{Цыкл для вичисления самой дорогой игрушки}
for i:=1 to n do
Begin
if (price < mass[i].price) then
Begin
price:=mass[i].price;
max:=i;
end;
end;
{-----------------------------------------}
textcolor(2);
writeln('Из них самый дорогой конструктор:');
textcolor(4);
writeln('-------------------------------------------------------------------------');
textcolor(7);
writeln(' ',max,' | ',mass[max].title,' | ',mass[max].price,' | ',mass[max].age1,' - ',mass[max].age2,' |');
textcolor(4);
writeln('-------------------------------------------------------------------------');
writeln('press key');
readkey;
end.
Прости, но скриншот не работает..
Добавлено через 5 мин.
Но я примерно догадался.. При записи record в текст. файл так будет всегда..Это тебе не text! и при считывании record будет все это хватать! Надеюсь понятно?
Ссылку на скриншот поправил:)
Не ну я походу дела заметил что оно его как то не так сохранило в файл...
прото так для себя хотел узнать, как оно его в файл криптует?
ладно спасибо!