Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Использование процедур при решении задач





ПРОЦЕДУРЫ И ФУНКЦИИ

Общие сведения

Если в программе возникает необходимость частого обращения к некоторой группе операторов, выполняющих действия или вычисляющих выражение, то рационально сгруппировать эти операторы в блок, к которому можно обратиться по имени.

Такие разработанные программистом самостоятельные, законченные фрагменты программы, оформленные особым образом, снабжённые именем – называются подпрограммами пользователя. Их использование позволяет создавать компактные, удобочитаемые, легко тестируемые программы. Вызовы таких подпрограмм можно производить неоднократно из разных участков основной программы и, в случае необходимости, передавать в подпрограмму различную информацию в виде параметров. Это позволяет одной и той же подпрограмме выполнять решение подзадачи для разных случаев.

Подпрограммы используются:

1Для экономии памяти, когда некоторая последовательность действий встречается неоднократно на разных участках программы. Каждая подпрограмма существует в ед. экземпляре, но обращаться к ней можно неоднократно из разных точек программы.

2. В сложных программах при модульном проектировании.

В языке Turbo Pascal такие подпрограммы реализованы посредством процедур и функций. Имея один и тот же смысл и аналогичную структуру, они различаются назначением и способом их использования. Все процедуры и функции подразделяются на две группы: встроенные (стандартные) и определённые пользователем.

Встроенные процедуры и функции являются частью языка и могут вызываться по имени для выполнения без предварительного их описания. С некоторыми из них мы уже встречались и пользовались (процедуры ввода-вывода, математические функции, процедуры и функции работами с переменными строкового типа, процедуры и функции работы с файлами и другие). Однако в большинстве случаев некоторые специфичные для данной программы действия не находят прямых аналогов в библиотеках Turbo Pascal. Тогда программисту приходится разрабатывать свои нестандартные процедуры и функции.

Использование функций оправдано, если результатом ее работы является единственное значение простого, строкового или указательного типа; в этом случае можно воспользоваться и процедурой, однако программа получается несколько громоздкой. Если результатом работы подпрограммы является значение не простого типа, воспользоваться функцией нельзя. Для этих целей предназначены процедуры. Процедура обычно возвращает несколько значений.

Предположим, что требуется оформить в виде подпрограмм пользователя алгоритмы решения некоторых задач. Проанализируем, какой тип подпрограммы является приемлемым в каждом случае:

 

№ п/п Задача Подпрограмма пользователя
  Решить квадратное уравнение ax2+bx+c=0 (ответ: корни x1, x2 или ответ «Решений нет») Процедура (так как в ответе фигурируют более одной переменной)
  Найти НОД двух натуральных чисел (результат: одно число) Функция (или процедура)
  Найти наибольшее из двух действительных чисел (результат – одно число) Функция (или процедура)
  Найти наибольшее из двух действительных чисел и его номер (результат – два числа: само число и его номер) Процедура

 

Тело подпрограммы состоит из раздела описаний и раздела операторов.

Структура: PROCEDURE<имя процедуры >;

FUNCTION<имя функции>(параметр: тип);

USES<модули>;

LABEL<метки>;

CONST<константы>;

TYPE<типы>;

VAR<переменные>;

BEGIN

Тело подпрограммы

END;

 


ПРОЦЕДУРЫ

Описание процедуры

Описание процедуры начинается с заголовка, который является обязательным. Заголовок начинается со служебного слова Procedure, за которым следует имя процедуры и в круглых скобках описание формальных параметров (передаваемые процедуре переменные из вне и не связанные ни с какими конкретными значениями). После заголовка могут идти те же разделы, что и в основной программе:

 

Procedure Имя_процедуры (список формальных параметров); Var описание локальных переменных; Begin ... End;
Тело процедуры
аргументы и результаты
Заголовок процедуры

 

 


Заголовок процедуры может иметь вид:

Procedure Имя_процедуры;

Здесь формальные параметры отсутствуют. Например,

Procedure Print; Begin Writeln ('-------------'); End.

При вызове процедуры ее формальные параметры заменяются на фактические — это параметры, которые передаются процедуре при ее вызове.

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

· параметры- значения — это входные данные. Перед ними не ставится служебное слово Var

· парметры-переменные — это выходные и входные данные. Перед ними ставится служебное слово Var. В процедуре может быть любое конечное количество выходных данных (результатов).

 

Параметры-аргументы (параметры-значения) описываются так: Аргумент: тип;

Их значения задаются на входе в процедуру.

Получить из процедуры значения результатов можно с помощью параметров-переменных. Для указания того, что некоторый параметр является результирующим (параметром-переменной), перед его именем записывают служебное слово (директиву) VAR.

Например, в заголовке процедуры

Procedure PRIMA (Х: Integer; А: Real; Var P: Real; Var k: Integer);

подразумевается, что в процедуре используются два входных параметра (параметры-значения): Х целого типа и А вещественного типа; в результате выполнения процедуры будут получены значения двух переменных (параметров-переменных): P вещественного типа и k целого типа.

 

Все переменные делятся на глобальные ( описываются в разделе описаний основной программы и они доступны из любого объекта программы) и локальные ( описываются в разделе описаний подпрограммы и они доступны только в пределах той процедуры или функции, где они описаны). Локальные переменные «живут» только во время работы подпрограммы.

Вызов процедуры

Обращение к процедуре (вызов) осуществляется путем указания ее имени и списка фактических параметров (конкретных величин, подставляемых вместо формальных параметров):

Имя_процедуры (список фактических параметров);

Процедура вызывается как отдельный оператор.

Например, Summa(a,150,s);

 

При этом фактические и формальные параметры должны соответствовать:

¨ по порядку следования: Порядок записи фактических параметров должен соответствовать порядку записи формальных параметров.

¨ по количеству: Количество фактических параметров должно совпадать с количеством формальных параметров в описании процедуры.

¨ по типу: Типы фактических и формальных параметров-переменных должны полностью совпадать. Типы фактических и формальных параметров-значений должны быть совместимыми.

 

Фактические параметры-значения представляют собой константы, имена переменных, выражения соответствующего типа; фактические параметры-переменные – имена переменных соответствующего типа.

 

Примеры обращения к процедуре PRIMA:

PRIMA (100, -1.3, Y, M); PRIMA (V, L, G, KOL);

PRIMA (0, S*S, FACT, T); PRIMA (N div 2, OPEL, RENO, MARKA);

Фактические параметры-значения V, N должны быть описаны в программе как целые, L, S, OPEL – как целые или вещественные (Byte, Word, Integer, LongInt, Real), фактические параметры-переменные Y, G, FACT, RENO – как вещественные (Real), M, KOL, T, MARKA – как целые (Integer).

 

Схема выполнения процедуры:

1. Из основной программы в процедуру передаются значения параметров-значений и параметров-переменных. Например, при обращении PRIMA (100, -1.3, Y, M); выполняется присваивание: Х:=100; А:=-1.3; P:=Y; k:=M;

2. Выполняются операторы, входящие в состав тела процедуры (для нашего примера в процедуре формируются значения переменных P, k).

3. Полученные значения параметров-результатов передаются в основную программу соответствующим переменным. В нашем случае выполняется присваивание: Y:=P; M:=k;

4. Продолжается выполнение основной программы.

 

Схематически процесс вызова процедуры изображен на рис.

Program _PROC; Var Y: Real; M: Integer; {---------------- Описание процедуры ----------------} Procedure PRIMA (Х: Integer; А: Real; Var P: Real; Var k: Integer); ...  Begin ƒ ... P:=...; ‚ k:=...; END; Begin {тело основной программы} … PRIMA (100, -1.3, Y, M); … … „ End.

 



Использование процедур при решении задач

 

Пример1. Требуется оградить два земельных участка, имеющих форму прямоугольников, если для каждого участка заданы его площадь и периметр. Определить длины секций ограды, которые потребуются для этого. Дано: S1, P1 – площадь и периметр первого участка, S2, P2 - площадь и периметр второго участка. Найти: a1, b1 – длины границ первого участка, а2, b2 – длины границ второго участка. Связь: Для участка прямоугольной формы с площадью S и периметром P числовые значения длин границ a и b определяются из системы , которая сводится к решению квадратного уравнения . При: . Как видно, решение задачи сводится к двухкратному вычислению корней квадратного уравнения. Входные данные: S, P – площадь и периметр прямоугольника (вещественные числа). Так как в качестве результатов будут получены значения двух переменных (a, b – длины сторон прямоугольника, вещественные числа), возможно использование процедуры пользователя.
Программа OGRADA Описание S1,P1S2,P2,a1,b1,a2,b2: Вещественный Y: Логический Конец_описания Ввод(S1, 'S1=') … ST (S1,P1,a1,b1,Y) Если Y=Истина То ST (S2,P2,a2,b2,Y) Если Y=Истина То Вывод (a1,',',b1,',',a2,',',b2) Конец_Если Конец_Если Конец_Программы Программа ST (S, P: Вещественный Передать a, b: Вещественный Y: Логический) Описание D: Вещественный Конец_Описания Y:=Ложь D:=P*P/4-4*S Если d>=0 То Y:=Истина d:=корень (d) a:=(P/2-d)/2 b:=(P/2+d)/2 Иначе Вывод ('Ошибка') Конец_Если Конец_Программы  
Y:=False; d:=P*P/4-4*S;
 
Y=True    
Да
Нет
Y:=True; d:= a:=(P/2-d)/2; b:=(P/2+d)/2
Вывод «Ошибка»    
Конец    
ST (S,P,a,b,Y)
Конец
Начало
ST (S1,P1, a1,b1,Y)    
Вывод a1,b1,a2,b2  
Ввод S1, P1, S2, P2
Y=True    
ST (S2,P2, a2,b2,Y)    
Да
Y=True    
Да
Нет
Нет

 

 

  Program OGRADA; Var S1, P1, S2, P2, a1,b1,a2,b2: Real; Y: Boolean; {Описание процедуры} Procedure ST (S,P: Real; Var a,b: Real;Var Y: Boolean); Var d: Real; Begin Y:=False; d:=P*P/4-4*S; If d>=0 Then Begin Y:=True; d:=sqrt (d); a:=(P/2-d)/2; b:=(P/2+d)/2 End Else Writeln('Ошибка в данных') End; {Основная программа} Begin Readln (S1,P1); Readln (S2,P2); ST (S1,P1,a1,b1,Y); If Y=True then Begin ST (S2,P2,a2,b2,Y); If Y=True then Writeln (a1:7:1,b1:7:1,a2:7:1, b2:7:1) End End.    

функции

Описание функции

Заголовок функции состоит из зарезервированного слова Function, за которым следует имя функции, затем в круглых скобках записывается список формальных параметров, далее ставится двоеточие и указывается тип результата функции (результат всегда один).

 

! В теле функции обязательно должен быть один и только один оператор присваивания, в левой части которого стоит имя функции, а в правой — ее значение. Иначе значение функции не определено.

 

Таким образом, общий вид описания функции следующий:

Function Имя_функции (список формальных параметров): тип функции; Var описание локальных переменных; Begin ... Имя_функции:= значение End;
Тело функции
аргументы
Результат
Заголовок функции


Вызов функции осуществляется в выражениях с указанием имени и фактических параметров:

 

В заголовке функции формальные параметры могут отсутствовать.

Параметры-значения (аргументы) описываются так же, как и в процедуре: Аргумент: тип; Их значения задаются на входе в функцию.

Результирующей переменной является идентификатор Имя_функции. Тип присваиваемого идентификатору функции значения называют типом функции (он указывается в конце заголовка функции после символа «:»).

Например, в заголовке функции

Function PRINA (Х: Integer; А: Real): Integer;

подразумевается, что в процедуре-функции используются два входных параметра (параметры-значения): Х целого типа и A вещественного типа; в результате ее выполнения будет получено значение переменной PRINA (параметр-переменная) целого типа. Само значение результата PRINA формируется в теле функции с помощью оператора присваивания.

 

Вызов функции

Обращение к функции (вызов) осуществляется путем указания ее имени и списка фактических параметров: Имя_функции (список фактических параметров). Функция, в отличие от процедуры, может быть вызвана только в составе некоторого выражения.

Например, y: =f(1,x)+f(2*x,3);

При этом необходимо следовать определенным требованиям (см. требования, описанные выше).

Фактические параметры-значения представляют собой константы, имена переменных, выражения соответствующего типа, фактический результат – значение идентификатора функции.

 

Примеры обращения к функции PRINA:

M:=PRINA (5, -1.3); Writeln (PRINA (V, L));

P:=PRINA (0, S*S)+PRINA (K,2); Write (PRINA (N div 2, Info): 5);

Переменные K, V, N должны быть описаны в программе как целые (Integer, Byte и др.), M, P, L, S, Info – как целые или вещественные.

Схема выполнения функции пользователя:

1. Из основной программы в функцию передаются значения параметров-аргументов. Например, при обращении М:=PRINA (5, -1.3); выполняется присваивание: Х:=5; А:=-1.3;

2. Выполняются операторы, входящие в состав тела функции (для нашего примера в функции формируется значение переменной PRINA).

3. Полученное значение параметра-результата передается в основную программу в вызывающее выражение (это значение передается переменной M).

4. Продолжается выполнение основной программы.

 

Схематически процесс вызова функции изображен на рис.

Program _FUNC; Var M: Integer; {---------------- Описание функции ----------------} Function PRINA (Х: Integer; А: Real): Integer; ... ƒ  Begin … PRINA:=...; ‚ END; Begin {тело основной программы} … М:= PRINA (5, -1.3); … … „ End. Рис. 3.10.

 


 


Примеры использования функции при решении задач

  Пример 1. Для создания парковой зоны предполагается объединить три земельных участка (см. рис.). Определить, какова будет площадь зоны отдыха, если границы участков заданы (данные корректны). Дано: a, b, c, d, e, f, g – границы участков. Найти: S – суммарная площадь участков. Связь: S = S1 + S2 + S3, где S1, S2, S3 – площади участков.
a
b
c
d
e
f
g
S3
S2
S1

  Как видно, решение задачи сводится к трехкратному вычислению площадей треугольников по формуле Герона. Имеет смысл вычисление площади оформить в виде подпрограммы пользователя. Входные данные для подпрограммы: x, y, z – длины сторон треугольника, результат , где . Так как тип подпрограммы является простым и результат ее выполнения – единственное значение (площадь), будем использовать функцию пользователя.
  Программа PLOSHA Описание a,b,c,d,e,f,g,S,S1,S2,S3: Вещественный Конец_описания Ввод (a, 'a=') Ввод (b, 'b=') Ввод (c, 'c=') … Ввод (g, 'g=') S1:=PL (a, b, f) S2:=PL (f, c, g) S3:=PL (g, d, e) S:=S1+S2+S3 Вывод (S) Конец_программы Программа PL (x, y, z: Вещественный): Вещественный Описание P: Вещественный Конец_описания P:=(x+y+z)/2 PL:=корень(P*(P-x)* (P-y)*(P-z)) Конец_программы    
Ввод a, b, c d, e, f, g
Конец
Начало
S1:=PL(a,b,f) S2:=PL(f,c,g) S3:=PL(g,d,e)    
S:=S1+S2+S3
Вывод S
P:=(x+y+z)/2
Конец
PL (x, y, z)

 

 

  Program Plosha; Var a, b, c, d, e, f, g, S, S1, S2, S3: Real; Function PL (x, y, z: Real): Real; Var P: Real; Begin P:=(x+y+z)/2; PL:=sqrt(P*(P-x)* (P-y)*(P-z)) End; Begin Writeln ('Введите длины границ участков'); Readln (a, b, c, d, e, f, g);
S1:=PL(a,b,f); S2:=PL(f,c,g); S3:=PL(g,d,e); S:=S1+S2+S3;


 

Writeln (S:0:2)

End.

S:=PL(a,b,f)+PL(f,c,g)+ PL(g,d,e);

 

 

       

 

  Пример 2. Составить программу для определения победителя в следующей игре: Андрей и Всеволод записывают на бумаге по одному трехзначному числу. Победит тот из них, у кого сумма цифр окажется четной. Дано: N1, N2 – натуральные числа Найти: М – имя победителя в игре Связь: (1) где S1 – сумма цифр числа N1, S2 – сумма цифр числа N2 При: 100 ≤ N1 ≤ 999, 100 ≤ N2 ≤ 999, N1, N2 – натуральные числа
    Метод:
123 10 10 12 10 23 10  20 ‚ ƒ
1. Представим трехзначное число Х в виде . Сумма его цифр S= a + b + c. Из примера видно, что с – остаток от деления Х на 10. Найдем целую часть от деления Х на 10: R=[X/10] (для нашего примера R=12). Тогда a =[R/10], b – остаток от деления R на 10.

2. Если S делится на 2 без остатка, то число Х – выигрышное. Введем логическую переменную РR (признак победителя) для фиксации факта: является ли Х выигрышным числом:

3. Выполним пункты 1-2 метода, полагая X равным N1. Найдем P1 – признак числа-победителя N1.

4. Аналогично выполним пункты 1-2 метода для X=N2. P2 – признак числа-победителя N2.

5. Исходя из полученных значений логических переменных Р1 и Р2 выведем имя победителя в соответствии с формулой (1).

Итак, из описания метода видно, что вычисление суммы цифр и определение признака числа-победителя целесообразно оформить в виде вспомогательного алгоритма и соответствующей подпрограммы пользователя. Так как результатом является единственное значение (признак числа победителя), то уместно использование функции.

    Program POBEDA; Const d=10; Var N1, N2: Integer; P1, P2: Boolean; {Описание функции} Function PR (X: Integer): Boolean; Var S, a, b, c, R: Integer; Begin c:= X mod d; R:= X div d; b:= R mod d; a:= R div d; S:= a+b+c; If S mod 2 = 0 Then PR:=True Else PR:=False End; {Основная программа} Begin Writeln ('Какое число записал Андрей?'); Readln (N1); Writeln ('Какое число записал Всеволод?'); Readln (N2); P1:=PR (N1); P2:=PR (N2); If (P1=True) and (P2=False) Then Writeln ('Победил Андрей'); If (P1=False) and (P2=True) Then Writeln ('Победил Всеволод'); If (P1=True) and (P2=True) Then Writeln ('Ничья'); If (P1=False) and (P2=False) Then Writeln ('Нет победителя') End.

 

 


 

Для самостоятельного решения

 

Найдите ошибки в записи заголовков подпрограмм:

 

1) Procedure A (x+y); 2) Procedure A (10); 3) Procedure A (X; Y);

4) Procedure A (X: integer, Y: Real, Z: Boolean); 5) Function A (A: Real): Real;

6) Function A (P: Real); 7) Function A (10); 8) Function (x+y);

 

Напишите программы решения следующих задач:

 

1) Случайным образом задаются координаты трех точек на плоскости. Требуется определить: образуют ли они треугольник и, если образуют, то его тип (равнобедренный, равносторонний, разносторонний).

2) Известно, что всякое натуральное число, большее 17, можно представить в виде суммы трех попарно взаимно простых натуральных чисел (однако, не всегда единственным образом). Программа должна предложить ввести натуральное число N и затем печатать все его возможные разложения в сумму трех попарно взаимно простых чисел, а также общее число разложений. Из двух разложений, которые отличаются лишь порядком записи слагаемых, вывести одно (любое из них). Например, для числа 18 существует семь разложений: 18 = 2 + 3 + 13; 18 = 2 + 5 + 11; 18 = 2 + 7 + 9; 18 = 3 + 4 + 11; 18 = 3 + 7 + 8;

18 = 4 + 5 + 9; 18 = 5 + 6 + 7. (Напомним, что у взаимно простых чисел НОД=1).

3) Для заданных вещественных чисел х и y необходимо вычислить max(x, y)+max(x+y,x-y), где max(a,b) – наибольшее значение чисел a и b.

4) Назовем автобусный билет (это шестизначное число) «счастливым», если сумма его цифр делится на 7. Определить, являются ли билеты, которые компостируют два друга, «счастливыми».

 


 

Для самостоятельного изучения

Разработка функций и процедур

Описание функций и процедур

Практически во всех алгоритмических языках имеется возможность программирования функций и процедур - блоков операторов, оформленных в виде подпрограмм. Разработка функций и процедур необходима при многократном использовании в разных местах программы или в нескольких программах блока операторов, выполняющих однотипные действия, например, расчет значений сложной функции при различных значениях аргумента. В Турбо - Паскале имеется также возможность создавать библиотеки (модули), состоящие из специальных процедур и функций, отличных от поставляемых в пакете (модули System, Crt, Graph).

Процедуры (подпрограммы) и функции, определяемые программистом, приводятся в разделе описания основной программы. Процедуры и функции имеют заголовок, раздел описания и раздел операторов (см. структуру программы на стр.).

Заголовок процедуры состоит из служебного слова Procedure, имени процедуры и списка параметров, например:

 

Procedure Name_P(p1, p2,...: "тип"; Var p3, p4,...: "тип";...);

 

 

Заголовок функции состоит из служебного слова Function, имени функции и списка параметров, кроме того указывается тип возвращаемого функцией значения, например:

 

Function Name_F("список формальных параметров"):"тип результата";

 

Здесь Function и Procedure - служебные слова,

Name_F, Name_P - имена функции и процедуры соответственно,

p1, p2 - имена формальных параметров-значений,

p3, p4 - имена формальных параметров-переменных,

... - многоточие означает возможность перечисления большего числа параметров.

В дальнейшем, если не оговаривается особо, все сказанное к процедуре относится также и к функции.

Тип возвращаемого функцией значения может быть простым, строковым или типом-указателем. Тип формальных параметров может быть любым, но должен указываться только идентификатором (именем типа). Таким образом, имя типа формального параметра - массива должно быть задано предварительно в операторе Type, например: Type M= array[1..100]of real; Затем тип массива может указываться в заголовке процедуры, например: Procedure Name_P(p: M); Тип формальных параметров описывается только в заголовке процедуры. Список формальных параметров может отсутствовать, например. процедура Randomize; не имеет параметров.

Если в результате выполнения нескольких операторов получается одно значение переменной, то эти операторы можно включить в описание функции. Например, функция Sin(x); возвращает значение, которое присваивается переменной Y:=sin(x); (эта, и другие стандартные функции описаны в модуле System, который подключается к программе автоматически).

Если в результате выполнения нескольких операторов производится некоторое действие или расчет нескольких переменных, то эти операторы лучше включить в описание процедуры. Например, процедура ClrScr; из модуля CRT очищает экран.

 

Вызов процедуры осуществляется в разделе выполнения основной программы или других процедур (вложенные процедуры). Программа (процедура) внутри которой вызывается другая процедура называется внешней по отношению к вызываемой процедуре.

При вызове процедуры вместо формальных параметров подставляются фактические параметры, значения которых используются в процедуре. Например:

Name_P(p11, p22,..., p33, p44,...); - вызов процедуры Name_P,

Y:= Name_F("список фактических параметров"): - вызов функции Name_F,

Здесь p11, p22,... - имена или значения переменных,

p33, p44,... - имена переменных, значения которых возвращаются в программу.

Y - переменная, которой присваивается значение возвращаемое функцией.

Типы соответствующих формальных и фактических параметров должны совпадать, а имена могут совпадать или быть различными. Вместо параметров-значений можно подставлять имена переменных, значения переменных или выражения, вместо параметров-переменных подставляются имена переменных. Функция и параметры-переменные возвращают во внешнюю программу значения, полученные после окончания работы функции или процедуры. Изменения параметров-значений в процедуре носит локальный характер, во внешней программе соответствующие фактические параметры не изменяются. Если не требуется передавать во внешнюю программу новые значения, то следует использовать параметры-значения, а не параметры-переменные.

В процедуре можно использовать локальные метки, константы и переменные, описав их в разделе описания процедуры. Локальные имена не должны совпадать с именами формальных параметров, а их значения не передаются во внешнюю программу. Метки, константы и переменные, описанные во внешней программе раньше, чем сама процедура, называются глобальными по отношению к вызываемой процедуре. Если локальные и глобальные имена совпадают, то в процедуре используются локальные значения, а во внешней программе - глобальные значения, т. е. локальные и глобальные идентификаторы независимы. Если имя глобальной переменной уникально (в процедуре не описывается переменная с таким же именем) и ее значение в процедуре изменяется, то оно изменяется и во внешней программе. Вызывая в программе процедуру программист использует ее имя и параметры не анализируя, а часто и не зная содержимого процедуры. Поэтому в целях универсальности процедур следует все значения в процедуру передавать через список параметров, а переменные внутри процедуры описывать, т. е. делать их локальными.

 

Приведем пример процедуры вывода на экран визитной карточки программиста.

Program NP_1;

Var Dat, Fam: string; { Fam: глобальная переменная }

Procedure VIZ(D_R:string); { D_R - формальный параметр }

Var S_t: string; { S_t: локальная переменная }

Begin Writeln('| -------------------------------------- |');

Writeln('| Разработчик программы:', Fam:14,' |');

Writeln('| |');

Writeln('| г. УФА, ', D_R:14,' |');

Writeln('| Телефон: 22-44-66 |');

Writeln('| -------------------------------------- |');







Система охраняемых территорий в США Изучение особо охраняемых природных территорий(ООПТ) США представляет особый интерес по многим причинам...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...

Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

ЧТО И КАК ПИСАЛИ О МОДЕ В ЖУРНАЛАХ НАЧАЛА XX ВЕКА Первый номер журнала «Аполлон» за 1909 г. начинался, по сути, с программного заявления редакции журнала...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.