bar2104

18 05 2020

May 18th, 2020
1,148
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //18.05.20 vk.com/id209832291
  2.  
  3. const Nmax = 100; // максимально кол-во элементов в массиве
  4.  
  5. //Описание типов
  6. type
  7. TVector = array[1..nmax] of integer;//Заготовка под массив
  8.  
  9. // Запись - структура используемых данных
  10. RVector = record
  11.         V : ^TVector;   // Ссылка на массив
  12.         num : integer;  // Кол-во элементов в массиве
  13. end;
  14.  
  15. Pmatrix = ^TObjVector;  //Ссылка на массив
  16.  
  17. //Наш объект
  18. TObjVector = object
  19.         // структура наших данных
  20.     private
  21.         vector : RVector;
  22.        
  23.     public
  24.         //Методы объекта
  25.         constructor Init;                                                   // Конструктор
  26.         procedure RandomFile(name_out : string; count, min, max : integer); // Генерирование случайного массива и запись в файл
  27.         procedure LoadFile(name_in : string);                               // Загрузка данных из файла
  28.         procedure SaveFile(name_out : string);                              // Сохранение существующего массива в файл
  29.         procedure Print;                                                    // Вывод текцщего массива на экран
  30.         procedure Bubble_sort;                                              // Сортировка существующего массива
  31.         destructor Done;                                                    // Очистка памяти
  32. end;
  33.  
  34. {**********************************************************}
  35. {*********************КОНСТРУКТОР**************************}
  36. constructor TObjVector.init;
  37. begin
  38.     vector.num:=0;  //Обнуляем кол-во элементов массива(изначально он пустой)
  39.     writeln('Инициализация класса завершена');
  40. end;
  41.  
  42. {**********************************************************}
  43. {************ГЕНЕРАЦИЯ МАССИВА И ЗАПИСЬ В ФАЙЛ*************}
  44. procedure TObjVector.randomfile(name_out:string; count,min,max:integer);
  45. var
  46.     i:byte;     // Счетчик
  47.     fOut:text;  // Исполдьзуемый файл
  48. begin
  49.     assign(fout, name_out);     // Присваиваем файл с именем name_out
  50.     rewrite(fout);              // Открываем на запись
  51.     //Проверка введенного кол-ва элементов массива
  52.     if (count>0) and (count<=nmax) then
  53.     begin
  54.         randomize;
  55.  
  56.         if vector.num>0 then // Если массив не пустой, сбрасываем его
  57.         begin
  58.             writeln('Данные были сброшены');
  59.             freemem(vector.v, sizeof(integer)*vector.num);  // Очищаем память
  60.             vector.num:=0;                                  // Устанавливаем текущее кол-во элементов на 0
  61.         end;
  62.        
  63.         vector.num:=count;                                  //Устанавливаем текущее кол-во элементов равным введенному значению
  64.         getmem(vector.v, sizeof(integer)*vector.num);       //Выделяем необходимое кол-во памяти
  65.        
  66.         // Повторяем count раз
  67.         for i:=1 to vector.num do
  68.         begin
  69.             vector.v^[i]:=random(max-min)+min;  // Генерируем случайное значение и записываем в массив
  70.             writeln(fout, vector.v^[i],'');     // Записываем в файл
  71.         end;
  72.     end
  73.     else writeln('Некорректное кол-во count элементов'); //Сообщение об ошибке если введенное count некорректно
  74.        
  75.     close(fout);    // Закрытие файла
  76.    
  77.    
  78. end;
  79.  
  80.  
  81. {**********************************************************}
  82. procedure TObjVector.loadfile(name_in:string);
  83. var
  84.     i:byte;
  85.     k:integer;
  86.     fin:text;
  87. begin
  88.     assign(fin, name_in);
  89.     {$i-}  reset(fin); {$i-}
  90.    
  91.     if IOResult <> 0 then
  92.         writeln('Файл не найден')
  93.     else
  94.     begin
  95.         if vector.num<>0 then
  96.         begin
  97.             freemem(vector.v, sizeof(integer)*vector.num);
  98.             vector.num:=0;
  99.         end;
  100.        
  101.         i:=0;
  102.         while not EOF(fin) do
  103.         begin
  104.             read(fin,k);
  105.             inc(i);
  106.         end;
  107.        
  108.         if (i>0) and (i<=nmax) then
  109.         begin
  110.             vector.num:=i;
  111.             getmem(vector.v, sizeof(integer)*vector.num);
  112.            
  113.             reset(fin);
  114.            
  115.             i:=1;
  116.             while not EOF(fin) do
  117.             begin
  118.                 read(fin,vector.v^[i]);
  119.                 inc(i);
  120.             end;
  121.         end else writeln('Слишком много элементов');
  122.        
  123.         close(fin);
  124.     end;
  125.    
  126. end;
  127.  
  128.  
  129. {**********************************************************}
  130. procedure TObjVector.savefile(name_out : string);
  131. var
  132.     i:byte;
  133.     fOut:text;
  134. begin
  135.     assign(fout, name_out);
  136.     rewrite(fout);
  137.     if vector.num<>0 then
  138.     begin
  139.         for i:=1 to vector.num do
  140.             write(fout,vector.v^[i],' ');
  141.     end else writeln('Массив пустой');
  142.     close(fout);
  143. end;
  144.  
  145.  
  146. {**********************************************************}
  147. procedure TObjVector.bubble_sort;
  148. var
  149.         i,j : integer;
  150.         k : integer;
  151. begin
  152.         if (Vector.Num>=2) then begin
  153.                 for i:=1 to Vector.num-1 do begin
  154.                         for j:=1 to Vector.num-i do begin
  155.                                 if Vector.V^[j]>Vector.V^[j+1] then begin
  156.                                         k:=Vector.V^[j];
  157.                                         Vector.V^[j]:=Vector.V^[j+1];
  158.                                         Vector.V^[j+1]:=k;
  159.                                 end;
  160.                         end;
  161.                 end;
  162.         end else writeln('Num<2');
  163.         writeln('end bubble_sort');
  164. end;
  165.  
  166. {**********************************************************}
  167. procedure TObjVector.Print;
  168. var
  169.     i : integer;
  170. begin
  171.     if Vector.Num>0 then begin
  172.         for i:=1 to Vector.num do
  173.             write(Vector.V^[i], ' ');
  174.         writeln;
  175.     end else writeln('Num=0');
  176.  
  177. end;
  178.  
  179.  
  180. {**********************************************************}
  181. destructor TObjVector.done;
  182. begin
  183.     if Vector.Num>0 then
  184.     begin
  185.         freemem(vector.v, sizeof(integer)*vector.num);
  186.     end;
  187. end;
  188.  
  189.  
  190. {**********************************************************}
  191. var
  192.     mymatrix:TObjVector;
  193.     obj2:Pmatrix;
  194.  
  195. begin
  196. //new(obj2,init);
  197. mymatrix.init;
  198. mymatrix.randomfile('test.dat', 30,5,50);
  199. mymatrix.randomfile('test.dat', 5,5,20);
  200. mymatrix.bubble_sort;
  201. mymatrix.savefile('qqq.dat');
  202. mymatrix.loadfile('qq1.dat');
  203. end.
RAW Paste Data