Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 07.08.2015
Сообщений: 24
1

Параметры-значения и параметры-переменные в функции и процедуре

04.09.2015, 01:16. Просмотров 682. Ответов 11
Метки нет (Все метки)

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

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
var sum: integer;
    nom: array [0..3] of integer = (200, 100, 50, 20); 
    menuN: integer;
    k: array [0..3] of integer; 
    kEnter: array [0..3] of integer; 
    pass: integer = 123;
 
 
function count : integer;
  var i: integer;
  begin
  for i := 0 to 3 do
     begin
      if sum div nom[i] >= kEnter[i] then
       k[i]:= kEnter[i]
      else 
       k[i]:= sum div nom[i];
      sum := sum - nom[i] * k[i];
      count:= k[i];
      end
end;
 
 
procedure Add;
var i: integer;
 
  begin
    for i := 0 to 3 do
     begin
      writeln ('Please enter nomber nominal', ':', nom[i]);
      readln (KEnter[i]);
  end
end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2015, 01:16
Ответы с готовыми решениями:

Параметры-значения и параметры-переменные подпрограмм
Помогите пожалуйста в решении: С помощью подпрограмм ввода и вывода вектора ввести и вывести...

Как правильно называть переменные в заголовке функции (параметры или аргументы)?
Вопрос про термины. Пришел новый сотрудник и блеснул знаниями, оказывается переменные в заголовке...

Можно ли использовать зарегистрированные переменные сессии, как входные параметры функции?
Вопрос: Можно ли использовать зарегистрированные переменные сессии, как входные параметры функции...

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

11
Модератор
60897 / 45705 / 31535
Регистрация: 18.05.2008
Сообщений: 109,997
04.09.2015, 08:30 2
Напишите само задание к этому коду.
0
0 / 0 / 0
Регистрация: 07.08.2015
Сообщений: 24
04.09.2015, 08:52  [ТС] 3
ну если описать, то сначала нужно положить потом снять это часть кода, просто я не понимаю как ставить атрибуты, то есть оно и без них работает, но здание именно поставить атребуты

вот полный код если это важно, там есть пару ошибок, но я их потом исправлю, мне главное обьясните с атрибутами к процедурам и функциям
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
program ATM;
 
 
var sum: integer;
    nom: array [0..3] of integer = (200, 100, 50, 20); 
    menuN: integer;
    k: array [0..3] of integer; 
    kEnter: array [0..3] of integer; 
    pass: integer = 123;
    
    
    
function count : integer;
  var i: integer;
  begin
  for i := 0 to 3 do
     begin
      if sum div nom[i] >= kEnter[i] then
       k[i]:= kEnter[i]
      else 
       k[i]:= sum div nom[i];
      sum := sum - nom[i] * k[i];
      count:= k[i];
      end
end;
 
procedure Add;
var i: integer;
 
  begin
    for i := 0 to 3 do
     begin
      writeln ('Please enter nomber nominal', ':', nom[i]);
      readln (KEnter[i]);
  end
end;
 
procedure money;
 
var i: integer; 
 
begin 
  writeln ('Please enter sum: ');
  readln (sum);
  count;
 if sum  = 0 then
    begin
    for i := 0 to 3 do
      writeLn (nom[i], ' ','x',' ', k[i], ' ', '=', ' ', nom[i]* k[i]); 
    end
  else 
  write('Error, ATM can not give the sum');
  begin
  writeln ('You have in account:');
  for i:= 0  to 3 do 
  writeln (nom[i], 'x', kenter [i] - k[i], ' ', '=', ' ', nom[i]*(kEnter[i]-k[i]));
  end;
end;
 
begin 
 repeat
    writeln ('Please enter your pass: ');
    readln (pass); 
    if pass = 123 then 
      writeln ('Hello, you went to the ATM menu')
    else 
      writeln ('Error, you enter the wrong password');
  until pass = 123;
  repeat 
    writeln ('Plaese select service: ');
    writeln ('1. Add money on account'); 
    writeln ('2. Withdraw');
    writeln ('3. Exit');
    readln (menuN);
    begin
      case menuN of
        1: Add;  
        2: money;
        3: writeln ('See you soon');
     else 
      writeln ('Error, this menu item is wrong');
      end
    end;
     until menuN = 6;
end.
0
Модератор
60897 / 45705 / 31535
Регистрация: 18.05.2008
Сообщений: 109,997
04.09.2015, 09:25 4
У Вас этот код работает в Паскаль АВС.net? А то что-то у меня не принимает строку 5
Pascal
1
 nom: array [0..3] of integer = (200, 100, 50, 20);
Добавлено через 8 минут
Запустил в WDE, код принимает,но непонятно что конкретно вводить, в итоге программа зависла. Неужели так трудно написать условие этой задачи, в программе нужно добавить еще проверки ввода. Пока не запущу нормально Ваш код, отремонтировать прогу не могу. Извиняйте.
0
0 / 0 / 0
Регистрация: 07.08.2015
Сообщений: 24
04.09.2015, 15:18  [ТС] 5
В первую очередь, должно быть меню с паролем, он 123, потом нужно положить деньги по запросу, количеством является не сума денег, а количество купюр каждого номинала, потом в меню выбрать снять, ну и снять, после чего сколько снято и сколько осталось купюр , вцелом там неполноценный алгоритм выдачи, но ментор сказал что не важно мы просто усим все элементы кода, так вот последней задачей было выставить функциям и процедурам параметры. пишу в маршрутке на телефоне если будут каляки сорри
0
Модератор
60897 / 45705 / 31535
Регистрация: 18.05.2008
Сообщений: 109,997
04.09.2015, 15:31 6
Цитата Сообщение от King10 Посмотреть сообщение
количеством является не сума денег, а количество купюр каждого номинала,
Тогда зачем это?
Pascal
1
2
writeln ('Please enter sum: ');
  readln (sum);
Извините, но не рабочий и мало понятный код переделать практически нельзя, нужно понимать четко что и почему является входными и выходными параметрами процедур и функций.
Напишите толковый рабочий код без параметров, тогда можно будет посмотреть.
А суть в том что убираем глобальные переменные и вводим формальные параметры в подпрограммы, а затем вызываем их с фактическими параметрами.
0
0 / 0 / 0
Регистрация: 07.08.2015
Сообщений: 24
04.09.2015, 16:59  [ТС] 7
ну часть уже отвечает за выдачу, а при вводе нужно ложить по купюрам, ну это не я придумал ща проверю код, у себя на работосопособность и скину.
Просто там есть множества и как их отметить не знаю. в скобках.

Добавлено через 11 минут
Все проверил все работает, на ура

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
program ATM;
 
 
var sum: integer;
    nom: array [0..3] of integer = (200, 100, 50, 20); 
    menuN: integer;
    k: array [0..3] of integer; 
    kEnter: array [0..3] of integer; 
    pass: integer = 123;
    
    
    
function count : integer;
  var i: integer;
  begin
  for i := 0 to 3 do
     begin
      if sum div nom[i] >= kEnter[i] then
       k[i]:= kEnter[i]
      else 
       k[i]:= sum div nom[i];
      sum := sum - nom[i] * k[i];
      count:= k[i];
      end
end;
 
procedure Add;
var i: integer;
 
  begin
    for i := 0 to 3 do
     begin
      writeln ('Please enter nomber nominal', ':', nom[i]);
      readln (KEnter[i]);
  end
end;
 
procedure money;
 
var i: integer; 
 
begin 
  writeln ('Please enter sum: ');
  readln (sum);
  count;
 if sum  = 0 then
    begin
    for i := 0 to 3 do
      writeLn (nom[i], ' ','x',' ', k[i], ' ', '=', ' ', nom[i]* k[i]); 
    end
  else 
  writeln('Error, ATM can not give the sum');
  begin
  writeln ('You have in account:');
  for i:= 0  to 3 do 
  writeln (nom[i], 'x', kenter [i] - k[i], ' ', '=', ' ', nom[i]*(kEnter[i]-k[i]));
  end;
end;
 
begin 
 repeat
    writeln ('Please enter your pass: ');
    readln (pass); 
    if pass = 123 then 
      writeln ('Hello, you went to the ATM menu')
    else 
      writeln ('Error, you enter the wrong password');
  until pass = 123;
  repeat 
    writeln ('Plaese select service: ');
    writeln ('1. Add money on account'); 
    writeln ('2. Withdraw');
    writeln ('3. Exit');
    readln (menuN);
    begin
      case menuN of
        1: Add;  
        2: money;
        3: writeln ('See you soon');
     else 
      writeln ('Error, this menu item is wrong');
      end
    end;
     until menuN = 3;
end.
Просто сначала вводишь пароль 123, потом выбираешь первый пункт и на каждый предложный номинал ложишь, например по 10 купюр, потом как положил, выбираешь 2 пункт меню и выбираешь сколько денег снять, например 2370, оно выдаст и напишет сколько чего и сколько осталось.
0
Модератор
60897 / 45705 / 31535
Регистрация: 18.05.2008
Сообщений: 109,997
04.09.2015, 17:27 8
Чуть переделал, чтобы в любом компиляторе АВС работало и убрал лишние begin, 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
program ATM;
const n=3;
type mas=array [0..n] of integer; 
const nom: mas = (200, 100, 50, 20) ;
function count(sum:integer;kEnter,k:mas) : integer;
var i: integer;
begin
for i := 0 to n do
 begin
  if sum div nom[i] >= kEnter[i] then k[i]:= kEnter[i]
  else k[i]:= sum div nom[i];
  sum := sum - nom[i] * k[i];
  count:= k[i];
 end
end;
 
procedure Add(var KEnter:mas);
var i: integer;
begin
for i := 0 to n do
 begin
  writeln ('Please enter nomber nominal', ':', nom[i]);
  readln (KEnter[i]);
 end
end;
 
procedure money(var sum:integer;kEnter,k:mas);
var i: integer; 
begin 
writeln ('Please enter sum: ');
readln (sum);
count(sum,kEnter,k);
if sum  = 0 then
 begin
  for i := 0 to n do
  writeLn (nom[i], ' ','x',' ', k[i], ' ', '=', ' ', nom[i]* k[i]); 
 end
else   writeln('Error, ATM can not give the sum');
writeln ('You have in account:');
for i:= 0  to n do 
writeln (nom[i], 'x', kenter [i] - k[i], ' ', '=', ' ', nom[i]*(kEnter[i]-k[i]));
end;
var sum,menuN,pass: integer;
    k,kEnter: mas; 
begin 
repeat
writeln ('Please enter your pass: ');
readln (pass); 
if pass = 123 then writeln ('Hello, you went to the ATM menu')
else writeln ('Error, you enter the wrong password');
until pass = 123;
repeat 
writeln ('Plaese select service: ');
writeln ('1. Add money on account'); 
writeln ('2. Withdraw');
writeln ('3. Exit');
readln (menuN);
case menuN of
1: Add(kEnter);  
2: money(sum,kEnter,k);
3: writeln ('See you soon');
else writeln ('Error, this menu item is wrong');
end;
until menuN = 3;
end.
0
0 / 0 / 0
Регистрация: 07.08.2015
Сообщений: 24
04.09.2015, 20:31  [ТС] 9
спс, а можешьобяснить зачем ты создал тип, потому что массив нельзя ввести в параметры подпрограмм ?
0
Модератор
60897 / 45705 / 31535
Регистрация: 18.05.2008
Сообщений: 109,997
04.09.2015, 20:35 10
В разных компиляторах Паскаля по разному, а в таком виде будет работать в любом. Я вообще не знаю в чем ты пишешь, похоже в WDE

Добавлено через 2 минуты
Вроде если массивы статистические, тип нужно объявлять обязательно, если есть передача массива параметром.
0
0 / 0 / 0
Регистрация: 07.08.2015
Сообщений: 24
05.09.2015, 01:21  [ТС] 11
хотя прикольный способ, обойти кучу массивов через 1 тип, а потом всем им назначить один тип, круто.
у меня ленивый ментор, ничего не обьясняет просто дает задания и проверяет, если не правильно, говорит что бы переделал

Добавлено через 2 минуты
Цитата Сообщение от Puporev Посмотреть сообщение
Я вообще не знаю в чем ты пишешь, похоже в WDE
Пишу в последнем PascalABC.NET иногда в WDE когда, на чужом компе

Добавлено через 4 часа 28 минут
Прикольный код вышел, даже как-то логичней, и компактней, меньше массивов и переменных. Нужно обязательно будет запомнить такой метод
А ты еще на каком языке пишешь ? Ну из коммерческих, так сказать ?

Добавлено через 15 минут
вот только функция перестала работать почему-то, хотя не пойму почему, ничего же не изменилось, но почему-то деньги нельзя выдать
0
Модератор
60897 / 45705 / 31535
Регистрация: 18.05.2008
Сообщений: 109,997
05.09.2015, 08:03 12
Так попробуйте
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
54
55
56
57
58
59
60
61
62
63
program ATM;
const n=3;
type mas=array [0..n] of integer; 
const nom: mas = (200, 100, 50, 20) ;
procedure Add(var KEnter:mas);
var i: integer;
begin
for i := 0 to n do
 begin
  writeln ('Please enter nomber nominal', ':', nom[i]);
  readln (KEnter[i]);
 end;
end;
procedure count(var sum:integer;kEnter:mas;var k:mas);
//все равно вызываете функцию как процедуру
var i: integer;
begin
for i := 0 to n do
 begin
  if sum div nom[i] >= kEnter[i] then k[i]:= kEnter[i]
  else k[i]:= sum div nom[i];
  sum := sum - nom[i] * k[i];
 end;
end;
procedure money(sum:integer;kEnter:mas;k:mas);
var i: integer; 
begin 
writeln ('Please enter sum: ');
readln (sum);
count(sum,kEnter,k);
if sum  = 0 then
 begin
  for i := 0 to n do
  writeLn (nom[i], ' ','x',' ', k[i], ' ', '=', ' ', nom[i]* k[i]); 
 end
else   writeln('Error, ATM can not give the sum');
writeln ('You have in account:');
for i:= 0  to n do 
writeln (nom[i], 'x', kEnter [i] - k[i], ' ', '=', ' ', nom[i]*(kEnter[i]-k[i]));
end;
var sum,menuN,pass: integer;
    k,kEnter: mas; 
begin 
repeat
writeln ('Please enter your pass: ');
readln (pass); 
if pass = 123 then writeln ('Hello, you went to the ATM menu')
else writeln ('Error, you enter the wrong password');
until pass = 123;
repeat 
writeln ('Plaese select service: ');
writeln ('1. Add money on account'); 
writeln ('2. Withdraw');
writeln ('3. Exit');
readln (menuN);
case menuN of
1: Add(kEnter);  
2: money(sum,kEnter,k);
3: writeln ('See you soon');
else writeln ('Error, this menu item is wrong');
end;
until menuN = 3;
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2015, 08:03

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

Параметры функции: параметры по умолчанию
помогите пожалуйста понять. void foo(int a, int b, int c=1){std::cout << a << "\t" << b <<...

Запрос в процедуре требует параметры
Здраствуйте ! Открываю в процедуре запрос Set rst1 = db.OpenRecordset("qrtmaxizmer1",...

Не получается передать параметры sql процедуре
При выполнении этого кода параметры из TextBox- ов должны передаваться переменным процедуры, но...

Нужно в процедуре определить параметры события WM_KEYDOWN.
Помогите, Нужно в процедуре определить параметры события WM_KEYDOWN. Как и какую библиотеку...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.