Кодирование управляющих команд организации действий

на процедурных языках Ершол, 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 выбор при P1: S1 при P2: S2 при P3: S3при Pn: Sn иначе Sn+1 все
Команда выбора в сокращенной форме 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) │ │ |выводим знач. x1 и x2 │ │вывод нс, "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, v1, v2) │ |организует система Ершол, они │ |описаны в заголовке как аргументы │ 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 простым (fl1=да) алг простое(аргцел 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:=да |то число простое │ │ │ │ |(fl1=да), │ │ │ │иначе fl1:=нет |иначе число не │ │ │ все |является простым (fl1=нет), │ │ │иначе |если число четное, то оно │ │ │ fl1:=нет |не является простым │ │ все |fl1=нет │ │иначе |если a=2, │ │ fl1:=да |то число простое – fl1=да │ все кон Задача 34, стр. 62 (Ершол) алг сумма Фибоначчи(аргцел m) дано надо начцел s,f │ s:=m |текущей сумме присвоим │ | значение mнцпока s>0 |пока s>0 обращаемся к │ │|вспомогательному алгоритму для │ │|нахождения f - наибольшего числа │ │ Фиб(s,f) |Фибоначчи <= s │ │ s:=s-f |уменьшаем текущую сумму s │ │ |на f │ │ вывод f, “ +” │ кц кон |вспомогательный алгоритм для |нахождения наибольшего числа |Фибоначчи <=m1   алг Фиб(аргцел 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, yn1, дельта │ yn:=x; yn1:=2/3*(yn+x/(2*yn*yn)) │ дельта:=abs(yn-yn1) │ |цикл с предусловием │ |проверка условия окончания цикла, │ |пока условие истинно │нцпока дельта>e | yn получает │ │ yn:=yn1 |значение yn1, │ │|вычисляется новое значение yn1, │ │ 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 │ |n1 - целая часть от деления n на 2 │ n1:=div(n,2) │ |просмотрим все значения p от 2 до │ |k, чтобы исследовать все числа вида │ |2p-1<=n на принадлежность числам │ |Мерсенна │ p:=2 │ |первый кандидат в числа Мерсенна - │ Кандидат:=3 |3=22-1 │|fl=нет - очередное исследуемое │ fl:=нет |число 2p-1<=n, fl=да - │ |очередное исследуемое │ |число 2p-1>n │ |команда повторения с постусловием │ нц │ │ |команда обращения к │ │ | вспомогательному алгоритму для │ │ | проверки, является ли число p │ │ простое(p,fl1) |простым, │ │ если fl1 |если число p - простое │ │ │то |(fl1=да), то │ │ │ |2p-1 - число Мерсенна │ │ │ |вывод очередного числа │ │ │ вывод нс, Кандидат |Мерсенна │ │ все │ │ |получение очередного │ │ p:=p+1 |исследуемого числа p │ │ |получение очередного │ │ если Кандидат<=n1 |исследуемого │ │ │то |кандидата в числа Мерсенна │ │ │ Кандидат:=Кандидат*2 │ │ │ если Кандидат<n │ │ │ │то Кандидат:=Кандидат+1 │ │ │ │иначе fl:=да │ │ │ все │ │ │иначе │ │ │ fl:=да │ │ всекцпри fl кон |вспомогательный алгоритм алг простое(аргцел a, резлог fl1) начцел k │|очередной возможный делитель │ k:=2 |числа a │|предположим, что число │ fl1:=да |простое fl1=да │ |цикл "пока", проверка условия │ нцпока k<=div(a,2) и fl1 |окончания │ |цикла │ │ если mod(a,k)=0 |если число a │ │ │то fl1:=нет |делится на k без │ │ │|остатка, то число a не является │ │ │|простым (fl1=нет) │ │ все │ │|получение очередного возможного │ │ k:=k+1 |делителя числа aкц кон Задача 31, стр. 58 (Turbo Pascal) Program Mersenn_numbers; Uses CRT; Var n,n1,p,Candidate:integer; fl,fl1:boolean; Procedure Prime(a:integer;Var fl1:boolean); Var k:integer; Begin k:=2; fl1:=true; While (k<=a div 2) and (fl1) do begin If a mod k=0 then fl1:=false; k:=k+1 end; Writeln(fl1) End; Begin ClrScr; Write('Введите n '); Readln(n); n1:=n div 2; p:=2; Candidate:=3; fl:=false; Repeat Prime(p,fl1); If fl1 then Writeln('Число Мерсенна-', Candidate); p:=p+1; If Candidate<=n1 then begin Candidate:=Candidate*2; If Candidate<n then Candidate:=Candidate+1 else fl:=true end else fl:=true Until fl; End. Задача 32, стр. 60 (Ершол) алг больший в массиве (аргцел n, аргвещтаб a[1:n], резвещ t) начцел k │|индекс очередного │ k:=2 |просматриваемого элемента │|предположим, что больший │ t:=a[1] |элемент a[1] │|цикл с предусловием, проверка │ нцпока k<=n |условия окончания │ |цикла │ │|обращение к вспомогательному │ │|алгоритму для выбора бо







Дата добавления: 2015-01-26; просмотров: 1397;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.009 сек.