Наглядных протоколов
Пример 6. Напишите программу решения квадратного уравнения ax2 + bx +c = 0, (a¹0). Исполните составленную программу, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов, для a = 1, b = -5, c = 6 и a = 1, b = -4, с = 4. Пусть программа имеет имя – «квур».
Решение
алг квур (аргвещ a, b, c, резвещ x1, x2, резлит y) дано | a=1, b=-5, c=6 | а =1, b=-4, с=4 |
надо начвещD D: = b*b – 4*a*c | x1, x2, y D=1 | x1, x2, y D= 0 |
если D>0 | 1>0 (?), да | 0>0 (?), нет |
то y: = “2 разл. действит. корня” | y= «2 разл. действит. корня» | |
x1: = (- b+ sqrt (D))/(2*a) | х1 = 3 | |
x2: = (- b – sqrt (D))/(2*a) | х2 = 2 | |
иначе | ||
если D = 0 | 0=0 (?), да | |
то | ||
y: = “2 равных действ. корня” | y=«2 равных действ.корня» | |
x1: = - b/(2´a) | х1 = 2 | |
x2: = x1 | х2 = 2 | |
иначе y: = “действ.корней нет” все | ||
все | ||
кон |
Пример 7. Напишите программу нахождения большего из трёх вещественных чисел, при составлении программы воспользуйтесь вспомогательным алгоритмом вычисления большего из двух чисел. Исполните составленную программу, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов, для a = 7, b = 3, c = 9.
Пусть программа нахождения большего из двух вещественных чисел имеет имя «БИД», а большего из трёх – «БИТ».
Решение
алг БИД (аргвещ m, n, резвещ k) | m=7, k=7, n=3 | m=7, k=9, n=9 |
нач k: = m | k=7 | k=7 |
если k<n | 7<3 (?), нет | 7<9 (?), да |
то k: = n | k=9 | |
все | ||
кон | ||
алг БИТ (аргвещ a, b, c, резвещ z) дано | a=7, b=3, c=9 | |
надо нач БИД (a, b, z) | z a=7, b=3, z=7 | |
БИД (z, c, z) кон | z=7, c=9, z=9 |
Пример 8. Напишите программу для нахождения суммы элементов таблицы вещественных чисел a(1:n). Исполните составленную программу, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов, для n = 3 и a[1] = 4.2, a[2] = -3, a[3] = 5.
Решение
алг сумма (аргцел n, аргвещтаб a[1:n], резвещ S) дано | n = 3, a[1] = 4.2, a[2] = -3, a[3] = 5 | |||
надо начцел i S: = 0 i: = 1 | S S=0 i=1 | |||
нцпока i<=3 | 1<=3(?), да | 2<=3?, да | 3<=3?, да | 4<=3?, нет |
S: = S + a[i] | S=4.2 | S=1.2 | S=6.2 | |
i: = i + 1 кц | i=2 | i=3 | i=4 | |
кон |
Пример 9. Напишите программу сортировки элементов массива целых чисел методом простого обмена. Исполните процедуру (sort) сортировки элементов массива простым обменом, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов, для n = 3 и a[1] = 45, a[2] = 32, a[3] = 5. Сущность метода сортировки элементов массива простым обменом изложена ниже, стр.180.
Program BubbleSort; Uses crt; Const n=3; Type tmass=array[1..n] of byte; Var a:tmass; Procedure print (a: tmass); {Процедура печати элементов массива} Var i:byte; begin for i:=1 ton dowrite (a[i]:4); end; Procedure input (var a:tmass); {Процедура ввода элементов массива} Var i:byte; begin for i:=1 to n do begin write('a[',i, ']= '); readln(a[i]); end; end; | Procedure sort (var a:tmass); {Процедура сортировки обменом} Var i,j,b:byte; begin for i:=2 to n do begin for j:=n downto i do if a[j]<a[j-1] then begin b:=a[j]; a[j]:=a[j-1]; a[j-1]:=b end; print(a); end; end; Begin input (a); sort (a); print (a); end. |
Программа сортировки элементов массива простым обменом |
Procedure sort (var a:tmass); Var i,j,b:byte; begin for i:=2 to n do | n=3; a[1]=45, a[2]=32, a[3]=5 i=2, 2≤3 (да) | i=3, 3≤3 (да) | i=4, 4≤3 (нет) | |||
begin for j:=n downto i do | j=3, 3≥2 (да) | j=2, 2≥2 (да) | j=1, 1≥2 (нет) | j=3, 3≥3 (да) | j=2, 2≥3 (нет) | |
if a[j]<a[j-1] then | 5<32 (да) | 5<45 (да) | 32<45 (да) | |||
begin b:=a[j]; a[j]:=a[j-1]; a[j-1]:=b end; | b=5 a[3]=32 a[2]=5 | b=5 a[2]=45 a[1]=5 | b=32 a[3]=45 a[2]=32 | |||
end; | ||||||
end; |
Пример 10. Напишите программу замены в данном тексте слова1 на слово2, той же длины. Исполните составленную программу, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов.
Решение. (Задача на вырезку и частичную замену). Пусть заданы строковой операнд strText (текст) и два слова: заменяемое слово Word1 (слово1) и заменяющее слово Word2 (слово2).Просматривая текст strText, начиная с первого символа (i = 1), вырезаем из текста strText последовательность из d символов, где d – длина Word1 (Word2), сравниваем вырезку со словом Word1. Если они равны, то осуществляем частичную замену, а именно, последовательность из d символов в тексте strText заменяем на слово Word2. Увеличиваем i на d и, начиная с полученного i, вырезаем из текста strText следующие d символов. Если вырезка из d символов текста strText не совпадает со словом Word1, то i увеличиваем на 1 и вырезаем из текста strText следующие d символов. Вырезку, сравнение и, если выполнено условие, замену проводим пока i не станет больше длин(текст)-d+1.
Программа в системе Кумир, где определена операция
частичной замены в тексте
алг замена (аргрезлит текст, арглит слово1, слово2)
дано |литерный операнд текст
надо |в литерном операнде текст заменить слово1 на слово2
начцел i,d
│ d:=длин(слово1) |находим длину слова1
│ i:=1 |организуем просмотр текста с первого символа
│ нцпока i<=длин(текст)-d+1
│ │ если текст[i:i+d-1]=слово1 | текст[i:i+d-1] – вырезка из текста
│ │ │|последовательности символов длины d и ее сравнение со словом1
│ │ │то текст[i:i+d-1]:=слово2 |частичная замена в тексте
│ │ │ |последовательности из d символов на слово2, если вырезанный
│ │ │ i:=i+d-1 | текст равен слову1, i увеличивается на d-1
│ │ все
│ │ i:=i+1 |номер следующего символа в тексте
│ кц
кон
Программа в системе Кумир, где не определена операция частичной замены в тексте
алг замена1 (арглит текст, арглит слово1, слово2, резлит текст1)
дано |литерный операнд текст
надо |в литерном операнде текст заменить слово1 на слово2
начцел i,d
│d:=длин(слово1) |находим длину слова1
│i:=1; текст1:="" |результат формируем в текст1,
│| сначало текст1 присвоим значение""
│нцпока i<=длин(текст)-d+1
││если текст[i:i+d-1]=слово1
│││то текст1 := текст1 + слово2 |если условие верно,
│││ | то текст1 и слово1 склеиваем, и увеличиваем i на d-1
│││ i:=i+d-1
│││иначе
│││ текст1:=текст1 + текст[i:i] |иначе текст1 склеиваем
│││ | с вырезкой из текст
││все
││i:=i+1 |номер следующего символа в тексте
│кц
кон
Исполнение составленной программы «замена» методом моделирования в виде наглядных протоколов дано в таблице 4.
11≤8(нет) | Таблица 4 | |
5≤8(да) “за ”=“око”(нет) i=5+1=6 | 8≤8(да) “око”=“око”(да) текст=“зуб за зуб” i=8+3-1=10 i=10+1=11 | |
4≤8(да) “ за”=“око”(нет) i=4+1=5 | 7≤8(да) “ ок”=“око”(нет) i=7+1=8 | |
текст=“око за око” слово1=“око” слово2=“зуб” d=3 i=1 1≤8(да) “око”=“око”(да) текст=“зуб за око” i=1+3-1=3 i=3+1=4 | 6≤8(да) “а о”=“око”(нет) i=6+1=7 | |
алг замена (аргрезлит текст, арглит слово1, слово2) дано надо начцел i,d │ d:=длин(слово1) │ i:=1 │ нцпока i<=длин(текст)-d+1 │ │ если текст[i:i+d-1]=слово1 │ │ │то текст[i:i+d-1]:=слово2 │ │ │ i:=i+d-1 │ │ все │ │ i:=i+1 │ кц кон | алг замена (аргрезлит текст, арглит слово1, слово2) дано надо начцел i,d │ d:=длин(слово1) │ i:=1 │ нцпока i<=длин(текст)-d+1 │ │ если текст[i:i+d-1]=слово1 │ │ │то текст[i:i+d-1]:=слово2 │ │ │ i:=i+d-1 │ │ все │ │ i:=i+1 │ кц кон |
i=3,3£4(да) strWord1== “р”+“ап”=“рап” | Таблица 5 | |
i=2,2£4(да) strWord1== “а”+“п”=“ап” | i=5,5£4(нет) вывод “арап” | |
strWord=“пара” strWord1=“” i=1,1£4(да) strWord1== “п”+ “”=“п” | i=4,4£4(да) strWord1= “а”+“рап”=“арап” | |
INPUT"Введите обращаемое слово";strWord strWord1 = "" FOR i = 1 TO LEN(strWord) strWord1=MID$(strWord,i,1)+strWord1 NEXT i PRINT strWord1 END | INPUT"Введите обращаемое слово";strWord strWord1 = "" FOR i = 1 TO LEN(strWord) strWord1=MID$(strWord,i,1)+strWord1 NEXT i PRINT strWord1 END |
Пример 11. Напишите программу обращения слова. В результате исполнения алгоритма из слова «нас» должно получиться слово «сан», из слова «довереп» – слово «перевод». Исполните составленную программу, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов для слова «пара».
Решение. Пусть strWord – данное слово, а strWord1 – получаемое слово, первоначально strWord1 – пустая строка. Выделяем из строки strWord последовательно, по одному символу (с первого до последнего). Склеиваем вырезанный символ с получаемой строкой strWord1 (strWord1:=”выделенный символ”+strWord1). Тогда первый выделенный символ из слова strWord будет последним символом в получаемом слове strWord1, второй выделенный символ из слова strWord – предпоследним символом в слове strWord1 и т. д.
QBasic
REM обращение слова
DIM strWord AS STRING, strWord1 AS STRING, intI AS INTEGER ′описание операндов
INPUT "Введите обращаемое слово"; strWord ′ввод strWord
strWord1 = "" ′обращенное слово сначала равно пустой строке
FOR intI = 1 TO LEN(strWord) ′организуем вырезку последовательно
′ всех символов строки strWord
strWord1 = MID$(strWord, intI, 1) + strWord1 ′склеиваем строку ′strWord1 с вырезанным символом строки strWord
NEXT intI
PRINT strWord1 ′вывод обращенной строки strWord1 на экран
END
Ручное исполнение программы, написанной на языке QBasic, приведено в таблице 5, с. 168.
Пример 12. Напишите программы ввода и вывода элементов множества SetA. Исполните составленные программы, используя метод моделирования исполнения программы компьютером в виде наглядных протоколов для множества [8, 6, 9].
Решение
Программы ввода и вывода элементов множества:
Program TaskSet; Uses Crt; Type TSet=set of 5..9; Var i, n: byte; SetA: TSet; next: 5..9; Begin ClrScr; {ввод элементов множества SetA} SetA:=[]; Write(‘Задайте количество элементов множества’); Readln(n); for i:=1 to n do begin Write(i,’ – элемент?’); Readln(next); SetA:=SetA+[next]; end; | Program TaskSet1; Uses Crt; Type TSet=set of 5..9; Var i, n: byte; SetA: TSet; next: 5..9; sim:char; Begin ClrScr; {ввод элементов множества SetA} SetA:=[]; i:=1; Repeat Write(i,’ – элемент?’); Readln(next); i:=i+1; SetA:=SetA+[next]; Write(‘Вводить элемент множества д/н?’); Readln(sim) Until sim=’н’; |
{вывод элементов множества} for i:=5 to 9 do if i in SetA then Write(i:4); End. |
Ручное исполнение программ TaskSet и TaskSet1 дано в таблицах 6-8, с. 171.
Дата добавления: 2015-01-26; просмотров: 1037;