program lab6 APPTYPE CONSOLE Для PascalABC закомментированы некоторые

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
program lab6;
{$APPTYPE CONSOLE}
//Для PascalABC закомментированы некоторые строки
uses
SysUtils,
Windows;
//Объявление переменных
var a: array[1..20] of integer;
n, u, i, res, max : integer;
src, dest: TextFile;
firstPositive, lastLarger : integer;
begin
setConsoleCP(1251);
setConsoleOutputCP(1251);
AssignFile(src, paramstr(1));
Reset(src);
AssignFile(dest, paramstr(2));
Rewrite(dest);
read(src, n);
read(src, u);
for i := 1 to n do begin
read(src, a[i]);
end;
writeln(dest,'Исходные данные:');
write(dest,'Число элементов массивов (n): ');
writeln(dest,n);
write(dest,'Элементы для поиска в массиве должны быть меньше этого числа (u): ');
writeln(dest,u);
writeln(dest,'Элементы массива A:');
for i := 1 to n do begin
write(dest,a[i]:3);
write(dest,' ');
end;
writeln(dest);
for i := 0 to 60 do write(dest,'-');
writeln(dest); // Конец вывода исх
firstPositive := -1;
lastLarger := -1;
res := -1;
i := 1;
while (i <= n) and (firstPositive = -1) do begin
if a[i] > 0 then firstPositive := i;
i := i+1;
end;
if firstPositive = n then firstPositive := -2;
if firstPositive > 0 then begin
i := n;
while (i > 0) and (lastLarger = -1) do begin
if a[i] < u then lastLarger := i;
i := i-1;
end;
if firstPositive <= lastLarger then begin
max := a[lastLarger];
res := lastLarger;
for i := lastLarger downto firstPositive do begin
if (a[i] < u) and (a[i] >= max) then begin
max := a[i];
res := i;
end;
end;
end;
end;
writeln(dest, 'fp: ', firstPositive, ' ll: ', lastLarger);
writeln(dest,'Результат:'); // Начало вывода результатов
if firstPositive = -1 then
writeln(dest, 'Не найдено положительных элементов')
else if firstPositive = -2 then
writeln(dest, 'Не найдено элементов после первого положительного числа')
else if lastLarger = -1 then
writeln(dest, 'Не найдено элементов меньше u')
else if res = -1 then
writeln(dest, 'Среди элементов после положительного числа нет элементов меньше u')
else
writeln(dest, 'Первый максимальный элемент после положительного и меньше u: ', res);
CloseFile(src);
CloseFile(dest);
writeln('Done');
readln;
end.
// Тесты
1) нет положительных чисел (невозможно найти)
5 1
-1 -6 -4 -8 -9
Ожидаемый результат: Не найдено положительных элементов
2) нет чисел после положительного (невозможно найти)
5 1
-5 -6 -2 -4 5
Ожидаемый результат: Не найдено элементов после первого положительного числа
3) нет чисел меньше u после положительного (невозможно найти)
5 -5
-6 3 8 -1 3
Ожидаемый результат: Среди элементов после положительного числа нет элементов меньше u
4) нет элементов меньше u (невозможно найти)
5 -5
-4 3 8 -1 3
Ожидаемый результат: Не найдено элементов меньше u
5) Существует элемент после первого положительного меньше u
5 2
5 -10 4 5 6
Ожидаемый результат: 3
6) Существует несколько максимумов после положительного числа меньше u
5 10
1 11 5 2 5
Ожидаемый результат: 3
7) мвн
10 11
1 2 3 4 5 6 7 8 9 10
Ожидаемый результат: 10