Лабораторная работа №4
Тема:Процедурная декомпозиция программ и применение подпрограмм на языке высокого уровня “Паскаль”.
Цель: Выучить методы применение процедурной декомпозиции, определения её преимушества.
Теоретические сведения
Procedure – Ключевое слово, открывающее раздел описания процедур.
Function – Ключевое слово, открывающее раздел описания функций.
Синтаксис Procedure:Procedure идентификатор (интерфейс);
Глобальный раздел описания
End;
Синтаксис Function:Function идентификатор (интерфейс):тип результата;
Глобальный раздел описания
Тело функции
Идентификатор:= “результат работы функции”
Задания 1
Самостоятельно придумать процесс и создать его процедурную декомпозицию.
Определить, что является входом и выходом процедур указанного процессу и определить к какому типу относится алгоритм процедур – последовательного, расходящегося, циклического.
Я решил написать функцию, которая вычисляет день недели и процедуру, которая пишет текст по центру. Они относится ко всем 3м типам алгоритмических процедур и очень упрощают работу с программами.
Program Day_Week;
Type trs=string(.9.);
Var day,month,n:byte;year:integer;
Function DayWeek(day,month:byte;year:integer):byte;
Function octatok (x,y:integer):integer;
x:=x-(x div y)*y;If x<0 then x:=x+y;octatok:=x;end;
Label ExitA;
Var x,w:shortint;
If (month<1)or(month>12)or(day<1)or((day>31)) then
Begin DayWeek:=7;goto ExitA;end;
If ((month=4)or(month=6)or(month=9)or(month=11))and(day>30) then
Begin DayWeek:=7;goto ExitA;end;
w:=octatok(year,4);w:=(w-1-abs(w-1))div 2;
If (month=2)and(day>(28-w)) then
Begin DayWeek:=7;goto ExitA;end;
x:=octatok(year,28);x:=x+28;x:=x+4+(x-1)div 4;x:=octatok(x,7);
day:=day+2*(month-1)+x;
For x:=0to month-2 do Begin
If(x=0)or(x=2)or(x=4)or(x=6)or(x=7)or(x=9)then day:=day+1;
If x=1 then day:=day-2-w;end;
DayWeek:=octatok(day,7);
ExitA:End;
Function Week(n:byte):trs;
0:week:='Monday';
1:week:='Tuesday';
2:week:='Wednesday';
3:week:='Thursday';
4:week:='Friday';
5:week:='Saturday';
6:week:='Sunday';
end;End;
Writeln(' Introduce facts:');
Write(' Day: ');readln(day);
Write(' Month: ');readln(month);
Write(' Year: ');readln(year);
n:=DayWeek(day,month,year);
If n=7 then Begin Writeln(' Don`t correctly introduce facts!');
Writeln(' Programs don`t can work in this facts!');end
else Writeln(' Day week: ',Week(n));
Write(' EXIT prees on Enter: ');Readln;
End.
1. Запишите функцию DayWeek в глобальный раздел описания своей программы.
2. Обращаясь к ней, вы должны указать в строгой последовательности день, месяц, год.
3. Результатом работы будет число от 0 до 6, соответствующее дню недели.
4. Для вывода на экран текстового сообщения вы можете туда же записать функцию Week, которая выдаёт день недели по его номеру.
Program Center_List;
Var x,n,i,j:byte;b,kon:boolean;l:string;
Procedure CenterList(l:string;size:byte;ending:boolean);
Var x,n,i,j:byte;b,kon:boolean;
Label ExitA;
Begin n:=length(l);i:=0;kon:=false;b:=true;
If n=0 then
Begin For x:=1to size do Write(' '); If ending then Writeln; Goto ExitA;end;
While (i<>n)and b do Begin
While (' '=copy(l,i+1,1))and b do If i=n-1 then b:=false else i:=i+1;
If not b then goto ExitA;
If (i+1+size)>n then Begin j:=n-i;kon:=true;end else
Begin j:=size; If ' '<>copy(l,i+1+size,1) then Begin
While (' '<>copy(l,i+j,1))and b do If j=1 then Begin j:=size;b:=false;end
else j:=j-1;b:=true;end;end;
While (' '=copy(l,i+j,1))and b do j:=j-1;
If b then Begin
For x:=1 to (size div 2)-((j+(size div 2)*2-size)div 2) do Write(' ');
Write(copy(l,i+1,j)); If not(kon) then writeln;i:=i+j;end;end;
If ending then writeln else
For x:=1 to (size div 2)-((j+1+(size div 2)*2-size)div 2) do Write(' ');
ExitA:End;
CenterList('This program write text by center',80,true);
CenterList('Left center',27,false);CenterList('Center',26,false);CenterList('Right center',27,false);
Write(' EXIT prees on Enter: ');Readln;
End.
1. Запишите функцию CenterList в глобальный раздел описания своей программы.
2. Обращаясь к ней, вы должны указать в строгой последовательности текст, длину строки (не более 255 символов!) и переносить ли строку (логический тип).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.