Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //************************************************************//
- // Программу написал: Александр Фомин //
- // Форум: http://www.cyberpascal.ru //
- // В контакте: http://vk.com/serjant372 //
- // Эл.почта: admin@cyberpascal.ru | fomin_a_s@mail.ru //
- //************************************************************//
- Program CPascal; // https://otvet.mail.ru/answer/1789592069
- const def_name_input1=('InPutA.txt'); // Имя поумолчанию входного файла 1
- def_name_input2=('InPutB.txt'); // Имя поумолчанию входного файла 2
- def_name_output=('OutPut.txt'); // Имя поумолчанию выходного файла
- var name_input1,name_input2,name_output:string; // Имена файлов
- data:array [1..3] of array of integer; // Массив данных
- // Процедура чтения данных из файла...
- Procedure ReadData(filename:string; var data:array of integer);
- var tdata:text; // Текстовый файл
- index:longint; // Счетчик компонент
- Begin
- Assign(TData,FileName); // Подключаем файл
- Reset(TData); // Открываем файл для чтения
- Index:=0; // Обнуляем...
- While not Eof(TData) do
- Begin
- SetLength(Data,Succ(Index));
- Read(TData,Data[Index]);
- Inc(Index);
- end;
- Close(TData); // Закрываем файл
- end; // Конец ReadData
- // Процедура записи данных из файла...
- Procedure WriteData(filename:string; data:array of integer);
- var tdata:text; // Текстовый файл
- index:longint; // Счетчик компонет
- Begin
- Assign(TData,FileName); // Подключаем файл
- ReWrite(TData); // Создаем и открываем файл для записи
- for Index:=0 to Pred(Data.Length) do Write(TData,Data[Index]+#32);
- Close(TData); // Закрываем файл
- end; // Конец WriteData
- // Процедура слияния массивов...
- Procedure FormingData(var data:array of integer; data1,data2:array of integer);
- var index1,index2,index3:longint;
- Begin
- Index1:=0;
- Index2:=0;
- Index3:=0;
- While (Index1 <= Pred(Data1.Length)) and (Index2 <= Pred(Data2.Length)) do
- Begin
- if Data1[Index1] < Data2[Index2] then
- Begin
- SetLength(Data,Succ(Index3));
- Data[Index3]:=Data1[Index1];
- Inc(Index1);
- end
- else
- Begin
- SetLength(Data,Succ(Index3));
- Data[Index3]:=Data2[Index2];
- Inc(Index2);
- end;
- Inc(Index3);
- end; // Конец While
- While Index1 <= Pred(Data1.Length) do
- Begin
- SetLength(Data,Succ(Index3));
- Data[Index3]:=Data1[Index1];
- Inc(Index1);
- Inc(Index3);
- end; // Конец While
- While Index2 <= Pred(Data2.Length) do
- Begin
- SetLength(Data,Succ(Index3));
- Data[Index3]:=Data2[Index2];
- Inc(Index2);
- Inc(Index3);
- end; // Конец While
- // Избавимся от повторений...
- Index1:=0;
- While Index1 <= Pred(Data.Length) do
- Begin
- Index2:=Succ(Index1);
- While Index2 <= Pred(Data.Length) do
- Begin
- if Data[Index2] = Data[Index1] then
- Begin
- for Index3:=Index2 to Data.Length-2 do Data[Index3]:=Data[Succ(Index3)];
- Dec(Index3);
- SetLength(Data,Succ(Index3));
- end
- else Inc(Index2);
- end; // Конец While
- Inc(Index1);
- end; // Конец While
- end; // Конец FormingData
- Begin
- // Введем имена файлов...
- Write('Введите имя первого входного файла: '); ReadLn(Name_InPut1);
- Write('Введите имя второго входного файла: '); ReadLn(Name_InPut2);
- // Если имя файла не введено, то используем имя файла по умолчанию...
- if Length(Name_InPut1) = 0 then Name_InPut1:=Def_Name_InPut1;
- if Length(Name_InPut2) = 0 then Name_InPut2:=Def_Name_InPut2;
- // Проверим существование файлов...
- if FileExists(Name_InPut1) and FileExists(Name_InPut2) then
- Begin
- ReadData(Name_InPut1,Data[1]); // Считываем данные из первого файла и формируем массив...
- ReadData(Name_InPut2,Data[2]); // Считываем данные из второго файла и формируем массив...
- FormingData(Data[3],Data[1],Data[2]); // Объединим данные в новый массив...
- // Введем имя выходного файла...
- Write('Введите имя выходного файла: '); ReadLn(Name_OutPut);
- // Если имя файла не введено, то используем имя файла по умолчанию...
- if Length(Name_OutPut) = 0 then Name_OutPut:=Def_Name_OutPut;
- WriteData(Name_OutPut,Data[3]); // Запишем данные в файл...
- // Выведим информацию на экран...
- Writeln('Количество компонет в первом входном файле: ', Pred(Data[1].Length));
- Writeln('Количество компонет во втором входном файле: ', Pred(Data[2].Length));
- Writeln('Количество компонет в выходном файле: ', Pred(Data[3].Length));
- Writeln('Количество повторяющихся компонет во входных файлах: ', (Pred(Data[1].Length)+Pred(Data[2].Length))-Pred(Data[3].Length));
- end
- else
- Begin // Добавим конкретики...
- if not FileExists(Name_InPut1) then Writeln('Ошибка: Файл '+Name_InPut1+' не существует...');
- if not FileExists(Name_InPut2) then Writeln('Ошибка: Файл '+Name_InPut2+' не существует...');
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement