Цель работы:
Изучение правилописания множественных типов данных, приемов использования множеств и операцийнад множествами в Паскаль-программах. Приобретение навыков решения задач сиспользованием множеств.
Задание:
Данопредложение, состоящее из латинских букв. Вывести все согласные буквы, которыевходят хотя бы в одно слово.
/>/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
/>
/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
/>/>/>/>/>
sum:= sum2(n,m,11,1,a) />/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
/>
/>
function sum1(n,m,i,j,s,k:integer; a: matrix):integer;
/>/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
/>
function sum2(n,m,i,j,k: integer; a: matrix):integer;
/>/>/>
procedureshow_matrix(n,m: integer;a: matrix);
/>/> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />
/>
Программа:
{*****************************************}
{Программа:lab21 }
{Цель: поиск символов в тексте }
{Описание параметров и переменных: }
{ a — матрица }
{ i,j,n,m — вспомагательные переменные }
{ c — ключ выхода }
{ sum — сумма }
{Подпрограммы: есть }
{Программист: Кондрахин А.В., гр.343 }
{Проверил: Москвитина О.А., каф. ВПМ }
{Дата написания: 14 марта 2004 г. }
{*****************************************}
program lab21;
uses crt;
/>
type
matrix = array[1..10,1..10] of integer;
var
a :matrix;
i,j,n,m:integer;
c :char;
sum :integer;
procedure show_matrix(n,m: integer;a: matrix);
var
i,j :integer;
begin
Writeln('Матрица:');
for i:=1 to n do
begin
Write('│ ');
for j:=1 to m do
Write(a[i,j]:3);
Writeln(' │');
end;
Writeln;
Writeln('Для продолжения нажмите любую клавишу...');Readkey;
end;
function sum1(n,m,i,j,s,k: integer; a: matrix):integer;{восходящая рекурсия}
var
tsum :integer;
begin
if (i=n) and (j=m)
then begin{терминальная ветвь}
Writeln('│','Терм. ветвь':12,'│',s:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│');
sum1:=s+a[i,j];
end {терминальная ветвь}
else if not(i=n) and (j=m)
then begin{рекурсивная ветвь}
Writeln('│','Вход ',k:7,'│',s:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│');
tsum:=sum1(n,m,i+1,1,s+a[i,j],k+1,a);
sum1:=tsum;
Writeln('│','Выход ',k:6,'│',tsum:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│')
end {рекурсивная ветвь}
else begin{рекурсивная ветвь}
Writeln('│','Вход ',k:7,'│',s:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│');
tsum:=sum1(n,m,i,j+1,s+a[i,j],k+1,a);
sum1:=tsum;
Writeln('│','Выход ',k:6,'│',tsum:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│')
end; {рекурсивная ветвь}
end;{восходящая рекурсия}
function sum2(n,m,i,j,k: integer; a: matrix):integer;{нисходящая рекурсия}
var
tsum :integer;
begin
if (i=n) and (j=m)
then begin {терминальная ветвь}
Writeln('│','Терм. ветвь':12,'│',a[i,j]:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│');
sum2:=a[i,j];
end {терминальная ветвь}
else if not(i=n) and (j=m)
then begin{рекурсивная ветвь}
Writeln('│','Вход ',k:7,'│',0:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│');
tsum:=sum2(n,m,i+1,1,k+1,a)+a[i,j];
sum2:=tsum;
Writeln('│','Выход ',k:6,'│',tsum:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│')
end {рекурсивная ветвь}
else begin{рекурсивная ветвь}
Writeln('│','Вход ',k:7,'│',0:26,'│','a[',i,',',j,']=',a[i,j]:7,'│');
tsum:=sum2(n,m,i,j+1,k+1,a)+a[i,j];
sum2:=tsum;
Writeln('│','Выход ',k:6,'│',tsum:26,'│',' a[',i,',',j,']=',a[i,j]:7,'│')
end; {рекурсивная ветвь}
end;{нисходящая рекурсия}
begin
ClrScr;
c:='Y';
while (UpCase(c)='Y') do
begin
Write('Введите число строк:');Readln(n); {Ввод данных}
Write('Введите число столбцов:');Readln(m);
Writeln('Введите матрицу:'); {Ввод матрицы}
for i:=1 to n do
begin
for j:=1 to m do
begin
Write('a[',i,',',j,']=');Read(a[i,j]);
end;
Writeln;
end;
show_matrix(n,m,a); {Эхо-вывод матрицы}
Writeln(verh);Writeln(inc1);Writeln(cent1);
Writeln('│','Восходящая':12,'│ │ │');
sum:=sum1(n,m,1,1,0,1,a); {Вызов рекурсии}
Writeln(niz);
Writeln('СУММА:',sum:51);Writeln;
Writeln('Для продолжения нажмите любую клавишу...');Readkey;
Writeln(verh);Writeln(inc1);Writeln(cent1);
Writeln('│','Нисходящая':12,'│ │ │');
sum:=sum2(n,m,1,1,1,a); {Вызов рекурсии}
Writeln(niz);
Writeln('СУММА:',sum:51);Writeln;
Write('Ввести еще одну матрицу? (Y/N):');
c:=Readkey;Writeln(c);
Writeln;
end;
end.
Просчет контрольного варианта на ЭВМ:
Введите число строк:3
Введите число столбцов:3
Введите матрицу:
a[1,1]=1
а[1,2]=2
а[1,3]=Ч
a[2,1]=6
а[2,2]=3
а[2,3]=7
a[3,1]=8
а[3,2]=5
а[3,3]=9
Матрица:
│ 1 2 Ч │
│ 6 3 7 │
│ 8 5 9 │
Для продолжения нажмителюбую клавишу...Рекурсия Значение суммы значения i, j
Восходящая
Вход 1
Вход 2
Вход 3
Вход 4
Вход 5
Вход 6
Вход 7
Вход 8
Терм, ветвь
Выход 8
Выход 7
Выход 6
Выход 5
Выход 4
Выход 3
Выход 2
Выход 1
1
3
7
13
16
23
31
36
45
45
45
45
45
45
45
45
а[1,1]= 1
а[1,2]= 2
a[1,3]= 4
а[2,1]= 6
а[2,2]= 3
а[2,3]= 7
а[3,1]= 8
а[3,2]= 5
а[3,3]= 9
а[3,2]= 5
а[3,1]= 8
а[2,3]= 7
а[2,2]= 3
а[2,1]= 6
а[1,3]= 4
а[1,2]= 2
а[1,1]= 1
СУММА 45
Для продолжения нажмителюбую клавишу.Рекурсия Значение суммы значения i, j
Нисходящая
Вход 1
Вход 2
Вход 3
Вход 4
Вход 5
Вход 6
Вход 7
Вход 8
Терм, ветвь
Выход 8
Выход 7
Выход 6
Выход 5
Выход 4
Выход 3
Выход 2
Выход 1
9
14
22
29
32
38
42
43
45
а[1,1]= 1
а[1,2]= 2
a[1,3]= 4
а[2,1]= 6
а[2,2]= 3
а[2,3]= 7
а[3,1]= 8
а[3,2]= 5
а[3,3]= 9
а[3,2]= 5
а[3,1]= 8
а[2,3]= 7
а[2,2]= 3
а[2,1]= 6
а[1,3]= 4
а[1,2]= 2
а[1,1]= 1
СУММА 45
Ввести еще одну матрицу?(Y/N):n