Tömb elemeinek az összeszorzása és hatványozás rekurzívan pascalban?
Adott a feladat:Irjunk rekurzív függvényt, ami kiszámolja az a–t a b-ediken.
Ezt a feladatot próbáltam megoldani tömbbel kevés sikerrel mert már nem tudom hogy kell a tömb elemit összeszorozni.
Megpróbáltam úgy hogy a k:=k*t[i] de a k mégis 0 marad.
Kérlek segítsetek akár a teljes feladattal akár csak az összeszorzással kapcsolatban.
2. válaszoló, megkérhetlek hogy írd le a teljes programot nem baj ha c++-ban mert át tom írni csak legyen meg úgy is.
Köszi.
"Próbáld meg long long-al, de az sem garantált, hogy elég nagy lesz."
Mármint Int64-el.(Pascalba vagyunk nem c-be)
C++ - ba van olyan függvénykövtár amibe lehet kezelni nagyon nagy számokat nagyon pontosan illetve lehet hozzá írni és ugyanúgy lehet használni mintha sima változó lenne.(Ami a c++ nagy erőssége.) Ez pascalba nehézkesebb lenne megoldani.
Ha gondolod, akár még én is tudok neked c++-hoz olyan típust küldeni, ami 2^32 számjegyig pontosan tárolja az egészeket, sőt, hatványozni is tud.
De amúgy az én Pascal kódom, amit írtam, nem jó?
Nagyon köszönöm a segítséget, megoldottam:
var a,b,c:longint;
function hatvany(a,b,i:longint;var c:longint):real;
begin
if i<=b-1 then
begin
a:=a*c;
hatvany:=hatvany(a,b,i+1,c);
end else hatvany:=a;
end;
begin
readln(a,b);
c:=a;
writeln(hatvany(a,b,1,c):0:0);
readln;
end.
@19:38
E szerint csak az 1 nulladik hatványa 1, ez meg nem hiszem hogy jó. A hatvany függvénynek felesleges 4 paraméter 2 elég lenne.
Amit @zsomkovacs írt pascal kódot az miért nem jó kérdező?
"# 7/19 Időpont 05-07 09:32"
"Ne csinálj tömböt, attól nem lesz rekurzív, cserébe pazarlod a memóriát és lassítod a programot. A hatványozás így néz ki (ha nem rontom el, rég Pascaloztam, mostanában inkább C++-t használok):
Function hatvany(alap: LongInt, kitevo: Byte): LongInt;
Begin
If (kitevo=0) Then
hatvany:=1
Else
hatvany:=alap*hatvany(alap, kitevo-1);
End;
Vagy egy szintén rekurzív, ám sokkal gyorsabb hatványozás:
Function hatvany(alap: LongInt, kitevo: Byte): LongInt;
Begin
If (kitevo=0) Then
hatvany:=1
Else
Begin
If ((kitevo Mod 2)=0) Then
hatvany:=hatvany(alap, kitevo Div 2)*hatvany(alap, kitevo Div 2)
Else
hatvany:=alap*hatvany(alap, kitevo-1);
End;
End;"
Kérdező ha nem vetted volna észre, ez nem programrészlet c++ és pascal összekeverésével, hanem pascal programrészlet,ahol szabálytalanul egy pontosvessző helyett vessző van írva különben jó és jól is működik a longint értelmezési tartományán belül.
A tied meg nem jó leírtam miért.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!