IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Непонятное значение локальной переменной функции и составные типы в FPC
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: 123
Jabber: 123
Skype: 123

Репутация: -  0  +


TYPE arr=array[1..19] of byte; digCnt=array[0..9] of byte;

function calc(const r,q,len:byte; var a:digCnt; const b:arr; var res:arr):boolean;
var i,d,c:byte;
begin
if q <> 0 then begin write('блять',q); halt end;
if r > len then begin
calc:=true;
exit
end; //выход из рекурсии
if q > 0 then c:=9
else c:=b[r];
for i:=c downto 0 do
if a[i]>0 then begin
dec(a[i]);
res[r]:=i;
if b[r]>i then d:=1;
if calc(r+1,d,len,a,b,res) then begin
calc:=true;
exit
end
else begin
inc(a[i]);
res[r]:=0;
calc:=false;
end
end;

end;

VAR a:array[0..9] of byte;
b,res:arr;
i,d,len1,len2,q,r:byte; c:char;

BEGIN
read©;
repeat
inc(len1);
d:=ord©-48;
inc(a[d]);
read©;
until c=#13;
readln;

read©;
repeat
d:=ord©-48;
inc(len2);
b[len2]:=d;
read©;
until c=#13;

r:=len2-len1 + 1;
if b[r]=0 then q:=1;

calc(r,q,len2,a,b,res);
for i:=r to len2 do write(res[i]);

END.

TYPE arr=array[1..19] of byte; digCnt=array[0..9] of byte;

function calc(const r,q,len:byte; var a:digCnt; const b:arr; var res:arr):boolean;
var i,d,c:byte;
begin
if q <> 0 then begin write('хуйня ебучая ебаный в рот блять',q); halt end;
if r > len then begin
calc:=true;
exit
end; //выход из рекурсии
if q > 0 then c:=9
else c:=b[r];
for i:=c downto 0 do
if a[i]>0 then begin
dec(a[i]);
res[r]:=i;
if b[r]>i then d:=1;
if calc(r+1,d,len,a,b,res) then begin
calc:=true;
exit
end
else begin
inc(a[i]);
res[r]:=0;
calc:=false;
end
end;

end;

VAR a:digCnt;
b,res:arr;
i,d,len1,len2,q,r:byte; c:char;

BEGIN
read©;
repeat
inc(len1);
d:=ord©-48;
inc(a[d]);
read©;
until c=#13;
readln;

read©;
repeat
d:=ord©-48;
inc(len2);
b[len2]:=d;
read©;
until c=#13;

r:=len2-len1 + 1;
if b[r]=0 then q:=1;

calc(r,q,len2,a,b,res);
for i:=r to len2 do write(res[i]);

END.



переменная q (локальная), в функции имеет абсолютно непонятное значение, когда на месте параметра q в функцию закидывается 0, при обращении к q оказывается что она имеет значение 68.
и ещё, почему можно использовать как параметр массив a, он же имеет другой тип
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Большевик–концептуал
**

Группа: Пользователи
Сообщений: 133
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: octagram@jabber.ru
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  0  +


На местo параметра q при рекурсии поступает значение из переменной d, которая в зависимости от того, что в if, может оставаться неинициализированной. Какой мусор был на стеке, такое и будет значение d, а после рекурсивного вызова — значение q.

У массива a формальный тип совпадает. И формально, и реально массив от 0 до 9 из Char с правом на чтение/запись, значит, подходит.

Ненормативная лексика на форуме нежелательна.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: 123
Jabber: 123
Skype: 123

Репутация: -  0  +


Цитата
На местo параметра q при рекурсии поступает значение из переменной d, которая в зависимости от того, что в if, может оставаться неинициализированной. Какой мусор был на стеке, такое и будет значение d, а после рекурсивного вызова — значение q.

Спасибо, и блин, как же все таки непривычно следить за такими вещами после дотнета.
Цитата
У массива a формальный тип совпадает. И формально, и реально массив от 0 до 9 из Char с правом на чтение/запись, значит, подходит.
надо почитать

Цитата
Ненормативная лексика на форуме нежелательна.

извиняюсь, просто было поздно, и я забыл стереть свою 'отладочную информацию'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 19.01.2018 12:08
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"