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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 10:13   #11
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Впрочем я представляю еще одну ситуацию: У тебя 1ТБ инфы в файле, и ты этим методом пробуешь сортировать
Безусловно, 1 ТБ информации нужно сначала считать в ОП и сортировать только там.


Мне кажется, если речь идет о больших объемов данных, прежде всего нужно выбрать подходящий случаю алгоритм сортировки, а не дискутировать о том, где лучше сортировать пузырьком - в ОП или файле.
s-andriano вне форума Ответить с цитированием
Старый 08.05.2012, 10:57   #12
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Сортировать записи прямо в файле не получится (даже и не заморачивайся).
Сначала тебе придется вводить список фильмов в память (динамический массив, список...), после в памяти сортировать, а уже только потом переписывать в файл.
В твоем (студенческом) случае проще всего будет так:
Код:
Program trololo;
uses crt;
type
    film = record
    name : string;
    avtor : string;
    stud  : string;
    god  : string;
end;
var
i,j     : integer;
q    :array[1..100] of film;
w    :film;
f      : file of film;
f2    : file of string;
Begin

Write('Сколько кинчиков вы вводите?:');readln(n);

{вводим кинчики}
for i := 1 to n do begin
  with q[i] do begin
      write('Введите название фильма:');      readln(name);
      write('Киностудия:');                          readln(stud);
      write('Режиссер:');                            readln(avtor);
      write('Год выпуска:');                        readln(god);
 end;
end;

{Сортирим}
for i := 1 to n do begin
 for j := i to n do begin
  if q[i].god<q[j].god then begin w:=q[i];q[i]:=q[j];q[j]:=w;end;
 end
end;

{А вот теперь записываем}
Assign(F, 'C:\Video.dat');
Rewrite(f);
blockwrite(f,q,n); {Отут могу напутать с параметрами - посмотри в хелпе как точною...}
close(f);

При проверке, Паскаль ругается: Неизвестный идентефикатор Blockwrite.
По идее, BlockWrite - процедура, как ее можно объявить?
Monori вне форума Ответить с цитированием
Старый 08.05.2012, 11:10   #13
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Не нужно ее объявлять. Ошибка в чем-то другом.
Для начала проверьте, что этот идентификатор не содержит символов кириллицы сходных по написанию с символами латиницы.

Кстати, возможно, неизвестный идентификатор - это "n", я не увидел, где он описан.
s-andriano вне форума Ответить с цитированием
Старый 08.05.2012, 11:18   #14
Monori
Пользователь
 
Аватар для Monori
 
Регистрация: 11.04.2012
Сообщений: 13
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Не нужно ее объявлять. Ошибка в чем-то другом.
Для начала проверьте, что этот идентификатор не содержит символов кириллицы сходных по написанию с символами латиницы.

Кстати, возможно, неизвестный идентификатор - это "n", я не увидел, где он описан.
1) Насчет N: я про него заметила в самом начале, и объявила его как тип Integer;
2) Насчет сходного написания: проверила весь код, на всякий, переписала заново, результатов нет.
Monori вне форума Ответить с цитированием
Старый 09.05.2012, 13:33   #15
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

BlockWrite тут в программе никаких боком не подходит!

вот, примерчик набросал.
проверяйте, тестируйте, разбирайтесь...

Код:
program trololo;
uses crt;

const MaxFilmCount = 100;

type
  film = record
    name: string[100];
    avtor: string[50];
    stud: string[100];
    god: string[4];
  end;
var
  q: film;
  AllFilms : array[1..MaxFilmCount] of film;
  f: file of film;
  f2: text;
  i, j, Choice, n: integer;
begin
  Assign(F, 'C:\Video.dat');
  Assign(F2, 'C:\Film.txt');

  repeat
    ClrScr;
    WriteLn('Выберите действие:');
    WriteLn('1. создание файла Video.dat');
    WriteLn('2. Вывод содержимого файла Video.dat на экран');
    WriteLn('3. Export содержимого в текст с сортировкой по году');
    WriTeln('4. Выход из программы ');

    WriteLn; Write('Ваш выбор:'); Readln(Choice);

    case Choice of
      1: begin

          Rewrite(f);
          Writeln('Сколько фильмов будете вводить?');
          Readln(n);

          for i := 1 to n do begin
            write('Введите название фильма:');
            readln(q.name);
            write('Киностудия:');
            readln(q.stud);
            write('Режиссер:');
            readln(q.avtor);
            write('Год выпуска:');
            readln(q.god);
            write(f, q);
          end;
          close(f);
        end;
      2: begin
           ClrScr;
           WriteLn('Содержимое файла:');
           Reset(f);
           while not eof(f) do begin
             read(f, q);
             WriteLn(q.name:45,' ',q.stud:25,' ',q.god);
           end;
           Close(f);
           WriteLn('Нажмите Enter для продолжения...');
           Readln
         end;
      3: begin
           Reset(f);
           if FileSize(f)>MaxFilmCount then begin
             WriteLn('Извините, но программа сортировки не работает с файлами,');
             Writeln('которые содержат информацию более чем о ',MaxFilmCount, ' фильмах.');
           end
           else begin
             n := FileSize(f);
             for i:=1 to n do read(f, AllFilms[i]);
             Close(f);


             {сортируем по году выпуска}
             for i:=1 to n-1 do
               for j:=i+1 to n do
                 if  AllFilms[i].God>AllFilms[j].God then begin
                   q := AllFilms[i];
                   AllFilms[i] := AllFilms[j];
                   AllFilms[j] := q;
                 end;

             {вывод в текстовый файл}
             rewrite(f2);
             for i := 1 to n do
                writeln(f2, AllFilms[i].name, ' ', AllFilms[i].stud, ' ',
                       AllFilms[i].avtor, ' ', AllFilms[i].god);
             Close(f2);
           end;
           WriteLn('В файл film.txt успешно записаны данные о ',n,' фильмах.');
           WriteLn;
           WriteLn('Нажмите Enter для продолжения...');
           Readln
         end;
    end;

  until Choice = 4;

  WriteLn('Нажмите Enter для выхода из программы');
  Readln
end.

Monori, кстати, а какой у Вас компилятор Паскаля?!

Последний раз редактировалось Serge_Bliznykov; 09.05.2012 в 14:03.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с файлами (pascal) zenid Помощь студентам 1 26.12.2011 16:18
Работа с файлами (Pascal). MaxuM Помощь студентам 6 26.11.2011 21:01
Работа с файлами (Pascal) andrey256 Помощь студентам 5 25.10.2011 20:52
PASCAL Работа с файлами Natsu Помощь студентам 22 28.02.2010 20:16