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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2009, 11:28   #1
Refenement
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 13
По умолчанию Работа с файлами и записями. Помощь с итоговой

Помогите пожалуйста сделать работу
1.Создать нетекстовый файл Book.dat, в котором хранятся данные о книгах (название книги, автор, число страниц, год издания).
2.Переписать в текстовый файл информацию о книгах, упорядоченную в алфавитном по-рядке по авторам.
3.Переписать в отдельный файл авторов и названия книг, изданных после 2000 г.
4.Вывести на экран название самой толстой книги.
Я первый раз вижу задания вроде этих. Совсем запуталась и ничего не могу сделать. Объясните пожалуйста как делать
Refenement вне форума Ответить с цитированием
Старый 22.02.2009, 12:08   #2
XeN0N
Форумчанин
 
Аватар для XeN0N
 
Регистрация: 18.01.2009
Сообщений: 118
По умолчанию

язык ? я бы написал на питоне но чтото мне подсказывает что не подойдет
XeN0N вне форума Ответить с цитированием
Старый 22.02.2009, 12:09   #3
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

ну это очень просто делается.

создаеш массив структур (типа вот такой)

Код:
struct KNIGA {
         char AVTOR[20];
         char NAZVANIE[20];
         int GOD_IZDANNIYA;
         int CHISLO_STRANIC;
}kn[10];
далее заполняеш ее и записываеш в файл.

поиск оформляеш так:

Код:
for(int i=0;i<n;i++) {    
      if(kh[i].GOD_IZDANIYA>2000)
         {
             //пишем kn[i] в другой файл
         }
}
n -количество записей
counter вне форума Ответить с цитированием
Старый 22.02.2009, 12:48   #4
Refenement
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 13
По умолчанию

Цитата:
Сообщение от XeN0N Посмотреть сообщение
язык ? я бы написал на питоне но чтото мне подсказывает что не подойдет
надо написать в Паскале
Refenement вне форума Ответить с цитированием
Старый 22.02.2009, 22:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Refenement, солнышко Вы наше. Ну кто ж за Вас всё делать будет?... нужно немножко и самой поработать...
вот, для затравки, решение первого пункта задания:
Код:
program primer1;
uses crt;
type
  RBook = record
    name_book : string[30];
    avtor     : string[20];
    pages     : word;
    year_pub  : word;
  end;
var
  i,n : integer;
  q   : RBook;
  f   : file of RBook;
begin
  assign(f, 'Book.dat');
{$I-}
  reset(f);
{$I+}
  if IOResult <> 0 then
  begin
    rewrite(f);
    WriteLn('Введите, сколько книг будете вводить:');
    ReadLn(n);
    WriteLn('Создаём файл BOOK.DAT на ',n:1,' записей...');
    for i := 1 to n do begin
      write(' Введите название книги: ');
      readln(q.name_book);
      write(' Введите автора: ');
      readln(q.avtor);
      write(' Введите количество страниц: ');
      readln(q.pages);
      write(' Введите год издания: ');
      readln(q.year_pub);
      write(f, q);
    end;
  end;  
  Close(f);
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.02.2009, 06:54   #6
Refenement
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 13
По умолчанию

Я делала. Тока совсем запуталась
Вот что у меня есть
Код:
type
    book = record
     name:string[50];
     autor:string[30];
     pages:integer;
     year:integer;
    end;
var
   books:array[1..200] of book;
   booksfile:file of book; 
   textfile:text;
   i,n:integer;
begin
...
     assign(booksfile,'book.dat');
     reset(booksfile);
     assign(textfile,'book.txt');
     rewrite(textfile);
     i:=1;
     while not eof(booksfile) do begin
           read(booksfile,books[i]);
           i:=i+1;
           end;
     n:=i;
Всё дальше мой мозг отказывается понимать, что надо делать дальше.
Что в этом коде не правильно?
Refenement вне форума Ответить с цитированием
Старый 23.02.2009, 08:23   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну логично далее продолжить твой While, учитывая что ты воспользовавшись любезнейшим советом глубокоуважаемого Сержа, и заполнила файлик DAT примерно таким:
Цитата:
Вывести на экран название самой толстой книги.
Код:
var max:integer; CurBook:book;
....
max:=books[1].pages;
while 
...
if books[i].pages>max then begin
  max:=books[i].pages; CurBook:=Books[i];
end;
...
end {while]
writeln(curbook.name);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.02.2009, 13:24   #8
Refenement
Пользователь
 
Регистрация: 19.12.2008
Сообщений: 13
По умолчанию

Брррр
а как так сразу перепрыгнуть на 4 задание
А как же остальные 2?С первым заданием я как бы разобралась. Поняла, гдя я остановилась.
А как делать 2 и 3 даже не представляю. Да и 4 тоже не знала как делать. Ща тоже немного разобралась
Refenement вне форума Ответить с цитированием
Старый 23.02.2009, 13:45   #9
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Лучше каждое задание оформить в виде отдельной процедурки, чтоб не путаться. Напишу код для третьей
Код:
procedure after2000(sfname, tfname: string);
//sfname - имя файла с книгами, tfname - имя текстового файла,
//куда будем переписывать
var sf: file of book; tf: text; b: book;
begin
assign(sf, sfname);
reset(sf);
assign(tf, tfname);
rewrite(tf);
while not eof(sf) do
  begin
  read(sf, b);
  if b.year > 2000 then
    writeln(tf, b.author,' ',b.name);
  end;
close(tf);
close(sf);
end;
По поводу второй - с такой вещью как списки знакомы? Если нет, то тупо считывать все записи в массив, сортировать его любым методом, и поэлементно записывать в файл
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 23.02.2009, 13:58   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
упорядоченную в алфавитном по-рядке по авторам.
Это нужно пройти циклом по массиву и в нем применить метод сортировки например пузырька, порой поиском по форуму тут уже были примеры алгоритмов сортировки
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с файлами и записями Vladislaff Паскаль, Turbo Pascal, PascalABC.NET 0 21.12.2008 11:57
работа с записями Mango Помощь студентам 2 12.10.2008 23:54
Работа с файлами, нужна помощь Johnson Общие вопросы Delphi 5 19.07.2008 23:15
Работа с файлами. Нужна помощь. Corwin88 Помощь студентам 9 14.05.2008 22:37