Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 188
от 01.07.2006, 23:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 198, Экспертов: 46
В номере:Вопросов: 1, Ответов: 2


Вопрос № 47335: Передо мной такая задача: Нужно создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например, 2-5, т.е. от 2 до 5 лет. Количество записей-произвольное. На...

Вопрос № 47.335
Передо мной такая задача:
Нужно создать файл, содержащий сведения об ассортименте игрушек в магазине. Структура записи: название игрушки, цена, количество, возрастные границы, например, 2-5, т.е. от 2 до 5 лет. Количество записей-произвольное. Написать программу, в результате выполнения которой выдаются следующие сведения:
а) название игрушек, которые подходят детям от 1 до 3 лет;
б) стоимость самой дорогой игрушки и ее наименование;
в) название игрушки, которая по стоимости не превышает х руб. и подходит ребенку в возрасте от а до в лет. Значения х, а, в ввести с терминала.

Основная проблема в том, как организовать произвольное количество записей.
Думаю, что нужно просто вводить данные о игрушках в файл и после всего этого делать обработку данных файла.
Отправлен: 26.06.2006, 11:55
Вопрос задал: Терсков Алексей Николаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное