Помощь - Поиск - Пользователи - Календарь
Полная версия: задача с текстовым файлом *
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Димас
вот ещё одну задачу никак осилить не могу wacko.gif

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


тут вообще то удобней бы было использовать БД а не файл, хотя мы этого ещё не учили.
&
предположения такие(мысли в слух):

так я вижу структуру:

*************************************** ***********
* ID * Название игрушки * Цена р * Возраст. категория *
*************************************** ***********
* 1 * Конструктор Lego * 100 * 2-5 *
......................................................................................... и т.д

предпологаю сделать так (если так возможно):

загнать всё это в двухмерный массив(или в одномерный но с record'дами) и как то записать в файл... потом считывать с файла и в цыкле по "Цене"
вывести на Дисплей самый догогой продукт!

по дргуму пока ни вижу(глаза закрыты ещё) blink.gif

----
обясните как это сделать или как по другому поступить ? smile.gif
volvo
Цитата
обясните как это сделать
Поиск - выдает вот эту тему: Расчётная работа. Помогите

Посмотри, как сделано там...
Димас
лады сейчас попытаюсь написать smile.gif
Димас
ну хоть убей не могу разобратся в чужом коде по ссылке volvo wacko.gif


непойму как происходит процедура считывания с файла...
а что бы понять как оно считывается надо знать как оно туда записывается..

общем так написал эту задачу для начала без файла:

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.


Эх blink.gif
volvo
А ты до конца ту тему дочитал? Там же в последнем посте что написано?
Цитата
Как и обещал теперь прога читает файл с данными
Димас
Цитата(volvo)
А ты до конца ту тему дочитал? Там же в последнем посте что написано?


разумеется брал азимут на пост в той теме: Jahnerus 18.11.2004 17:15 Сообщение #7

но не разобрался:(
Алена
Тогда, если ты хочешь делать примерно такой файл, как описал в первом посте - то тебе пригодится вот эта тема: Заполнение полей записи из файла

Использовать то, что там написано - так: читаешь строку из файла, разбиваешь на составляющие (строки/числа), и заносишь данные в СВОЮ структуру... Для твоего случая это может выглядеть примерно так:

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.
 


вот м всёsmile.gif

--------------------------------------------------------------------------------------------------------------------------------------
Но меня интересует такой вопрос blink.gif :

Почему структура файла такова????(как на скриншоте который я выложил ниже)
Изображение

Что это за система...м? mega_chok.gif
Артемий
Прости, но скриншот не работает..

Добавлено через 5 мин.
Но я примерно догадался.. smile.gif При записи record в текст. файл так будет всегда..Это тебе не text! smile.gif и при считывании record будет все это хватать! Надеюсь понятно? smile.gif blum.gif
Димас
Ссылку на скриншот поправил:)

Не ну я походу дела заметил что оно его как то не так сохранило в файл...

прото так для себя хотел узнать, как оно его в файл криптует?


ладно спасибо! yes2.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.