Está en la página 1de 8

Recursión

Susbprograma que permita sumar los elementos de un vector que supere un determinado valor
Resolución

1) Hay que determinar si se trata de u procedimiento o una función.


2) Pensar que información necesita el subprograma

Ejemplos :

Si valor=3 ==== suma= 4+8+7=19 Tamanio=5

1 2 Tomamos el 1° elemento, lo comparamos con valor, si es mayor lo


2 3
acumulamos, si no no.
3 4
4 8 Tomamanos segundo elemento, comparamos con valor, si es mayor a
5 7
valor lo acumulamos, si no no.

…….

Tomamanos el 5° elemento si es mayor a valor lo sumamos, si no, no.

.se trata de una función porque devuelve un solo resultado

Problema es comparar y si es mayor sumarle

En cada iteración resuelvo una parte del problema(si es mayor a valor


sumarlo) y volver a llamar

Debo hacer 5 comparaciones.

//Programa principal

//subprogramas

FUNCION Sum(vec[5],Val,tamaño:ENTERO):ENTERO

VAR Pos:ENTERO //CON POS RECORRO TODOS LOS ELLEMTOS DEL VECTOR

SI(pos<tamaño) ENTONCES

Si(vec[pos]>val)ENTONCES

Sum= vec[pos]+sum(vec[],val,tamaño,pos+1)

FINSI

SINO//pos==tam

Si(vec[pos]>val)ENTONCES //ULTIMA COMPARACION

Sum=vec[pos]

SINO

Sum=0 // no corresponde sumarlo

FINISI

FINSI

RETORNAR

//programa principal

VAR vector[5],valor,tamananio,posición,I,RESULTADO : ENTERO

REPETIR

ESCRIBIR(“ingrese el valor”)

LEER(valor)

HASTA QUE(valor>0) //valor con el que se compara

VARIAR I DESDE 1 HASTA tamanio // ingresan los elementos del vector

Tamanio=5
REPETIR

ESSCRIBIR(“Ingrese el elemento”,i)

LEER(vector[i])

HASTA QUE(vector[i]>0)

FINVARIAR

RESULTADO= sum(vector[],valor,tamanio,1)// 1 porque es desde la posición 1

ESCRIBIR(“El resultado es”, RESULTADO)

……………………………………………………………

Ejercicio:

Dado un numero entero positivo; un digito (0 al 9) y la indicación de MAYOR(o MENOR); obtenga la cantidad de veces que
aparece el digito en el n° y cuantos fueron MAYORES (O MENORES)

Solución:

Será un procedimiento porque devuelve 2 resultados

Necesita un valor entero, un digito y una cadena que indique mayor o menor

Ejemplo: numero 67302622309, digito: 3, indicación:MAYOR;

Resultados:2(cantidad de veces) y 4 (cantidad de digitos)

Ejemplo2: numero: 2384984, digito: 4 ; indicación: MENOR

Resultados: 2(repeticiones), 2(los que son menores)

Recorrer el n° digito a digito y hacer 2 comparaciones

1° para ver si es igual al digito

2° para ver si es igual o menor

El numero y el digito can por valor protegido porque no cambian y la indicación de menor o mayor.

Y por referencia los 2 resultados: cantidad de veces que aparece el digito y cuantos fueron mayores y menores

…………………. ……………………………….. …………………..

PROCEDIMIENTO Calculo(valor,digito,Por Ref Mayor:ENTERO, Por Ref menor: ENTERO, indicación: CADENA)

INICIO

ESCRIBRI(“ingrese un numero”)

LEER(valor)

ITERAR

ESCRIBIR(“Ingrese el digito”)

LEER(digito)

SALIRSI(digito>=0[Y]digito<10)

REPETIR

ESCRIBIR(“Ingrese la indicacion”)

LEER(indicacion)

HASTA QUE(indicación==MAYOR[0]indicación==MENOR)

Mayor=0

SI(indicación==MAYOR)ENTONCES

SI(valor> valor MOD 10)

MAYOR= MAYOR+(valor MOD 10)

SINO
SI

EJERCICIO RESUELTO
DELIMITACION DEL PROBLEMA: DETERMINAR QUE DATOS NECESITA CONOCER EL SUBPROGRAMA (PARAMETROS); QUE RESULTADOS
DEBE DEVOLVER, EXPLICAR LA RELACION DE RECURRENCIA E IDENTIFICAR LOS CASOS BASE. ANALIZAR Y PROPONER DIFERENTES CAOS
DE EJEMPLOS PARA PODER DETERMINAR LA RELACION RECURSIVA

“Dado un numero, obtener la suma de sus digitos pares e impares, por separado”. Ejemplo:

1238, resultados: suma de pares =10; suma de impares=4

DP:

Q TIPO DE NUMERO ES? R: ENTERO POSITIVO, NO SE SABE CUANTOS DIGITOS TIENE

ANALISIS DEL PROBLEMA

ENTRADAS:

NUMERO: NUMERO A ANALIZAR, ENTERO, POSITIVO

PROCESO

IR TOMANDO UNO A UNO LOS DIGITOS DEL NUMERO E IRLO, SUMANDO POR SEPARADO, DEPENDIENDO SI EL
DIGITO ES PAR O IMPAR; HASTA QUE SE HAYAN LEIDOS TODOS SUS DIGITOS

SALIDA:

DEVOLVER LA SUMA DE DIGITOS PARES Y LA SUMA DE DIGITOS IMPARES.

ALGORITMO

FUNCION Par(numero:ENTERO)LOGICO

Band: LOGICO

SI(num MOD 2==0)ENTONCES

Band= [v]

SINO

Band=[F]

FINSI

RETORNO

PROCEDIMIENTO Suma (num: ENTERO, Por Ref. suimpar , Por Ref. Sumpar: ENTERO)

SI(num==0)ENTONCES

Suma=0

SINO

SI(par(num MOD 10))ENTONCES

sumaPar= sumapar+ (num MOD 10)

SINO

SumaImpar= SumaImpar+ (num MOD 10)

FINSI

Suma(num/10,suimpar,sumpar)

FINISI

FINPROCEDIMIENTO

//programa principal

PROGRAMA paridad suma

INICIO

VAR numero, par , impar,: ENTERO

REPETIR
ESCRIBIR(“Ingrese el numero”)

LEER(numero)

HASTA QUE(num>0)

Par=0

Impar=0

Suma(numero,impar,par)

ESCRIBIR(“Los resultados son ”, impar, par)

FINPROGRAMA

Ejercicio 3
“dados 2 umeros encontrar el máximo común divisor:” ejemplos 32 y 12 resultados=4

Dp:¿Qué es el MCD? Mayor divisor común a ambos números

¿Cómo deben ser los umeros? Enteros positiovos

Analisis del mismo

Entradas: 2 numeros entero positivos

Salidas: un único valor:

Proceso: se resuelve mediante divisiones sucesivas, donde en c/ llamada sucesiva los parámetros son el divisor y el resto

La recursión termina cuando el resto es 0 y el mcd es el ultimo divisor

Algoritmo

FUNCION MCD(num1, num2:ENTERO):ENTERO

VAR resto, cociente: ENTERO

SI(num1<num2)ENTONCES

MCD= MCD(num2, num1)

SINO

Cociente= num1/num2

Resto= num1-num2*cociente

Si(resto==0)ENTONCES

MCD=b

SINO

MCD= MCD(num2,resto)

Finsi

Finsi

RETORNO

//PROGRAMA PRINCIPAL

PROGRAMA mcdloco

VAR numero1,numero2;resultado: ENTERO

REPETIR

ESCRIBIR(”Ingrese un numero”)

HASTA QUE(numero1>0)

LEER(numero1)

REPETIR

ESCRIBIR(”Ingrese segundo numero”)

LEER(numero2)

HASTA QUE(numero2>0)
Resultado= MCD(numero1,numero2,)

ESCRIBIR(El máximo mcd es; resultdo)

FINPROGRAMA

EJERCICIO 3
“buscar e forma recursiva un valor de un vector , devolver la poscion en donde se encuentra”

Dm: ¿tipo de dato del vector ? entero positvos

¿a que se refiere con la psocion? Al subíndice donde se encuentra y que devuelva 0 ni lo encuentra

Analisis

Entrdas: vector cargado, y el valor a buscar

Proceso: recorrer todos los elementos del vector , donde en c/ llamada recursiva se incrementa la posición a comparar con la clave

Salida: posición del elemento del vector buscado. O cero si no

DISEÑO DEL AGLOTIMO

// SUPROGRAMA

PROCEDIMIENTO cargovector(Por ref.vector[50])

I: ENTERO

VARIAR I DESDE 1 HASTA 50

REPETIR

ESCRIBIR(“ingrese el valor ”, i)

LEER(vector[i])

HASTA QUE(vector[i]>0)

FINVARIAR

FINPROCEDIMIENTO

FUNCION Clave(vector[50],buscado,pos:ENTERO):ENTERO

SI(pos<50)ENTONCES

Si(buscado==vector[pos])ENTONCES

buscado= pos // caso base

SINO

buscado= clave(vector[],buscado,pos+1)

FINSI

SINO

Si(vector(pos)==buscado)ENTONCES

Buscco= pos

SINO

Buscado=0

FINSI

RETORNO

//PROGRAMA PRINCIPAL

PROGRAMA Buscado

VAR vec[50],Buco;ENTERO

Cargavector(vector[])

REPETIR
ESCRIBIR(“INGRESE EL VALOR A BUSCAR”)

LEER(busco)

HASTA QUE(busco>0)

SI(CLAVE(vec[50],busco,1)<>0)ENTONCES

ESCRIBIR(“el,busco, está en la posicion”,clave(vec[],busco,1))

SINO

ESCRIBIR(“no se encuentra”)

FINSI

FINPROGRAMA

EJERCICIO 4

“DADO UN N° ENTERO POSITIVO, OBTENGA LA SUMA DE CADA DIGITO DUPLICANDO LOS PARES”

EJEMPLOS 4351; RESULTADO=17 ; 1+5+3+4*2

DP: DE Q TIPO DE DATO ES EL N°? POSTIVO

ANALISIS:

ENTRADA: NUMERMO POSITIVO

SALIDA: suma de los digitos

Proceso: sumar c/u de los digitos del numero , con la excepción de que c/a digito par se lo duplique y luego se lo sume

Diseño del algotimo

//suprgrogama

Función HOLA(numero,sumdigito: ENTERO)

SI(numero mod 10)ENTONCES

SI((numero mod 10)mod 2==0)ENTONCES

Sumadigitoo= 2*numero mod 10+ hola(numero mod 10

SINO

Sumadigito = numero mod 10+ hola(umero mod 10)

Si(numero==0)entonces

Sumadigioto=0

FINIS

FINSI

RETORNO

//PROGRAMA PRINCIPAL

VAR num, suma: ENTERO

REPETIR

ESCRIBIR(“Ingrese el n°”)

LEER(num)

HASTA QUE(num>0)

ESCRIBIR(La suma de los digitos del n°,num, “es”:, hola(num,suma) )

FINPROGRAMA

………………………….

Consigna 2: Recursión.
Realizar el programa principal que cargue un vector con números enteros y positivos,
que llame a un subprograma que sume todos los números pares, recursivamente, que
se encuentren en el vector y muestre el resultado

4 4+6=10 44
1 90
5 44+90+132=266 132
6 133
Dp: que debe hacer el programa? Sumar los números pares del vector

De que tipo deben ser? Enteros positivos

AnalisiS:

vector[] el vector de tamalo indefinido

sigitopar, acumular la suma de digitos pares

tamaño, dimensión del vector

ind : me permitirá recorrer todos los elementos del vector

proceso: hay que recorrer todos los elementos del vector y sumar solamente los pares psotivos

salida: la suma de los n° pares del vector

//programa principal

PROGRAMA sumovector

Var vec[10],Par,Tamaño,ind,total,:ENTERO

INICIO

VARIAR Ind DESDE 1 HASTA tamanio

Escribir(“Ingrese el valor del primer elemento”)

REPETIR

LERR(vect[ind])

HASTA QUE(vec[ind]>0)

FINVARIAR

//llamada al subprograma que realiza la suma de sus elementos pares

SumaVectorial(vec[],tamanio,par)

ESCRIBIR(“La suma es”, par))

FINPROGRAMA

//subprogramas

PROCEDIMIENTO SumaVectorial(vec[],tamanio, paridad: ENTERO)

VAR sumar ,i:ENTERO

…………………………………………………………………………………………………………………………………………………….

1- Dados dos números no negativos M y N; informar el resultado de la suma de los N números posteriores a M

Ejemplo: M= 3 Y N= 2  SUMA = 4 + 5 = 9

FUNCION Suma (M , N : ENTERO): ENTERO


VAR
INICIO
SI (N == 0) ENTONCES
Suma = M
SINO
Suma = (M+1) + Suma (M+1 , N-1 )

FIN SI

RETORNO

PROGRAMA SumasLocas

VAR eme , ene , Resultado : ENTERO


INICIO

REPETIR

ESCRBIR (“Ingrese M Y N”)

LEER(M , N)

HASTA QUE (eme>= 0 [Y] ene >= 0)

Resultado = Suma (eme , ene)

ESCRBIR (“La suma es: ” , Resultado)

FIN PROGRAMA

2- Subprograma que permita sumar los elementos de un vector que superan un determinado valor.

También podría gustarte