Алгоритмы, реализуемые с помощью циклов типа ПОКА



С помощью циклов типа пока можно запрограммировать любые повторяющиеся фрагменты алгоритмов. Но на практике цикл типа пока чаще всего используют в двух следующих случаях:

Цикл типа пока с прерыванием

Язык
Пример
Пояснения
 
Школьный АЯ
i:=1; Flag:="Нет"
нц пока (i<=N) и (Flag="Нет")
    если A[i]<0
        то Flag:="Да"; k:=i
        иначе i:=i+1
    все
кц
Решается задача:  
определить номер первого отрицательного элемента массива A(N). Здесь Flag - "управляющая" переменная литерного типа (можно с успехом использовать также логический или целый типы)
 
Pascal
i:=1; Flag:=FALSE;
While (i<=N) and not Flag do
  If A[i]<0 
    then begin
           Flag:=TRUE; k:=i
         end
    else i:=i+1;
Здесь Flag - переменная логического типа, принимающая значение ТRUE (истина) или FALSE (ложь),  
and - операция 'и', not - операция 'не'
 
QВasic
i=1 : Flag=0
WHILE i<=N AND Flag=0
  IF A(i)<0 THEN
      Flag=1 : k=i
    ELSE i=i+1
  END IF
WEND
Здесь Flag - переменная целого типа (в некоторых версиях QBasic можно использовать и логический тип, что предпочтительнее)

Цикл типа пока без прерывания

Язык
Пример
Пояснения
 
Школьный АЯ
        i:=1; S:=0
        нц пока i<=N
           S:=S+A[i]
           i:=i+2
        кц

 

Вычисляется сумма элементов массива A(N)  
с нечетными индексами. Число таких элементов заранее известно. Шаг параметра цикла равен двум

 
Pascal
        i:=1; S:=0;
        While i<=N do
          begin S:=S+A[i];
                i:=i+2
          end;
QВasic
 Лучше использовать цикл FOR: 
        S=0
        FOR I=1 TO N STEP 2
          S=S+A(I) 
        NEXT I
Для организации циклов типа пока можно также использовать:
Пример 4.1. Определить, является ли заданная последовательность чисел   a1 , a2 , ... , aN монотонно убывающей.
 
Система тестов
Номер теста
Проверяемый случай
Данные
Результат
N
Вектор А
Otvet
1
Является
3
(3, 2, 1)
'Да'
2
Не является
3
(2, 3, 1)
'Нет'
Демонстрация
Школьный АЯ 
алг Убывание (арг цел N, арг вещ таб A[1:N],
              рез лит Otvet)
нач цел i
  i:=1; Otvet:="Да"
  нц пока (i<=N–1) и (Otvet="Да")
    если A[i] < A[i+1]
       то Otvet := "Нет"
       иначе i:=i+1
    все
  кц
кон
Исполнение алгоритма 
Обозначения проверяемых условий: 
(i <= N-1) и (Otvet = "Да") => (1) 
A[i] < A[i+1] => (2) 
 
N теста
i
Otvet
(1)
(2)
1
1
2
3
"Да"
+
+
-(кц)
-
-
2
1
"Да"
"Нет"
+
-(кц)
+
 
  Блок-схема 
  (фрагмент) 
Turbo Pascal
Program Decrease;
  Uses Crt;
  Var A    : Array [1..10] of Real;
      N, i : Integer;
      Otvet: Boolean;
{--------------------------------------------}
Procedure InputOutput; {описание процедуры ввода-вывода данных}
 Begin
  ClrScr; 
  Write(’Количество элементов - ’); ReadLn(N);
  For i := 1 to N do
   begin Write(’A[’ , i , ’] = ’);
         ReadLn(A[i])
   end; WriteLn;
 
  WriteLn(’Заданная последовательность чисел’);
  For i := 1 to N do Write(A[i] : 5 : 1); 
  WriteLn
 End; { of InputOutput }
{--------------------------------------------}
Procedure Processing( Var Otvet: Boolean);
 Begin              {описание процедуры проверки на убывание элементов}
  Otvet := TRUE; i:=1;
  While (i<=N–1) and Otvet do
   If (A[i]<A[i+1]) then Otvet := FALSE
                    else i := i+1;
 End; { of Processing }
{--------------------------------------------}
Procedure Result(Otvet: Boolean);  {описание процедуры вывода результата}
 Begin                   
  If Otvet then Write(’образует ’)
           else Write(’не образует ’);
  WriteLn(’монотонно убывающую последовательность.’); 
  ReadLn
 End;
{--------------------------------------------}
BEGIN
  InputOutput;       {вызов процедуры ввода-вывода}
  Processing(Otvet); {вызов процедуры проверки на убывание}
  Result(Otvet);     {вызов процедуры вывода результата}
END.

QBasic

CLS
INPUT "Количество элементов – ", N : DIM A(N)
FOR i = 1 TO N
  PRINT "A(" ; i ; ") = " ;
  INPUT A(i)
NEXT i
CLS : PRINT "Заданная последовательность чисел"
FOR i = 1 TO N
  PRINT A(i) ;
NEXT i : PRINT
i = 1 : Otvet = 0
WHILE i <= N–1 AND Otvet = 0
  IF A(i) < A(i + 1) THEN Otvet = 1 ELSE i = i + 1
WEND
IF Otvet=0 THEN PRINT "образует" ; ELSE PRINT "не образует" ;
PRINT " монотонно убывающую последовательность."
END
Пример 4.2. Задано множество точек на плоскости. Oпределить, принадлежит ли хотя бы одна точка множества внутренней области круга с центром в точке (a, b) и радиусом R.
 Система тестов
Номер теста
Проверяемый случай
Данные
Результат
a
b
R
Кол. точек
Координаты точек
Otvet 
1
Принадлежит
1
0
2
3
X=(-1, 2, 3) 
Y=(2, 1, 2)
"Да"
2
Не принадлежит
1
0
2
2
X=(-1, 3) 
Y=(2, 2)
"Нет"
Демонстрация
Школьный АЯ
алг Точки (арг цел N, арг вещ таб X [1 : N] , Y [1 : N] , 
           арг вещ a, b, R, рез лит Otvet)
нач цел i
  i:=1;   Otvet:="Нет"
  нц пока (i<=N) и (Otvet="Нет") | условие продолжения цикла
    если (X[i]-a)**2 + (Y[i]-b)**2 <R*R | условие прерывания цикла
      то Otvet := "Да"
      иначе i:=i+1
    все
  кц
кон
Исполнение алгоритма 

Обозначения проверяемых условий: 
(i <= N) и (Otvet = "Нет")    => (1) 
(X[i]-1)**2 + (Y[i]-b)**2 < R*R  => (2) 
 
N теста
i
Otvet
(1)
(2)
1
1
2
3
"Нет"
"Да"
+
+
-(кц)
-
+
2
1
2
3
"Нет"
+
+
-(кц)
-
-
 

  Блок-схема 
Turbo Pascal
Program SetOfPoints;
  Uses Crt;
  Type Mas = Array [1..20] of Real;
  Var X, Y         : Mas;     {массивы координат точек }
      i, NPoints   : Integer; {NPoints – количество точек}
      a, b, Radius : Real;    {координаты центра и радиус}
      Flag         : Boolean;
{--------------------------------------------}
Procedure Input; {описание процедуры ввода данных}
 Begin
  ClrScr;
  Write(’Введите координаты центра круга: ’); ReadLn(a, b);
  Write(’Введите радиус круга: ’);            ReadLn(Radius);
  Write(’Введите количество точек: ’);        ReadLn(NPoints);
  For i := 1 to NPoints do
    begin
       WriteLn(i : 4, ’-ая точка ’);
       Write(’X = ’);  ReadLn(X[i]);
       Write(’Y = ’);  ReadLn(Y[i]);
    end; WriteLn
 End;            {of Input}
{--------------------------------------------}
Procedure Inside(Var Flag : Boolean); {описание процедуры проверки }
 Begin                                {принадлежности точек области}
   Flag := FALSE ; i := 1;
   While (i<=NPoints) and not Flag do
     If Sqr(X[i]–a)+Sqr(Y[i]–b) < Sqr(Radius) {Sqr – возведение в квадрат}
        then Flag := TRUE
        else i:=i+1;
 End; {of Inside}
{--------------------------------------------}
Procedure Output( Flag : Boolean); {описание процедуры }
 Begin                             {вывода результатов }
  Write(’О т в е т : в множестве точек ’);
  If Flag then WriteLn(’cодержатся’)
          else WriteLn(’не содержатся’);
  WriteLn(’ точки, принадлежащие заданной области.’);
  ReadLn
 End; {of Output}
{--------------------------------------------}
BEGIN
  Input;        {вызов процедуры ввода данных }
  Inside(Flag); {вызов процедуры проверки принадлежности}
  Output(Flag)  {вызов процедуры вывода результатов }
END.

QBasic

CLS 
INPUT "Введите через запятую координаты центра круга: ", a, b
INPUT "Введите радиус круга: ", Radius
INPUT "Введите количество точек: ", NPoints
DIM X(NPoints), Y(NPoints) 'описание массивов координат точек
 
FOR i = 1 TO NPoints
  PRINT i; "-ая точка "
  INPUT "x = ", X(i)
  INPUT "y = ", Y(i) : PRINT
NEXT i
 
Flag = 0 : i = 1
WHILE i <= NPoints AND Flag = 0
  IF (X(i)–a)^2 + (Y(i)–b)^2 < Radius^2 THEN Flag=1 ELSE i=i+1
WEND
 
PRINT "О т в е т : в множестве точек ";
IF Flag = 1 THEN PRINT "cодержатся" ELSE PRINT "не содержатся"
PRINT " точки, принадлежащие заданной области."
END
 
Пример 4.3. Определить, имеется ли среди элементов главной диагонали заданной целочисленной матрицы A(N, N) хотя бы один положительный нечётный элемент.
 
Система тестов
Номер теста
Проверяемый случай
Данные
Результат
N
Матрица А
Текст
1
Имеется
3
"Есть такие"
2
Не имеется
2
"Нет таких"
Демонстрация
Школьный АЯ
алг Диагональ (арг цел N, арг цел таб А[1:N, 1:N], рез лит Teкст)
нач цел i, лит Flag
  i:=1; Flag:="Нет"
  нц пока (i<=N) и (Flag="Нет")   | условие продолжения цикла
    если (A[i, i]>0) и (mod(A[i, i], 2)=1) | условие завершения цикла
      то Flag := "Да"
      иначе i:=i+1
    все
  кц 
  если Flag = "Да"
    то Текст := "Есть такие"
    иначе Текст := "Нет таких"
  все
кон
Исполнение алгоритма 

Обозначения проверяемых условий: 
(i <= N) и (Flag = "Нет")  => (1) 
(A[i, i] > 0) и (mod(A[i, i], 2) = 1)  => (2) 
N теста
i
Flag
(1)
(2)
Текст
1
1
2
"Нет"
"Да"
+
+
-(кц)
-
+
"Есть такие"
2
1
2
3
"Нет"
+
+
-(кц)
-
-
"Нет таких"
 

  Блок-схема (фрагмент) 
Turbo Pascal
Program Diagonal;
  Uses Crt;
  Type Mas = Array [1..10, 1..10] of Integer;
  Var  A         : Mas;
       N, i, j   : Integer;
       Flag      : Boolean;
{-----------------------------------}
Procedure InputOutput(Var A : Mas);   {описание процедуры ввода-}
 Begin                                {вывода исходных данных   }
   ClrScr;
   Write(’Количество строк и столбцов – ’); Read(N);
   For i := 1 to N do
     For j := 1 to N do
       begin Write(’A[’ , i , ’, ’ , j , ’] = ? ’);
             ReadLn(A[i, j])
       end;  WriteLn;
   WriteLn(’Заданная матрица :’);
   For i := 1 to N do
     begin
       For j := 1 to N do Write(A[i, j] : 5);
       WriteLn
     end; WriteLn
 End;    { of InputOutput }
{------------------------------------}
Procedure Solution(Var A : Mas); {описание процедуры поиска решения}
  Var Flag : Boolean;
 Begin
   Flag:=FALSE; i:=1;
   While (i<=N) and not Flag do
     If (A[i, i]>0) and (A[i, i] mod 2 = 1)
        then Flag:=TRUE
        else i:=i+1;
   WriteLn(’О т в е т :’);
   Write(’Среди элементов главной диагонали ’);
   If Flag then WriteLn (’есть нечетные положительные.’)
           else WriteLn(’нет нечетных положительных.’);
   ReadLn;
  End;     { of Solution }
{------------------------------------}
BEGIN
  InputOutput(A); {вызов процедуры ввода-вывода данных}
  Solution(A);    {вызов процедуры поиска решения задачи}
END.

QBasic

CLS 
INPUT "Количество строк и столбцов матрицы = ", N
DIM A(N, N)
FOR i = 1 TO N
  FOR j = 1 TO N
    PRINT "A(" ; i ; ", " ; j ; ") = ";
    INPUT A(i, j)
  NEXT j
EXT i 
PRINT : PRINT "Матрица А"
FOR i = 1 TO N
  FOR j = 1 TO N
    PRINT A(i, j) ;
  NEXT j : PRINT
NEXT i 
’Цикл "пока" по элементам главной диагонали A(i,i)
i = 1 : Flag = 0
WHILE i <= N AND Flag = 0
  IF A(i, i)>0 AND A(i, i) MOD 2=1 THEN Flag=1 ELSE i=i+1
WEND 
PRINT :  PRINT "О т в е т :"
PRINT "Среди элементов главной диагонали ";
IF Flag = 1 THEN
    PRINT "есть положительные нечетные."
  ELSE
    PRINT "нет положительных нечетных."
END IF
END
 
Пример 4.4. Числа Фибоначчи ( Fi ) определяются по формулам F0 = F1 = 1; Fi = Fi –1 + Fi –2 при i = 2, 3, ... (каждое очередное число равно сумме двух предыдущих). Вычислить сумму всех чисел Фибоначчи, которые не превосходят заданного натурального числа М.
 
Тест
Номер теста
Данные
Результат
1
M=10
S=1+1+2+3+5+8=20
2
M=1
S=1+1=2
Демонстрация
Школьный АЯ
алг Фибоначчи (арг цел М, рез цел S)
  дано      | M>0
нач цел F0, F1, F2
  F0:=1; F1:=1; F2:=2
  S:=4   | 4 – сумма первых трех чисел Фибоначчи
  нц пока F2<=M
    F0:=F1; F1:=F2; F2:=F0+F1  | серия переприсваиваний
    S:=S+F2;
  кц
  S:=S–F2   | из S вычитается последнее значение F2, превосходящее M
кон
  Исполнение алгоритма 
 
F0
F1
F2
S
F2<M
1
1
2
3
5
1
2
3
5
8
2
3
5
8
13
4
4+3=7
7+5=12
12+8=20
20+13=33
+
+
+
+
-(кц)
     
33-13=20
 
 
Блок-схема 
 Turbo Pascal
Program SummaFib;
  Uses Crt;
  Var M,                  {заданное число }
      F0, F1, F2,         {три последовательных числа Фибоначчи}
      S : Integer;        {сумма чисел Фибоначчи}
BEGIN
  ClrScr;
  Write(’Введите натуральное М : ’);
  ReadLn(M);
  F0:=1; F1:=1; F2:=2;
  S:=4;           {4 – сумма первых трех чисел Фибоначчи}
  Write(’Числа Фибоначчи, не превосходящие ’, M, ’ :’, F0:4, F1:4);
  While F2<=M do
    begin
      F0:=F1; F1:=F2; Write(F1 : 4);
      F2:=F0+F1; S:=S+F2;
    end;
  S:=S–F2; {вычитание из суммы последнего числа, которое превосходит М}
  WriteLn; WriteLn;
  WriteLn(’О т в е т : Сумма этих чисел равна ’, S); ReadLn
END.
Результаты работы Pascal-программы
Введите натуральное M>0 :  10  <Enter>  
Числа Фибоначчи, не превосходящие 10 :  1  1  2  3  5  8  
О т в е т : Сумма этих чисел равна 20
 
QBasic
CLS
INPUT "Введите натуральное М : " , M
F0 = 1 : F1 = 1 : F2 = 2
S = 4     ’4 – сумма первых трех чисел Фибоначчи
PRINT "Числа Фибоначчи, не превосходящие "; M ; " : " ; F0 ; F1 ;
WHILE F2 <= M
  F0=F1 : F1=F2 : PRINT F1;
  F2=F0+F1 : S=S+F2
WEND
S=S–F2   ’вычитание из суммы последнего числа, которое превосходит М
PRINT : PRINT : PRINT "О т в е т : Сумма этих чисел равна "; S
END
 
Пример 4.5. Включить заданное число D в массив A(N), упорядоченный по возрастанию, с сохранением упорядоченности.
 
Система тестов
Номер теста
Проверяемый случай
Данные
Результат
D
Массив А
1
D <= a1
0
A=(1, 3, 5)
A=(0, 1, 3, 5)
2
a1< D <= aN
4
A=(1, 3, 5)
A=(1, 3, 4, 5)
3
aN < D
6
A=(1, 3, 5)
A=(1, 3, 5, 6)
Демонстрация
Школьный АЯ
алг Включение (арг цел N, арг вещ D, арг рез вещ таб A[1:N+1])
  дано | А – упорядоченная по возрастанию последовательность
  надо | в А включено число D с сохранением упорядоченности
нач цел i
  i:=N
  нц пока (i>=1) и (A[i]>D)
    A[i+1] := A[i] | сдвиг очередного элемента вправо на одну позицию
    i := i–1
  кц 
  A[i+1] := D      | включение числа D в последовательность
кон
 
  Исполнение алгоритма 
  Обозначение проверяемого условия:  
(i >= 1)  и  (A[i] > D)   => (1)  
 
Номер теста
i
(1)
Массив А
1
3
2
1
+
+
+
-(кц)
(1, 3, 5)
(1, 3, 5, 5)
(1, 3, 3, 5)
(1, 1, 3, 5)
(0, 1, 3, 5)
2
3
2
+
-(кц)
(1, 3, 5)
(1, 3, 5, 5)
(1, 3, 4, 5)
3
3
-(кц)
(1, 3, 5)
(1, 3, 5, 6)
 
 Блок-схема (фрагмент) 
Turbo Pascal
Program Insertion;
Uses Crt;
Var A    : Array [1..20] of Real;
    D    : Real;
    N, i : Integer;
{--------------------------------------------}
Procedure InputOutput;  {описание процедуры ввода-вывода}
 Begin   ClrScr;
   Write(’Количество элементов массива - ’);       ReadLn(N);
   WriteLn(’Введите элементы массива, упорядоченные по возрастанию:’);
   For i := 1 to N do
     begin   Write(’A[’ , i , ’] = ’); ReadLn(A[i])
     end;    WriteLn;
   Write(’Введите число, которое требуется включить в массив: ’);
   ReadLn(D);
   ClrScr;   Write(’Исходный массив :’);
   For i := 1 to N do Write(A[i] : 5 : 1);  WriteLn;
   WriteLn(’Включаемый элемент – ’, D : 5 : 1);
End;    { of InputOutput }
{--------------------------------------------}
Procedure Insert; {описание процедуры включения нового элемента}
Begin 
  i:=N;
  While (i>=1) and (A[i]>D) do
    begin A[i+1] := A[i]     {сдвиг очередного элемента вправо}
          i:=i–1
    end;
  A[i+1] := D {включение числа D в последовательность} 
End;
{--------------------------------------------}
Procedure Result; {описание процедуры вывода результатов}
Begin   WriteLn;
  Write(’О т в е т : массив с включенным элементом ’);
  For i := 1 to N+1 do Write( A[i] : 5 : 1);     WriteLn;
  ReadLn
End;
{--------------------------------------------}
BEGIN
  InputOutput; {вызов процедуры ввода-вывода }
  Insert;      {вызов процедуры включения нового элемента}
  Result;      {вызов процедуры вывода результатов }
END.

QBasic

CLS
INPUT "Количество элементов массива – ", N
DIM A(N+1)
PRINT "Введите элементы массива, упорядоченные по возрастанию:"
FOR i = 1 TO N
  PRINT "A(" ; i ; ") = " ; :     INPUT A(i)
NEXT i :   PRINT
INPUT "Введите число, которое требуется включить в массив: ", D
CLS : PRINT "Исходный массив – ";
FOR i = 1 TO N
  PRINT A(i) ;
NEXT i :  PRINT
PRINT "Включаемый элемент – "; D
i = N
WHILE i >= 1 AND A[i]>D
  A(i+1) = A[i] : i = i – 1    'сдвиг очередного элемента вправо
WEND
A(i+1) = D  ’включение числа D в последовательность
PRINT : PRINT "О т в е т : массив с включенным элементом ";
FOR i = 1 TO N + 1
  PRINT A(i) ;
NEXT i : PRINT
END


Задачи для самостоятельного решения

4.1. [Pascal | Basic] Вычислить сумму Z = 1 + 2 + 3 + ... . Вычисления прекратить, когда значение Z превысит заданное значение A.

4.2. [Pascal | Basic] Проверить, есть ли в заданной целочисленной последовательности a1 , a2 , ..., a  элементы, равные нулю.  Если есть,  найти номер первого из них, если нет – выдать соответствующий текст.

4.3. [Pascal | Basic] Для заданного числа x вычислить первое из чисел последовательности  sin x,  sin sin x,  sin sin sin x, ...,  меньшее по модулю 10–2.

4.4. [Pascal | Basic] Выяснить, имеются ли в заданном векторе A(N) два подряд идущих нулевых элемента.

4.5. [Pascal | Basic] Выяснить, имеются ли в заданном целочисленном векторе A(N) три подряд идущих элемента одного знака.

4.6. [Pascal | Basic] Множество точек в пространстве задано своими целочисленными координатами. Определить, совпадает ли хотя бы одна из точек с началом координат.

4.7. [Pascal | Basic] Если у заданного вектора A(N) есть хотя бы один элемент, меньший, чем  –5, то все отрицательные элементы заменить их квадратами, оставив остальные элементы без изменения; в противном случае вектор домножить на 0,1.

4.8. [Pascal | Basic] Имеется последовательность чисел a1, a2 , ..., aN . Найти сумму первых из них (считая слева направо), произведение которых не превышает заданного числа М.

4.9. [Pascal | Basic] Задано целое A>1. Найти наименьшее целое неотрицательное k, при котором 5k>A.

4.10. [Pascal | Basic] Все элементы заданного вектора A(N), начиная с первого по порядку положительного элемента, уменьшить на единицу.

4.11. [Pascal | Basic] Числа Фибоначчи (Fi) определяются по формулам
  F0 = F1= 1; Fi = Fi–1+ Fi–2 при i = 2, 3, ...
Найти первое из чисел Фибоначчи, которое превосходит заданное число M (M>0).

4.12. [Pascal | Basic] Выяснить, имеeтся ли среди чисел i3 – 17• i• n2 + n3 , i= 1, ..., n, хотя бы  одно число, которое кратно заданному числу А и не кратно заданному числу В
(A<>B). При существовании такого числа требуется вычислить сумму всех тех элементов, которые предшествовали ему.

4.13. [Pascal | Basic] Определить, имеются ли среди элементов побочной диагонали заданной целочисленной матрицы A(N,N) числа, равные нулю.

4.14. [Pascal | Basic] Найти любое трёхзначные число, кратное заданному Р и не равное ему.

4.15. [Pascal | Basic] Вычислить приближённое значение бесконечной суммы:

Суммирование производить до тех пор, пока очередное слагаемое не станет   по абсолютной величине меньше заданного числа e>0.

4.16. [Pascal | Basic] Если в заданном целочисленном векторе A(N) есть элементы со значением, равным заданному числу B, то переменной С присвоить значение, равное сумме всех элементов, предшествующих первому по порядку такому элементу; в противном случае вывести соответствующий текст.

4.17. [Pascal | Basic] Дана последовательность из N целых чисел. Определить, со скольких положительных чисел она начинается.

4.18. [Pascal | Basic] Среди чисел
 
найти номер и значение первого по порядку числа, абсолютная величина которого меньше заданного eps > 0 . Если таких чисел нет, вывести на печать соответствуюший текст.

4.19. [Pascal | Basic] Определить, имеется ли в заданном массиве A(N) хотя бы одна пара соседних чисел, являющихся взаимнообратными.

4.20. [Pascal | Basic] Определить, выполняются ли для заданного вектора A( 2N ) условия: а12N ,  a2= a2N–1 , ...,  aN= aN+1, т.е. является ли он симметричным относительно своей середины.

4.21. [Pascal | Basic] Имеется монотонно убывающая последовательность чисел a1 , a2 , ..., aN . Определить квадрат суммы положительных членов этой последовательности.

4.22. [Pascal | Basic] Если в заданном целочисленном векторе A(N) есть элементы со значением, равным заданному числу B, то переменной С присвоить значение, равное произведению всех элементов, следующих за первым по порядку таким элементом; в противном случае вывести соответствующий текст.

4.23. [Pascal | Basic] Определить, имеется ли в заданном целочисленном массиве X(N) число, кратное заданным числам А и В, и не кратное числу С.

4.24. [Pascal | Basic] Дано натуральное N. Выяснить, сколько цифр оно содержит.

4.25. [Pascal | Basic] Найти сумму цифр заданного натурального числа.

4.26. [Pascal | Basic] Цифры заданного натурального числа записать в обратном порядке.

4.27. [Pascal | Basic] Проверить, все ли элементы заданного массива A(N) положительны.

4.28. [Pascal | Basic] Найти наименьший делитель заданного натурального числа A (не считая единицы).

4.29. [Pascal | Basic] Определить, является ли заданное натуральное число палиндромом (палиндром – число, одинаково читаемое слева направо и справа налево).

4.30. [Pascal | Basic] Определить по данным музейного каталога, есть ли в музее хотя бы одна картина Левитана или Шишкина. Если есть, выдать ее название, в противном случае выдать соответствующий текст.

4.31. [Pascal | Basic] Определить по прейскуранту, можно ли подобрать в спортивном магазине велосипед, стоимость которого не превышает имеющуюся у покупателя сумму.

4.32. [Pascal | Basic] Известен начальный вклад клиента в банк и процент годового дохода. Определить, через сколько лет вклад превысит заданный размер и каков при этом будет размер вклада.

4.33. [Pascal | Basic] Торговая фирма в первый день работы реализовала товаров на  P тыс. руб., а затем ежедневно увеличивала выручку на 3%. Какой будет выручка фирмы в тот день, когда она впервые превысит заданное значение Q ? Сколько дней придется торговать фирме для достижения этого результата?

4.34. [Pascal | Basic] Малое предприятие в первый день работы выпустило P единиц товарной продукции. Каждый последующий день оно выпускало продукции на Q единиц больше, чем в предыдущий. Сколько дней потребуется предприятию, чтобы общее количество выпущенной продукции за все время работы впервые превысило запланированный объем?

4.35. [Pascal | Basic] Определить, имеется ли в заданном множестве точек на плоскости хотя бы одна, принадлежащая заштрихованной на рисунке области (на рисунках даны окружности с единичным радиусом и парабола y=x2):