Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Recursion
Recursion
Susbprograma que permita sumar los elementos de un vector que supere un determinado valor
Resolución
Ejemplos :
…….
//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
Sum=vec[pos]
SINO
FINISI
FINSI
RETORNAR
//programa principal
REPETIR
ESCRIBIR(“ingrese el valor”)
LEER(valor)
Tamanio=5
REPETIR
ESSCRIBIR(“Ingrese el elemento”,i)
LEER(vector[i])
HASTA QUE(vector[i]>0)
FINVARIAR
……………………………………………………………
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:
Necesita un valor entero, un digito y una cadena que indique mayor 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
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:
DP:
ENTRADAS:
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:
ALGORITMO
FUNCION Par(numero:ENTERO)LOGICO
Band: LOGICO
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
SINO
FINSI
Suma(num/10,suimpar,sumpar)
FINISI
FINPROCEDIMIENTO
//programa principal
INICIO
REPETIR
ESCRIBIR(“Ingrese el numero”)
LEER(numero)
HASTA QUE(num>0)
Par=0
Impar=0
Suma(numero,impar,par)
FINPROGRAMA
Ejercicio 3
“dados 2 umeros encontrar el máximo común divisor:” ejemplos 32 y 12 resultados=4
Proceso: se resuelve mediante divisiones sucesivas, donde en c/ llamada sucesiva los parámetros son el divisor y el resto
Algoritmo
SI(num1<num2)ENTONCES
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
REPETIR
ESCRIBIR(”Ingrese un numero”)
HASTA QUE(numero1>0)
LEER(numero1)
REPETIR
LEER(numero2)
HASTA QUE(numero2>0)
Resultado= MCD(numero1,numero2,)
FINPROGRAMA
EJERCICIO 3
“buscar e forma recursiva un valor de un vector , devolver la poscion en donde se encuentra”
¿a que se refiere con la psocion? Al subíndice donde se encuentra y que devuelva 0 ni lo encuentra
Analisis
Proceso: recorrer todos los elementos del vector , donde en c/ llamada recursiva se incrementa la posición a comparar con la clave
// SUPROGRAMA
I: ENTERO
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
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
SINO
ESCRIBIR(“no se encuentra”)
FINSI
FINPROGRAMA
EJERCICIO 4
“DADO UN N° ENTERO POSITIVO, OBTENGA LA SUMA DE CADA DIGITO DUPLICANDO LOS PARES”
ANALISIS:
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
//suprgrogama
SINO
Si(numero==0)entonces
Sumadigioto=0
FINIS
FINSI
RETORNO
//PROGRAMA PRINCIPAL
REPETIR
ESCRIBIR(“Ingrese el n°”)
LEER(num)
HASTA QUE(num>0)
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
AnalisiS:
proceso: hay que recorrer todos los elementos del vector y sumar solamente los pares psotivos
//programa principal
PROGRAMA sumovector
Var vec[10],Par,Tamaño,ind,total,:ENTERO
INICIO
REPETIR
LERR(vect[ind])
HASTA QUE(vec[ind]>0)
FINVARIAR
SumaVectorial(vec[],tamanio,par)
FINPROGRAMA
//subprogramas
…………………………………………………………………………………………………………………………………………………….
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
FIN SI
RETORNO
PROGRAMA SumasLocas
REPETIR
LEER(M , N)
FIN PROGRAMA
2- Subprograma que permita sumar los elementos de un vector que superan un determinado valor.