на процедурных языках Ершол, QBasic, Turbo Pascal [13]
№ п/п
Название команды
Представление
Графическое
Turbo Pascal
QBasic
Ершол
Серии S1, …, SN состоят из одной команды
Серии S1, …, SN содержат более одной команды
Команды ветвления
Команда ветвления в полной форме
If P then
S1
else
S2;
If P then
begin
S1
end
else
begin
S2
end;
If P then
S1
else
S2
End if
если P то
S1иначе
S2все
Команда ветвления в сокращенной (неполной) форме
If P then
S1;
If P then
begin
S1
end;
If P then
S
End if
если P то
S
все
Команда выбора в полной форме
If P1 then
begin
S1;
Goto K
end;
If P2 then
begin
S2;
Goto K
end;
…
If Pn then
Sn
else
Sn+1;
K: < следующий за командой выбора оператор>
If P1 then
begin
S1;
Goto K
end;
If P2 then
begin
S2;
Goto K
end;
…
If Pn then
begin
Sn
end
else
begin
Sn+1
end;
K: < следующий за командой выбора оператор>
If P1 then
S1
elseif P2 then
S2
elseif P3 then
S3
…
elseif Pn then
Sn
else
Sn+1
End if
If P1 then
begin
S1;
Goto K
end;
If P2 then
begin
S2;
Goto K
end;
…
If Pn then
Sn;
K: < следующий за командой выбора оператор>
If P1 then
begin
S1;
Goto K
end;
If P2 then
begin
S2;
Goto K
end;
…
If Pn then
begin
Sn;
end;
K: < следующий за командой выбора оператор>
If P1 then
S1
elseif P2 then
S2
elseif P3 then
S3
…
elseif Pn then
Sn
End if
выборпри P1: S1при P2: S2при P3: S3…при Pn: Snвсе
Циклические команды
Команда повторения «пока» (цикл с предусловием)
While P do
S;
While P do
begin
S
end;
Do while P
S
Loop
нцпока P
S
кц
Команда повторения «повторять S пока P не станет истинным» (цикл с постусловием)
Repeat
S
Until P;
Repeat
S
Until P;
Do
S
Loop until P
нц
S
кцпри P
Команда повторения «для» (цикл с параметром)
For i: =i1 to i2 do
S;
For i: =i1 downto i2 do
S;
For i: =i1 to i2 do
begin
S
end;
For i: =i1 downto i2 do
begin
S
end;
For i=iнач to iкон [step шаг]
S
Next i
нцдля i от iначдо iкон [ шаг iшаг]
S
кц
Оператор варианта на языках QBasic и Turbo Pascal
QBasic
Turbo Pascal
Select Case < выражение>
Case < значение1>
< серия операторов, которые выполняются, когда значение
выражения равно значению1>
Case < значение2>
< серия операторов, которые выполняются, когда значение
выражения равно значению2>
…
Case < значение_n>
< серия операторов, которые выполняются, когда значение
выражения равно значению_n>
[Case Else
< серия операторов, которые выполняются, когда значение
выражения не равно значению1, значению2, …, значению_n>
End Select
Case < выражение> of
< список1, значений выражения, перечисленных через запятую>:
begin
S1
end;
< список2, значений выражения, перечисленных через запятую>:
begin
S2
end;
…
< список_n, значений выражения, перечисленных через запятую>:
begin
Sn
end
[else
begin Sn+1 end; ]
end;
2. Коды программ решения задач 10-36 на языках Ершол, QBasic, Turbo Pascal [14]
Задача 10, стр. 33 (Ершол):алг БИД (аргвещ a, b, резвещ x)
начвещ R
│ |ввод операндов a и b организует сама
│ |система Ершол, они описаны как арг
│ R: =a-b |найдем разность чисел a и b
│ |команда ветвления в полной форме
│ если R< 0 |если условие R < 0 истинно,
│ │ то x: =b |то x присваивается
│ │ |значение b,
│ │ иначе x: =a| иначе х принимает зн. а
│ │ все
│ |вывод операнда x организует сама
│ |система Ершол, он описан как резконЗадача 10, стр. 33 (QBasic)
REM Большее из двух
'Блок описания переменных a, b, R, x
DIM a AS SINGLE, b AS SINGLE
DIM R AS SINGLE, x AS SINGLE
CLS 'Очистка экрана
'Ввод чисел a и b
INPUT " Введите два числа a и b: "; a, b
'Найдена разность чисел a и b
R = a – b
'Сравниваем разность с 0
IF R < 0 THEN
'Если разность меньше 0, то большее 'число b
x = b
ELSE 'иначе,
'если разность больше или равна 0,
'то большее число a
x = a
END IF
'Блок вывода результата
PRINT " Большее из чисел ";
PRINT USING " ###.###"; a;: PRINT " и";
PRINT USING " ###.###"; b;: PRINT " ---"; PRINT USING " ###.###"; x
END 'Конец
Задача 11, стр. 34 (Turbo Pascal)
Program Kvadr_ur;
Uses CRT;
Задача 10, стр. 33 (Turbo Pascal):
Program BID; {Заголовок}
Uses CRT; {Подсоединение модуля CRT}
{Блок описания переменных}
Var
a, b, R, x: real; { a, b, R, x – вещественные}
Begin
ClrScr; {Очистка экрана}
{Вывод на экран подсказки}
Write('Введите два числа: ');
Readln(a, b); {Ввод чисел a и b }
R: =a-b; {Нахождение разности чисел
a и b }
{Выбор большего из чисел a и b }
If R< 0 then x: =b else x: =a;
{Блок печати}
Writeln('max (', a: 6: 3, ' и ', b: 6: 3, ' -) ', x: 6: 3)
End.
Задача 11, стр. 34 (Ершол)алг КВУР (аргвещ a, b, c)
начвещ R, D, x1, x2 |данные R, D -
│ |промежуточные величины
│ |ввод аргументов организует
│ |система Ершол
│ D: =b*b-4*a*c|оператор
│ |присваивания
│ | команда ветвления в полной форме
│ если D> 0
│ │ то
│ │ |если D > 0, то вычисляем корни
│ │ R: =sqrt(D) |квадратного уравнения
│ │ x1: =(-b-R)/(2*a); x2: =(-b+R)/(2*a)
│ │ |выводим знач. x 1 и x 2
│ │ вывод нс, " x1= ", x1, нс, " x2= ", x2
│ │ иначе
│ │ |выводим сообщение
│ │ вывод нс
│ │ вывод " корни не вычисляем
│ │ (D< =0)"
│ всекон
Var a, b, c, d, r, x1, x2: real;
Begin
Write('Введите коэффициенты a, b, c: ');
Readln(a, b, c);
d: =b*b-4*a*c;
If d> 0 then
begin
r: =sqrt(d);
x1: =(-b-r)/(2*a);
Задача 11, стр. 34 (QBasic)
REM Квадратное уравнение
DIM a AS SINGLE, b AS SINGLE
DIM c AS SINGLE, d AS SINGLE
DIM r AS SINGLE, x1 AS SINGLE
DIM x2 AS SINGLE
INPUT " Введите коэфф. a, b, c: "; a, b, c
d = b * b - 4 * a * c
IF d > 0 THEN
x2: =(-b+r)/(2*a);
Writeln('x1=', x1, ' x2= ', x2)
end
else
Writeln('Корни не вычисляем (D< =0)')
End.
Задача 12, стр. 34 (Ершол)алг площадь треугольника (резвещ s)
данонадоначвещ a, b, c, вещ p, k
│ |данные p и k -промежуточные
│ |величины
│ |оператор вывода сообщения
│ вывод " введите знач. а"
│ ввод a |оператор ввода операнда a
│ |оператор вывода сообщения
│ вывод нс, " введите знач. b"
│ ввод b |оператор ввода операнда b
│ вывод нс, " c= " |оператор вывода
│ |сообщения
│ ввод c |оператор ввода операнда c
│ p: =(a+b+c)/2 |оператор присваивания
│ |оператор присваивания
│ k: =p*(p-a)*(p-b)*(p-c)
│ если k> 0
│ │ то
│ │ s: =sqrt(k)
│ │ иначе
│ │ s: =-1
│ все
│ |вывод значения s организует система
│ |Ершол
конЗадача 13, стр. 35 (Ершол)алг БИT (аргвещ a, b, c, d, резвещ max)
данонадонач
│ |ввод данных a, b, c организует система
│ |Ершол
│ |команда ветвления в полной форме
│ если a< b |проверяется условие a < b,
│ │ то |если условие истинно, то
│ │ max: =b | max присваивается
│ │ |значение b,
│ │ иначе |если условие ложно, то
│ │ max: =a | max присваивается
│ │ |значение a
│ все
│ |команда ветвления в сокращенной
│ |форме
│ если max< c |проверяется условие
│ | max < c,
│ │ то |если условие истинно, то
│ │ max: =c | max присваивается
│ │ |значение с,
│ │ |иначе команда ветвления никаких
│ │ |действий не предписывает
│ все
│ |вывод результата max организует
│ |система Ершол
конЗадача 13, стр. 35 (QBasic)
REM Большее из трех
DIM a AS SINGLE, b AS SINGLE
DIM c AS SINGLE, max AS SINGLE
INPUT " Введите a, b, c: "; a, b, c
IF a < b THEN
max = b
ELSE
max = a
END IF
IF max < c THEN max = c
PRINT max
END
Задача 14, стр. 35 (Turbo Pascalспособ 1)
Program Func;
Uses CRT;
Var x, y: real;
Begin
Write('Введите x: ');
Readln(x);
If x> 22 then
y: =1/(x*x+1)
else
If x< =3 then
y: =x-1
else
y: =x*x*x+2;
Writeln('x=', x, ' y=', y)
End.
Задача 14, стр. 35 (Ершол способ 2)алг функция (аргвещ x, резвещ y)
данонадонач
│ |ввод знач. операнда x организует
│ |система Ершол
│ |команда выбора в полной форме
│ выбор
│ │ | x < =3-истинно, то y присваивается
│ │ |значение x -1
│ │ при x< =3: y: =x-1
│ │ | 3< x < =22-истинно, то y принимает
│ │ |значение x **3+2,
│ │ при x< =22: y: =x**3+2
│ │ | иначе x > 22, y принимает значение
│ │ |1/(x * x +1)
│ │ иначе y: =1/(x*x+1)
│ все
│ |вывод результата y организует
│ |система Ершол
конЗадача 14, стр. 35 (QBasic способ 2)
REM Значение функции
DIM y AS SINGLE, x AS SINGLE
INPUT " Введите x: "; x
IF x < = 3 THEN
y = x - 1
ELSEIF x < = 22 THEN
y = x * x * x + 2
ELSE
y = 1 / (x * x + 1)
END IF
PRINT " x="; x; " y="; y
END
Задача 15, стр. 37 (Ершол)алг пересечение отрезков (аргвещ
a, b, c, d, резвещ R)
начвещ x, y |промежуточные данные
| x и y
│ |ввод данных a, b, c, d организует
│ |система Ершол
│ |первая команда ветвления в полной
│ |форме
│ если a> =c |если условие a > = c истинно,
│ │ то x: =a |то x присваивается
│ │ |значение a,
│ │ иначе x: =c |иначе значение c
│ все
│ |вторая команда ветвления в полной
│ |форме
│ если b> =d |если условие b > = d
│ |истинно,
│ │ то y: =d |то y присваивается значение │ | d,
│ │ иначе y: =b|иначе – значение b
│ все
│ |третья команда ветвления в полной
│ |форме
│ если x< =y |если условие x < = y
│ |истинно,
│ │ то R: =1 |то R присваивается
│ |значение 1,
│ │ вывод нс, " [", x, "; ", y, " ]"
│ │ иначе R: =0| иначе – значение 0
│ все
│ |вывод операнда R организует система
│ |Ершол
кон
Задача 16, стр. 37 (Ершол)алг сумма кубов (резцел s)
данонадоначцел n
│ |задание начальных значений
│ |переменным s и n
│ s: =0 | s - текущая сумма
│ n: =1 | n - номер текущего слагаемого
│ |цикл с предусловием,
│ нцпока n< =100 |проверка условия,
│ │ s: =s+n*n*n |пока условие истинно
│ │ n: =n+1 |выполняются команды
│ |тела цикла
│ кц
│ |вывод значения s организует система
│ |Ершол, т.к. операнд s описан как резконЗадача 16, стр. 37 (Turbo Pascal)
Program Summa;
Uses CRT;
Var s, n: integer;
Begin
s: =0; n: =1;
Repeat
s: =s+n*n*n;
n: =n+1
Until n> 100;
Writeln('s=', s)
End.
Задача 16, стр. 37 (QBasic)
REM Сумма кубов
DIM s AS LONG, n AS INTEGER
s = 0: n = 1
DO
s = s + n * n * n: n = n + 1
PRINT s, n
LOOP UNTIL n > 100
PRINT " s="; s
END
Задача 17, стр. 39 (Turbo Pascal)
Program Root;
Uses CRT;
Var x, e, y1, y2, d: real;
Begin
Write('Введите x, e');
Readln(x, e);
y1: =x;
Repeat
y2: =2/3*(y1+x/(2*y1*y1));
d: =abs(y2-y1);
y1: =y2
Until d< =e;
Writeln(y1: 7: 5)
End.
Задача 17, стр. 39 (QBasic)
REM Корень третьей степени
DIM x AS SINGLE, e AS SINGLE
DIM y1 AS SINGLE, y2 AS SINGLE
DIM d AS SINGLE
INPUT " Введите x, e"; x, e
y1 = x
DO
y2 = 2 / 3 * (y1 + x / (2 * y1 * y1))
d = ABS(y2 - y1): y1 = y2
LOOP UNTIL d < = e
PRINTUSING " ###.##"; y1
END
Задача 18, стр. 40 (Turbo Pascal)
Program Fibonacci;
Uses CRT;
Var a, b, c, k, n: integer;
Begin
Write('Введите n ');
Readln(n);
a: =1; b: =1; k: =3;
Repeat
c: =a+b; a: =b; b: =c;
k: =k+1
Until k> n;
Writeln(c)
End.
Задача 18, стр. 40 (QBasic)
REM Число Фибоначчи
DIM a AS INTEGER, b AS INTEGER
DIM c AS INTEGER, k AS INTEGER
DIM n AS INTEGER
INPUT " Введите n "; n
a = 1
b = 1
k = 3
DO
c = a + b: a = b: b = c
k = k + 1
LOOP UNTIL k > n
PRINT c
END
Задача 19, стр. 41 (Turbo Pascal)
Program Cosinus;
Uses CRT;
Var x, e, a, s, r: real;
n: integer;
Begin
Write('Введите x, e ');
Readln(x, e);
a: =1;
s: =1;
x: =x*pi/180;
r: =-1*x*x;
n: =1;
Repeat
a: =a*r/((2*n-1)*2*n);
s: =s+a;
n: =n+1
Until abs(a)< =e;
Writeln(x, s)
End.
Задача 20, стр. 41 (Ершол)
|заголовок
алг полет мухи(аргвещ e, d, vm, v1, v2)
данонадоначлит l, вещ y, t, x, s
│ |ввод операндов (e, d, vm, v 1, v 2)
│ |организует система Ершол, они
│ |описаны в заголовке как аргументы
│ y: =d; s: =0|задание начальных значений
│ l: =" к поезду из B" |операндов y, s, l
│ |цикл с предусловием,
│ |пока y > e истинное высказывание
│ нцпока y> e |выполнются команды
│ | тела цикла,
│ │ |если муха летит к поезду B,
│ │ если l=" к поезду из B"
│ │ │ то |то далее она полетит
│ │ │ l: =" к поезду из A" |к поезду A,
│ │ │ |определим время полета мухи до
│ │ │ |встречи с поездом B,
│ │ │ t: =y/(vm+v2)
│ │ │ иначе |иначе она летит к поезду A,
│ │ │ |далее она полетит к поезду B,
│ │ │ l: =" к поезду из B"
│ │ │ |определим время полета мухи до
│ │ │ |встречи с поездом A
│ │ │ t: =y/(vm+v1)
│ │ все
│ │ |блок вывода операндов t, x, s, y
│ │ |(можно выводить только x и s)
│ │ вывод нс, " t=", t
│ │ x: =t*vm; вывод " x=", x
│ │ s: =s+x; вывод " s=", s
│ │ y: =y-t*(v1+v2); вывод " y=", y
│ кцконЗадача 21, стр. 46 (Ершол)алг произведение1 (аргцел n,
аргвещтаб a[1: n], резвещ П)
начцел k
│ |ввод количества элементов n и
│ |элементов массива a организует
│ |система Ершол
│ |задание начальных значений данных
│ П: =1; k: =1 | П и k
│ |цикл с предусловием
│ нцпока k< =n |проверяется условие
│ | k < = n,
│ │ |пока условие истинно вычисляется
│ │ |произведение k элементов массива,
│ │ П: =П*a[k]
│ │ |увеличивается номер (k)
│ │ k: =k+1 |очередного элемента
│ кц
│ |если k < = n ложно, т.е. k > n, то
│ |выполнится вывод произведения П,
│ |вывод произведения организует
│ |система Ершол
конЗадача 21, стр. 46 (Turbo Pascal)
Program Array_element_product;
Uses CRT; Const n=10;
Var
k: integer;
p: real;
a: array [1..n] of real;
Begin
ClrScr;
Write('Введите количество чисел n ');
Readln(n);
For k: =1 to n do
begin
Write('Введите a[', k, '] ');
Readln(a[k])
end;
p: =1;
k: =1;
While k< =n do
begin
p: =p*a[k]; k: =k+1
end;
Writeln('p=', p)
End.
Задача 22, стр. 46 (QBasic)
REM Произведение матриц
DIM i AS INTEGER, j AS INTEGER
DIM n AS INTEGER, m AS INTEGER
INPUT " Введите m, n "; m, n
DIM c(1 TO m) AS SINGLE
DIM b(1 TO n) AS SINGLE
DIM a(1 TO m, 1 TO n) AS SINGLE
CLS
FOR i = 1 TO m
FOR j = 1 TO n
PRINT " Введите a("; i; ", "; j; ") =";
INPUT a(i, j)
NEXT j
NEXT i
FOR i = 1 TO n
PRINT " Введите b("; i; ")= ";
INPUT b(i)
NEXT i
i = 1
DO
c(i) = 0: j = 1
DO
c(i) = c(i) + a(i, j) * b(j): j = j + 1
LOOP UNTIL j > n
i = i + 1
LOOP UNTIL i > m
FOR i = 1 TO m
PRINT " c("; i; ")="; c(i)
NEXT i
END
Задача 23, стр. 48 (Ершол)алг положительные элементы (аргцел n,
аргвещтаб a[1: n])
начцел i, цел k
│ |ввод аргумента n и элементов
│ |массива a организует система Ершол
│ |задание начальных значений
│ |данных i, k
│ k: =0; i: =1
│ |команда повторения с предусловием
│ |проверяется условие i < = n и k =0, пока
│ |условие истинно
│ нцпока i< =n и k=0 | выполняется
│ │ |команда ветвления в неполной
│ │ |форме:
│ │ если a[i]> 0 |проверяется условие
│ │ |a[ i ]> 0,
│ │ │ то |если оно истинно, то k
│ │ │ k: =1 |присваивается значение 1
│ │ все
│ │ | i увеличивается на единицу, это
│ │ |индекс просматриваемого элемента
│ │ |массива
│ │ i: =i+1
│ кц
│ вывод нс, " k=", k |вывод значения kконЗадача 23, стр. 48 (Turbo Pascal)
Program Positive_number;
Uses CRT;
Const n1=10;
Var
i, n, K: integer;
a: array [1..n1] of real;
Begin
ClrScr;
Write('Введите n ');
Readln(n);
For i: =1 to n do
begin
Write('Введите a[', i, '] ');
Readln(a[i])
end;
K: =0; i: =1;
Repeat
If a[i]> 0 then K: =1;
i: =i+1
Until (i> n) or (K=1);
Writeln('K=', K)
End.
Задача 24, стр. 49 (Ершол)алг поиск буквы (аргцел n,
арглиттаб w[1: n], аргсим v)
данонадоначцел i, цел k
│ |ввод операнда n и элементов массива
│ | w организует Ершол
│ |задание начальных значений
│ k: =0; i: =1|операндов k и i
│ |запишем команду повторения с
│ |предусловием
│ |проверяем условие i < = n и k =0,
│ нцпока i< =n и k=0 |пока оно истинно
│ │ если v=w[i] |выполняется команда
│ │ |ветвления в полной форме:
│ │ │ то |проверим условие v =w[ i ],
│ │ │ |если оно истинно, то k присвоим
│ │ │ k: =i |значение 1 иначе i
│ │ │ иначе i: =i+1 |увеличим на 1
│ │ все
│ кц
│ вывод нс, " k=", k
конЗадача 24, стр. 49 (QBasic)
REM Поиск буквы
CONST n = 5
DIM i AS INTEGER, K AS INTEGER
DIM w AS STRING *n, v AS STRING *1
CLS
INPUT " Введите слово "; w
INPUT " Введите букву "; v
K = 0
i = 1
DO
IF v = MID$(w, i, 1) THEN
K = i
ELSE
i = i + 1
END IF
LOOP UNTIL (i > n) OR (K < > 0)
PRINT " K="; K
END
Задача 25, стр. 49 (Turbo Pascal)
Program Amount_positive_element;
Uses CRT;
Const n1=10;
Var
n, i, K, l, m: integer;
a: array[1..n1] of real;
Begin
ClrScr;
Write('Введите n '); Readln(n);
Write('Введите K '); Readln(K);
For i: =1 to n do
begin
Write('Введите a[', i, '] '); Readln(a[i])
end;
l: =0; i: =1;
Repeat
If a[i]> 0 then l: =l+1;
i: =i+1
Until (i> n) or (l=K);
If l=K then m: =i-1 else m: =0;
Writeln('m=', m)
End.
Задача 26, стр. 49 (Ершол)алг сдвиг в массиве (аргцел n,
аргрезвещтаб a[1: n])
начвещ c, цел i
│ |ввод операнда n и элементов массива
│ | a организует система Ершол
│ |значение a[ n ] сохраняется
│ |в переменной c
│ c: =a[n]
│ нцдля i от n до 2 шаг -1 | команда
│ │ a[i]: =a[i-1] |повторения " для"
│ кц
│ |после сдвига всех элементов массива
│ |вправо на одну позицию, a[1]
│ a[1]: =c |получает значение c или a[ n ]
│ |вывод элементов нового массива a
│ |организует система Ершол
конЗадача 26, стр. 49 (QBasic)
REM Сдвиг в массиве
DIM n AS INTEGER, i AS INTEGER
DIM c AS SINGLE
CLS
INPUT " Введите n "; n
DIM A(1 TO n) AS SINGLE
FOR i = 1 TO n
PRINT " Введите A("; i; ") ";
INPUT A(i)
NEXT i
c = A(n)
FOR i = n TO 2 STEP -1
A(i) = A(i - 1)
NEXT i
A(1) = c
FOR i = 1 TO n
PRINT " A("; i; ")="; A(i)
NEXT i
END
Задача 27, стр. 50 (Ершол, способ 1)алг максимальные в массиве (аргцел n,
вещтаб a[1: n])
начвещ b, цел i, цел K, целтаб M[1: n]
│ |предположим, что больший
│ b: =a[1] |элемент a[1]
│ |будем сравнивать больший элемент с
│ |элементами массива, начиная со
│ i: =2 |второго (i =2)
│ нц |команда цикла с постусловием
│ │ |команда ветвления в сокращенной
│ │ если b< =a[i] |форме для
│ │ │ то |выбора большего из b и a[ i ]
│ │ │ b: =a[i]
│ │ все
│ │ |увеличение индекса просматривае-
│ │ i: =i+1 |мого элемента массива на 1
│ кцпри i> n
│ |задание начального значения │ | K (количество
│ K: =0 |максимальных элементов)
│ i: =1 |задание начального значения i
│ нц |команда повторения
│ |с постусловием
│ │ |команда ветвления в
│ │ если b=a[i] |сокращенной форме
│ │ │ то |подсчет элементов массива,
│ │ │ K: =K+1 |равных b, создание
│ │ │ |массива индексов этих элементов
│ │ │ M[K]: =i
│ │ все
│ │ |получение индекса
│ │ i: =i+1 |просматриваемого элемента
│ |проверка условия окончания цикла
│ кцпри i> n
│ |блок вывода значения K и значений
│ |элементов массива M[1: K ]
│ вывод нс, K
│ вывод нс
│ нцдля i от 1 до K
│ │ вывод M[i]
│ кцконЗадача 27, стр. 50 (Turbo Pascal,способ 1)
Program Maximum_elements_of_the_array;
Uses CRT;
Const n1=10;
Var
n, i, K: integer;
a: array[1..n1] of real;
M: array[1..n1] of byte;
b: real;
Begin
ClrScr;
Write('Введите n '); Readln(n);
For i: =1 to n do
begin
Write('Введите A[', i, '] '); Readln(a[i])
end;
b: =a[1]; i: =2;
Repeat
If b< =a[i] then b: =a[i];
i: =i+1
Until i> n;
K: =0;
i: =1;
Repeat
If b=a[i] then
begin
K: =K+1; M[K]: =i
end;
i: =i+1
Until i> n;
For i: =1 to K do
Writeln('M[', i, ']=', M[i]);
Writeln('K=', K)
End.
Задача 27, стр. 50 (QBasic, способ 2)
REM Максимальные элементы в массиве
DIM n AS INTEGER, i AS INTEGER
DIM K AS INTEGER, b AS SINGLE
CLS
INPUT " Введите n "; n
DIM a(1 TO n) AS SINGLE
DIM M(1 TO n) AS INTEGER
FOR i = 1 TO n
PRINT " Введите A("; i; ") ";
INPUT a(i)
NEXT i
b = a(1): i = 2
K = 1: M(K) = 1
DO
IF b < = a(i) THEN
IF b = a(i) THEN
K = K + 1: M(K) = i
ELSE
b = a(i)
K = 1: M(K) = i
END IF
END IF
i = i + 1
LOOP UNTIL i > n
FOR i = 1 TO K
PRINT " M("; i; ")="; M(i)
NEXT i
PRINT " K="; K
END
Задача 28, стр. 52 (Ершол)алг дружественные числа (аргцел n)
данонадоначцел k, p, s, целтаб Делитель[1: n]
│ |первое просматриваемое число
│ |равно 2
│ k: =2
│ |цикл " пока", проверка условия
│ нцпока k< =n |окончания цикла
│ │ |единица - делитель всех просматри-
│ │ Делитель[k]: =1 |ваемых чисел
│ │ |очередное просматриваемое число
│ │ k: =k+1
│ кц
│ |первое просматриваемое число
│ |равно 2
│ k: =2
│ |цикл " пока", проверка условия
│ нцпока k< =div(n, 2) |окончания цикла
│ │ |первое число имеющее делителем
│ │ p: =k+k |число k (p < > k)
│ │ |цикл " пока", проверка условия
│ │ нцпока p< =n |окончания цикла
│ │ │ |увеличение суммы делителей
│ │ │ | у чисел кратных k (p < > k)
│ │ │ Делитель[p]: =Делитель[p]+k
│ │ │ |следующее число имеющее
│ │ │ p: =p+k |делителем число k
│ │ кц
│ │ |очередное просматриваемое число
│ │ k: =k+1
│ кц
│ |организация поиска дружественных
│ |чисел
│ нцдля k от 2 до n-1
│ │ нцдля s от k+1 до n
│ │ │ если s=Делитель[k] и
│ │ │ k=Делитель[s]
│ │ │ │ то
│ │ │ │ вывод нс, k, s
│ │ │ все
│ │ кц
│ кцконЗадача 28, стр. 52 (Turbo Pascal)
Program Amicable_numbers;
Uses CRT;
Const n1=20000;
Var
k, n, p, s: integer;
Divisor: array [1..n1] of integer;
Begin
Write('Введите n '); Readln(n);
k: =2;
While k< =n do
begin
Divisor[k]: =1;
k: =k+1
end;
k: =2;
While k< =(n div 2) do
begin
p: =k+k;
While p< =n do
begin
Divisor[p]: =Divisor[p]+k;
p: =p+k
end;
k: =k+1;
end;
For k: =2 to n-1 do
For s: =k+1 to n do
If (Divisor[k]=s) and (Divisor[s]=k) then
Writeln('Дружественные числа ', k, ' и ', s)
End.
Задача 29, стр. 53 (Ершол)алг группировка (аргцел n,
аргрезвещтаб A[1: n])
начцел i, k, j, вещ C
│ |задание начального значения индекса
│ i: =1 |просматриваемого элемента
│ k: =0|количество просмотренных
│ |элементов
│ |команда цикла с предусловием,
│ |проверка условия окончания цикла
│ нцпока k< n
│ │ если A[i]> 0 |если A[ i ]> 0, то этот
│ │ │ то |элемент оставляем на месте,
│ │ │ |получаем индекс следующего
│ │ │ i: =i+1|просматриваемого элемента
│ │ │ иначе |если A[ i ]< 0, то организуем
│ │ │ C: =A[i] |сдвиг на 1 элемент влево,
│ │ │ j: =i+1 |начиная с A[ i +1] до A[ n ],
│ │ │ |A[ i ] ставим на место A[ n ]
│ │ │ нцпока j< =n
│ │ │ │ A[j-1]: =A[j] |получим
│ │ │ │ j: =j+1 |последовательность
│ │ │ кц |A[1], A[2],..., A[ i -1],
│ │ │ A[n]: =C |A[ i +1],..., A[ n ], A[ i ]
│ │ все
│ │ k: =k+1
│ кцконЗадача 29, стр. 53 (QBasic)
REM Группировка
DIM n AS INTEGER, i AS INTEGER
DIM k AS INTEGER, j AS INTEGER
DIM C AS SINGLE
CLS
INPUT " Введите n "; n
DIM A(1 TO n) AS SINGLE
FOR i = 1 TO n
PRINT " Введите a("; i; ") ";
INPUT A(i)
NEXT i
i = 1
k = 0
WHILE k < n
IF A(i) > 0 THEN
i = i + 1
ELSE
C = A(i)
j = i + 1
WHILE j < = n
A(j - 1) = A(j)
j = j + 1
WEND
A(n) = C
END IF
k = k + 1
WEND
FOR i = 1 TO n
PRINT " A("; i; ")="; A(i)
NEXT i
END
Задача 30, стр. 57 (Ершол)алг НОД4(аргцел a, b, c, d, резцел z)
нач
│ НОД(a, b, z) |команды обращения к
│ НОД(z, c, z) |вспомогательному
│ НОД(z, d, z) |алгоритму
кон
|вспомогательный алгоритм вычисления
|НОД двух чисел
алг НОД(аргцел m, n, резцел t)
начцел m1, n1 |при хорошем стиле
|программирования значения аргументов
|в программе менять нельзя
│ m1: =m; n1: =n
│ |команда цикла с предусловием
│ нцпока m1< > n1
│ │ |команда ветвления в полной форме
│ │ если m1> n1
│ │ │ то m1: =m1-n1 |большее из двух
│ │ │ |чисел заменяем
│ │ │ иначе n1: =n1-m1 |разностью
│ │ все |этих чисел
│ кц
│ t: =m1
конЗадача 30, стр. 57 (Turbo Pascal)
Program Greatest_common_divisor;
Uses CRT;
Var
a, b, c, d, z: integer;
Procedure NOD(m, n: integer; Var t: integer);
Begin
While m< > n do
If m> n then m: =m-n else n: =n-m;
t: =m;
Writeln(t)
End;
Begin
ClrScr;
Write('Введите a, b, c, d '); Readln(a, b, c, d);
NOD(a, b, z);
NOD(z, c, z);
NOD(z, d, z);
Writeln('НОД(', a, ', ', b, ', ', c, ', ', d, ')=', z)
End.
Задача 31, стр. 58 (QBasic)
REM Числа Мерсенна
DECLARE SUB Prime (a AS INTEGER, fl1 AS INTEGER)
DIM n AS INTEGER, n1 AS INTEGER
DIM p AS INTEGER
DIM Candidate AS INTEGER
DIM fl AS INTEGER, fl1 AS INTEGER
INPUT " Введите n "; n
n1 = n \ 2
p = 2
Candidate = 3
fl = 0
DO
Prime (p), fl1
IF fl1 = 1 THEN
PRINT " Число Мерсенна - "; Candidate
END IF
p = p + 1
IF Candidate < = n1 THEN
Candidate = Candidate * 2
IF Candidate < n THEN
Candidate = Candidate + 1
ELSE
fl = 1
END IF
ELSE
fl = 1
END IF
LOOP UNTIL fl = 1
END
SUB Prime (a AS INTEGER,
fl1 AS INTEGER)
DIM k AS INTEGER
k = 2
fl1 = 1
WHILE (k < = a \ 2) AND (fl1 = 1)
IF a MOD k = 0 THEN fl1 = 0
k = k + 1
WEND
PRINT fl1
END SUB
Задача 32, стр. 60 (Turbo Pascal)
Program Most_element_in_array;
Uses CRT;
Var
n, k: integer;
a: array [1..10] of real;
t: real;
Procedure BID(m, l: real; Var z: real);
Begin
If m> l then z: =m else z: =l;
Writeln(z)
End;
Begin
ClrScr;
Write('Введите n '); Readln(n);
For k: =1 to n do
begin
Write('Введите a[', k, '] '); Readln(a[k])
end;
k: =2; t: =a[1];
While k< =n do
begin
BID(t, a[k], t);
k: =k+1
end;
Writeln('Максимум ', t)
End.
Задача 33, стр. 61 (Ершол)алг близнецы(аргцел n)
начцел p, лог fl
│ p: =2|очередное просматриваемое число
│ |цикл " пока",
│ нцпока p< =n-2 |проверка условия
│ | p < = n -2
│ │ |обращение к вспомогательному
│ │ |алгоритму для проверки является ли
│ │ простое(p, fl) |число p простым,
│ │ если fl |если число p простое (fl =да),
│ │ │ то |то проверим является ли число
│ │ │ простое(p+2, fl) | p +2 простым,
│ │ │ если fl |если число p +2 простое
│ │ │ |(fl =да),
│ │ │ │ то |то p и p +2 - близнецы,
│ │ │ │ |выводим их на экран
│ │ │ │ вывод нс, p, p+2
│ │ │ все
│ │ все
│ │ p: =p+1
│ кцкон
|вспомогательный алгоритм определения
|является ли число p простым (fl 1=да)
алг простое(аргцел a, резлог fl1)
начцел k |очередной возможный
|делитель числа a
│ если a< > 2 |если a < > 2,
│ │ то |исследуем это число,
│ │ если mod(a, 2)< > 0 |если число
│ │ │ то |нечетное, mod(a, 2)< > 0, то
│ │ │ |исследуем это число
│ │ │ |делителями нечетного числа
│ │ │ |могут быть только нечетные
│ │ │ |числа k < =div(a, 2)+1
│ │ │ | k - целая часть от деления a на 2
│ │ │ k: =div(a, 2)
│ │ │ если mod(k, 2)=0 |если k -
│ │ │ │ |четное число,
│ │ │ │ то |то получим следующее за
│ │ │ │ k: =k+1 |ним нечетное число
│ │ │ все
│ │ │ нцпока mod(a, k)< > 0 |в цикле
│ │ │ │ k: =k-2|" пока" ищем из нечетных
│ │ │ кц |делителей числа a больший,
│ │ │ если k=1 |если наибольший
│ │ │ │ |делитель числа a равен 1,
│ │ │ │ то fl1: =да |то число простое
│ │ │ │ |(fl 1=да),
│ │ │ │ иначе fl1: =нет |иначе число не
│ │ │ все |является простым (fl 1=нет),
│ │ │ иначе |если число четное, то оно
│ │ │ fl1: =нет |не является простым
│ │ все | fl 1=нет
│ │ иначе |если a =2,
│ │ fl1: =да |то число простое – fl 1=да
│ всеконЗадача 34, стр. 62 (Ершол)алг сумма Фибоначчи(аргцел m)
данонадоначцел s, f
│ s: =m |текущей сумме присвоим
│ | значение m
│ нцпока s> 0 |пока s > 0 обращаемся к
│ │ |вспомогательному алгоритму для
│ │ |нахождения f - наибольшего числа
│ │ Фиб(s, f) |Фибоначчи < = s
│ │ s: =s-f |уменьшаем текущую сумму s
│ │ |на f
│ │ вывод f, “ +”
│ кцкон
|вспомогательный алгоритм для
|нахождения наибольшего числа
|Фибоначчи < = m 1
алг Фиб(аргцел m1, резцел c)
|значение найденного числа Фибоначчи
|присвоим cначцел a, b
│ a: =1; b: =1; c: =1
│ нцпока c< m1
│ │ c: =a+b
│ │ a: =b
│ │ b: =c
│ кц
│ если c> m1
│ │ то
│ │ c: =a
│ всеконЗадача 34, стр. 62 (QBasic)
REM Сумма чисел Фибоначчи
DECLARE SUB Fib (m1 AS INTEGER,
c AS INTEGER)
DIM m AS INTEGER, s AS INTEGER
DIM f AS INTEGER
CLS
INPUT " Введите m "; m
s = m
WHILE s > 0
Fib (s), f
s = s - f
PRINT f;
WEND
END
SUB Fib (m1 AS INTEGER,
c AS INTEGER)
DIM a AS INTEGER, b AS INTEGER
a = 1: b = 1: c = 1
WHILE c < m1
c = a + b: a = b: b = c
WEND
IF c > m1 THEN c = a
END SUB
Задача 34, стр. 62 (Turbo Pascal)
Program Sum_of_Fibonacci_numbers;
Uses CRT;
Var
m, s, f: integer;
Procedure Fib(m1: integer; Var c: integer);
Var
a, b: integer;
Begin
a: =1; b: =1; c: =1;
While c< m1 do
begin
c: =a+b; a: =b; b: =c
end;
If c> m1 then c: =a
End;
Begin
ClrScr;
Write('Введите m '); Readln(m);
s: =m;
While s> 0 do
begin
Fib(s, f);
s: =s-f;
Write(f, '+')
end;
End.
Задача 35, стр. 62 (QBasic)
REM Сдвиг1 элементов в массиве
DECLARE SUB Shift (n AS INTEGER,
A() AS SINGLE)
DIM i AS INTEGER, k AS INTEGER
DIM n AS INTEGER
CLS
INPUT " Введите k – величину сдвига"; k
INPUT " Введите n "; n
DIM B(1 TO n) AS SINGLE
FOR i = 1 TO n
PRINT " Введите B("; i; ")";
INPUT B(i)
NEXT i
FOR i = 1 TO k
Shift (n), B()
NEXT i
FOR i = 1 TO n
PRINT " B("; i; ")="; B(i)
NEXT i
END
SUB Shift (n AS INTEGER,
A() AS SINGLE)
DIM c AS SINGLE, i AS INTEGER
c = A(n)
FOR i = n TO 2 STEP -1
A(i) = A(i - 1)
NEXT i
A(1) = c
END SUB
Задача 36, стр. 63 (Turbo Pascal)
Program Multiple_pairs;
Uses CRT;
Const n1=10;
Var
i, k, n, s, q, r: byte;
A, B: array[1..n1] of byte;
Procedure Divisibility(x, y: byte;
Var q, r: byte);
Begin
If x> y then
begin
q: =x div y; r: =x mod y
end
else
begin
q: =y div x; r: =y mod x
end
End;
Begin
ClrScr;
Write('Введите n '); Readln(n);
For i: =1 to n do
begin
Write('Введите A[', i, '] '); Readln(A[i])
end;
For i: =1 to n do
begin
Write('Введите B[', i, '] '); Readln(B[i])
end;
k: =0; s: =0; i: =1;
While i< =n do
begin
Divisibility(A[i], B[i], q, r);
If r=0 then
begin
k: =k+1; s: =s+q
end;
i: =i+1
end;
Writeln('k=', k, ' s=', s)
End.
r = SQR(d)
x1 = (-b - r) / (2 * a)
x2 = (-b + r) / (2 * a)
PRINT " x1="; x1, " x2="; x2
ELSE
PRINT " Корни не вычисляем (D< =0)"
END IF
END
Задача 12, стр. 34 (Turbo Pascal)
Program treug;
Uses CRT;
Var a, b, c, p, k, s: real;
Begin
Write('Введите a, b, c: ');
Readln(a, b, c);
p: =(a+b+c)/2;
k: =p*(p-a)*(p-b)*(p-c);
If k> 0 then
s: =sqrt(k)
else
s: =-1;
Writeln(s)
End.
Задача 12, стр. 34 (QBasic)
REM Площадь треугольника
DIM a AS SINGLE, b AS SINGLE
DIM c AS SINGLE, p AS SINGLE
DIM k AS SINGLE, s AS SINGLE
INPUT " Введите a, b, c: "; a, b, c
p = (a + b + c) / 2
k = p * (p - a) * (p - b) * (p - c)
IF k > 0 THEN
s = SQR(k)
ELSE
s = -1
END IF
PRINT s
END
Задача 13, стр. 35 (Turbo Pascal)
Program BIT;
Uses CRT;
Var a, b, c, max: real;
Begin
Write('Введите a, b, c: ');
Readln(a, b, c);
If a< b then
max: =b
else
max: =a;
If max< c then
max: =c;
Writeln(max)
End.
Задача 14, стр. 35 (Ершол способ 1)алг функция (аргвещ x, резвещ y)
данонадонач
│ |ввод знач. операнда x организует
│ |система Ершол
│ |вложенное ветвление
│ |команда ветвления в полной форме
│ если x> 22 |проверяется условие
│ | x > 22,
│ │ то |если оно истинно, то y присваи-
│ │ |вается значение 1/(x * x +1),
│ │ y: =1/(x*x+1)
│ │ иначе |иначе проверяется
│ │ если x< =3 |условие x < =3, если оно
│ │ │ то |истинно, то y присваивается
│ │ │ y: =x-1 |значение x -1,
│ │ │ иначе |иначе 3< x < =22,
│ │ │ | y присваивется значение x **3+2
│ │ │ y: =x**3+2
│ │ все
│ все
│ |вывод значения у
│ |организует система Ершол
конЗадача 14, стр. 35 (QBasic способ 1)
REM Значение функции
DIM x AS SINGLE, y AS SINGLE
INPUT " Введите x: "; x
IF x > 22 THEN
y = 1 / (x * x + 1)
ELSЕ IF x < = 3 THEN
y = x - 1
ELSE
y = x * x * x + 2
END IF
END IF
PRINT " x="; x; " y="; y
END
Задача 14, стр. 35 (Turbo Pascal способ 2)
Program Func;
Uses CRT;
Label k;
Var y: real; x: integer;
Begin
Write('Введите x: ');
Readln(x);
If x< =3 then begin
y: =x-1; goto k
end;
If x< =22 then begin
y: =x*x*x+2; goto k
end;
y: =1/(x*x+1);
k: Writeln('x=', x, ' y=', y)
End.
Задача 15, стр. 37 (Turbo Pascal)
Program Segment;
Uses CRT;
Var
a, b, c, d, x, y: real;
r: 0..1;
Begin
Write('Введите a, b, c, d: ');
Readln(a, b, c, d);
If a> =c then
x: =a
else
x: =c;
If b> =d then
y: =d
else
y: =b;
If x< =y then
begin
r: =1; Writeln(r, x, y)
end
else
begin
r: =0; Writeln(r)
end
End.
Задача 15, стр. 37 (QBasic)
REM Пересечение отрезков
DIM a AS SINGLE, b AS SINGLE
DIM c AS SINGLE, d AS SINGLE
DIM x AS SINGLE, y AS SINGLE
DIM r AS INTEGER
INPUT " Введите a, b, c, d: "; a, b, c, d
IF a > = c THEN
x = a
ELSE
x = c
END IF
IF b > = d THEN
y = d
ELSE
y = b
END IF
IF x < = y THEN
r = 1
PRINT r, x, y
ELSE
r = 0
PRINT r
END IF
END
Задача 17, стр. 39 (Ершол)алг корень третьей степени (аргвещ x,
аргвещ e, резвещ yn)
начвещ дельта, вещ yn1
│ |ввод аргументов (x, e) и вывод
│ |результата (yn) организует система
│ |Ершол, так как эти операнды
│ |описаны в заголовке как арг и рез
│ |задание начальных значений
│ | yn, yn 1, дельта
│ yn: =x; yn1: =2/3*(yn+x/(2*yn*yn))
│ дельта: =abs(yn-yn1)
│ |цикл с предусловием
│ |проверка условия окончания цикла,
│ |пока условие истинно
│ нцпока дельта> e | yn получает
│ │ yn: =yn1 |значение yn 1,
│ │ |вычисляется новое значение yn 1,
│ │ yn1: =2/3*(yn+x/(2*yn*yn))
│ │ |вычисляется погрешность
│ │ дельта: =abs(yn-yn1)
│ кцконЗадача 18, стр. 40 (Ершол)алг Фибоначчи
данонадоначцел n, цел c, цел a, цел b, цел k
│ |блок ввода
│ вывод " введите номер иск. чл. Ф."
│ ввод n
│ |первому числу Фибоначчи – а –
│ |присвоим значение 1, второму –
│ |числу b – присвоим значение 1
│ a: =1; b: =1
│ |параметру цикла k присвоим зн. 3 -
│ |номер первого искомого числа Фиб.
│ k: =3
│ |цикл с предусловием
│ нцпока k< =n |проверка условия,
│ │ c: =a+b |пока условие истинно
│ │ a: =b |находят с - следующий чл.
│ │ |Фиб. и переприсваивают значения
│ │ b: =c | предыдущих а и b
│ │ |находят номер следующего
│ │ |искомого числа Фибоначчи
│ │ k: =k+1
│ кц
│ |блок вывода
│ вывод нс, " число Фибоначчи равно", c
конЗадача 19, стр. 41 (Ершол)алг косинус_x
начвещ x, e, s, a, R, цел n
│ | блок ввода
│ вывод " введите значение x -"
│ ввод x
│ вывод нс, " введите значение e -"
│ ввод e
│ |задание начальных a, s, x, R, n
│ a: =1; s: =1; x: =x*arctg(1)*4/180;
│ R: =-x*x; n: =1
│ |цикл с предусловием
│ нцпока abs(a)> e |проверка условия,
│ │ |пока условие истинно
│ │ |выполняются команды тела цикла:
│ │ |вычисляется новый член ряда,
│ │ a: =a*R/((2*n-1)*2*n)
│ │ s: =s+a |новая сумма ряда,
│ │ n: =n+1 |увеличивается n
│ кц
│ |блок вывода
│ вывод нс, " x= ", x
│ вывод нс, " вычисленное значение"
│ вывод " cos(x)=", s
│ вывод нс, " зн. встроенной функции"
│ вывод " cos(x)=", cos(x)
конЗадача 19, стр. 41 (QBasic)
REM Косинус угла
DIM x AS SINGLE, e AS SINGLE
DIM a AS SINGLE, s AS SINGLE
DIM r AS SINGLE, n AS INTEGER
INPUT " Введите x, e "; x, e
a = 1: s = 1: x = x * ATN(1) * 4 / 180
r = -1 * x * x: n = 1
DO
a = a * r / ((2 * n - 1) * 2 * n)
s = s + a
n = n + 1
LOOP UNTIL ABS(a) < = e
PRINT x, s
END
Задача 20, стр. 41 (Turbo Pascal)
Program Fly;
Uses CRT;
Var d, v1, v2, vm, y, s, e, t, x: real;
l: string;
Begin
Write('Введите d, v1, v2, vm, e ');
Readln(d, v1, v2, vm);
y: =d;
s: =0;
l: ='К поезду изB';
While y> e do
begin
If l='К поезду из B' then
begin
l: ='К поезду из A';
t: =y/(v2+vm)
end
else
begin
l: ='К поезду из B';
t: =y/(v1+vm)
end;
x: =t*vm; s: =s+x;
y: =y-t*(v1+v2);
Writeln(t, x, s)
end
End.
Задача 20, стр. 41 (QBasic)
REM Сверхбыстрая муха
DIM d AS SINGLE, v1 AS SINGLE
DIM v2 AS SINGLE, vm AS SINGLE
DIM y AS SINGLE, s AS SINGLE
DIM e AS SINGLE, t AS SINGLE
DIM x AS SINGLE, l AS STRING
INPUT " Вв. d, v1, v2, vm, e"; d, v1, v2, vm, e
y = d
s = 0
l = " К поезду из B"
WHILE y > e
IF l = " К поезду из B" THEN
l = " К поезду из A"
t = y / (v2 + vm)
ELSE
l = " К поезду из B"
t = y / (v1 + vm)
END IF
x = t * vm
s = s + x
y = y - t * (v1 + v2)
PRINT t, x, s
WEND
END
Задача 21, стр. 46 (QBasic)
REM Произведение элементов массива
DIM n AS INTEGER, k AS INTEGER
DIM p AS SINGLE
CLS
INPUT " Введите количество чисел n "; n
DIM a(1 TO n) AS SINGLE
FOR k = 1 TO n
PRINT " Введите a("; k; ") ";
INPUT a(k)
NEXT k
p = 1
k = 1
WHILE k < = n
p = p * a(k)
k = k + 1
WEND
PRINT " p="; p
END
Задача 22, стр. 46 (Ершол)алг произведение2 (аргцел n, m)
начвещтаб a[1: m, 1: n], вещтаб b[1: n],
цел i, j, вещтаб c[1: m]
│ |ввод значений данных n и m
│ |организует система Ершол
│ |блок ввода элементов массива a
│ нцдля i от 1 до m шаг 1
│ │ нцдля j от 1 до n шаг 1
│ │ │ вывод " a[", i, ", ", j, " ]="
│ │ │ ввод a[i, j]
│ │ кц
│ │ |перевод курсора на новую строку
│ │ вывод нс
│ кц
│ |блок ввода элементов массива b
│ нцдля i от 1 до n шаг 1
│ │ вывод " b[", i, " ]="
│ │ ввод b[i]
│ кц
│ |блок вывода элементов массива a
│ вывод нс, " массив a", нс
│ нцдля i от 1 до m шаг 1
│ │ нцдля j от 1 до n шаг 1
│ │ │ вывод a[i, j]
│ │ кц
│ │ |перевод курсора на новую строку
│ │ вывод нс
│ кц
│ |блок вывода элементов массива b
│ вывод " массив b"
│ нцдля i от 1 до m шаг 1
│ │ вывод нс, b[i]
│ кц
│ нцдля i от 1 до m шаг 1
│ │ c[i]: =0 |блок получения
│ │ нцдля j от 1 до n шаг 1 |элементов
│ │ │ c[i]: =c[i]+a[i, j]*b[j] |массива с
│ │ кц
│ кц
│ |блок вывода элементов массива с
│ вывод нс, " массив c"
│ нцдля i от 1 до m шаг 1
│ │ вывод нс, c[i]
│ кцконЗадача 22, стр. 46 (Turbo Pascal)
Program Matrix_product;
Uses CRT;
Const n1=10; m1=10;
Var
i, j, n, m: integer;
c: array [1..m1] of real;
b: array [1..n1] of real;
a: array[1..m1, 1..n1] of real;
Begin
ClrScr;
Write('Введите m, n ');
Readln(m, n);
For i: =1 to m do
For j: =1 to n do
begin
Write('Введите a[', i, ', ', j, '] ');
Readln(a[i, j])
end;
For i: =1 to n do
begin
Write('Введите b[', i, '] ');
Readln(b[i])
end;
i: =1;
Repeat
c[i]: =0; j: =1;
Repeat
c[i]: =c[i]+a[i, j]*b[j]; j: =j+1
Until j> n;
i: =i+1;
Until i> m;
For i: =1 to m do
Writeln('c[', i, ']=', c[i])
End.
Задача 23, стр. 48 (QBasic)
REM Положительные числа
DIM i AS INTEGER, n AS INTEGER
DIM K AS INTEGER
CLS
INPUT " Введите n "; n
DIM a(1 TO n) AS SINGLE
FOR i = 1 TO n
PRINT " Введите a("; i; ") ";
INPUT a(i)
NEXT i
K = 0
i = 1
DO
IF a(i) > 0 THEN K = 1
i = i + 1
LOOP UNTIL (i > n) OR (K = 1)
PRINT " K="; K
END
Задача 24, стр. 49 (Turbo Pascal)
Program Searching_the_letter;
Uses CRT;
Const n=5;
Var
i, K: integer;
w: string[n];
v: char;
Begin
ClrScr;
Write('Введите слово ');
Readln(w);
Write('Введите букву ');
Readln(v);
K: =0;
i: =1;
Repeat
If v=w[i] then K: =i else i: =i+1
Until (i> n) or (K< > 1);
Writeln('K=', K)
End.
Задача 25, стр. 49 (Ершол)алг количество положительных (аргцел n, K, аргвещтаб a[1: n])
начцел i, l, m
│ |ввод данных n, K и элементов
│ |массива организует система Ершол
│ l: =0; i: =1 |задание нач. значения l и i
│ | команда повторения " пока" с
│ |проверкой условия i < = n и l < K,
│ нцпока i< =n и l< K |пока условие
│ │ |истинно выполняются
│ │ если a[i]> 0 |команды тела
│ │ │ то |цикла: команда ветвления и
│ │ │ l: =l+1
│ │ все
│ │ i: =i+1 |команда присваивания
│ кц
│ если l=K
│ │ то m: =i-1
│ │ иначе m: =0
│ все
│ вывод нс, " m=", m
конЗадача 25, стр. 49 (QBasic)
REM Количество положительных
REM элементов
DIM n AS INTEGER, i AS INTEGER
DIM K AS INTEGER, l AS INTEGER
DIM m AS INTEGER
CLS
INPUT " Введите n "; n
DIM a(1 TO n) AS SINGLE
INPUT " Введите K "; K
FOR i = 1 TO n
PRINT " Введите a("; i; ") ";
INPUT a(i)
NEXT i
l = 0
i = 1
DO
IF a(i) > 0 THEN l = l + 1
i = i + 1
LOOP UNTIL (i > n) OR (l = K)
IF l = K THEN m = i - 1 ELSE m = 0
PRINT " m="; m
END
Задача 26, стр. 49 (Turbo Pascal)
Program Shift_in_array;
Uses CRT;
Const n1=10;
Var
n, i: integer;
A: array[1..n1] of real;
c: real;
Begin
ClrScr;
Write('Введите n ');
Readln(n);
For i: =1 to n do
begin
Write('Введите A[', i, '] ');
Readln(A[i])
end;
c: =A[n];
For i: =n downto 2 do
A[i]: =A[i-1];
A[1]: =c;
For i: =1 to n do
Writeln('A[', i, ']=', A[i])
End.
Задача 27, стр. 50 (QBasic,способ 1)
REM Максимальные элементы массива1
DIM n AS INTEGER, i AS INTEGER
DIM K AS INTEGER
DIM b AS SINGLE
CLS
INPUT " Введите n "; n
DIM a(1 TO n) AS SINGLE
DIM M(1 TO n) AS INTEGER
FOR i = 1 TO n
PRINT " Введите A("; i; ") ";
INPUT a(i)
NEXT i
b = a(1)
i = 2
DO
IF b < = a(i) THEN b = a(i)
i = i + 1
LOOP UNTIL i > n
K = 0: i = 1
DO
IF b = a(i) THEN
K = K + 1: M(K) = i
END IF
i = i + 1
LOOP UNTIL i > n
FOR i = 1 TO K
PRINT " M("; i; ")="; M(i)
NEXT i
PRINT " K="; K
END
Задача 27, стр. 50 (Ершол,способ 2)алг максимальные в массиве (аргцел n,
аргвещтаб a[1: n])
начвещ b, цел i, цел K, целтаб M[1: n]
│ |предположим, что больший
│ b: =a[1] |элемент a[1]
│ |начальное значение индекса
│ |просматриваемого элемента массива
│ i: =2 |равно 2
│ |предположив, что больший элемент
│ K: =1 |уже есть (a[1]), имеем K =1
│ |предположив, что больший элемент
│ M[K]: =1 |a[1], имеем M[1]=1
│ нц |команда цикла с постусловием
│ │ |команда ветвления в
│ │ если b< =a[i] |сокращенной форме
│ │ │ то |если b > a[ i ], то больший эле-
│ │ │ |мент b, если b < =a[ i ], то рассмот-
│ │ │ |рим два случая b =a[ i ] и b < a[ i ]:
│ │ │ если b=a[i] |если b =a[ i ], то a[ i ]
│ │ │ |надо сосчитать как очередной
│ │ │ │ то |больший элемент,
│ │ │ │ K: =K+1 |увеличим K на 1,
│ │ │ │ |элементу массива M[ K ]
│ │ │ │ M[K]: =i |присвоим значение i;
│ │ │ │ иначе |если b < a[ i ], то большее
│ │ │ │ |число a[ i ],
│ │ │ │ | b присвоим значение a[ i ],
│ │ │ │ b: =a[i]
│ │ │ │ |количество наибольших из
│ │ │ │ |просмотренных элементов
│ │ │ │ K: =1 |равно 1,
│ │ │ │ |элементу массива M[1]
│ │ │ │ M[K]: =i |присвоим значение i
│ │ │ все
│ │ все
│ │ |индекс очередного
│ │ |просматриваемого элемента
│ │ i: =i+1 |увеличим на 1
│ |проверим условие окончания цикла
│ кцпри i> n
│ |блок вывода значения K и элементов
│ |массива M[1: K ]
│ вывод нс, K
│ вывод нс
│ нцдля i от 1 до K
│ │ вывод M[i]
│ кцконЗадача 27, стр. 50 (Turbo Pascal, способ 2)
Program Maximum_elements_of_the_array;
Uses CRT;
Const n1=10;
Var
n, i, K: integer;
a: array[1..n1] of real;
M: array[1..n1] of byte;
b: real;
Begin
ClrScr;
Write('Введите n ');
Readln(n);
For i: =1 to n do
begin
Write('Введите A[', i, '] ');
Readln(a[i])
end;
b: =a[1];
i: =2;
K: =1;
M[K]: =1;
Repeat
If b< =a[i] then
if b=a[i] then
begin
K: =K+1;
M[K]: =i
end
else
begin
b: =a[i];
K: =1;
M[K]: =i
end;
i: =i+1
Until i> n;
For i: =1 to K do
Writeln('M[', i, ']=', M[i]);
Writeln('K=', K)
End.
Задача 28, стр. 52 (QBasic)
REM Дружественные числа
DIM k AS INTEGER, n AS INTEGER
DIM p AS INTEGER, s AS INTEGER
CLS
INPUT " Введите n "; n
DIM Divisor(1 TO n) AS INTEGER
k = 2
WHILE k < = n
Divisor(k) = 1
k = k + 1
WEND
k = 2
WHILE k < = n \ 2
p = k + k
WHILE p < = n
Divisor(p) = Divisor(p) + k
p = p + k
WEND
k = k + 1
WEND
FOR k = 2 TO n - 1
FOR s = k + 1 TO n
IF (Divisor(k)=s)AND(Divisor(s)=k) THEN
PRINT k, s
END IF
NEXT s
NEXT k
END
Задача 29, стр. 53 (Turbo Pascal)
Program Grouping;
Uses CRT;
Var
n, i, k, j: integer;
а: array [1..20] of real;
с: real;
Begin
ClrScr;
Write('Введите n ');
Readln(n);
For i: =1 to n do
begin
Write('Введите a[', i, '] ');
Readln(а[i])
end;
i: =1;
k: =0;
While k< n do
begin
If A[i]> 0 then
i: =i+1
else
begin
с: =A[i];
j: =i+1;
While j< =n do
begin
A[j-1]: =A[j];
j: =j+1
end;
A[n]: =C
end;
k: =k+1
end;
For i: =1 to n do
Writeln('A[', i, ']=', A[i])
End.
Задача 30, стр. 57 (QBasic)
REM Наибольший общий делитель
DECLARE SUB NOD (m AS INTEGER,
n AS INTEGER, t AS INTEGER)
DIM a AS INTEGER, b AS INTEGER
DIM c AS INTEGER, d AS INTEGER
DIM z AS INTEGER
INPUT " Введите a, b, c, d "; a, b, c, d
NOD (a), (b), z
NOD (z), (c), z
NOD (z), (d), z
PRINT " НОД("; a; ", "; b; ", "; c; ", "; d; ")="; z
END
SUB NOD (m AS INTEGER,
n AS INTEGER, t AS INTEGER)
WHILE m < > n
IF m> n THEN m = m - n ELSE n = n - m
WEND
t = m
PRINT t
END SUB
Задача 31, стр. 58 (Ершол)алг Мерсенн (аргцел n)
начцел n1, p, Кандидат, лог fl, fl1
│ | n 1 - целая часть от деления n на 2
│ n1: =div(n, 2)
│ |просмотрим все значения p от 2 до
│ | k, чтобы исследовать все числа вида
│ |2 p -1< = n на принадлежность числам
│ |Мерсенна
│ p: =2
│ |первый кандидат в числа Мерсенна -
│ Кандидат: =3 |3=22-1
│ |fl=нет - очередное исследуемое
│ fl: =нет |число 2 p -1< = n, fl =да -
│ |очередное исследуемое
│ |число 2 p -1> n
│ |команда повторения с постусловием
│ нц
│ │ |команда обращения к
│ │ | вспомогательному алгоритму для
│ │ | проверки, является ли число p
│ │ простое(p, fl1) |простым,
│ │ если fl1 |если число p - простое
│ │ │ то |(fl 1=да), то
│ │ │ |2 p -1 - число Мерсенна
│ │ │ |вывод очередного числа
│ │ │ вывод нс, Кандидат |Мерсенна
│ │ все
│ │ |получение очередного
│ │ p: =p+1 |исследуемого числа p
│ │ |получение очередного
│ │ если Кандидат< =n1 |исследуемого
│ │ │ то |кандидата в числа Мерсенна
│ │ │ Кандидат: =Кандидат*2
│ │ │ если Кандидат< n
│ │ │ │ то Кандидат: =Кандидат+1
│ │ │ │ иначе fl: =да
│ │ │ все
│ │ │ иначе
│ │ │ fl: =да
│ │ все
│ к
mylektsii.su - Мои Лекции - 2015-2025 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Пожаловаться на материал