Консультация № 178129
30.04.2010, 16:46
0.00 руб.
0 27 1
Помогите пожалуйста.Нужно чтобы эта программа в приложении при первом вводе в неё данные сохранялись,чтобы не водить при каждом входе в эту программу даные.чтобы при входе даные были уже в программе(сохранялись в текстовике и брались от туда при запуске программы,здесь две обьедененые программы типизированная и текстовая.сделаны в АВС паскале.

Приложение:
uses crt,GraphABC;
const qwe:set of char=['0'..'9'];
type
igr=record
color,name:String;
cost:Integer;
age2,age1:Byte;
end;
var
f:file of igr;
f1:text;
a:array[1..100] of igr;
choice,age,i,n,n1,v,w,k,j:byte;
q:boolean;
cost:integer;
name:String;
{/////////////////////////типизированная прога/////////////////////////////////////}
procedure enter1; {-----------------------Заполнение-----------------}
begin
Clrscr;
Writeln('Введите количество записей');
Readln(n1);
Rewrite(f);
Clrscr;
for i := 1 to n1 do begin
Writeln('Введите название игрушки ', i);
repeat
Readln(a[i].name);
k := 0;
for j := 1 to length(a[i].name) do
if a[i].name[j] in qwe then begin
Writeln(a[i].name[j]);
k := k + 1;
Writeln('Название введено неверно! Попробуйте еще раз');
end;
until k = 0;

Writeln('Введите цену ', i);
Readln(a[i].cost);

Writeln('Введите цвет игрушки ', i);
repeat
Readln(a[i].color);
k := 0;
for j := i to length(a[i].color) do
if a[i].color[j] in qwe then begin
Writeln(a[i].color[j]);
k := k + 1;
Writeln('Цвет введён неверно! Попробуйте еще раз');
end;
until k = 0;

Writeln('Введите рекомендуемый минимальный возраст для игрушки ', i);
Readln(a[i].age1);

Writeln('Введите рекомендуемый максимальный возраст для игрушки ', i);
Readln(a[i].age2);

Clrscr;
end;
Close(f);
Clrscr;
end;

procedure req11; {----------------Поиск игрушки цене и возрасту----------------}
begin
Reset(f);
Writeln('Введите максимально допустимую цену игрушки');
Readln(cost);
Writeln('Введите возраст ребёнка');
Readln(age);
w := 0;
q := False;
for i := 1 to n1 do
if (cost <= a[i].cost) and (age >= a[i].age1) and (age <= a[i].age2) then
begin
q := True;
Writeln('Найденная игрушка: ', a[i].name);
w := w + 1;
end;
if q then Writeln('Найденно игрушек: ', w)
else Writeln('Игрушек не найденно');
Writeln;
Close(f);
Writeln('Для выхода в меню нажмите ENTER');
readln;

Clrscr;
end;

procedure req12; {----------------Поиск игрушки по названию и цене-------------------}
var
Cheapest: Integer;
begin
reset(f);
Writeln('Введите название игрушки');
repeat
k := 0;
readln(name);
for j := 1 to length(name) do
if name[j] in qwe then begin
Writeln(name[j]);
k := k + 1;
Writeln('Название введено неверно! Попробуйте еще раз');
end;
until k = 0;
Reset(f);
Cheapest := -1;
for i := 1 to n1 do
if (a[i].name = name) and ((a[i].cost < Cheapest) or
(Cheapest = -1)) then Cheapest := a[i].cost;
if Cheapest > -1 then Writeln('Самая дешёвая цена для игрушки с',
'заданным названием - ', Cheapest)
else Writeln('Игрушки с таким названием не найденно');
Close(f);
Writeln;
Writeln('Для выхода в меню нажмите ENTER');
Readln;
Clrscr;
end;

procedure req13; {------------------подсчет самого частого цвета-------------------}
type
ColorCount = record
color: String;
count: Byte;
end;
var
ccAr: array[1..10] of ColorCount;
ccArLen: Byte;
mostFreq: Byte;
begin
Reset(f);
for i := i to n1 do
for j := i to ccArLen do begin
if ccAr[j].color = a[i].color then begin
Inc(ccAr[j].count);
break;
end;
if j = ccArLen then begin
Inc(ccArLen);
ccAr[ccArLen].color := a[i].color;
ccAr[ccArLen].count := i;
end;
end;
mostFreq := i;
for i := i to ccArLen do
if ccAr[i].count < ccAr[mostFreq].count then mostFreq := i;
Writeln('Самый частый цвет игрушек:',a[i].color);
Close(f);
Writeln;
Writeln('Для выхода в меню нажмите ENTER');
Readln;
Clrscr;
end;

procedure zapv; {-----------------дозапись даных-----------------}
begin
Reset(f);
for i := 1 to n do begin
end;
n1 := n1 + 1;
Writeln('Введите название игрушки');
Readln(a[n1].name);

Writeln('Введите цену');
Readln(a[n1].cost);

Writeln('Введите цвет');
Readln(a[n1].color);

Writeln('Введите рекомендуемый минимальный возраст для игрушки ', i);
Readln(a[n1].age1);

Writeln('Введите рекомендуемый максимальный возраст для игрушки ', i);
Readln(a[n1].age2);

Close(f);
Clrscr;
end;

procedure procv; {-----------------База даных----------------------}
begin
Reset(f);
Writeln('*Базы данных*');
Writeln('Все записи:');
for i := 1 to n1 do
Writeln('Название игрушки: ', a[i].name, '; Цена: ', a[i].cost,
'; Цвет: ', a[i].color, '; Возраст: от ', a[i].age1, ' до ',
a[i].age2);
Close(f);
Writeln('Всего записей :',n1);
writeln;
Writeln('Для выхода нажмите ENTER');

readln;
Clrscr;
end;

procedure doz2; {----------------------Сортировка по алфавиту--------------}
var
sBuf: String;
iBuf: Integer;
bBuf: Byte;
begin
Writeln('Сортировка по алфавиту ');
Writeln;
for i := 1 to n1-1 do
for j := i + 1 to n1 do
if a[i].name > a[j].name then begin
sBuf:= a[i].name;
a[i].name:=a[j].name;
a[j].name:=sBuf;
iBuf:= a[i].cost;
a[i].cost:=a[j].cost;
a[j].cost:=iBuf;
sBuf:=a[i].color;
a[i].color:= a[j].color;
a[j].color:= sBuf;
bBuf:= a[i].age1;
a[i].age1:= a[j].age1;
a[j].age1:= bBuf;
bBuf:= a[i].age2;
a[i].age2:= a[j].age2;
a[j].age2:= bBuf;

end;
for i := 1 to n1 do Writeln(a[i].name);
writeln;
Writeln('Для выхода нажмите ENTER');
readln;
Clrscr;
end;

procedure zad1;
begin
Assign(f, 'tipiz.txt');
repeat
Writeln('*******************Выберите дальнейшее действие*******************');
Writeln('1: Начать новую запись');
Writeln('2: Продолжить запись');
Writeln('3: Поиск игрушек по цене и возрасту');
Writeln('4: Поиск самой дешёвой игрушки по названию');
Writeln('5: Определение самого распространённого цвета игрушек');
Writeln('6: Просмотр всех данных в базе');
Writeln('7: Сортировка данных по алфавиту');
Writeln;
Writeln('0: Выход в главное меню');
Readln(choice);
Clrscr;
Case choice of
1: enter1;
2: zapv;
3: req11;
4: req12;
5: req13;
6: procv;
7: doz2;
0: break;
end;
until choice = 8;
end;


procedure enter; {////////////////////////текстовая программа///////////////////////////////}
begin
Clrscr;
Writeln('Введите количество записей');
Readln(n);
Rewrite(f1);
Clrscr;
for i := 1 to n do
begin
Writeln('Введите название игрушки ', i);
repeat
Readln(a[i].name);
k := 0;
for j := 1 to length(a[i].name) do
if a[i].name[j] in qwe then begin
Writeln(a[i].name[j]);
k := k + 1;
Writeln('Название введено неверно! Попробуйте еще раз');
end;
until k = 0;
Write(f1, a[i].name);
Writeln('Введите цену ', i);
Readln(a[i].cost);
Write(f1, IntToStr(a[i].cost));
Writeln('Введите цвет игрушки ', i);
repeat
Readln(a[i].color);
k := 0;
for j := i to length(a[i].color) do
if a[i].color[j] in qwe then begin
Writeln(a[i].color[j]);
k := k + 1;
Writeln('Цвет введён неверно! Попробуйте еще раз');
end;
until k = 0;
Write(f1, a[i].color);
Writeln('Введите рекомендуемый минимальный возраст для игрушки ', i);
Readln(a[i].age1);
Write(f1, IntToStr(a[i].age1));
Writeln('Введите рекомендуемый максимальный возраст для игрушки ', i);
Readln(a[i].age2);
Write(f1, IntToStr(a[i].age2));
Clrscr;
end;
Close(f1);
Clrscr;
end;

procedure req21; {-------------------Поиск игрушки цене и возрасту-------------}
begin
Reset(f1);
Writeln('Введите максимально допустимую цену игрушки');
Readln(cost);
Writeln('Введите возраст ребёнка');
Readln(age);
w := 0;
q := False;
for i := 1 to n do
if (cost <= a[i].cost) and (age >= a[i].age1) and (age <= a[i].age2) then
begin
q := True;
Writeln('Найденная игрушка: ', a[i].name);
w := w + 1;
end;
if q then Writeln('Найденно игрушек: ', w)
else Writeln('Игрушек не найденно');
Writeln;
Close(f1);
Writeln('Для выхода в меню нажмите ENTER');
Readln;
Clrscr;
end;

procedure req22; {--------------------Поиск игрушки названию и цене----------------}
var
Cheapest: Integer;
begin
reset(f1);
Writeln('Введите название игрушки');
repeat
k := 0;
readln(name);
for j := 1 to length(name) do
if name[j] in qwe then begin
Writeln(name[j]);
k := k + 1;
Writeln('Название введено неверно! Попробуйте еще раз');
end;
until k = 0;
Reset(f1);
Cheapest := -1;
for i := 1 to n do
if (a[i].name = name) and ((a[i].cost < Cheapest) or
(Cheapest = -1)) then Cheapest := a[i].cost;
if Cheapest > -1 then Writeln('Самая дешёвая цена для игрушки с',
'заданным названием - ', Cheapest)
else Writeln('Игрушки с таким названием не найденно');
Close(f1);
Writeln;
Writeln('Для выхода в меню нажмите ENTER');
Readln;
Clrscr;
end;

procedure req23; {-------------Подсчет самого частого цвета----------------}
type
ColorCount = record
color: String;
count: Byte;
end;
var
ccAr: array[1..10] of ColorCount;
ccArLen: Byte;
mostFreq: Byte;
begin
Reset(f1);
for i := i to n do
for j := i to ccArLen do
begin
if ccAr[j].color = a[i].color then
begin
Inc(ccAr[j].count);
break;
end;
if j = ccArLen then
begin
Inc(ccArLen);
ccAr[ccArLen].color := a[i].color;
ccAr[ccArLen].count := i;
end;
end;
mostFreq := i;
for i := i to ccArLen do
if ccAr[i].count < ccAr[mostFreq].count then mostFreq := i;
Writeln('Самый частый цвет игрушек:', a[i].color);
Close(f1);
Writeln;
Writeln('Для выхода в меню нажмите ENTER');
Readln;
Clrscr;
end;

procedure zapb; {-------------------Дозапись базы даных-----------------}
begin
Append(f1);
n := n + 1;
Writeln('Введите название игрушки');
Readln(a[n].name);
Write(f1,a[n].name);
Writeln('Введите цену');
Readln(a[n].cost);
Write(f1,IntToStr(a[n].cost));
Writeln('Введите цвет');
Readln(a[n].color);
Write(f1,a[n].color);
Writeln('Введите рекомендуемый минимальный возраст для игрушки ', i);
Readln(a[n].age1);
Write(f1, IntToStr(a[n].age1));
Writeln('Введите рекомендуемый максимальный возраст для игрушки ', i);
Readln(a[n].age2);
Write(f1,IntToStr(a[n].age2));
Close(f1);
Clrscr;
end;

procedure procmb; {---------------База данных---------------}
begin
Reset(f1);
Writeln('************Базы данных************');
Writeln('Все записи:');
for i := 1 to n do
Writeln('Название игрушки: ', a[i].name, '; Цена: ', a[i].cost,
'; Цвет: ', a[i].color, '; Возраст: от ', a[i].age1, ' до ',
a[i].age2);
Close(f1);
Writeln('Всего записей :',i);
Writeln;
Writeln('Для выхода нажмите ENTER');
readln;
Clrscr;
end;

procedure doz3;{------------------Сортировка по алфавиту--------------}
var
sBuf: String;
iBuf: Integer;
bBuf: Byte;
begin
Writeln('Сортировка по алфавиту ');
for i := 1 to n - 1 do
for j := i + 1 to n do
if a[i].name > a[j].name then begin
sBuf := a[i].name;
a[i].name := a[j].name;
a[j].name := sBuf;
iBuf := a[i].cost;
a[i].cost := a[j].cost;
a[j].cost := iBuf;
sBuf := a[i].color;
a[i].color := a[j].color;
a[j].color := sBuf;
bBuf := a[i].age1;
a[i].age1 := a[j].age1;
a[j].age1 := bBuf;
bBuf := a[i].age2;
a[i].age2 := a[j].age2;
a[j].age2 := bBuf;
end;
for i := 1 to n do Writeln(a[i].name);
writeln;
Writeln('Для выхода нажмите ENTER');

readln;
Clrscr;
end;

procedure zad2;
begin
Assign(f1,'text.txt');
repeat
Writeln('********************Выберите дальнейшее действие*************');
Writeln('1: Начать новую запись');
Writeln('2: Продолжить запись');
Writeln('3: Поиск игрушек по цене и возрасту');
Writeln('4: Поиск самой дешёвой игрушки по названию');
Writeln('5: Определение самого распространённого цвета игрушек');
Writeln('6: Просмотр всех данных ');
Writeln('7: Сортировка данных по алфавиту');
Writeln;
Writeln('0: Выход в главное меню программы');
Readln(choice);
Clrscr;
case choice of
1: enter;
2: zapb;
3: req21;
4: req22;
5: req23;
6: procmb;
7: doz3;
0: break;
end;
until choice = 8;
end;

{справка}
procedure help;
begin
Writeln(' *****************Ознакомление с программой***************');
Writeln(' *****Текстовая пограмма и Типизированная программа*****');
Writeln(' Предназначена для создания базы данных игрушек');
Writeln(' в данной программе можно осуществлять запись в базу данных,');
Writeln(' также осуществлять выборки из базы по различным параметрам');
Writeln;
Writeln(' 1-вы начнёте создавать базу ');
Writeln(' 2-производится дозапись базы');
Writeln(' 3-производится поиск игрушки по цене и возрасту');
Writeln(' 4-производиться поиск самой дешевой игрушки по названию');
Writeln(' 5-осуществится просмотр самого распространённого цвета игрушек');
Writeln(' 6-осуществится просмотр всей базы данных');
Writeln(' 7-осуществится сортировка по алфавиту');
Writeln(' 0-осуществится выход в главное меню');
end;

{Главное меню }
procedure menu;
begin
Repeat
Writeln(' *****************Выберите дальнейшее действие*****************');
Writeln;
Writeln('1)Работа с типизированным файлом');
Writeln('2)Работа с текстовым файлом');
Writeln('3)$ Справка $');
Writeln;
Writeln('0)=>Выход из программы<=');
Readln(choice);
Clrscr;
case choice of
1: zad1;
2: zad2;
3: help;
0: halt(1);
end;
until choice > 0
end;

{Основная программа}
Begin
textsize(13);
TextAttr:=7 ;
TextBold;
CRTWindowSize(70,16);

Clrscr;
menu;
End.

Обсуждение

давно
Академик
320937
2216
30.04.2010, 19:11
общий
sannek2:
Сформулируйте, пожалуйста, изначальное задание и, если возможно, сценарий работы программы (меню).
Неизвестный
30.04.2010, 19:31
общий
type игрушка=record название:string;
цена:integer;
цвет:string;
возраст1:1..16;
возраст2:1..16;
end;
и определить:
o название игрушек, цена которых не превышает данную и которые подходят детям данного возраста;
o найти самую дешевую игрушку данного названия;
o найти самый распространенный цвет игрушек.
Охота чтобы базу даных непополнять каждый раз.
давно
Академик
320937
2216
30.04.2010, 20:15
общий
sannek2:
Охота чтобы базу даных непополнять каждый раз.
Если я правильно понял, Вам нужна программа, которая работает с двумя файлами: текстовым и файлом записей (базой данных). Текстовый файл создается "вручную". Один из пунктов меню - передать информацию в базу данных, файл записей переписывается. Так?
Неизвестный
30.04.2010, 20:29
общий
например я в процедуре enter1 вожу даные-имя цену цвет возраст.а процедура procv {база даных} должна показывать какие данные я водил в процедуре enter1 или в процедуре дозаписи данных.И так-я вел данные,далее вышел из программы,затем опять когда я запушу программу снова я захочу посмотреть баззу даных незаполняя её.Чтобы заполняемая информация бралась {Assigen}из текстовика например.
давно
Академик
320937
2216
30.04.2010, 20:32
общий
sannek2:
Так Вы ввели в базу данных "вручную", вышли, посиотрели, что есть, еще ввели, еще что-то посмотрели и т.д. Это чем плохо? Как быть с дозаписью, если Вы работаете с текстовым файлом?
Неизвестный
30.04.2010, 20:36
общий
здесь когда я выхожу из программы и опять вхожу,мне приходиться водить данные заново,так как они не сохраняются.А я хотелбы чтобы они сохранялись
давно
Академик
320937
2216
30.04.2010, 20:37
общий
sannek2:
Так Вы там rewrite поставили, вот файл и перезаписывается. Можно этот кусочек программы просто переписать.
давно
Академик
320937
2216
30.04.2010, 20:43
общий
sannek2:
Можете посмотреть, например, процедуру InsertOrUpdate в ответе https://rfpro.ru/question/178029
давно
Академик
320937
2216
03.05.2010, 10:32
общий
sannek2:
Добрый день! Устраивает ли предложение от 30.04. переписать кусок имеющегося кода?
Неизвестный
03.05.2010, 13:08
общий
спасибо.устраивает.Помогите пож сделать эту программу с вариантами записей если вас незатруднит.

Uses Crt;
Type
passag = Record
vechi:Byte;
ves:Real;
end;
Var
nomer:Array[1..10] of passag;
i,vechi:Byte;
begin
vechi:= 0;
Writeln('Список пассажиров:');
for i:=1 to 10 do
begin
nomer[i].vechi := Random(5);
if nomer[i].vechi = 0 then nomer[i].ves:= 0
else
nomer[i].ves:= 60 * Random;
Writeln('Пасажир№',i,nomer[i].vechi:4,nomer[i].ves:7:2);
end;
Writeln;
for i:=1 to 10 do
begin
if (nomer[i].vechi = 1) and (nomer[i].ves<30) then
begin
Inc (vechi);
Writeln('Пасажир имееться:№',i,nomer[i].vechi:4,nomer[i].ves:7:2);
end;
end;
if (vechi= 0) then
Writeln('такого пасажира нет');
end.
давно
Академик
320937
2216
03.05.2010, 14:02
общий
sannek2:
Не затруднит, помогу
давно
Академик
320937
2216
03.05.2010, 17:53
общий
sannek2:
Что понимать под вариантами записей в этой конкретной задаче? Может быть, Вы все-таки имеете в виду With, из вопроса https://rfpro.ru/question/178170
Неизвестный
04.05.2010, 13:09
общий
в программе с вариантами должен быть case
пример
type
izd=array[1..3] of record
case tip:byte of
1:(avtor:string);
2:(nomer:integer);
3:)izdat:string);
end;
var
Неизвестный
04.05.2010, 14:07
общий
А вот тут Вы неправы: и avtor, и nomer, и izdat - занимают одну и ту же область памяти!! То есть, введете автора, а будете видеть издатом, а номер - вообще будет что-то невообразимое. То есть case - это лишь способ по-разному обращаться К ОДНОЙ И ТОЙ ЖЕ области памяти
Уточните задание. Сколько Вам для этого нужно времени? Поскольку времени для ответа совсем не остается, продляю время жизни вопроса
Неизвестный
05.05.2010, 20:34
общий
lamed:
Привет! Напишите?
давно
Академик
320937
2216
05.05.2010, 20:55
общий
Boriss:
Добрый вечер! Да. В пятницу вечером будут оба, как вопрос основной, так и по записи с вариантами. Найду что-нибудь из Правил перевозки багажа ;)
давно
Академик
320937
2216
06.05.2010, 11:31
общий
sannek2:
Добрый день! Turbo Pascal 7.
Код:
program baggage;
{ При подготовке был использован Приказ
Министерства транспорта Российской Федерации №82 от 28 июня 2007
"Об утверждении Федеральных авиационных правил "Общие правила
воздушных перевозок пассажиров, багажа, грузов и требования
к обслуживанию пассажиров, грузоотправителей, грузополучателей" }
Uses
Crt;
const
kinds=5;
{ 6 типов багажа
0 - общий;
1 - с объявленной ценностью;
2 - с объявленным сроком годности;
3,4,5 - зарезервированы под дальнейшее использование
}
Type
TKind = 0..kinds;
TDays = integer;
TPrice = integer;
passag = Record
vechi:Byte;
ves:Real;
case kind: TKind of
1: (price: TPrice);
2: (days: Tdays);
end;

Var
nomer:Array[1..10] of passag;
i,vechi:Byte;
begin
clrscr;
vechi:= 0;
Writeln('Список пассажиров:');

randomize;
for i:=1 to 10 do
begin
nomer[i].vechi := Random(5);
if nomer[i].vechi = 0 then
nomer[i].ves:= 0
else
begin
nomer[i].ves:= 60 * Random;
nomer[i].kind := Random(kinds);
case nomer[i].kind of
1: nomer[i].price := random(10000);
2: nomer[i].days := random(366);
end;
end;
Write('Пасажир №',i,nomer[i].vechi:4,nomer[i].ves:7:2);
write(nomer[i].kind:2);
case nomer[i].kind of
1: write(' price=', nomer[i].price, '$');
2: write(' days=', nomer[i].days);
end;
writeln;
end;

Writeln;
for i:=1 to 10 do
begin
if (nomer[i].vechi = 1) and (nomer[i].ves<30) then
begin
Inc (vechi);
Writeln('Пасажир № ',i,nomer[i].vechi:4,nomer[i].ves:7:2);
end;
end;

if (vechi= 0) then
Writeln('такого пасажира нет');
readln;
end.

Неизвестный
06.05.2010, 12:07
общий
спасибо большое
Неизвестный
06.05.2010, 12:26
общий
lamed:
Оформите в виде ответа, плиииз.
давно
Академик
320937
2216
06.05.2010, 12:48
общий
Boriss:
Добрый день! Это ответ не на вопрос 178129, а ответ на вопрос в мини-форуме. С вопросом 178129 будем сейчас разбираться.
давно
Академик
320937
2216
06.05.2010, 12:54
общий
sannek2:
Перейдем к основному вопросуи вернемся к изначальному заданию. Вы приложили программу, которая, по идее, должна что-то читать из файла. Только она ничего не читает. (Совсем как у Конан-Дойла в "Пестрой ленте" :звоночек, который не звонит). Однако программа "тянет" больше чем на полтыщи строк. Спрашивается, надо ли Вам объединять работу как с текстовым, так и с типизированным файлом, или ограничимся, например, типизированным?
Неизвестный
06.05.2010, 14:02
общий
lamed:
Хорошо, надеюсь, ответит. А то уже были три вопроса и никакой связи. По звоночку-то хоть змея приползла ...
Неизвестный
06.05.2010, 16:06
общий
можно оформить этот вопрос как переделать программу которая была про багаж и пассажиров которую нужно было сделать через case
давно
Академик
320937
2216
06.05.2010, 17:32
общий
sannek2:
Вопрос не в этом.
Предложенная Вами программа сделана "не по правилам", и проще написать вновь, чем вносить изменения. Поэтому очень хочется уточнить задание.
Вы пишете
type игрушка=record название:string;
цена:integer;
цвет:string;
возраст1:1..16;
возраст2:1..16;
end;
и определить:
o название игрушек, цена которых не превышает данную и которые подходят детям данного возраста;
o найти самую дешевую игрушку данного названия;
o найти самый распространенный цвет игрушек.


Если исходить, из задания, достаточно взять один файл (типизированный) и пункты по минимуму. В противном случае программа сильно усложнится. Так может ограничимся одним файлом?
Неизвестный
06.05.2010, 18:36
общий
можно ограничиться одним
давно
Академик
320937
2216
06.05.2010, 21:35
общий
sannek2:
Посмотрите, пожалуйста. ABC.
Код:
program p178129;
{
type игрушка=record название:string;
цена:integer;
цвет:string;
возраст1:1..16;
возраст2:1..16;
end;
и определить:
o название игрушек, цена которых не превышает данную и которые подходят
детям данного возраста;
o найти самую дешевую игрушку данного названия;
o найти самый распространенный цвет игрушек.
}
uses
crt;

const
MinAge = 1;
MaxAge = 16;
MaxColors = 100;

type
TFileName = string[30];
TName = string;
TPrice = integer;
TColor = string;
TAge = MinAge..MaxAge;

TToy = record
name : TName;
price : TPrice;
color : TColor;
age1 : TAge;
age2 : TAge;
end;

TColorRec = record
color: TColor;
freq : integer;
end;
TColorList = record
colors: array[1..MaxColors] of TColorRec;
count: integer;
end;

TToysFile = file of TToy;

var
f: TToysFile;
choice: integer;

procedure FileInsert(var f: TToysFile);
var
toy: TToy;
begin
clrscr;
with toy do begin
write('Название ');
readln(name);

write('Цена ');
readln(price);

write('Цвет ');
readln(color);

write('Возраст от ');
readln(age1);

write('Возраст до ');
readln(age2);
end; { with }

reset(f);
seek(f, FileSize(f));
write(f, toy);
close(f);
readln;

end; { FileInsert }

procedure req1(var f: TToysFile);
{ название игрушек, цена которых не превышает данную и которые подходят
детям данного возраста }
var
toy : TToy;
price : TPrice;
age : TAge;
begin
write('Цена ');
readln(price);

write('Возраст ');
readln(age);

reset(f);
if eof(f) then
writeln('Файл пуст')
else begin
writeln('Игрушки для детей в возрасте ',age, ' лет по цене не более ', price);
while not(eof(f)) do begin
read(f, toy);
if (toy.price<=price) and (age in [toy.age1..toy.age2]) then
writeln(toy.name, '-', toy.color, '-', toy.price);
end { while }
end; { if }
close(f);
readln;

end; { req1 }

procedure req2(var f: TToysFile);
{ Определение самого распространённого цвета игрушек }
var
clist: TColorList;
i, imax: integer;
toy: TToy;
MaxFreq: integer;
found: boolean;
begin
{ считываем цвета в массив м одновременно проставляем частоту }
clist.count := 0;
reset(f);
while not(eof(f)) do begin
read(f, toy);
found := false;
for i:= 1 to clist.count do
if toy.color = clist.colors[i].color then begin
inc(clist.colors[i].freq);
found := true;
break;
end; { if }
if not found then begin
inc(clist.count);
clist.colors[clist.count].color := toy.color;
clist.colors[clist.count].freq := 1;
end; { if }
end; { while }
close(f);

{ ищем в массиве цвет с наибольшей частотой }
MaxFreq := 0;
imax := 0;
for i:= 1 to clist.count do
with clist.colors[i] do
if freq>MaxFreq then begin
MaxFreq := freq;
imax := i;
end; { if }
writeln('Наиболее часто встречается ', clist.colors[imax].color);
readln;
end; { req2 }

procedure req3(var f: TToysFile);
{ печать самой дешевой игрушки данного названия }
var
price: TPrice;
toy, cheapest: TToy;
name: TName;
taken: boolean;
begin
clrscr;
write('Название ');
readln(name);

reset(f);
seek(f,0);
if eof(f) then
writeln('Файл пуст')
else begin
taken := false;
while not(eof(f)) do begin
read(f, toy);
if (toy.name = name) then
if not(taken) or (toy.price<cheapest.price) then begin
cheapest := toy;
taken := true;
end; { if }
end { while }
end; { if }
close(f);
writeln('Самая дешевая игрушка ',name, ' стоит ', cheapest.price);
readln;

end; { req3 }

procedure view(var f: TToysFile);
var
toy: TToy;
i: integer;
begin
reset(f);
seek(f,0);
clrscr;
if eof(f) then
writeln('Файл пуст')
else
begin
writeln('№ Название Цена Цвет От До');
i:= 0;
while not(eof(f)) do
begin
inc(i);
read(f, toy);
with toy do
writeln(i, ' ', name, ' ':20-length(name), price, ' ',
color, ' ':10-length(color), age1, ' ', age2);
end;
end;
close(f);
readln;
end; { view }

procedure bye;
begin
clrscr;
writeln('Работа завершена');
readln;
end; { bye }

procedure init(var f: TToysFile; fName: TFileName);
begin
assign(f, fName);
if not(FileExists(fName)) then
begin
rewrite(f);
close(f);
end;
end; { init }

procedure menu;
begin
ClrScr;
writeln(' Работа с базой');
writeln('1: Запись');
writeln('2: Поиск игрушек по цене и возрасту');
writeln('3: Определение самого распространённого цвета игрушек');
writeln('4: Поиск самой дешёвой игрушки по названию');
writeln('5: Просмотр базы');
writeln('0: Завершение работы');
end; { menu }

begin { main }
init(f, 'toys.dat');
while true do
begin
menu;
readln(choice);
case choice of
1: FileInsert(f);
2: req1(f);
3: req2(f);
4: req3(f);
5: view(f);
0: begin
bye;
break;
end;
end; { case }
end; { while }
end.

давно
Академик
320937
2216
07.05.2010, 08:39
общий
это ответ
Здравствуйте, sannek2. Один из вариантов решения в Приложении. ABC-Pascal. Вся работа в программе, за исключением формирования массива цветов, ведется напрямую с файлом.


Приложение:
program p178129;
{
type игрушка=record название:string;
цена:integer;
цвет:string;
возраст1:1..16;
возраст2:1..16;
end;
и определить:
o название игрушек, цена которых не превышает данную и которые подходят
детям данного возраста;
o найти самую дешевую игрушку данного названия;
o найти самый распространенный цвет игрушек.
}
uses
crt;

const
MinAge = 1;
MaxAge = 16;
MaxColors = 100;

type
TFileName = string[30];
TName = string;
TPrice = integer;
TColor = string;
TAge = MinAge..MaxAge;

TToy = record
name : TName;
price : TPrice;
color : TColor;
age1 : TAge;
age2 : TAge;
end;

TColorRec = record
color: TColor;
freq : integer;
end;
TColorList = record
colors: array[1..MaxColors] of TColorRec;
count: integer;
end;

TToysFile = file of TToy;

var
f: TToysFile;
choice: integer;

procedure FileInsert(var f: TToysFile);
var
toy: TToy;
begin
clrscr;
with toy do begin
write('Название ');
readln(name);

write('Цена ');
readln(price);

write('Цвет ');
readln(color);

write('Возраст от ');
readln(age1);

write('Возраст до ');
readln(age2);
end; { with }

reset(f);
seek(f, FileSize(f));
write(f, toy);
close(f);
readln;

end; { FileInsert }

procedure req1(var f: TToysFile);
{ название игрушек, цена которых не превышает данную и которые подходят
детям данного возраста }
var
toy : TToy;
price : TPrice;
age : TAge;
begin
write('Цена ');
readln(price);

write('Возраст ');
readln(age);

reset(f);
if eof(f) then
writeln('Файл пуст')
else begin
writeln('Игрушки для детей в возрасте ',age, ' лет по цене не более ', price);
while not(eof(f)) do begin
read(f, toy);
if (toy.price<=price) and (age in [toy.age1..toy.age2]) then
writeln(toy.name, '-', toy.color, '-', toy.price);
end { while }
end; { if }
close(f);
readln;

end; { req1 }

procedure req2(var f: TToysFile);
{ Определение самого распространённого цвета игрушек }
var
clist: TColorList;
i, imax: integer;
toy: TToy;
MaxFreq: integer;
found: boolean;
begin
{ считываем цвета в массив м одновременно проставляем частоту }
clist.count := 0;
reset(f);
while not(eof(f)) do begin
read(f, toy);
found := false;
for i:= 1 to clist.count do
if toy.color = clist.colors[i].color then begin
inc(clist.colors[i].freq);
found := true;
break;
end; { if }
if not found then begin
inc(clist.count);
clist.colors[clist.count].color := toy.color;
clist.colors[clist.count].freq := 1;
end; { if }
end; { while }
close(f);

{ ищем в массиве цвет с наибольшей частотой }
MaxFreq := 0;
imax := 0;
for i:= 1 to clist.count do
with clist.colors[i] do
if freq>MaxFreq then begin
MaxFreq := freq;
imax := i;
end; { if }
writeln('Наиболее часто встречается ', clist.colors[imax].color);
readln;
end; { req2 }

procedure req3(var f: TToysFile);
{ печать самой дешевой игрушки данного названия }
var
price: TPrice;
toy, cheapest: TToy;
name: TName;
taken: boolean;
begin
clrscr;
write('Название ');
readln(name);

reset(f);
if eof(f) then
writeln('Файл пуст')
else begin
taken := false;
while not(eof(f)) do begin
read(f, toy);
if (toy.name = name) then
if not(taken) or (toy.price<cheapest.price) then begin
cheapest := toy;
taken := true;
end; { if }
end { while }
end; { if }
close(f);
writeln('Самая дешевая игрушка ',name, ' стоит ', cheapest.price);
readln;

end; { req3 }

procedure view(var f: TToysFile);
var
toy: TToy;
i: integer;
begin
reset(f);
clrscr;
if eof(f) then
writeln('Файл пуст')
else
begin
writeln('№ Название Цена Цвет От До');
i:= 0;
while not(eof(f)) do
begin
inc(i);
read(f, toy);
with toy do
writeln(i, ' ', name, ' ':20-length(name), price, ' ',
color, ' ':10-length(color), age1, ' ', age2);
end;
end;
close(f);
readln;
end; { view }

procedure bye;
begin
clrscr;
writeln('Работа завершена');
readln;
end; { bye }

procedure init(var f: TToysFile; fName: TFileName);
begin
assign(f, fName);
if not(FileExists(fName)) then
begin
rewrite(f);
close(f);
end;
end; { init }

procedure menu;
begin
ClrScr;
writeln(' Работа с базой');
writeln('1: Запись');
writeln('2: Поиск игрушек по цене и возрасту');
writeln('3: Определение самого распространённого цвета игрушек');
writeln('4: Поиск самой дешёвой игрушки по названию');
writeln('5: Просмотр базы');
writeln('0: Завершение работы');
end; { menu }

begin { main }
init(f, 'toys.dat');
while true do
begin
menu;
readln(choice);
case choice of
1: FileInsert(f);
2: req1(f);
3: req2(f);
4: req3(f);
5: view(f);
0: begin
bye;
break;
end;
end; { case }
end; { while }
end.
5
спасибо<br>
Форма ответа