Resolución de Problemas y Algoritmos

Anuncio
23/05/2016
Recursividad
Problema: A partir de una secuencia de números enteros
ingresada por teclado, computar la suma de los pares y la suma
de los impares. La longitud es dato de entrada.
Suma pares y Suma impares de S
Caso trivial: Si S está vacía, Suma pares es 0 y Suma impares es 0.
Caso recursivo: Si S tiene al menos un elemento,
y el 1er elemento de S es par,
Suma pares de S es Suma pares de S’+ el 1er elemento de S.
Suma impares de S es Suma impares de S’.
Si el 1er elemento de S es impar,
Suma impares de S es Suma impares de S’+ el 1er elemento de S.
Suma pares de S es Suma pares de S’.
Donde S’ es S sin su 1er elemento.
Dra. Jessica Andrea Carballido
[email protected]
Dpto. de Ciencias e Ingeniería de la Computación
UNIVERSIDAD NACIONAL DEL SUR
procedure sumaSecuencia(N: integer; var spa, sim: integer);
Recursividad
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0)
then
begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(N-1, sumPsub, sumIsub);
if (odd(elem))
then
begin sim := sumIsub + elem; spa:= sumPsub; end
else
begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
12 5 6
Recursividad
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
5 6
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
5 6
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
Long
3
Sp
Si
N
3
Spa
Sim
Elem
12
sumPsub
sumIsub
N
Spa
Sim
Elem
sumPsub
sumIsub
2
program p;
varRecursividad
long, sp,si: integer;
procedure sumaSecuencia(….
…
begin
writeln(‘Ingrese la long de la sec’);
readln(long); writeln(‘Secuencia: ‘);
sumaSecuencia(long, sp, si);
writeln(‘La suma de pares es: ‘,sp);
writeln(‘La suma de impares es: ‘,si);
end.
Ingrese la long de la sec
3
Secuencia:
12 5 6
12 5 6
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
Long
3
Sp
Si
N
3
Spa
Sim
Elem
sumPsub
sumIsub
5 6
Recursividad
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
6
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
6
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
N
1
Spa
Sim
Elem
sumPsub
sumIsub
1
23/05/2016
6
Recursividad
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
6
Recursividad
N
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
1
Spa
Sim
Elem
6
sumPsub
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
sumIsub
N
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
0
Spa
Sim
Elem
sumPsub
sumIsub
6
Recursividad
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
N
1
Spa
Sim
Elem
6
sumPsub
0
sumIsub
0
N
0
Spa
Sim
Elem
sumPsub
sumIsub
5 6
Recursividad
N
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
1
Spa
Sim
Elem
6
sumPsub
0
sumIsub
0
6
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
5 6
Recursividad
12 5 6
Recursividad
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
6
0
5 6
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
6
0
N
1
Spa
Sim
Elem
6
sumPsub
0
sumIsub
0
Long
3
Sp
Si
N
3
Spa
Sim
Elem
12
sumPsub
6
5
sumIsub
N
2
Spa
Sim
Elem
sumPsub
sumIsub
5
6
0
2
23/05/2016
Long
12 5 6
Recursividad
3
Sp
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
Si
N
3
Spa
Sim
Elem
12
sumPsub
6
5
sumIsub
program p;
varRecursividad
long, sp,si: integer;
procedure sumaSecuencia(….
…
begin
writeln(‘Ingrese la long de la sec’);
readln(long); writeln(‘Secuencia: ‘);
sumaSecuencia(long, sp, si);
writeln(‘La suma de pares es: ‘,sp);
writeln(‘La suma de impares es: ‘,si);
end.
Ingrese la long de la sec
3
Secuencia:
12 5 6
12 5 6
procedure sumaSecuencia(N: integer; var spa, sim: integer);
var elem: integer; sumPsub, sumIsub: integer;
begin
if (n = 0) then begin spa:= 0; sim:= 0; end
else
begin
read(elem);
sumaSecuencia(n-1, sumPsub, sumIsub);
if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end
else begin sim:= sumIsub; spa := sumPsub + elem; end;
end;
end;
program p;
varRecursividad
long, sp,si: integer;
procedure sumaSecuencia(….
…
begin
writeln(‘Ingrese la long de la sec’);
readln(long); writeln(‘Secuencia: ‘);
sumaSecuencia(long, sp, si);
writeln(‘La suma de pares es: ‘,sp);
writeln(‘La suma de impares es: ‘,si);
end.
Long
3
Sp
18
5
Si
N
3
Spa
Sim
Elem
12
sumPsub
6
sumIsub
5
Ingrese la long de la sec
3
Secuencia:
12 5 6
Long
3
Sp
18
Si
5
3
Descargar