Advertisement
Alex_Fomin

rety tors

Nov 14th, 2015
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 7.94 KB | None | 0 0
  1. //************************************************************//
  2. //             Программу написал: Александр Фомин             //
  3. //              Форум: http://www.cyberpascal.ru              //
  4. //            В контакте: http://vk.com/serjant372            //
  5. //     Эл.почта: admin@cyberpascal.ru | fomin_a_s@mail.ru     //
  6. //************************************************************//
  7.  
  8. Program CPascal; // https://otvet.mail.ru/answer/1789592069
  9.  
  10. const def_name_input1=('InPutA.txt'); // Имя поумолчанию входного файла 1
  11.       def_name_input2=('InPutB.txt'); // Имя поумолчанию входного файла 2
  12.       def_name_output=('OutPut.txt'); // Имя поумолчанию выходного файла
  13.      
  14. var name_input1,name_input2,name_output:string; // Имена файлов
  15.     data:array [1..3] of array of integer; // Массив данных
  16.  
  17. // Процедура чтения данных из файла...
  18. Procedure ReadData(filename:string; var data:array of integer);
  19. var tdata:text; // Текстовый файл
  20.     index:longint; // Счетчик компонент
  21. Begin
  22. Assign(TData,FileName); // Подключаем файл
  23. Reset(TData); // Открываем файл для чтения
  24. Index:=0; // Обнуляем...
  25.  
  26. While not Eof(TData) do
  27.       Begin
  28.       SetLength(Data,Succ(Index));
  29.       Read(TData,Data[Index]);
  30.       Inc(Index);
  31.       end;
  32.    
  33. Close(TData); // Закрываем файл
  34. end; // Конец ReadData
  35.  
  36. // Процедура записи данных из файла...
  37. Procedure WriteData(filename:string; data:array of integer);
  38. var tdata:text; // Текстовый файл
  39.     index:longint; // Счетчик компонет
  40. Begin
  41. Assign(TData,FileName); // Подключаем файл
  42. ReWrite(TData); // Создаем и открываем файл для записи
  43.  
  44. for Index:=0 to Pred(Data.Length) do Write(TData,Data[Index]+#32);
  45.    
  46. Close(TData); // Закрываем файл
  47. end; // Конец WriteData
  48.  
  49. // Процедура слияния массивов...
  50. Procedure FormingData(var data:array of integer; data1,data2:array of integer);
  51. var index1,index2,index3:longint;
  52. Begin
  53. Index1:=0;
  54. Index2:=0;
  55. Index3:=0;
  56.  
  57. While (Index1 <= Pred(Data1.Length)) and (Index2 <= Pred(Data2.Length)) do
  58.       Begin
  59.       if Data1[Index1] < Data2[Index2] then
  60.                                            Begin
  61.                                            SetLength(Data,Succ(Index3));
  62.                                            Data[Index3]:=Data1[Index1];
  63.                                            Inc(Index1);
  64.                                            end
  65.                                        else
  66.                                            Begin
  67.                                            SetLength(Data,Succ(Index3));
  68.                                            Data[Index3]:=Data2[Index2];
  69.                                            Inc(Index2);
  70.                                            end;
  71.      Inc(Index3);
  72.      end; // Конец While
  73.  
  74. While Index1 <= Pred(Data1.Length) do
  75.       Begin
  76.       SetLength(Data,Succ(Index3));
  77.       Data[Index3]:=Data1[Index1];
  78.       Inc(Index1);
  79.       Inc(Index3);
  80.       end; // Конец While
  81.  
  82. While Index2 <= Pred(Data2.Length) do
  83.       Begin
  84.       SetLength(Data,Succ(Index3));
  85.       Data[Index3]:=Data2[Index2];
  86.       Inc(Index2);
  87.       Inc(Index3);
  88.       end; // Конец While
  89.  
  90. // Избавимся от повторений...
  91. Index1:=0;
  92.  
  93. While Index1 <= Pred(Data.Length) do
  94.       Begin
  95.       Index2:=Succ(Index1);
  96.      
  97.       While Index2 <= Pred(Data.Length) do
  98.             Begin
  99.             if Data[Index2] = Data[Index1] then
  100.                                                Begin
  101.                                                for Index3:=Index2 to Data.Length-2 do Data[Index3]:=Data[Succ(Index3)];
  102.                                                Dec(Index3);
  103.                                                SetLength(Data,Succ(Index3));
  104.                                                end
  105.                                            else Inc(Index2);
  106.             end; // Конец While
  107.       Inc(Index1);
  108.       end; // Конец While
  109. end; // Конец FormingData
  110.  
  111. Begin
  112. // Введем имена файлов...
  113. Write('Введите имя первого входного файла: '); ReadLn(Name_InPut1);
  114. Write('Введите имя второго входного файла: '); ReadLn(Name_InPut2);
  115.  
  116. // Если имя файла не введено, то используем имя файла по умолчанию...
  117. if Length(Name_InPut1) = 0 then Name_InPut1:=Def_Name_InPut1;
  118. if Length(Name_InPut2) = 0 then Name_InPut2:=Def_Name_InPut2;
  119.  
  120. // Проверим существование файлов...
  121. if FileExists(Name_InPut1) and FileExists(Name_InPut2) then
  122.                                                            Begin
  123.                                                            ReadData(Name_InPut1,Data[1]); // Считываем данные из первого файла и формируем массив...
  124.                                                            ReadData(Name_InPut2,Data[2]); // Считываем данные из второго файла и формируем массив...
  125.                                                            FormingData(Data[3],Data[1],Data[2]); // Объединим данные в новый массив...
  126.                                                            
  127.                                                            // Введем имя выходного файла...
  128.                                                            Write('Введите имя выходного файла: '); ReadLn(Name_OutPut);
  129.                                                            
  130.                                                            // Если имя файла не введено, то используем имя файла по умолчанию...
  131.                                                            if Length(Name_OutPut) = 0 then Name_OutPut:=Def_Name_OutPut;
  132.                                                            
  133.                                                            WriteData(Name_OutPut,Data[3]); // Запишем данные в файл...
  134.                                                            
  135.                                                            // Выведим информацию на экран...
  136.                                                            Writeln('Количество компонет в первом входном файле: ', Pred(Data[1].Length));
  137.                                                            Writeln('Количество компонет во втором входном файле: ', Pred(Data[2].Length));
  138.                                                            Writeln('Количество компонет в выходном файле: ', Pred(Data[3].Length));
  139.                                                            Writeln('Количество повторяющихся компонет во входных файлах: ', (Pred(Data[1].Length)+Pred(Data[2].Length))-Pred(Data[3].Length));
  140.                                                            end
  141.                                                        else
  142.                                                            Begin // Добавим конкретики...
  143.                                                            if not FileExists(Name_InPut1) then Writeln('Ошибка: Файл '+Name_InPut1+' не существует...');
  144.                                                            if not FileExists(Name_InPut2) then Writeln('Ошибка: Файл '+Name_InPut2+' не существует...');
  145.                                                            end;
  146. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement