Resolución de problemas y algoritmos Dra. Jessica Andrea Carballido jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR
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.
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 read(elem); sumaSecuencia(N-1, sumPsub, sumIsub); if (odd(elem)) begin sim := sumIsub + elem; spa:= sumPsub; end begin sim:= sumIsub; spa := sumPsub + elem; end; end;
Ingrese la long de la sec 3 Secuencia: 12 5 6 program p; var 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 Long 3 Sp Si N 3 Spa Sim Elem sumPsub sumIsub 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 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;
12 5 6 5 6 Long 3 Sp Si N 3 Spa Sim Elem 12 N 2 Spa Sim Elem 5 6 12 5 6 Long 3 Sp Si 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 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; N 3 Spa Sim Elem 12 sumPsub sumIsub 5 6 N 2 Spa Sim Elem sumPsub sumIsub 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 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;
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 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; 6 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 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; N 1 Spa Sim Elem sumPsub sumIsub
6 N 1 Spa Sim Elem 6 N Spa Sim Elem 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 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; N 1 Spa Sim Elem 6 sumPsub sumIsub 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 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; N Spa Sim Elem sumPsub sumIsub
6 N 1 Spa Sim Elem 6 N Spa Sim Elem 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 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; N 1 Spa Sim Elem 6 sumPsub sumIsub 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 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; N Spa Sim Elem sumPsub sumIsub
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 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; N 1 Spa Sim Elem 6 sumPsub sumIsub
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 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; 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 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; 6 N 1 Spa Sim Elem 6 sumPsub sumIsub
5 6 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); 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 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; 6
12 5 6 5 6 Long 3 Sp Si N 3 Spa Sim Elem 12 6 5 N 2 Spa Sim Elem 5 6 12 5 6 Long 3 Sp Si 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 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; N 3 Spa Sim Elem 12 sumPsub sumIsub 6 5 N 2 Spa Sim Elem 5 sumPsub sumIsub 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 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; 6
12 5 6 Long 3 Sp Si 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 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; N 3 Spa Sim Elem 12 sumPsub sumIsub 6 5
Ingrese la long de la sec 3 Secuencia: 12 5 6 program p; var 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 Long 3 Sp Si 18 5 N 3 Spa Sim Elem 12 sumPsub 6 sumIsub 5 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 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;
Ingrese la long de la sec 3 Secuencia: 12 5 6 program p; var 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 Long 3 Sp Si 18 5