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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 16:29   #1
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию Pascal, работа с файлами

Всем добрый вечер, имеется вот такая задача:
1.Создать нетекстовый файл Book.dat, в котором хранятся данные о книгах (название книги, автор, число страниц, год издания).
2.Переписать в текстовый файл информацию о книгах, упорядоченную в алфавитном по-рядке по авторам.
3.Переписать в отдельный файл авторов и названия книг, изданных после 2000 г.
4.Вывести на экран название самой толстой книги.

1-й пункт - понятен.
2-й пункт - как переписать все сведения в текстовый файл понятно, НО непонятно как это сделать с упорядочиванием, да еще и в алфавитном порядке.
3-й пункт - как переписать все сведения в текстовый файл тоже понятно, но непонятно как это делать с условием, что год книги>2000г.
4-й пункт понятен полностью.

Нужна ваша помощь с 2 и 3 пунктами, заранее спасибо
Monori вне форума Ответить с цитированием
Старый 25.04.2012, 16:50   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
2-й пункт - как переписать все сведения в текстовый файл понятно, НО непонятно как это сделать с упорядочиванием, да еще и в алфавитном порядке.
1. Загружаете исходный файл в массив
2. сортируете массив
3. сохраняете из массива как текст
(можно совместить 2 и 3 пункты)
Цитата:
3-й пункт - как переписать все сведения в текстовый файл тоже понятно, но непонятно как это делать с условием, что год книги>2000г.
1. см. п.1 из предыдущего примера
2. сохраняете массив как текст, для книг старше 2000г.

всё как-бы просто)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 25.04.2012, 16:53   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Ну, раз уж тебе понятен первый пункт, я предполагаю, что использовать для описания книги ты будешь записи.
Много книг - массив записей.

Пункт два: сотрируешь массив по выбранному полю (в задании четко не сказано, по какому, но я думаю по названию будет в самый раз).

Пункт три: вообще нет ничего проще. Код будет выглядеть примерно так:
Код:
for i:=0 to high(books) do
  if books[i].year>2000 then
    write (T,books[i])
где books - массив записей, year - поле обозначающее год в записи, T - открытй для записи file of `название записи`
Все тривиальное просто

Последний раз редактировалось whatever; 25.04.2012 в 16:54. Причина: фигасе опечатался Оо
whatever вне форума Ответить с цитированием
Старый 27.04.2012, 18:05   #4
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию

Пункты между собой не получается соединить

Код:

program var12;
uses crt;
type
  RBook = record
    name: string;
    author: string;
    pages:integer;
    year:integer;
  end;
var
  i,n : integer;
  q   : RBook;
  f   : file of RBook;
  f2  :text;
begin
  assign(f, 'C:\Book.dat');
  assign(f2,'C:\book.txt');
    rewrite(f);
    WriteLn('Сколько книг хотите ввести?');
    ReadLn(n);
    for i := 1 to n do begin
      write(' Введите название книги: ');
      readln(q.name);
      write(' Введите автора: ');
      readln(q.author);
      write(' Введите количество страниц: ');
      readln(q.pages);
      write(' Введите год издания: ');
      readln(q.year);
      write(f, q);
  end;  
  Close(f);
  Reset(f);
  Size := FileSize(F);
  for i := 1 to Size do
    for j := 1 to Size - i do begin
      Seek(F, j-1); 
      Read(F, q); 
      Read(F, q1);
      if q.author > q1.author then begin
        Seek(F, j-1);
        Write(F,q1);
        Write(F,q);
      end;
    end;
rewrite(f2);
read(f2, q)
writeln(f2, q);
close(f);close(f2);

end.

Последний раз редактировалось Monori; 27.04.2012 в 18:26.
Monori вне форума Ответить с цитированием
Старый 27.04.2012, 18:43   #5
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Так массив то где?

Код:
  Tbooks=array[1..50]of RBook;  //лучше динамический, но непонятно, в какоми паскале ты пишешь

var
  i,j,n : integer;
  q   : TBooks;
  f   : file of rbook;
  f2:text;
//  f2  :text;
  tmp:Rbook;
  size:integer;
begin
  assign(f, 'C:\Book.dat');
  assign(f2,'C:\book.txt');
    rewrite(f);
    WriteLn('Сколько книг хотите ввести?');
    ReadLn(n);
    for i := 1 to n do begin
      write(' Введите название книги: ');
      readln(q[i].name);
      write(' Введите автора: ');
      readln(q[i].author);
      write(' Введите количество страниц: ');
      readln(q[i].pages);
      write(' Введите год издания: ');
      readln(q[i].year);
      write(f, q[i]);
  end;
  Close(f);
//.........
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 27.04.2012, 18:54   #6
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию

Error:тип параметра не совпадает с типом элемента файла.
Ошибка как и в прошлый раз. указывает на ....
Read(F, q);
Read(F, q1);


Что значит? как исправить?
Monori вне форума Ответить с цитированием
Старый 27.04.2012, 19:18   #7
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Monori Посмотреть сообщение
Error:тип параметра не совпадает с типом элемента файла.
Ошибка как и в прошлый раз. указывает на ....
Read(F, q);
Read(F, q1);


Что значит? как исправить?
А у меня машина не заводится. Как так то? Че делать?

P.S. Улавливаешь, к чему я это?
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 27.04.2012, 19:20   #8
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию

Честно? Не особо.
Monori вне форума Ответить с цитированием
Старый 27.04.2012, 19:23   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от Monori Посмотреть сообщение
Честно? Не особо.
:facepalm:

Ты не видишь мою машину. Ты не знаешь, что я с ней делал. Ты мне можешь дать совет?

Кароче, код покажи. Или регистрируйся на форуме с экстрасенсами, тут таких нет, мы все вместе искали.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 27.04.2012, 19:30   #10
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
:facepalm:

Ты не видишь мою машину. Ты не знаешь, что я с ней делал. Ты мне можешь дать совет?

Кароче, код покажи. Или регистрируйся на форуме с экстрасенсами, тут таких нет, мы все вместе искали.
Код:
program trololo;
uses crt;
type
  RBook = record
    name: string;
    author: string;
    pages:integer;
    year:integer;
  end;
Tbooks=array[1..50]of RBook;  //ëó÷øå äèíàìè÷åñêèé, íî íåïîíÿòíî, â êàêîìè ïàñêàëå òû ïèøåøü

var
  i,j,n : integer;
  q   : TBooks;
  f   : file of rbook;
  f2:text;
//  f2  :text;
  tmp:Rbook;
  size:integer;
begin
  assign(f, 'C:\Book.dat');
  assign(f2,'C:\book.txt');
    rewrite(f);
    WriteLn('Ñêîëüêî êíèã õîòèòå ââåñòè?');
    ReadLn(n);
    for i := 1 to n do begin
      write(' Ââåäèòå íàçâàíèå êíèãè: ');
      readln(q[i].name);
      write(' Ââåäèòå àâòîðà: ');
      readln(q[i].author);
      write(' Ââåäèòå êîëè÷åñòâî ñòðàíèö: ');
      readln(q[i].pages);
      write(' Ââåäèòå ãîä èçäàíèÿ: ');
      readln(q[i].year);
      write(f, q[i]);
  end;
  Close(f);
Close(f);
  Reset(f);
  Size := FileSize(F);
  for i := 1 to Size do
    for j := 1 to Size - i do begin
      Seek(F, j-1);
      Read(F, q);
      Read(F, q1);
      if q.author > q1.author then begin
        Seek(F, j-1);
        Write(F,q1);
        Write(F,q);
      end;
    end;
rewrite(f2);
read(f2, q)
writeln(f2, q);
close(f);close(f2);

Вот код, исправленный вами. при запуске части программы, выдает ошибку и курсор ставит на красный сектор.

Блин, русские символы скопировались плохо

Последний раз редактировалось Monori; 27.04.2012 в 19:33.
Monori вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами (pascal) zenid Помощь студентам 1 26.12.2011 16:18
Работа с файлами (Pascal) andrey256 Помощь студентам 5 25.10.2011 20:52
Работа с файлами в Pascal Fellics{новичок} Помощь студентам 1 16.12.2009 10:20
Pascal/ работа с файлами V@dlo Помощь студентам 1 14.11.2009 19:55
pascal работа с файлами evilguy Помощь студентам 3 18.04.2009 18:08