Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program Words;
- Uses
- System.SysUtils;
- Type
- TArray = Array Of Integer;
- Procedure OutputTask();
- Begin
- Writeln('Данная программа записывает в массив встреченные в строке числа.');
- End;
- Procedure ChooseInput(var IsFromFile : Boolean);
- Var
- Num : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := True;
- Writeln('Выберите, откуда вводить данные: 0, если с консоли; 1, если с файла.');
- Try
- Readln(Num);
- Except
- IsCorrect := False;
- End;
- If ((Not IsCorrect) Or ((Num <> 0) And (Num <> 1))) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- Until IsCorrect;
- IsFromFile := (Num = 1);
- End;
- Function ChoosePath() : String;
- Var
- Path : String;
- IsCorrect : Boolean;
- InputFile : TextFile;
- Begin
- Begin
- Repeat
- Writeln('Введите путь к файлу для ввода информации: ');
- IsCorrect := True;
- Readln(Path);
- Try
- AssignFile(InputFile, Path);
- Reset(InputFile);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect) Or (Length(Path) < 5) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End
- Else
- Begin
- If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- End;
- Until IsCorrect;
- End;
- CloseFile(InputFile);
- ChoosePath := Path;
- End;
- Procedure InputFromConsole(var Str : String);
- Var
- I : Integer;
- IsCorrect : Boolean;
- Begin
- Repeat
- IsCorrect := False;
- Writeln('Введите строку: ');
- Readln(Str);
- For I := 1 To High(Str) Do
- Begin
- If (Str[I] <> ' ') Then
- IsCorrect := True;
- End;
- If (Not IsCorrect) Or (Length(Str) < 1) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- Until (IsCorrect);
- End;
- Procedure InputFromFile(var Str : String);
- Var
- Path : String;
- InputFile : TextFile;
- IsCorrect : Boolean;
- I : Integer;
- Begin
- Writeln('При записи из файла учтите, что в файле нужные данные должны быть записаны на первой строке.');
- Path := ChoosePath();
- AssignFile(InputFile, Path);
- Reset(InputFile);
- Readln(InputFile, Str);
- IsCorrect := False;
- For I := 1 To High(Str) Do
- Begin
- If (Str[I] <> ' ') Then
- IsCorrect := True;
- End;
- If (Not IsCorrect) Or (Length(Str) < 1) Then
- Begin
- Writeln('Ошибка ввода! Введите нужную строку с клавиатуры.');
- InputFromConsole(Str);
- End;
- End;
- Function InputString(IsFromFile : Boolean) : String;
- Var
- Str : String;
- Begin
- If (IsFromFile) Then
- InputFromFile(Str)
- Else
- InputFromConsole(Str);
- InputString := Str;
- End;
- Function ChoosePathForOutput() : String;
- Var
- Path : String;
- IsCorrect : Boolean;
- OutputFile : TextFile;
- Begin
- Begin
- Repeat
- Writeln('Введите путь к файлу для вывода информации: ');
- IsCorrect := True;
- Readln(Path);
- Try
- AssignFile(OutputFile, Path);
- Reset(OutputFile);
- Except
- IsCorrect := False;
- End;
- If (Not IsCorrect) Or (Length(Path) < 5) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End
- Else
- Begin
- If ((Path[High(Path)] <> 't') And (Path[High(Path) - 1] <> 'x') And (Path[High(Path) - 2] <> 't') And (Path[High(Path) - 3] <> '.')) Then
- Begin
- IsCorrect := False;
- Writeln('Ошибка ввода! Повторите попытку.');
- End;
- End;
- Until IsCorrect;
- End;
- CloseFile(OutputFile);
- ChoosePathForOutput := Path;
- End;
- Procedure OutputAnswerInFile(Arr : TArray);
- Var
- OutputFile : TextFile;
- Path : String;
- I : Integer;
- Begin
- Path := ChoosePathForOutput();
- AssignFile(OutputFile, Path);
- Rewrite(OutputFile);
- If (Not(Length(Arr) = 0)) Then
- Begin
- Write(OutputFile, 'Массив чисел: ');
- For I := 0 To High(Arr) Do
- Write(OutputFile, Arr[I] , ' ');
- End
- Else
- Writeln(OutputFile, 'Цифры и числа не были встречены в строке!');
- CloseFile(OutputFile);
- Writeln('Данные успешно записаны в файл!');
- End;
- Procedure OutputAnswer(Arr : TArray);
- Var
- I : Integer;
- Begin
- If (Not(Length(Arr) = 0)) Then
- Begin
- Write('Массив чисел: ');
- For I := 0 To High(Arr) Do
- Write(Arr[I] , ' ');
- End
- Else
- Writeln('Цифры и числа не были встречены в строке!');
- OutputAnswerInFile(Arr);
- End;
- Function CountNumbersAmount(Str : String) : Integer;
- Var
- I, J : Integer;
- Num : Integer;
- Begin
- I := 1;
- Num := 0;
- While(I <> High(Str)) Do
- Begin
- J := 0;
- If ((Str[I] >= '0') And (Str[I] <= '9')) Then
- Begin
- Inc(Num);
- J := I+1;
- While((Str[J] >= '0') And (Str[J] <= '9')) Do
- Inc(J);
- I := J;
- End
- Else
- Inc(I);
- End;
- CountNumbersAmount := Num;
- End;
- Function AddNumbersInArray(Str : String; Num : Integer) : TArray;
- Var
- Arr : TArray;
- I, J : Integer;
- Index : Integer;
- Number, Multiplier : Integer;
- Begin
- SetLength(Arr, Num);
- I := 1;
- Index := -1;
- While(I <> High(Str)) Do
- Begin
- Number := 0;
- J := 0;
- If ((Str[I] >= '0') And (Str[I] <= '9')) Then
- Begin
- Inc(Index);
- J := I+1;
- Number := StrToInt(Str[I]);
- Multiplier := 10;
- While((Str[J] >= '0') And (Str[J] <= '9')) Do
- Begin
- Number := Number * Multiplier + StrToInt(Str[J]);
- Inc(J);
- Multiplier := Multiplier * 10;
- End;
- Arr[Index] := Number;
- I := J;
- End
- Else
- Inc(I);
- End;
- AddNumbersInArray := Arr;
- End;
- Var
- Str : String;
- IsFromFile : Boolean;
- AmountOfNumbers : Integer;
- ArrayOfNumbers : TArray;
- Begin
- OutputTask();
- ChooseInput(IsFromFile);
- Str := InputString(IsFromFile);
- AmountOfNumbers := CountNumbersAmount(Str);
- ArrayOfNumbers := AddNumbersInArray(Str, AmountOfNumbers);
- OutputAnswer(ArrayOfNumbers);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement