Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program lab23;
- { C:\Users\pulis\OneDrive\Рабочий стол\result.txt
- C:\Users\pulis\OneDrive\Рабочий стол\points.txt }
- Uses
- System.SysUtils,
- Windows;
- Type
- MatrixOfInt = Array Of Array Of Integer;
- Procedure WriteTask();
- Begin
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- Writeln('Эта программа ищет количество хорошистов в группе.');
- End;
- Function CheckIntNumb(): Integer; // проверка на ввод натурального числа
- Var
- IsCorrect: Boolean;
- Numb: Integer;
- Begin
- Writeln('Введите натуральное число.');
- Repeat
- IsCorrect := True;
- Try
- Readln(Numb);
- Except
- Writeln('Ошибка! Введите натуральное число.');
- IsCorrect := False;
- End;
- If IsCorrect And (Numb < 0) Then
- Begin
- Writeln('Ошибка! Введите натуральное число.');
- IsCorrect := False;
- End;
- Until IsCorrect;
- CheckIntNumb := Numb;
- End;
- Function CheckNumb(): Integer;
- Var
- IsCorrect: Boolean;
- Numb: Byte;
- Input: String;
- Begin
- Writeln('Введите число в диапазоне от 1 до 10. ');
- Repeat
- IsCorrect := True;
- Readln(Input);
- Try
- Numb := StrToInt(Input);
- Except
- Writeln('Ошибка! Введите число.');
- IsCorrect := False;
- End;
- If IsCorrect And ((Numb < 1) Or (Numb > 10)) Then
- Begin
- Writeln('Ошибка! Введите число в диапазоне от 1 до 10.');
- IsCorrect := False;
- End;
- Until IsCorrect;
- CheckNumb := Numb;
- End;
- Function CheckMatrixValues(Arr: MatrixOfInt): Boolean;
- Var
- I, J: Integer;
- IsCorrect: Boolean;
- Begin
- IsCorrect := True; // Предполагаем, что все значения допустимы
- For I := 0 To High(Arr) Do
- Begin
- For J := 0 To High(Arr[I]) Do
- Begin
- If (Arr[I, J] < 1) Or (Arr[I, J] > 10) Then
- Begin
- IsCorrect := False;
- End;
- End;
- End;
- CheckMatrixValues := IsCorrect; // Возвращаем результат проверки
- End;
- Function CheckInputPermission(Path: String): Boolean;
- Var
- IsCorrect: Boolean;
- Fil: TextFile;
- Begin
- AssignFile(Fil, Path);
- IsCorrect := True;
- Try
- Reset(Fil);
- Close(Fil);
- Except
- Writeln('Нет доступа к файлу.');
- IsCorrect := False;
- End;
- CheckInputPermission := IsCorrect;
- End;
- Function CheckOutputPermission(Path: String): Boolean;
- Var
- IsCorrect: Boolean;
- Fil: TextFile;
- Begin
- AssignFile(Fil, Path);
- IsCorrect := True;
- Try
- Rewrite(Fil);
- Close(Fil);
- Except
- Writeln('Нет доступа к записи в файл.');
- IsCorrect := False;
- End;
- CheckOutputPermission := IsCorrect;
- End;
- Function ImputConsol(): MatrixOfInt; // ввод матрицы через клавиатуру
- Var
- Arr: MatrixOfInt;
- Rows, Cols: Integer;
- Begin
- Writeln('Количество строк в матрице:');
- Rows := CheckIntNumb();
- Writeln('Количество столбцов в матрице:');
- Cols := CheckIntNumb();
- SetLength(Arr, Rows, Cols);
- For Rows := 0 To High(Arr) Do
- For Cols := 0 To High(Arr[0]) Do
- Begin
- Writeln('Введите элемент (', Rows + 1, ';', Cols + 1, ').');
- Arr[Rows][Cols] := CheckNumb();
- End;
- ImputConsol := Arr;
- End;
- Function InputPath(): String; // проверка пути к файлу вывода
- Var
- Path: String;
- IsCorrect: Boolean;
- Fil: File;
- Begin
- Repeat
- Writeln('Введите путь к файлу.');
- IsCorrect := True;
- Readln(Path);
- If Not FileExists(Path) Or (ExtractFileExt(Path) <> '.txt') Then
- Begin
- IsCorrect := False;
- Writeln('Файл не найден.');
- End;
- Until IsCorrect;
- If IsCorrect Then
- Begin
- AssignFile(Fil, Path);
- Try
- Try
- Reset(Fil);
- Except
- IsCorrect := False;
- Writeln('Нет доступа к файлу.');
- End;
- Finally
- CloseFile(Fil);
- End;
- End;
- InputPath := Path;
- End;
- Function ImputFile(): MatrixOfInt; // ввод матрицы через файл
- Var
- Arr: MatrixOfInt;
- Fil: TextFile;
- I, J: Integer;
- Path: String;
- IsCorrect: Boolean;
- Begin
- Repeat
- Path := InputPath();
- AssignFile(Fil, Path);
- IsCorrect := True;
- I := 1;
- Reset(Fil);
- Try
- While Not Eof(Fil) Do
- Begin
- SetLength(Arr, I);
- J := 1;
- While Not Eoln(Fil) Do
- Begin
- SetLength(Arr[I - 1], J);
- Read(Fil, Arr[I - 1, J - 1]);
- Inc(J);
- End;
- Inc(I);
- Readln(Fil);
- End;
- // Проверка диапазона значений элементов матрицы
- If Not CheckMatrixValues(Arr) Then
- Begin
- IsCorrect := False;
- Writeln('Некорректное значение в матрице.');
- Close(Fil);
- End;
- Except
- IsCorrect := False;
- Writeln('Некорректные данные в файле.');
- Close(Fil);
- End;
- Until IsCorrect;
- Close(Fil);
- ImputFile := Arr;
- End;
- Function ChoseInput(): MatrixOfInt; // выбираем как выводить матрицу
- Var
- Numb: Integer;
- Arr: MatrixOfInt;
- IsCorrect: Boolean;
- Begin
- Writeln('Выберите способ ввода данных: eсли хотите ввести данные самостоятельно, введите 1. Если хотите ввести данные из файла - 2.');
- Repeat
- Numb := CheckIntNumb();
- IsCorrect := True;
- If Numb = 1 Then
- Arr := ImputConsol()
- Else If Numb = 2 Then
- Arr := ImputFile()
- Else
- Begin
- IsCorrect := False;
- Writeln('Введите значение равное или 1 или 2.');
- End;
- Until IsCorrect;
- ChoseInput := Arr
- End;
- Function SearchForGoodStudents(Arr: MatrixOfInt): Integer; //поиск хорошистов
- Var
- Rows, EightGradeCounter, SixGradeCounter, Search, I, J: Integer;
- Begin
- Search := 0;
- For I := 0 To High(Arr) Do
- Begin
- EightGradeCounter := 0;
- SixGradeCounter := 0;
- For J := 0 To High(Arr[0]) Do
- Begin
- If (Arr[I][J] > 5) Then
- Begin
- Inc(SixGradeCounter);
- If (Arr[I][J] < 8) Then
- Inc(EightGradeCounter);
- End;
- End;
- If ((SixGradeCounter = Length(Arr[0])) And (EightGradeCounter > 0)) Then
- Inc(Search);
- End;
- SearchForGoodStudents := Search;
- End;
- Procedure ConclConsol(Search: Integer); // вывод результата в консоль
- Var
- I: Integer;
- Begin
- Writeln('Число хорошистов: ', Search);
- End;
- Function OutputPath(): String; // проверка пути к файлу вывода
- Var
- Path: String;
- IsCorrect: Boolean;
- Fil: File;
- Begin
- Repeat
- Writeln('Введите путь к файлу.');
- IsCorrect := True;
- Readln(Path);
- If Not FileExists(Path) Or (ExtractFileExt(Path) <> '.txt') Then
- Begin
- IsCorrect := False;
- Writeln('Файл не найден.');
- End
- Else If (CheckOutputPermission(Path) = False) Then
- IsCorrect := False;
- Until IsCorrect;
- OutputPath := Path;
- End;
- Procedure ConclFile(Search: Integer);
- Var
- Fil: TextFile;
- Path: String;
- Begin
- Path := OutputPath();
- AssignFile(Fil, Path);
- Rewrite(Fil);
- Writeln(Fil, 'Число хорошистов: ', Search);
- CloseFile(Fil);
- End;
- Procedure ChoseOutput(Search: Integer); // выбираем как выводить результат
- Var
- I: Integer;
- IsCorrect: Boolean;
- Begin
- Writeln('Выберите способ вывода данных: если хотите вывести данные в консоль, введите 1. Если хотите вывести данные в файл - 2.');
- Repeat
- I := CheckIntNumb();
- IsCorrect := True;
- If I = 1 Then
- ConclConsol(Search)
- Else If I = 2 Then
- ConclFile(Search)
- Else
- Begin
- IsCorrect := False;
- Writeln('Введите 1 или 2.');
- End;
- Until IsCorrect;
- End;
- Var
- Arr: MatrixOfInt;
- Path: String;
- I, NSearch: Integer;
- Begin
- WriteTask();
- Arr := ChoseInput();
- NSearch := SearchForGoodStudents(Arr);
- ChoseOutput(NSearch);
- Readln;
- End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement