Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3768.doc
Скачиваний:
113
Добавлен:
13.11.2022
Размер:
15.23 Mб
Скачать

Решение

а лг БИД (арг вещ 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 to n do write (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;

b egin

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]