Вопрос № 47335: Передо мной такая задача:
Нужно создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество,
возрастные границы, например, 2-5, т.е. от 2 до 5 лет. Количество записей-произвольное. На...
Вопрос № 47.335
Передо мной такая задача:
Нужно создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество,
возрастные границы, например, 2-5, т.е. от 2 до 5 лет. Количество записей-произвольное. Написать программу, в результате
выполнения которой выдаются следующие сведения:
а) название игрушек, которые подходят детям от 1 до 3 лет;
б) стоимость самой дорогой игрушки и ее наименование;
в) название игрушки, которая по стоимости не превышает х руб. и подходит ребенку в возрасте от а до в лет. Значения х, а,
в ввести с терминала.
Основная проблема в том, как организовать произвольное количество записей.
Думаю, что нужно просто вводить данные о игрушках в файл и после всего этого делать обработку данных файла.
Отвечает: sir henry
Здравствуйте, Терсков Алексей Николаевич!
Для ТР7 есть прекрасный вариант - использовать коллекции. Есть класс TCollection, в который заносите указатели на Вашу запись
(игрушки, дети, цены и т.д.).
По сути получается динамический массив. Вот для примера:
TInfo = record {Здесь будут хранится сведения об игрушке}
Name: string; {Название}
Price: Double; {Цена}
MinYear: Integer; {Минимальный возрасной ценз}
MaxYear: Integer; {Максимальный возрастной ценз}
End;
PInfo = ^TInfo;
var
Game: PInfo; {Преременная для одной игрушки}
Colls: PCollection; {Коллекция игрушек}
Begin
{Создание коллекции}
Colls:=New(PCollection, Init(30, 10)); {Создается коллекция размером 30 ячеек с возможностью приращения по 10 ячеек}
{Создаем игрушку}
Game:=New(PInfo);
{Заполняем поля записи об игрушке}
Game^.Name:='Синий крокодил с печальными глазами';
Game^.Price:=123.50;
Game^.MinYear:=3;
Game^.MaxYear:=5;
{Добавляем игрушку в коллекцию}
Colls^.Insert(Game);
...
End.
Таким образом в цикле или как Вам угодно, можно добавить любое количество записей.
Найти любой из элементов коллекции можно с помощью методов FirstThat (Самыйпервый) и LastThat (самый последний). В качестве
аргумента методу передается адрес функции сравнения одного из полей Вашей записи.
Единственный недостаток коллекции по сравнению с аналогичными элементами из Дельфи - в ней нет возможности загрузить и выгрузить
данные из файла. Но это можно сделать либо вручную, перебирая все элементы по очереди и скидывая их в файл, либо использовать
TDosStream, который является файловым потоком, а в коллекции есть возможность выгрузить и загрузить ее изв поток.
Ответ отправил: sir henry (статус:
Академик) Россия, Красноярск ---- Ответ отправлен: 27.06.2006, 05:43
Отвечает: Rok-set
Здравствуйте, Терсков Алексей Николаевич!
С "древних времён" тспользую просой как полено способ - динамическое распределение памяти.
Для использования необходимо:
1. обьявить указатель типа
ar : array [1.100,1.1000] of ^double;
2. создать переменную в программе
new (ar);
3. хорошим тоном считается удаление указателя после использования (освобождение памяти)
dispose (a);
В программе используется значение, возвращаемое по указателю ^ar
Динамическая память дает около 65565 байт динамической кучи
Ответ отправил: Rok-set (статус:
2-ой класс)
Ответ отправлен: 29.06.2006, 06:59