Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.04.2021
Сообщений: 80

Как сделать сортировку внутри файла

14.12.2022, 15:56. Показов 361. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, нужно в числовом файле числа расставить в порядке возрастания, но нужно провести все это действие внутри файла. Тип вводишь файл числа (не через программы), затем код все сортирует и готов отсортированный числовой файл.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const LATIN = ['a'..'z','A'..'Z'];
      SIN =[' ',',','.',':',';','[',']','{','}','"','@','#','№'];
var i,j,n,r,cheker:integer;
    ex,prov:boolean;
    a:array[1..10] of real;
    chil,buf,vvodf:real;
    fil:file of real;
    vvod: string;
begin
  prov:=true;
  assign(fil,'C:\Users\den-g\OneDrive\Рабочий стол\Лекции\Прочее\Коды\Основы алгоритмов\Практическая 12-2-5 ОА\Spisok.txt');
  reset(fil);
  write('Введите количество элементов ');
  readln(n);
  if n>10 then writeln('Ошибка! Можно до 10!')
  else
    begin
      writeln('Введите элементы: ');
      cheker:=0;
      repeat
        cheker:=cheker+1;
        readln(vvod);
        Val(vvod,vvodf,r);
        if not(r<>0) then 
          begin
            Val(vvod,vvodf,r);
            write(fil,vvodf);
          end
            else 
              begin
                writeln('Ошибка ввода');
                prov:=false;
              end;
         if cheker=n then prov:=false;
      until not(prov=true);
      close(fil);
      reset(fil);
      for i:=1 to n do
        begin
          read(fil,chil);
          a[i]:=chil;
        end;
      for i:=2 to n do
          begin
            j:=i;
            buf:=a[i];
            ex:=false;
                repeat
                    if a[j-1]>buf then
                      begin
                        a[j]:=a[j-1];
                        j:=j-1;
                      end 
                        else ex:=true;
                until ex or (j=1);
            a[j]:=buf;
       end;
       for i:=1 to n do
        write(a[i]:8);
        writeln;
       readln;
   end;
end.
Не обращайте внимание на непонятного рода проверку
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.12.2022, 15:56
Ответы с готовыми решениями:

Как сделать сортировку внутри класса?
Помогите понять как произвести сортировку внутри класса. Есть класс Person из трех векторов. После каждого добавления данных нужно...

Как сделать зависимость названия файла XL и ячейки внутри файла
Подскажите пожалуйста как сделать зависимость, что бы при изменение названия файла, менялась информация внутри этого же файла.

Сделать в программе сортировку списка типизированного файла
program phone; uses crt; type book=record name:string; phone:string; end; var f:file of book; zb:book;

4
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
14.12.2022, 16:41
Цитата Сообщение от SinedVesug Посмотреть сообщение
но нужно провести все это действие внутри файла.
это очень сложно и не нужно.

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

Цитата Сообщение от SinedVesug Посмотреть сообщение
Тип вводишь файл числа (не через программы),
это что означает, в твоём понимании?
0
0 / 0 / 0
Регистрация: 25.04.2021
Сообщений: 80
14.12.2022, 20:08  [ТС]
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
это очень сложно и не нужно.
Да понимаю сложно, да понимаю не нужно, но преподаватель сказал что внутри надо делать.
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
это что означает, в твоём понимании?
то что ты заходишь в этот текстовый файл через блокнот и сам вводишь эти числа
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
15.12.2022, 05:31
Цитата Сообщение от SinedVesug Посмотреть сообщение
но преподаватель сказал что внутри надо делать.
В этом случае нужно работать не с текстовым файлом, а типизированным.
Тогда с помощью seek можно гулять по файлу как по массиву.
1
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
15.12.2022, 09:48
Лучший ответ Сообщение было отмечено SinedVesug как решение

Решение

Цитата Сообщение от SinedVesug Посмотреть сообщение
то что ты заходишь в этот текстовый файл через блокнот и сам вводишь эти числа
это твое утверждение противоречит в первую очередь твоему же примеру кода.
смотри, вот это у тебя
Цитата Сообщение от SinedVesug Посмотреть сообщение
Pascal
7
   fil:file of real;
типизированный файл.
и он реально нужен в этой задаче! Потому что, как верно заметил JuriiMW, только с ним вообще можно сортировать содержимое файла напрямую на диске, без чтения в память.

Цитата Сообщение от SinedVesug Посмотреть сообщение
но преподаватель сказал что внутри надо делать.
- Вот вам, рядовой, лом, подметите плац!
Ага, понимаю...
Вот только не понимаю, твой препод понимает, что это дно? Точнее не дно, даже, а ДНИЩЕ?!

Подобный подход - это полный ахтунг - производительность в тысячи раз хуже, дисковому накопителю с подобными экзерсисами быстренько придёт каюк, надёжность у этого метода ниже плинтуса (если выключить питание/завершить программу экстренно, то файл данных, скорее всего, будет иметь потерянные числа, если вообще останется).

Поэтому непонятно - зачем это нужно?

да, ещё, с точки зрения алгоритма (и кода) этот способ НИЧЕМ не отличается от сортировки массива в памяти - только вместо обращения к I-му элементу, в файле нужно перед чтением нужно элемента просто сделать установку указателя Seek(f, i);

Добавлено через 29 минут
впрочем, нужен тебе код - получи и распишись.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
{ uses dos; }
const n = 10; 
 
filename = 'reals.dat';
 
{function FileExists(F : String) : Boolean;
var
  SR : SearchRec;
begin
  FindFirst(F, AnyFile, SR);
  FileExists := DosError = 0;
end;}
 
var
  realfile: file of Real;
  x, y, z: real;
  i, j: integer;
 
begin
  {создадим файл, если его нет}
  assign(realfile,filename);
  if Not FileExists(filename) then begin
     randomize;
     Rewrite(realfile);
     for i:=1 to n do begin 
        x:=Random()*random(100); 
        Write(realfile, x) 
     end;
     Close(realfile);
     WriteLn('Создан новый файл ',filename,' и заполнен случайными числами.');
  end;
 
  {выведем содержимое файла на экран}
  WriteLn('Содержимое файла ',filename,':');
  reset(realfile);
  for i:=1 to FileSize(realfile) do begin
      Read(realfile, x);
      Write(' ',x:0:3)  
  end;
  WriteLn;
  close(realfile);
 
  WriteLn;
  WriteLn('Выполним сортировку по неубыванию внутри файла.');
 
 
  {сортировка}
  reset(realfile);
  for i:=0 to FileSize(realfile)-2 do 
   for j:=i+1 to FileSize(realfile)-1 do begin
    Seek(realfile, i); Read(realfile,x);
    Seek(realfile, j); Read(realfile,y);
    if x>y then begin
        Seek(realfile, i); Write(realfile,y);
        Seek(realfile, j); Write(realfile,x);
        write('.') {будем выводить одну точку на экран каждый раз, 
                  когда меняем содержимое исходного файла}
    end;
  end;
  Close(realfile);
  WriteLn;
  WriteLn('Сортировка файла выполнена.');
  WriteLn;
 
 
  {выведем содержимое файла на экран}
  WriteLn('Содержимое файла ',filename,' после сортировки:');
  reset(realfile);
  for i:=1 to FileSize(realfile) do begin
      Read(realfile, x);
      Write(' ',x:0:3)  
  end;
  WriteLn;
  close(realfile);
 
  readln;
end.
если в твоём Паскале нет готовой функции FileExists, то можешь расскомментировать uses Dos и описание функции FileExists
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.12.2022, 09:48
Помогаю со студенческими работами здесь

Сделать сортировку при выводе текста из текстового файла в ListBox
Нужно сделать сортировку, по Выигрышу &quot;Рейтинг&quot; Проблема такая, что в текстовом файле числа и названия.Вот файл: Игрок Виталя,...

Как сделать сортировку?
Учил я язык, учил, а с сортировкой до сих пор беда %) Подскажите, как в данном коде в функции sort() сделать сортировку? Хотя бы для одного...

Как сделать сортировку
#include&lt;iostream&gt; using namespace std; myfunc(); int main() { const int n = 11;

Как сделать сортировку
Как сделать сортировку переделав этот код, чтобы получилось как в примере double massive = new double; int countm = 0; ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru