Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






на процедурных языках Ершол, 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) │ │ |выводим знач. 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-2024 год. (0.008 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал