Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
10 / 10 / 5
Регистрация: 30.12.2010
Сообщений: 379
1

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

18.10.2011, 23:24. Показов 1797. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, есть программка которая переводит из 2-ной системы в 10-ную. Она работает. А вот поместил я её в процедуру и работать перестала. Я выяснил что это из-зо того что переменные не глобальные, а только для этой процедуры. Странно, помойму этого быть не должно. Помогите пожалуйста разобраться. Вот работающий код:
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
uses crt;
var
len,q,e,w,r1,r2,otvet:integer;
sislo:string;
bykvi1:array[1..1000] of integer;
bykvi2:array[1..1000] of integer;
 
function power(r1,r2:integer):integer;
var res,r3:integer;
 begin
  r3:=r1;
  r2:=r2-1;
  if r2+1<>0 then begin
  while r2>0 do begin
  r2:=r2-1;
  r1:=r1*r3;
  end;
  end
  else
  begin
  r1:=1;
  end;
  power:=r1;
 end;
begin
 clrscr;
 writeln('is 2noi v 10nuy');
 writeln('vvedi sislo');
 readln(sislo);
 len:=length(sislo);
 for q:=1 to len do begin {zapis sifr v massiv}
  val(copy(sislo,q,1),w,e);
  bykvi1[q]:=w;
 end;
 q:=len;
 w:=0;
 repeat
  w:=w+1;
  q:=q-1;
  otvet:=otvet+bykvi1[w]*power(2,q);
  write(bykvi1[w],'*2','^',q);
  if q<>0 then write('+');
until q=0;
writeln;
writeln (otvet);
readln;
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
uses crt;
procedure aaa;
var
len,q,e,w,r1,r2,otvet:integer;
sislo:string;
bykvi1:array[1..1000] of integer;
bykvi2:array[1..1000] of integer;
 
function power(r1,r2:integer):integer;
var res,r3:integer;
 begin
  r3:=r1;
  r2:=r2-1;
  if r2+1<>0 then begin
  while r2>0 do begin
  r2:=r2-1;
  r1:=r1*r3;
  end;
  end
  else
  begin
  r1:=1;
  end;
  power:=r1;
 end;
begin
 clrscr;
 writeln('is 2noi v 10nuy');
 writeln('vvedi sislo');
 readln(sislo);
 len:=length(sislo);
 for q:=1 to len do begin {zapis sifr v massiv}
  val(copy(sislo,q,1),w,e);
  bykvi1[q]:=w;
 end;
 q:=len;
 w:=0;
 repeat
  w:=w+1;
  q:=q-1;
  otvet:=otvet+bykvi1[w]*power(2,q);
  write(bykvi1[w],'*2','^',q);
  if q<>0 then write('+');
until q=0;
writeln;
writeln (otvet);
readln;
end;
begin
aaa;
end.
Выдает не правильные результаты.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2011, 23:24
Ответы с готовыми решениями:

Глобальные и локальные переменные
Здравствуйте подскажите почему метод getBuy() возвращает ноль?? public class MainActivity...

Глобальные и локальные переменные
Более того, при попытке обратиться к переменной сначала на чтение, потом на запись, мы получим...

Локальные и глобальные переменные
var a,b,c,d:integer; procedure p(x:integer; var a:integer); var c:integer; begin x:=5;...

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

5
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
19.10.2011, 12:40 2
Цитата Сообщение от Илья01 Посмотреть сообщение
Выдает не правильные результаты.
Я на нескольких числах проверил, результат правильный, такой же что и в первой программе. Покажите что вводите при неверном результате.
0
10 / 10 / 5
Регистрация: 30.12.2010
Сообщений: 379
19.10.2011, 16:24  [ТС] 3
В первой программе ввожу 15 выдает 7
Во второй ввожу 15 выдает 4611

Добавлено через 1 минуту
А может дело в версии tp? Я проверял на tp7.1 и tp school pak 1.3
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
19.10.2011, 16:52 4
Чтобы быстрее запустил обе программы в Паскаль АВС. Как говорится, найди 10 отличий.
Миниатюры
Глобальные и локальные переменные, одна и та же прога в процедуре Не работает, а просто так работает. Почему?   Глобальные и локальные переменные, одна и та же прога в процедуре Не работает, а просто так работает. Почему?  
1
10 / 10 / 5
Регистрация: 30.12.2010
Сообщений: 379
19.10.2011, 19:31  [ТС] 5
Puporev, я не знаю в чем у вас дело, но у меня такого нет( А вы только с ABC запускали? На простом tp пробовали?
0
Почетный модератор
64304 / 47599 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
19.10.2011, 19:50 6
Нет, попробую, но думаю будет тоже...

Добавлено через 4 минуты
Да, в ТП вторая работает неверно.

Добавлено через 3 минуты
Лень полностью разбираться, программа плохо написана
Перекинь переменные в глобальные
Pascal
1
2
3
4
5
6
var
len,q,e,w,r1,r2,otvet:integer;
sislo:string;
bykvi1:array[1..1000] of integer;
bykvi2:array[1..1000] of integer;
procedure aaa;
Добавлено через 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
46
47
48
49
50
uses crt;
procedure aaa(sislo:string;var otvet:integer);
var len,q,w,e:integer;
    bykvi1:array[1..1000] of integer;
    bykvi2:array[1..1000] of integer;
function power(r1,r2:integer):integer;
var res,r3:integer;
 begin
  r3:=r1;
  r2:=r2-1;
  if r2+1<>0 then begin
  while r2>0 do begin
  r2:=r2-1;
  r1:=r1*r3;
  end;
  end
  else
  begin
  r1:=1;
  end;
  power:=r1;
end;
begin
 clrscr;
 writeln('is 2noi v 10nuy');
 writeln('vvedi sislo');
 readln(sislo);
 len:=length(sislo);
 for q:=1 to len do begin {zapis sifr v massiv}
  val(copy(sislo,q,1),w,e);
  bykvi1[q]:=w;
 end;
 q:=len;
 w:=0;
 repeat
  w:=w+1;
  q:=q-1;
  otvet:=otvet+bykvi1[w]*power(2,q);
  write(bykvi1[w],'*2','^',q);
  if q<>0 then write('+');
until q=0;
writeln;
writeln (otvet);
readln;
end;
var r:integer;
    s:string;
begin
aaa(s,r);
end.
1
19.10.2011, 19:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2011, 19:50
Помогаю со студенческими работами здесь

Глобальные и локальные переменные
def func3(): print(z) z = 20 z = 10 func3() Но ведь мы присвоили глобальной...

глобальные и локальные переменные
Как лучше реализовывать для достижения минимального кода/ максимального быстродействия? 1 вариант:...

Глобальные и локальные переменные!
Какой будет ответ?

Локальные и глобальные переменные.
ОГбьясните пожалуйста чем отличаются Procedure и Function Да и что такое глобальные и локальные...

Локальные/глобальные переменные, ошибка
выдаёт ошибку. вот фрагмент кодаprocedure TForm1.obrabotaetListingClick(Sender: TObject); var ...

Локальные, глобальные переменные и функции
Есть массив типа char. char b; Он заполнен нулями и единицами. b находится в main. Нужно вывести...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru