Pascal/Turbo Pascal - Recursividad ayuda!

   
Vista:

Recursividad ayuda!

Publicado por Rory (7 intervenciones) el 17/06/2011 20:07:17
Buenas gente de nuevo, disculpen mis molestias miren tengo un pequeño problema y no puedo resolverlo...

tengo una sucecion de recurrencia... y tengo que hacer un algortimo con recursividad para que me haye los primeros 10 terminos,

con las condiciones de que si N=0 va 1
y si n > 0 tiene que utilizar esta ecucacion... 2^n * bn -1

^ (elevado)
*(mutilplicacion)

en practica seria asi;

si n= 0 b0= 2^0 =1
si n=1 b1 2^1*1 = 2
si n=2 b2 2^2*2 = 8
si n=3 b3 2^3*8=64
si n=4 b4 2^4*64=1024

como ven, va haciendo la potencia del numero, y va multiplicando el anterior. si yo creo que debo utilizar recursivdad, si es asi me gustaria que me peudan dar una mano muchas gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Recursividad ayuda!

Publicado por ramon (2072 intervenciones) el 17/06/2011 21:11:51
{ya te pase el programa y los resultados son los que tu dices que serian asín espero lo ejecutes
con un sistema de pascal como por ejemplo la versión 7 de pascal y bajo windows 7
yo lo realizo asín y los resultados son esos te inserto una modificación en la longitud del
numero en vez real lo pongo extender con la directiva $N+ para el poder trabajar con el}
{CON ENTRADA N 5 LOS RESULTADOS SON [ 1/2/8/64/1024/xxxxx] A MAS NUMERO SI ENTRAS
N 10 TE SALDRÁN MAS RESULTADOS ESPERO ESTO TE AYUDE }

program recursiv;
{$N+}
uses
crt;
var
dat : integer;
tec : char;

function numero : integer; {ESTO ES LA ENTRADA DEL NUMERO}
var
dt, x, y, ii, i : integer;
dato : string[15];
begin
clrscr;
textcolor(15);
x := 10;
y := 10;
fillchar(dato,16,' ');
dato[0] := chr(15);
i := 1;
gotoxy(x,y);write('Entre N§ : ');
x := 21;
gotoxy(x,y);
repeat
tec := readkey;
if tec in[#48..#57] then
begin
dato[i] := tec;
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
i := i + 1;
if i > 15 then
begin
i := 15;
end;
end;
if tec = #8 then
begin
i := i - 1;
if i < 1 then
begin
i := 1;
end;
dato[i] := ' ';
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
end;
until (tec = #13) or (tec = #27);
if tec = #13 then
begin
val(dato,dt,ii);
numero := dt;
gotoxy(10,10);clreol;
end
else
begin
numero := 0;
end;
end;

{ Zona A calculo recursivo }
function calculo_recursivo(n: integer): integer; {ESTO EL CALCULO DE RECURSIVIDAD}
begin
if n = 0 then
calculo_recursivo := 1
else
calculo_recursivo := n * calculo_recursivo(n - 1)
end;

{Zona B Elevado}
procedure presenta_resultados(nu : integer);
var
max, dr : extended;
dd : integer;
begin
gotoxy(2,2);
writeln(' ** N§ Entrado ES = ',dat,' ** ');
for dd := 0 to dat - 1 do
begin
if calculo_recursivo(dd) > 0 then
begin
dr := (dd * (dd + 1) / 2);
max := EXP(dr * ln(2)); {AQUÍ EL RESTO}
writeln(' elemento N§ ',dd + 1,' : ',max:10:2);
end;
end;
end;


begin
clrscr;
textcolor(15);
dat := numero;
presenta_resultados(dat);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursividad ayuda!

Publicado por Rory (7 intervenciones) el 18/06/2011 05:56:31
La verdad nuevamente ramon, sos de fierro loco nose como agradecerte, te tomas tu tiempo siempre loco, la verdad una luz, me sirve, pero habia sido que el tema viene con que necesitan que aplique la ecucacion esta 2^n * bn -1 {osea no la anterior} y lo que tengo que hacer es ir por ejemplo que ejecuto con N= 10 que calcule el primero muestre, el funcionamiento de este es perfecto,pero lo que tengo que hacer es lo mismo pero con la otra ecuacion, nose si mi explico bien...

es decir ir calculando todo con el anterior... (yo a mi parecer esta perfecto con la ayuda que me diste) de no ser asi ya esta con el tiempo que tengo nose que mas quieren pero sinceramente te agradesco un monton!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursividad ayuda!

Publicado por ramon (2072 intervenciones) el 18/06/2011 22:26:18
{Hay lo tienes como veras cambia poco}

program recursiv;
{$N+}
uses
crt;
var
dat : integer;
tec : char;


function numero : integer;
var
dt, x, y, ii, i : integer;
dato : string[15];
begin
clrscr;
textcolor(15);
x := 10;
y := 10;
fillchar(dato,16,' ');
dato[0] := chr(15);
i := 1;
gotoxy(x,y);write('Entre N§ : ');
x := 21;
gotoxy(x,y);
repeat
tec := readkey;
if tec in[#48..#57] then
begin
dato[i] := tec;
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
i := i + 1;
if i > 15 then
begin
i := 15;
end;
end;
if tec = #8 then
begin
i := i - 1;
if i < 1 then
begin
i := 1;
end;
dato[i] := ' ';
dato[0] := chr(i);
gotoxy(x + i,y);write(dato[i]);
end;
until (tec = #13) or (tec = #27);
if tec = #13 then
begin
val(dato,dt,ii);
numero := dt;
gotoxy(10,10);clreol;
end
else
begin
numero := 0;
end;
end;

{calculo recursivo }
function calculo_recursivo(n: integer): integer;
begin
if n = 0 then
calculo_recursivo := 1
else
calculo_recursivo := n * calculo_recursivo(n - 1)
end;

procedure presenta_resultados(nu : integer);
var
ant, max, dr : extended;
dd : integer;
begin
gotoxy(2,2);
writeln(' ** N§ Entrado ES = ',dat,' ** ');
ant := 0;
writeln;
writeln(' Num Elevado Anterior Resultado');
writeln;
for dd := 0 to dat do
begin
if dd = 0 then
begin
max := EXP(dd * ln(2));
writeln(' N§ ',dd,' : ',max:8:2,' x ',ant:8:2,' ',max:10:2);
ant := max;
end
else
begin
max := EXP(dd * ln(2));
writeln(' N§ ',dd,' : ',max:8:2,' x ',ant:8:2,' ',(max * ant):10:2);
ant := max;
end;
end;
end;


begin
clrscr;
textcolor(15);
dat := numero;
presenta_resultados(dat);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursividad ayuda!

Publicado por Rory (7 intervenciones) el 18/06/2011 23:09:16
Ramon, la verdad te tengo que dar un monumento, sos un genio total, te agradesco, es eso lo que necesito, no me dan los resultados igual a los ortos osea 1.2.8.64.1204.etc etc , pero no te preocupes que de ultima veo como modificarlo para que me deen los resultados que deben, pero sinceramente te agradesco por todoo ramon! un abrazo gigante
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Recursividad ayuda!

Publicado por Rory (7 intervenciones) el 19/06/2011 00:41:05
Ramon, ya lo solucione, lo unico que fue que hice modifique esta linea...
ant := max
y la deje asi...
ant := (max*ant );

y listo el pollo, la verdad te agradesco mucho campeon, me fuiste de mucha ayuda la verdad te debo muchismo! gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar