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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2016, 14:35   #1
maxwelln1
Пользователь
 
Регистрация: 07.10.2016
Сообщений: 23
По умолчанию Паскаль. Проход по файлу (сортировка типизированного файла)

Код:
procedure sort(var f:file of TGorod);
  var
   i, j: Integer;
  g: TGorodArr;
  t: TGorod;
begin
 Rewrite(f);
  for i:=1 to n do
  with g[i] do
  begin
    Write('Город: '); ReadLn(name);
    Write('Численность: '); ReadLn(chislen);
  end;
  
  for i:=n downto 2 do
  for j:=2 to i do
    if g[j].chislen<g[j-1].chislen then
    begin
      t:=g[j-1];
      g[j-1]:=g[j];
      g[j]:=t;
    end;
  for i:=1 to n do
  Write(f,g[i]);
  Reset(f); WriteLn('Город':16,'Численность':16);
  close(f);
  end;
  
  procedure vivod (Const f:file of TGorod);
  var
   t: TGorod;
  begin
  reset(f);
  while not EOF(F) do with t do begin
    Read(f,t); WriteLn(name:16,chislen:16);
  end;
  Close(f);
  end;
  
  var
  f: file of TGorod;
  begin
  assign(f,'f:\Spisok.txt');
  sort(f);
  vivod(f);
end.
Эта программа сортирует города по их численности по возрастанию. Мне надо, чтобы она проходила как бы не по массиву а по файлу
maxwelln1 вне форума Ответить с цитированием
Старый 14.12.2016, 15:23   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сортировка непосредственно в типизированном файле? Примерно так
Код:
  Size:=FileSize(f);
  for i:=0 to Size - 2 do begin
    Seek(f,i);
    Read(f,t1);
    for j:=i+1 to Size - 1 do begin
      Seek(f,j);
      Read(f,t2);
      if t2.chislen<t1.chislen then begin
        t:=t1;
        t1:=t2;
        Seek(f,i);
        Write(f,t1);
        Seek(f,j);
        Write(f,t);
      end;
    end;
  end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2016, 15:27   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

сортировать напрямую в файле можно. но это чуть как не эффективно и не удобно.
чем не устраивает решение через чтение в память, сортировка в памяти, запись отсортированного списка в тот же файл?

пример сортировки в файле можете посмотреть в этой теме:
Добавить элемент в типизированный файл и его с отсортировать


упс. я опоздал с ответом!
но вопрос о том, насколько это оправдано, всё равно остался.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2016, 17:11   #4
maxwelln1
Пользователь
 
Регистрация: 07.10.2016
Сообщений: 23
По умолчанию

Так вот в том то и дело. Я даже сейчас не могу вставить ту часть кода, которую мне написали в свой код. Препод требует такое решение, я бы никогда не стал так писать. Не могли бы вы мне немного помочь с итоговым кодом?
maxwelln1 вне форума Ответить с цитированием
Старый 14.12.2016, 17:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от maxwelln1 Посмотреть сообщение
Так вот в том то и дело.
в чём дело?


Цитата:
Сообщение от maxwelln1 Посмотреть сообщение
Я даже сейчас не могу вставить ту часть кода, которую мне написали в свой код.
почему?

сразу же возникают сомнения в том, что код из #1 Вы сами написали! (ну или хотя бы разобрались в нём)!

Что конкретно у Вас не получается?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2016, 17:43   #6
maxwelln1
Пользователь
 
Регистрация: 07.10.2016
Сообщений: 23
По умолчанию

Я в своем коде все понимаю. Единственное что для меня до сих пор сложно это описание процедур, сам синтаксис. Логика решения и все действия над данными я полностью понимаю, а синтаксис не могу пока что
maxwelln1 вне форума Ответить с цитированием
Старый 14.12.2016, 17:54   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:

procedure sort(var f:file of TGorod);
  var
   i, j, Size: Integer;
   t1, t2 : TGorod;
begin
  Rewrite(f);
  for i:=1 to n do  begin
    Write('Город: '); ReadLn(t1.name);
    Write('Численность: '); ReadLn(t1.chislen);
    Write(f, t1);
  end;
  CloseFile(f);

  Reset(f);
  Size:=FileSize(f);
  for i:=0 to Size - 2 do begin
    Seek(f,i);
    Read(f,t1);
    for j:=i+1 to Size - 1 do begin
      Seek(f,j);
      Read(f,t2);
      if t2.chislen<t1.chislen then begin
        t:=t1;
        t1:=t2;
        Seek(f,i);
        Write(f,t1);
        Seek(f,j);
        Write(f,t);
      end;
    end;
  end;
  CloseFile(f);
  
end;

Цитата:
Сообщение от maxwelln1 Посмотреть сообщение
Код:
assign(f,'f:\Spisok.txt');
это не текстовый файл. я бы рекомендовал сменить ему расширение на любое другое, более адекватное.
например, на .dat
Код:
AssignFile(f,'f:\Spisok.dat');

p.s. ВНИМАНИЕ! я код писал прямо в браузере и, разумеется, НЕ ПРОВЕРЯЛ!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2016, 17:56   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

CloseFile(f); там не надо, в конец процедуры его
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2016, 18:03   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
CloseFile(f); там не надо, в конец процедуры его
я предпочитаю закрыть файл, а потом открыть.
иначе кеши, файловые буферы и тому подобные штуки могут (потенциально) привести к сбоям. Возможно, я перестраховываюсь!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
паскаль. удаление чисел из типизированного файла. SOWAA Помощь студентам 10 19.08.2013 20:18
паскаль. удаление чисел из типизированного файла. SOWAA Помощь студентам 2 18.08.2013 23:17
Сортировка типизированного файла на Microsoft Visual Studio С++ Panda1 Помощь студентам 3 17.02.2013 00:26
Сортировка типизированного файла Panda1 Помощь студентам 0 14.02.2013 23:24
Типизированные файлы.Создание, удаление, редактирование, сортировка записей типизированного файла.Паскаль Студент Шиза Помощь студентам 6 08.12.2007 13:41