Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 27.05.2009
Сообщений: 6
1

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

02.06.2009, 16:26. Показов 6109. Ответов 3
Метки нет (Все метки)

боже, помогите решить задачу! последняя лаба плииииииииииииииииииз

теория____________________________________________ ________________________

5 ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР
Цель работы - овладение навыками написания процедур и обращения к ним, изучение способов передачи параметров.

5.1 Подготовка к лабораторной работе

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

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

Подпрограммы позволяют уменьшить трудоемкость программирования алгоритмов, содержащих повторяющиеся последовательности операций, а также перейти к структурным методам составления программ. В результате этого создаются программные единицы с иерархической структурой.
Подпрограммой называют самостоятельный фрагмент программы, оформленный особым способом и снабженный именем. Подпрограммы предназначены для реализации алгоритмов решения отдельных подзадач. Они дают возможность уменьшать число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм. Применение подпрограмм позволяет реализовывать концепцию структурного программирования.
В языке Паскаль имеется два вида подпрограмм: процедуры и функции, которые различаются назначением и способом их использования. Подпрограммы делятся на стандартные и подпрограммы пользователя. Стандартные подпрограммы пользователь не создает, они находятся в стандартных модулях System, Crt, Dos, Graph и т.д. Подпрограмма пользователя – это поименованная группа операторов, которую создают и описывают в основной программе в разделах procedure или function. Подпрограмму можно вызвать из любого места программы необходимое количество раз.
Описания подпрограмм находятся в описательной части программы, в разделе процедур и функций. Каждая подпрограмма описывается один раз, но при необходимости к ней можно многократно обращаться.
В языке Паскаль имеется 2 вида подпрограмм: функции и процедуры.
Процедуры (рrocedure) используются при получении одного или нескольких результатов (могут не иметь результатов). Общий вид записи процедуры:

рrocedure <имя> (<список формальных параметров>);
<разделы описаний и объявлений процедуры>;
begin
<раздел операторов процедуры>
end;

Описание подпрограммы состоит из заголовка, раздела описаний и тела подпрограммы
Общий вид описания процедуры:
PROCEDURE PR(P1:T1;P2:T2;VAR PN:TN);
< описательная часть>
BEGIN
< Операторы>
END;

Вызов процедуры из основной программы:
PR(A1,A2,AN),
где PR - имя подпрограммы;
P1,P2,PN - имена формальных параметров;
Т1,Т2,ТN - типы этих параметров;
A1,A2,AN - фактические параметры.
Формальные параметры представляют не какие-то конкретные значения, а обозначают лишь типы переменных и то, как эти переменные используются в процедуре.
При каждом обращении к процедуре формальные параметры должны конкретизироваться. Поэтому при вызове процедуры после ее имени нужно задать список фактических параметров в круглых скобках.
Таким образом, при обращении к процедуре в ней вводятся в употребление свои внутренние переменные, имена которых совпадают с формальными параметрами. При входе в процедуру этим внутренним переменным присваиваются значения, заданные фактическими параметрами. Именно поэтому формальные и фактические параметры должны быть согласованы по количеству, типу и порядку следования.
Различают 2 вида формальных параметров – параметры-значения и параметры-переменные. Для первого типа параметров в формальный параметр переписывается значение фактического параметра, а во втором случае – адрес фактического параметра. Поэтому тогда, когда параметр изменяется в подпрограмме, (иными словами, является результатом работы подпрограммы) его описывают как параметр-переменную. Для этого перед именем параметра-переменной должно указываться служебное слово VAR (параметр PN). Типы формальных параметров обязательно должны обозначаться идентификаторами. Следовательно, при использовании типов, определяемых программистом, эти типы должны быть предварительно описаны.
Pascal
1
2
3
4
5
TYPE
           MS=ARRAY[1..100] OF REAL;
           STROKA=STRING[50];
                . . .
         PROCEDURE PR(VAR A:MS; ST:STROKA; S:STRING);

Например: Рассмотрим процедуру CENA, которая определяет стоимость телефонного разговора с поминутной оплатой 0.6 гр. + 20% НДС.
Pascal
1
2
3
4
5
 PROCEDURE CENA (K : INTEGER; VAR C : REAL);
       BEGIN
             C := K * 0.6;
             C := C + 0.2 * C;
       END;


В приведенном примере K – формальный параметр-значение (это количество минут разговора), C – формальный параметр-переменная (сумма, которую необходимо уплатить за k минут разговора).

Пример. Заменить элементы, расположенные выше главной диагонали матрицы А(N,N), на минимальный элемент. Для решения задачи использовать процедуру. Исходные данные ввести из текстового файла, а результаты вывести в другой текстовой файл в основной программе. Все данные передать в процедуру через список формальных/фактических параметров.

Программа имеет вид:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
РROGRAM  LAB;
CONST
     N=3;       {размерность массива}
TYPE
     AR=ARRAY[1..N,1..N] OF INTEGER;
VAR
     A:AR;              {массив А}
     I, J: INTEGER;     {индексы строк, столбцов} 
     FI, FO: TEXT;      {файловые переменные}
{процедура преобразования массива В}
PROCEDURE  PROC(VAR B:AR; M:INTEGER);
VAR
     K, L: INTEGER;     {индексы строк, столбцов}
     Bmin: INTEGER;     {минимальный элемент}
BEGIN
     {поиск минимального элемента}
     Bmin:=B[1,1];      
     FOR  K:=1 TO M DO
         FOR L:=1 TO M DO
             IF B[K,L]<Bmin  THEN Bmin:=B[K,L];
     {замена элементов выше главной диагонали}  
      FOR  K:=1 TO M DO
         FOR L:=1 TO M DO
             IF L>K  THEN B[K,L]:=Bmin;
END; { PROC }
{тело выполняемых операторов главной программы}
BEGIN 
     {открытие файла входных данных и чтение их}
     ASSIGN(FI, 'lab.inp');
     RESET(FI);
      FOR I:=1 TO N DO BEGIN
         FOR J:=1 TO N DO READ(FI,A[I,J]);
         READLN(FI)
     END;
     CLOSE(FI);
     {открытие выходного файла}
     ASSIGN (FO,'lab.out');
     REWRITE(FO);
     WRITELN(FO ,' Исходный массив A:');     
         FOR I:=1 TO N DO BEGIN
          FOR J:=1 TO N DO WRITE(FO,A[I,J]:3);
          WRITELN(FO)
     END;
     {вызов процедуры}
     PROC(A,N);
     APPEND(FO);
     WRITELN (FO ,' Преобразованный массив A:');
     FOR I:=1 TO N DO BEGIN
        FOR J:=1 TO N DO WRITE(FO,A[I,J]:3);
        WRITELN(FO)
     END;
     CLOSE(FO);
END.

Файл исходных данных:
1 2 3
-4 -5 6
7 8 9

Файл выходных данных:
Исходный массив А:
1 2 3
-4 -5 6
7 8 9
Преобразованный массив А:
1 -5 -5
-4 -5 -5
7 8 9

__________________________________________________ __________________________


моё задание:

Переписать подряд все положительные элементы массивов Х(20) и Y(15) в массив Z .
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.06.2009, 16:26
Ответы с готовыми решениями:

Использование процедур
Ребят помогите пожалуйста написать программу))) Подруга сидит на экзамене, а у меня не получается...

Использование процедур
Помогите, пожалуйста, решить две задачи с использованием процедур. Задача 1. Для элементов...

использование процедур
Даны действительные числа a, b, c. Получить (max(a,a+b)+max(a,b+c))/(1+max(a+bc, 1,15))

Использование стандартных процедур и функций
Составьте программу, которая по числу &lt;1000, написанному арабскими цыфрами, формирует его...

3
1850 / 1172 / 190
Регистрация: 27.03.2009
Сообщений: 4,511
02.06.2009, 16:59 2
не знаю типа или нет
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
program proba;
uses crt;
 
var x:array[1..20] of real;
y:array[1..15] of real;
z:array[1..20] of real;
i,j:integer; c:real;
 
procedure proverca(con:real; pr:integer);
var j:integer;
begin
if con>0 then
z[pr]:=con;
end;
 
begin
clrscr;
j:=1;
for i:=1 to 5 do
begin
readln(x[i]);
proverca(x[i],j);
j:=j+1;
end;
for i:=1 to 2 do
begin
readln(y[i]);
proverca(y[i],j);
j:=j+1;
end;
for i:=1 to 20 do
write(z[i]:2:0);
readln
end.
0
0 / 0 / 0
Регистрация: 27.05.2009
Сообщений: 6
08.06.2009, 13:06  [ТС] 3
чёта не получается((
0
Почетный модератор
64089 / 47498 / 32734
Регистрация: 18.05.2008
Сообщений: 115,182
08.06.2009, 13:51 4
А полностью всю методичку сюда переписать слабо? Или Вы думаете, что мы не знаем того, что Вы знаете?
Попробуйте так, а то ребята торопятся написать, ошибки не проверяют.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uses crt;
type mas=array[1..35] of integer;
procedure Vvod(var m:mas;n:byte);
var i:byte;
begin
for i:=1 to n do
m[i]:=random(20)-4;
end;
procedure Vyvod(var m:mas;n:byte;c:char);
var i:byte;
begin
writeln('Массив ',c);
for i:=1 to n do
write(m[i],' ');
writeln;
end;
procedure NewMas(m1,m2:mas;n,m:byte;var m3:mas;var k:byte);
var i:byte;
begin
k:=0;
for i:=1 to n do
if m1[i]>0 then
 begin
  k:=k+1;
  m3[k]:=m1[i];
 end;
for i:=1 to m do
if m2[i]>0 then
 begin
  k:=k+1;
  m3[k]:=m2[i];
 end;
end;
var x,y,z:mas;
    k:byte;
begin
clrscr;
Vvod(x,20);
Vvod(y,15);
Vyvod(x,20,'Y');
Vyvod(y,15,'X');
NewMas(x,y,20,15,z,k);
Vyvod(z,k,'Z');
readln
end.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2009, 13:51

Использование процедур и функций в Pascal
Может кто чего знает по этим двум задачкам подскажите пожалуйста... 1)Ввести два числа....

Использование процедур и функций в программе
1)сформировать второй массив, разместив в нем элементы первого массива, значения которых...

Использование процедур. Вычислить значение выражения
Постановка задачи Даны целые числа m и n получить z=b(2m.{m}^{2})+3b(mn*2n)-b(2n,m),GDE...

Операция над матрицей. Использование процедур
Дано матричное выражение H=5*B+(2XT*X)T*XT*Y Размерность матриц В подбирается самостоятельно Но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru