Консультация № 161106
22.02.2009, 09:53
0.00 руб.
22.02.2009, 20:53
0 4 1
Здравствуйте,помогите пожалуйста!
a) Создать типизированный файл заданной структуры, заполнить его информацией, вывести данные в виде таблицы на экран. (Файлы, создаваемые в задании, должны содержать не менее 5-ти строк).
b) Разработать подпрограмму обработки данного файла.
вот мой вариант:
a) Создать файл, содержащий сведения об ассортименте игрушек в магазине: название игрушки, цена, количество, возрастная группа, например 2-5, т.е. от 2 до 5.
b) Создать файл, содержащий список игрушек, которые по стоимости не превышают X рублей и подходят ребенку в возрасте от A до B лет. Значения X, A, B ввести с терминала.
вот листинг! помоги по нему сделать второе задание:

Выполнить ЗАДАНИЕ 1 с использованием текстового файла. Данные в текстовый файл вывести в виде таблицы.


и еще вопрос! как сделать,чтоб после 6 игрушек ввод заканчивался,а то у меня до бесконечности печатает!

Приложение:
program r3_3;
uses crt;
var f1,f2:text;
name:string;

procedure zapoln(var f:text);
var z:string[10];
a,i:integer;
begin
rewrite(f);
writeln('Assortiment:');
writeln('nazvanie, cena, k-vo, min_vozrast, max_vozrast');
write('--------------------------------------------------------------------------------');
While not eof do
begin
readln(z);
write(f,z:11);
for i:=1 to 4 do
begin
readln(a);
write(f,a:6);
end;
writeln(f,'');
write('--------------------------------------------------------------------------------');
end;
close(f);
writeln('press any key');
readln;
end;

procedure viv(var f:text);
var z:string;
begin
{$i-}
reset(f);
{$i+}
if ioresult<>0 then writeln('no file')
else
begin
writeln('------------------------------------------------------------------------');
writeln(' nazvanie cena k-vo vozrast');
while not eof(f) do
begin
readln(f,z);
writeln(z);
end;
close(f);
writeln;
writeln('press enter...');
end;
readln;
end;

procedure new_f(var f1,f2:text);
var z,x:string;
a,b,c,a1,b1,c1,err:integer;
begin
reset(f1);
rewrite(f2);
writeln('vv max cenu i vozrast (ot i do):');
readln(c,a,b);
while not eof(f1) do
begin
readln(f1,z);
x:=copy(z,13,5);
val(x,c1,err);
x:=copy(z,25,5);
val(x,a1,err);
x:=copy(z,31,5);
val(x,b1,err);
if (c1<=c)and(a1<=a)and(b1>=b) then
write(f2,z);
end;
close(f1);
close(f2);
readln;
end;

begin
clrscr;
writeln('vv ima faila:');
readln(name);
assign(f1,name+'.txt');
zapoln(f1);
viv(f1);
writeln('vv ima 2go faila:');
readln(name);
assign(f2,name+'.txt');
new_f(f1,f2);
viv(f2);
readln;
end.

Обсуждение

давно
Мастер-Эксперт
425
4118
23.02.2009, 05:51
общий
Поясните: у Вас текстовыми должны быть оба файла, и исходный и результирующий или, всё же, первый файл должен быть типизированный, а второй, с результатом, текстовый?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
23.02.2009, 09:21
общий
ЗАДАНИЕ 2
Постановка задачи:
a) Создать типизированный файл заданной структуры, заполнить его информацией, вывести данные в виде таблицы на экран. (Файлы, создаваемые в задании, должны содержать не менее 5-ти строк).
b) Разработать подпрограмму обработки данного файла.

ЗАДАНИЕ 3
Выполнить ЗАДАНИЕ 2 с использованием текстового файла. Данные в текстовый файл вывести в виде таблицы.

наверно и текстовые должны быть и исходный и результирующий.
давно
Мастер-Эксперт
425
4118
23.02.2009, 09:38
общий
Цитата: Комаров Антон Сергеевич
наверно...

Ну так узнайте точно. Типизированный и текстовый - это два совершенно разных типа файла и приёмы вытаскивания из них данных кардинально различаются.
Если исходить из синтаксического анализа выданного Вам задания:
Выполнить ЗАДАНИЕ 2 с использованием текстового файла. Данные в текстовый файл вывести в виде таблицы.

то во-первых, текстовый файл должен быть всего один, об этом ясно говорит единственное число и в первом и во втором предложении словосочетаний в которых упоминается текстовый файл. Во-вторых, второе предложение говорит о том, что текстовый файл должен быть файлом результатов, т.к. там совершенно ясно написано "вывести".
Узнайте у своего препода, если сами не можете определить и тогда скажете.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
давно
Профессор
401888
1232
24.02.2009, 13:19
общий
это ответ
Здравствуйте, Комаров Антон Сергеевич!
Вот решение то ли задания №1, то ли №2, запутали Вы нас изрядно. Короче с типизированными файлами.
Задание №3 предлагаю сделать так.
1.Создать текстовый файл с нужными данными, куда в строку через пробел, или запятую вписать данные по каждому наименованию игрушки.Файл либо писать латинскими буквами, либо конвертировать из Win в Dos.
2.Считать данные программно в записи.
3.Обработать их по условию.
4.Вывести в виде таблицы в новый текстовый файл.
Мне кажется это логичным. Если Вас это устроит, я напишу Вам программу, либо приведите четкое условие задания №3.

Приложение:
uses crt;
type Tigr=record
nam:string[20];
stm:word;
kol:word;
vz1:byte;
vz2:byte;
end;
var igr:Tigr;{переменная типа записи для ввоода и вывода информации}
f,g:file of Tigr;{2 типизированных файла записей}
X:word;{макс.цена}
A,B:byte;{нижний и верхний возрастные граеицы}
begin
clrscr;
{Sozdanie faila}
assign(f,'igr1.dat');
rewrite(f);
repeat
with igr do
begin
write('Nazvanie: ');readln(nam);
write('Cena: ');readln(stm);
write('Kolichestvo: ');readln(kol);
write('Min vozrast: ');readln(vz1);
write('Max vozrast: ');readln(vz2);
end;
write(f,igr);{записываем в файл}
until readkey=#27;{ожидем нажатия клавиши, если Esc, прекращаем ввод}
clrscr;{очистим экран от ввода}
{Vyvod faila na ekran}
reset(f);
writeln('Polnyj spisok igrushek:':40);
writeln;
writeln('----------------------------------------------------------');
writeln('| Nazvanie | Cena | Kolichestvo | Niz.voz | Ver.voz |');
writeln('-----------------------------------------------------------');
while not eof(f) do
begin
read(f,igr);
with igr do
begin
gotoXY(1,whereY);write('| ',nam);
gotoXY(16,whereY);write('| ',stm);
gotoXY(25,whereY);write('| ',kol);
gotoXY(39,whereY);write('| ',vz1);
gotoXY(49,whereY);write('| ',vz2);
gotoXY(59,whereY);write('|');
end;
writeln;
end;
readln;
close(f);{файл полностью прочитан, закроем его}
{Sozdanie faila po usloviyu}
clrscr;
reset(f);{снова откроем}
assign(g,'igr2.dat');{новый файл для записи}
rewrite(g);
write('Stoimost igrushki: ');readln(X);{вводим данные для запроса}
repeat
write('Niznij vozrastnoj predel: ');readln(A);
write('Verhnij vozrastnoj predel: ');readln(B);
until (A>0)and(B>0)and(B>A);
while not eof(f)do
begin
read(f,igr); {читаем первый файл}
if (igr.stm<=X)and(igr.vz1<=A)and(igr.vz2>=B){если условия подходят}
then write(g,igr);{записываем в новый файл}
end;
{Vvyvod dannyh na ekran}
reset(g);{открываем для чтения новый файл}
writeln('Spisok igrushek po zaprosu:':40);
writeln;
writeln('----------------------------------------------------------');
writeln('| Nazvanie | Cena | Kolichestvo | Niz.voz | Ver.voz |');
writeln('-----------------------------------------------------------');
while not eof(g) do
begin
read(g,igr);
with igr do
begin
gotoXY(1,whereY);write('| ',nam);
gotoXY(16,whereY);write('| ',stm);
gotoXY(25,whereY);write('| ',kol);
gotoXY(39,whereY);write('| ',vz1);
gotoXY(49,whereY);write('| ',vz2);
gotoXY(59,whereY);write('|');
end;
writeln;
end;
close(f);{закрываем оба файла}
close(g);
readln
end.

Форма ответа