Процедурная декомпозиция программ и применение подпрограмм на языке высокого уровня “Паскаль”

Страницы работы

Содержание работы

Лабораторная работа №4

            Тема:Процедурная декомпозиция программ и применение подпрограмм на языке высокого уровня “Паскаль”.

            Цель: Выучить методы применение процедурной декомпозиции, определения её преимушества.

Теоретические сведения

Procedure – Ключевое слово, открывающее раздел описания процедур.

Function – Ключевое слово, открывающее раздел описания функций.

Синтаксис Procedure:Procedure идентификатор (интерфейс);

Глобальный раздел описания

Begin

Тело процедуры

End;

Синтаксис Function:Function идентификатор (интерфейс):тип результата;

Глобальный раздел описания

Begin

Тело функции

Идентификатор:= “результат работы функции”

End;

Задания 1

Самостоятельно придумать процесс и создать его процедурную декомпозицию.

Определить, что является входом и выходом процедур указанного процессу и определить к какому типу относится алгоритм процедур – последовательного, расходящегося, циклического.

Я решил написать функцию, которая вычисляет день недели и процедуру, которая пишет текст по центру. Они относится ко всем 3м типам алгоритмических процедур и очень упрощают работу с программами.

Программа 1

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;

Begin

  x:=x-(x div y)*y;If x<0 then x:=x+y;octatok:=x;end;

Label ExitA;

Var x,w:shortint;

Begin

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;

Begin Case n of

  0:week:='Monday';

  1:week:='Tuesday';

  2:week:='Wednesday';

  3:week:='Thursday';

  4:week:='Friday';

  5:week:='Saturday';

  6:week:='Sunday';

end;End;

Begin

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, которая выдаёт день недели по его номеру.

Программа 2

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;

Begin

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 символов!) и переносить ли строку (логический тип).

Похожие материалы

Информация о работе