6 / 6 / 0
Регистрация: 12.12.2018
Сообщений: 23
1

Подпрограмма-процедура в Паскале

17.02.2019, 17:20. Показов 606. Ответов 4

Добрый вечер! Имеется программа для нахождения наименьшее общее кратное 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
const
  n = 10;
 
var
  a: array[1..n] of integer;
  i, k, t, gcd, lcm: integer;
 
begin
    writeln('How many numbers do you want? ');
    readln(k)
 
  for i := 1 to k do
    repeat
      write('a[',i,']= ');
      readln(a[i])
    until a[i] > 0;
  lcm := a[1];
  for i := 2 to k do
    begin
      gcd := lcm;
      t := a[i];
      lcm := lcm * a[i];
      while gcd <> t do
        if gcd > t
          then gcd := gcd - t
          else t := t - gcd;
      lcm := lcm div gcd
    end;
  writeln('Least common multiple = ', lcm);
end.
Но необходимо ее реализовать: ввод данных в одной подпрограмме-процедуре, вывод результатов в другой подпрограммепроцедуре, а обработка в третьей. Обрабатываемые данные передаются в подпрограмму-процедуру и возвращаются из подпрограммы через параметры.
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
const
  n = 10;
 
type matrix= array[1..n] of integer;
var b:matrix;z, lcm1, k1:integer;
Procedure Vvod (var a:matrix; k :integer); 
var i:integer;
begin
    writeln('How many numbers do you want? ');
    readln(k);
 
 for i := 1 to k do 
     repeat
      write('a[',i,']= ');
      readln(a[i]) 
     until a[i] > 0;    
end;
Procedure Rabota(a:matrix; k:integer);
var gcd,lcm, i, t:integer;
begin
  lcm := a[1];
  for i := 2 to k do
    begin
      gcd := lcm;
      t := a[i];
      lcm := lcm * a[i];
      while gcd <> t do
        if gcd > t
          then gcd := gcd - t
          else t := t - gcd;
      lcm := lcm div gcd
    end;
 end;   
Procedure Vivod(k:integer);
begin    
  writeln('Least common multiple = ', k);
end; 
begin
clrscr;
Vvod(b,k1);
Rabota(b,k1);
Vivod(lcm1);
end.
Подскажите, где ошибка?После выполнения процедуры все ее значения пропадают, как вывести значение из Rabota в Vivod? Прочитал в нескольких статьях о подпрограммах-процедурах, но понимание еще неполное. Порекомендуйте, пожалуйста, литературу для новичков.
Спасибо Вам за помощь.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.02.2019, 17:20
Ответы с готовыми решениями:

Подпрограмма процедура
Пусть дано описание type z=record x,y: real; end; Написать программу, которая с...

Подпрограмма процедура. Максимальный и минимальный элементы матриц.
Здравствуйте, умные люди! Помогите, пожалуйста: Дано задание: Найти минимальный и максимальный ...

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

Процедура в паскале
Собственно задаю детский вопрос, ибо ответ на него есть в любой книге, но гугл упорно не хочет...

4
Почетный модератор
64253 / 47553 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
17.02.2019, 18:04 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
uses crt;
const
  n = 10;
type mas=array[1..n] of integer;
procedure vvod(var a:mas;var k:byte);
var i:byte;
begin
repeat
writeln('Введите размер массива от 2 до ',n,' k=');
readln(k)
until k in [2..n];
writeln('Введите ',k,' целых положительных чисел');
for i:=1 to k do
repeat
 write('a[',i,']= ');
 readln(a[i])
until a[i] > 0;
end;
procedure nok(a:mas;k:byte;var lcm:integer);
var i,gcd,t:integer;
begin
lcm:=a[1];
for i:=2 to k do
 begin
  gcd:=lcm;
  t:=a[i];
  lcm:=lcm*a[i];
  while gcd<>t do
  if gcd>t then gcd:=gcd-t
  else t:=t-gcd;
  lcm:=lcm div gcd
 end;
end;
procedure print(a:mas;k:byte;lcm:integer);
var i:byte;
begin
writeln('Массив А');
for i:=1 to k do
write(a[i],' ');
writeln;
write('НоК=',lcm);
end;
var
  a:mas;
  k:byte;
  lcm:integer;
begin
clrscr;
vvod(a,k);
nok(a,k,lcm);
print(a,k,lcm);
readln
end.
Цитата Сообщение от New_Prog Посмотреть сообщение
Порекомендуйте, пожалуйста, литературу для новичков.
Любые учебники по Паскалю, статьи в интернете о подпрограммах в Паскаль.
1
6 / 6 / 0
Регистрация: 12.12.2018
Сообщений: 23
17.02.2019, 18:42  [ТС] 3
Puporev, подскажите, пожалуйста, когда в процедуре нужно задавать параметры? И когда внутри параметрах нужно var дописывать, а когда не нужно?
Спасибо Вам, если ответите
1
Почетный модератор
64253 / 47553 / 32739
Регистрация: 18.05.2008
Сообщений: 115,182
17.02.2019, 18:57 4
Если не используются глобальные переменные, что в принципе и не желательно, в процедуре объявляюися входные и выходные параметры. Перед выходными пишется var, потому чир они или создаются или изменяются в процедуре.
Вам что, вера не позволяет читать учебники и статьи?
1
6 / 6 / 0
Регистрация: 12.12.2018
Сообщений: 23
17.02.2019, 19:05  [ТС] 5
Puporev, Спасибо за объяснение, просто не понял написанное в некоторых статьях
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2019, 19:05
Помогаю со студенческими работами здесь

Геометрическая процедура на Паскале.
Помогите, пожалуйста, написать процедуру на Паскале: Задание. &quot;В трехмерном пространстве заданы n...

Процедура Sleep. Скорость анимации в Паскале.
Почему-то минимальная пауза, которую делает программа, 10 мс. Например begin for var i:=1...

Подпрограмма-процедура
Для массива из N элементов подсчитать число вхождений этих элементов в интервале , а также...

Подпрограмма процедура! плииииз!
даны два одномерных массива А и В из N неотрицательных элементов. Вычислите значение выражения ...


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

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

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