|
Программирование на Турбо Паскале
Программирование на Турбо Паскале
Цель работы: Изучение правил описания множественных типов данных, приемов использования множеств и операций над множествами в Паскаль-программах. Приобретение навыков решения задач с использованием множеств. Задание: Дано предложение, состоящее из латинских букв. Вывести все согласные буквы, которые входят хотя бы в одно слово. 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
|
|