Помощь - Поиск - Пользователи - Календарь
Полная версия: Типизированный файл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Merlin
Условие задачи :

Создать типизированный файл, запись которого имеет следующую структуру: номер УДК, фамилию и инициалы автора, название книги, год издания, количество экземпляров данной книги в библиотеке. Вывести на экран в алфавитном порядке название книг, количество экземпляров которых больше 3.

Создание и обработку файла оформить в виде подпрограмм.



Program tip;
 const
    n=20;
  type
     knigi = record
                      fam, io, nazv_kn : string[20] ;
                      udk: real;
                      god_izd, kol : integer;
      end;
  
 Var
        kn: array[1..n] of knigi;
        i,j: integer; 
        temp:integer;

Begin
         writeln('Введите данные о книге');
         writeln('-----------------------------');
  for i:=1 to n do
     with kn[i] do begin
    writeln(' Введите номер УДК ');
       readln(n_UDK);
    writeln('Введите Фамилию');
       readln(fam);
    writeln(' Введите Иницалы автора ');
       readln(io);
    writeln('Введите название книги');
       readln(nazv_kn);
    writeln('Введите год издания'); 
       readln(god_izd);
    writeln('Введите кол-во экземпляров данной книги'); 
       readln(kol);
end;
 
  if  kn[i].kol > 3 then 

for i:=2 to n do
  for j:=n downto i do
     if  kn[j-1].nazv_kn > mass[j].nazv_kn then begin
       temp:=kn[j-1]; 
       kn[j-1]:=kn[j];
       kn[j]:=temp;
end;
  for i:=1 to n do
    writeln (kn[i].nazv_kn);
end;
readln;
   end.




Что то у меня с сортировкой "название книги" по алфавиту проблемы... blink.gif , не знаю что делать
Остальное отладить я смогу, а в сортировке ошибка вылазит


И ещё вопрос: как переделать ввод массива в подпрограмму ?
volvo
Цитата
в сортировке ошибка вылазит

Var
  ...
  temp: knigi; { <--- А не Integer, как у тебя !!! }
Merlin
Спасибо за исправление smile.gif

Цитата

Создание и обработку файла оформить в виде подпрограмм


Т.е. надо оформить в иде процедур и функций ?
Что нужно для этого переделать в программе ? blink.gif
Merlin

Program tip;
 const
    n=20;
  type
     knigi = record
                      fam, io, nazv_kn : string[20] ;
                      udk: real;
                      god_izd, kol : integer;
      end;

var 

f: file of knigi; 
kn: knigi; 
vybor: byte; 
temp:knigi;
i,j:integer;


begin 

write('1- создать новый, 0 - открыть');readln(vybor); 
assign(f,'имя_файла.dat'); 

if vybor <>0 then 
begin 
{создать новый файл} 
rewrite(f); 

writeln('Введите данные о книге'); 
         writeln('-----------------------------'); 
  for i:=1 to n do 
  begin 
     with kn[i] do begin 
    writeln(' Введите номер УДК '); 
       readln(n_UDK); 
    writeln('Введите Фамилию'); 
       readln(fam); 
    writeln(' Введите Иницалы автора '); 
       readln(io); 
    writeln('Введите название книги'); 
       readln(nazv_kn); 
    writeln('Введите год издания'); 
       readln(god_izd); 
    writeln('Введите кол-во экземпляров данной книги'); 
       readln(kol); 
   end; 
  write(f,kn); 
  end; 
  close(f); 
end; 
reset(f); 

 
  if  kn[i].kol > 3 then 

for i:=2 to n do
  for j:=n downto i do
     if  kn[j-1].nazv_kn > mass[j].nazv_kn then begin
       temp:=kn[j-1]; 
       kn[j-1]:=kn[j];
       kn[j]:=temp;
end;
  for i:=1 to n do
    writeln (kn[i].nazv_kn);
end;
readln;
end.



Я правильно сделал задачу ?
Запутался с типизированным файлом, может я что то не так объявляю ?
volvo
У тебя ошибки, или что? В чем вопрос?

Почему вы все думаете, что здесь сидят телепаты?
Merlin
У меня условие : создать типизированный файл..

Я правильно его объявляю ?

Или надо делать так, как я написал программу с массивом ,, Пост : 16.12.2005 0:45 ?
klem4
Да, файл который ты создал - типизированный, а чтобы таких вопросов больше не возникало - F A Q : ФАЙЛЫ
Merlin
А как мне в этой проге сделать ввод массива и сортировку , через процедуру ?

А то я не могу разобраться в этих локальных и глобальных переменных...
Может хоть пример какой ..
Merlin

Program tip; 
 const 
    n=20; 
  type 
     knigi = record 
                      fam, io, nazv_kn : string[20] ; 
                      udk: real; 
                      god_izd, kol : integer; 
      end; 

var 

f: file of knigi; 
kn_1: knigi; 
vybor: byte; 
temp:knigi; 
i,j:integer; 
kn: array [1..n] of knigi;


begin 

write('1- создать новый, 0 - открыть');readln(vybor); 
assign(f,'fd.dat'); 

if vybor <>0 then 
begin 
{создать новый файл} 
rewrite(f); 

writeln('Введите данные о книге'); 
         writeln('-----------------------------'); 
  for i:=1 to n do 
  begin 
     with kn_1 do begin 
    writeln(' Введите номер УДК '); 
       readln(n_UDK); 
    writeln('Введите Фамилию'); 
       readln(fam); 
    writeln(' Введите Иницалы автора '); 
       readln(io); 
    writeln('Введите название книги'); 
       readln(nazv_kn); 
    writeln('Введите год издания'); 
       readln(god_izd); 
    writeln('Введите кол-во экземпляров данной книги'); 
       readln(kol); 
   end; 
  write(f,kn_1); 
  end; 
  close(f); 
end; 
reset(f); 

  
 
for i:=2 to n do 
  for j:=n downto i do 
     if  kn[j-1].nazv_kn > kn[j].nazv_kn then begin 
       temp:=kn[j-1]; 
       kn[j-1]:=kn[j]; 
       kn[j]:=temp; 
end; 
       if  kn[i].kol > 3 then 
           for i:=1 to n do 
               writeln (kn[i].nazv_kn); 
end; 
readln; 
end. 



Где у меня ошибки ??
Подскажите как вывести результат на экран и сделать сортировку без использования массива,
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.