Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 22:42   #1
Хочу все знать!
Новичок
Джуниор
 
Регистрация: 16.05.2011
Сообщений: 2
Смех Создать типизированный файл catalog.dat, содержащий сведения о книгах

Создать типизированный файл catalog.dat, содержащий сведения о книгах
- автор;
- название;
- год издания;
- раздел.
а) найти раздел, в котором больше всего книг;
б) по заданному разделу занести в отдельный файл сведения о всех его книгах;
в) удалить из файла сведения о книгах, год издания которых меньше заданного;
г) обеспечить просмотр файла в табличном виде.



Вот что смогла сделать я:

Код:
program faili;
uses crt;
type book=record
   avtor: string;
   nazv: string;
   god: integer;
   razdel: integer;
   end;
const n=20;
var f: file of book;
    otv: char;
    a: book;
    b: array [1..n] of book;
i,min,imin,k,j: integer;
y: book;
begin
clrscr;
assign (f,'catalog.dat');
rewrite (f);
repeat
writeln ('vvedite avtora');
readln (a.avtor);
writeln ('vvedite nazvanie');
readln (a.nazv);
writeln ('vvedite god');
readln (a.god);
writeln ('vvedite razdel');
readln (a.razdel);
write (f,a);
writeln ('Prodolzhenie - lubaia knopka, vixod-esc');
otv:= readkey;
until ord(otv)=27;
close (f);
clrscr;
reset (f);
repeat
read (f,a);
writeln (a.avtor:15, a.nazv:15,a.god:6,a.razdel:10);
until eof (f);
{sortiruem po razdelu}
for i:=1 to n-1 do
begin
min:=b[i].razdel;
imin:=i;
for j:=i+1 to n do
if b[j].razdel<min then
begin
min:=b[j].razdel;
imin:=j;
end;
y:=b[imin];
b[imin]:=b[i];
b[i]:=y;
end;
clrscr;
writeln ('avtor':15,'nazvanie':15,'god':7,'razdel':15);
for i:=1 to n do
with b[i] do
writeln (avtor:15,nazv:15,god:7,razdel:15);
{ishem razdel gde bolshe knig}
k:=0;
for i:=1 to n do
begin
k:=k+1;
if (b[i+1].razdel<>b[i].razdel) or (i=n) then
begin
writeln ('v razdele  ',b[i].razdel,'  kol-vo knig  ',k);
k:=0;
end;
end;

repeat until keypressed;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 17.05.2011 в 08:29.
Хочу все знать! вне форума Ответить с цитированием
Старый 16.05.2011, 22:50   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И в чем проблема-то? (код не изучал, кстати, используйте лучше тег [CODE] (значек #) вместо php)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 16.05.2011, 22:51   #3
Хочу все знать!
Новичок
Джуниор
 
Регистрация: 16.05.2011
Сообщений: 2
По умолчанию

Код:
program faili; 
uses crt; 
type book=record 
   avtor: string; 
   nazv: string; 
   god: integer; 
   razdel: integer; 
   end; 
const n=20; 
var f: file of book; 
    otv: char; 
    a: book; 
    b: array [1..n] of book; 
i,min,imin,k,j: integer; 
y: book; 
begin 
clrscr; 
assign (f,'catalog.dat'); 
rewrite (f); 
repeat 
writeln ('vvedite avtora'); 
readln (a.avtor); 
writeln ('vvedite nazvanie'); 
readln (a.nazv); 
writeln ('vvedite god'); 
readln (a.god); 
writeln ('vvedite razdel'); 
readln (a.razdel); 
write (f,a); 
writeln ('Prodolzhenie - lubaia knopka, vixod-esc'); 
otv:= readkey; 
until ord(otv)=27; 
close (f); 
clrscr; 
reset (f); 
repeat 
read (f,a); 
writeln (a.avtor:15, a.nazv:15,a.god:6,a.razdel:10); 
until eof (f); 
{sortiruem po razdelu} 
for i:=1 to n-1 do 
begin 
min:=b[i].razdel; 
imin:=i; 
for j:=i+1 to n do 
if b[j].razdel<min then 
begin 
min:=b[j].razdel; 
imin:=j; 
end; 
y:=b[imin]; 
b[imin]:=b[i]; 
b[i]:=y; 
end; 
clrscr; 
writeln ('avtor':15,'nazvanie':15,'god':7,'razdel':15); 
for i:=1 to n do 
with b[i] do 
writeln (avtor:15,nazv:15,god:7,razdel:15); 
{ishem razdel gde bolshe knig} 
k:=0; 
for i:=1 to n do 
begin 
k:=k+1; 
if (b[i+1].razdel<>b[i].razdel) or (i=n) then 
begin 
writeln ('v razdele  ',b[i].razdel,'  kol-vo knig  ',k); 
k:=0; 
end; 
end; 

repeat until keypressed; 
end.
Проблема в том, что не умею решать задачи на тему файлы( прошу помочь решить
Хочу все знать! вне форума Ответить с цитированием
Старый 17.05.2011, 01:01   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Начнем с того, что массив B у тебя не заполняется нигде. Но программа смело пытается что-то с ним делать.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать типизированный файл Asell Помощь студентам 1 26.04.2011 16:45
Создать файл содержащий сведения о телефонах абонентов region23 Помощь студентам 2 30.11.2010 15:18
Создать файл содержащий сведения о том kot i @ Паскаль, Turbo Pascal, PascalABC.NET 0 25.05.2010 17:27
файл, содержащий сведения о сдачи студентами сессии. Каждая запись содержит поля: номер группы, фамилия Babur4iK Помощь студентам 3 18.05.2010 23:11