Программирование на Турбо Паскале
Цель работы:
Изучение правил описания множественных типов данных, приемов использования множеств и операций над множествами в Паскаль-программах. Приобретение навыков решения задач с использованием множеств.
Задание:
Дано предложение, состоящее из латинских букв. Вывести все согласные буквы, которые входят хотя бы в одно слово.
sum:= sum1(n,m,11,0,1,a)
sum:= sum2(n,m,11,1,a)
c:=’Y’
function sum1(n,m,i,j,s,k : integer; a : matrix):integer;
function sum2(n,m,i,j,k : integer; a : matrix):integer;
procedure show_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 |
0 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 |
0 0 0 0 0 0 0 0 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