Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program task2;
- {$APPTYPE CONSOLE}
- {$R *.res}
- uses
- System.SysUtils,
- StrUtils,
- Math;
- type
- NumsArr = Array [0 .. 1] of String;
- SeqArr = Array of String;
- function MakeSameLength(Seq1, Seq2: String): NumsArr;
- var
- ZeroesCount, i: Integer;
- Arr: NumsArr;
- Num1, Num2: String;
- begin
- Num1 := Seq1;
- Num2 := Seq2;
- ZeroesCount := Abs(Length(Num1) - Length(Num2));
- for i := 0 to ZeroesCount - 1 do
- begin
- if (Length(Num1) < Length(Num2)) then
- Num1 := '0' + Num1
- else
- Num2 := '0' + Num2;
- end;
- Arr[0] := Num1;
- Arr[1] := Num2;
- Result := Arr;
- end;
- function Sum(Seq1, Seq2: String): String;
- var
- Nums: NumsArr;
- i: Integer;
- Num1, Num2, Sequence: String;
- Memory, El1, El2, Res, Units: Byte;
- begin
- Nums := MakeSameLength(Seq1, Seq2);
- Num1 := Nums[0];
- Num2 := Nums[1];
- Memory := 0;
- Sequence := '';
- for i := Length(Num1) downto 1 do
- begin
- El1 := StrToInt(Num1[i]);
- El2 := StrToInt(Num2[i]);
- Res := El1 + El2 + Memory;
- Units := Res mod 10;
- if (i <> 1) then
- begin
- Memory := Res div 10;
- Sequence := IntToStr(Units) + Sequence;
- end
- else
- Sequence := IntToStr(Res) + Sequence;
- end;
- Result := Sequence;
- end;
- procedure ShowSequence(const Seq: SeqArr);
- var
- i: Integer;
- begin
- for i := 0 to High(Seq) do
- Write(Seq[i], ' ');
- Writeln;
- end;
- function GetNumberFromSeq(const Seq: SeqArr): Integer;
- var
- Res, El: String;
- i: Integer;
- begin
- Res := '0';
- for i := 0 to High(Seq) do
- begin
- El := Trim(Seq[i]);
- Res := Sum(Res, El);
- end;
- Result := StrToInt(Res);
- end;
- function ReadNextLine(const FileToRead: TextFile): String;
- var
- CurrLine: String;
- Exception: Boolean;
- begin
- try
- Readln(FileToRead, CurrLine);
- except
- Exception := true;
- end;
- if (Exception) then
- Result := '-1'
- else
- Result := CurrLine;
- end;
- function Input(): String;
- var
- Value: String;
- begin
- try
- Readln(Value);
- except
- Writeln('Введите корректный путь к файлу!');
- end;
- Result := Value;
- end;
- function ExtractNums(Str: String): SeqArr;
- var
- i, j, Len: Integer;
- Arr: SeqArr;
- begin
- j := 0;
- Len := Floor(Length(Str)/2);
- SetLength(Arr, Len);
- for i := 1 to Length(Str) do
- begin
- if(Str[i] in ['0'..'9']) then
- begin
- Arr[j] := Str[i];
- j := j + 1;
- end;
- end;
- Result := Arr;
- end;
- procedure Main();
- var
- NotCorrect, NoException: Boolean;
- FilePath, Sequence: String;
- Seq1, Seq2: SeqArr;
- Num1, Num2: Integer;
- InputFile, OutputFile: TextFile;
- begin
- Writeln('Данная программа находит последовательность, представляющую сумму двух натуральных чисел, заданных своими последовательностями');
- Writeln;
- NotCorrect := true;
- while (NotCorrect) do
- begin
- NoException := true;
- Writeln('Введите путь до файла, в котором находятся последовательности чисел, либо его имя, если файл находится в одной директории с программой');
- FilePath := Input();
- if (not ContainsText(FilePath, '.txt')) then
- FilePath := FilePath + '.txt';
- if (FileExists(FilePath)) then
- AssignFile(InputFile, FilePath)
- else
- begin
- Writeln('Произошла ошибка при чтении файла. Убедитесь, что такой файл существует, либо проверьте имя файла.');
- NoException := false;
- end;
- if (NoException) then
- begin
- Reset(InputFile);
- Seq1 := ExtractNums(ReadNextLine(InputFile));
- Seq2 := ExtractNums(ReadNextLine(InputFile));
- Close(InputFile);
- Writeln('Последовательности, записанные в файле:');
- ShowSequence(Seq1);
- ShowSequence(Seq2);
- Num1 := GetNumberFromSeq(Seq1);
- Num2 := GetNumberFromSeq(Seq2);
- Writeln('Получившиеся числа: ', Num1, ' и ', Num2);
- if ((Num1 > 0) and (Num2 > 0)) then
- begin
- Sequence := Sum(IntToStr(Num1), IntToStr(Num2));
- Writeln('Результат: ', Sequence);
- AssignFile(OutputFile, 'output.txt');
- Rewrite(OutputFile);
- Writeln(OutputFile, 'Результат: ', Sequence);
- Close(OutputFile);
- Writeln('Результат сохранен в файл output.txt');
- NotCorrect := false;
- end
- else
- Writeln('Файл должен состоять из последовательности натуральных чисел');
- end;
- end;
- Readln;
- end;
- begin
- Main();
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement