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



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

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

Язык
Пример
Пояснения
 
Школьный АЯ
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 | C | Basic]   Вычислите сумму Z = 1 + 2 + 3 + ... . Вычисления прекратите, когда значение Z превысит заданное значение A.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.36. [Pascal | C | Basic]   Даны два натуральных числа M и N - числитель и знаменатель дроби M/N. Требуется сократить дробь, насколько это возможно.

4.37. [Pascal | C | Basic]   На плоскости даны две точки А(2, 2) и В(2, 6), а также N точек со своими координатами. Определитe, есть ли среди этих N точек хотя бы одна, которая является:
   а) вершиной равнобедренного треугольника с основанием АВ;
   б) вершиной прямоугольного треугольника с катетом АВ.

4.38. [Pascal | C | Basic]  Дано натуральное число N. Получите его запись в двоичной, восьмеричной и шестнадцатеричной системах счисления.

4.39. [Pascal | C | Basic]   На соревнованиях по воздухоплаванию доля тепловых шаров от общего количества шаров обычно составляет от 93,4% до 97,5% всех шаров. При каком наименьшем общем количестве шаров возможно такое процентное соотношение?

4.40*. [Pascal | C | Basic]   По перечню редких и исчезающих видов животных и растений, содержащемуся в "Красной Книге" вашего региона, определите, верно ли, что в нем содержится не менее пяти подвидов папоротников и ни более двух подвидов фазанов.

4.41*. [Pascal | C | Basic]   Городок состоит из  N  многоквартирных котеджей, расположенных вдоль прямой дороги с одной ее стороны на равных расстояниях друг от друга. В городке проводят телефонную связь. Известно, сколько телефонных аппаратов надо установить в каждом доме. Определите, в каком из домов надо установить АТС, чтобы суммарное расстояние от АТС до всех телефонных аппаратов было минимальным. Если таких домов несколько, достаточно найти любой из них. Учтите, что каждый телефон связан с АТС отдельным проводом.

4.42*. [Pascal | C | Basic]   Вокруг считающего стоят   N  человек, один из которых назван первым, а остальные занумерованы по часовой стрелке числами от 2 до N. Считающий ведет счет до  М , начиная с первого. Человек, на котором остановился счет, выходит из круга. Счет возобновляется с человека, следовавшего за выбывшим, и так до тех пор, пока не останется один человек. Определите первоначальный номер последнего оставшегося человека.
&nspb;