Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad

ejercicio resueltos de algortimos recursivos, Apuntes de Análisis y Diseño del Sistema

solución de los ejercicios recursivos.

Tipo: Apuntes

2019/2020
En oferta
30 Puntos
Discount

Oferta a tiempo limitado


Subido el 29/07/2020

audrey-bastidas-da-silva
audrey-bastidas-da-silva 🇵🇪

5

(8)

6 documentos

1 / 11

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
EL SALTO DEL CABALLO
Algoritmos Recursivos
Solución Trabajo Nro. 05:
Inversión de capital. Se ha depositado en una institución bancaria un monto de
capital m por el cual se recibe un X% de interés anual. El problema consiste en
determinar el capital que se tendrá al cabo de n años. Escriba un subprograma
recursivo que resuelva este problema. Recuerde que debe establecer los estados
base y recursivo del problema.
La fórmula para el interés es montoInicial*interés*años,
static void Main(string[] args)
{
Console.Write("Ingrese capital : ");
double capital = double.Parse(Console.ReadLine());
Console.Write("Ingrese interés % : ");
double interes = double.Parse(Console.ReadLine());
Console.Write("Ingrese años : ");
int años = int.Parse(Console.ReadLine());
Console.Write("El capital final será : ");
Console.WriteLine(calcular(capital, interes, años));
Console.ReadLine();
}
static double calcular(double cap, double inte, int años)
{
if (años == 0) return cap;
else
{
return (cap * (inte / 100)) + calcular(cap, inte, años - 1);
}
}
Escriba un subprograma recursivo que invierta el orden de los elementos de un
arreglo de N elementos. Es decir, que el elemento que está en la posición 0 se
intercambie con el que está en la posición n-1, el de la posición 1, con el de la n-
2, y así sucesivamente.
static void Main(string[] args)
{
Console.Write("Ingrese tamaño del arreglo : ");
int n = int.Parse(Console.ReadLine());
int[] arreglo = new int[n];
Random sd = new Random();
for (int k = 0; k < arreglo.Length; k++)
{
Console.Write("Ingrese elemento [{0}] : ", k);
pf3
pf4
pf5
pf8
pf9
pfa
Discount

En oferta

Vista previa parcial del texto

¡Descarga ejercicio resueltos de algortimos recursivos y más Apuntes en PDF de Análisis y Diseño del Sistema solo en Docsity!

EL SALTO DEL CABALLO

Algoritmos Recursivos

Solución Trabajo Nro. 05:

• Inversión de capital. Se ha depositado en una institución bancaria un monto de

capital m por el cual se recibe un X% de interés anual. El problema consiste en

determinar el capital que se tendrá al cabo de n años. Escriba un subprograma

recursivo que resuelva este problema. Recuerde que debe establecer los estados

base y recursivo del problema.

La fórmula para el interés es montoInicialinterésaños,

static void Main(string[] args) { Console.Write("Ingrese capital : "); double capital = double.Parse(Console.ReadLine()); Console.Write("Ingrese interés % : "); double interes = double.Parse(Console.ReadLine()); Console.Write("Ingrese años : "); int años = int.Parse(Console.ReadLine()); Console.Write("El capital final será : "); Console.WriteLine(calcular(capital, interes, años)); Console.ReadLine(); } static double calcular(double cap, double inte, int años) { if (años == 0) return cap; else { return (cap * (inte / 100)) + calcular(cap, inte, años - 1); } }

• Escriba un subprograma recursivo que invierta el orden de los elementos de un

arreglo de N elementos. Es decir, que el elemento que está en la posición 0 se

intercambie con el que está en la posición n-1, el de la posición 1, con el de la n-

2, y así sucesivamente.

static void Main(string[] args) { Console.Write("Ingrese tamaño del arreglo : "); int n = int.Parse(Console.ReadLine()); int[] arreglo = new int[n]; Random sd = new Random(); for (int k = 0; k < arreglo.Length; k++) { Console.Write("Ingrese elemento [{0}] : ", k);

arreglo[k] = int.Parse(Console.ReadLine()); } Console.WriteLine("Arreglo inicial"); Imprimir(arreglo); arreglo = invertir(arreglo, arreglo.Length, 0); // Invertir Console.WriteLine("\nArreglo invertido"); Imprimir(arreglo); Console.ReadLine(); } static int[] invertir(int[] arreglo, int n, int m) { if (n == arreglo.Length / 2) return arreglo; else { int temp = arreglo[m]; arreglo[m] = arreglo[n - 1]; arreglo[n - 1] = temp; return invertir(arreglo, n - 1, m + 1); } } static void Imprimir(int[] x) { foreach (int k in x) { Console.Write(k + " "); } }

- Escriba un subprograma recursivo que invierta el orden de una cadena de

caracteres. Por ejemplo, si la cadena de entrada es ROMA, el resultado que debe

arrojar el programa es AMOR.

static void Main(string[] args) { Console.Write("Ingrese cadena : "); string cadena = Console.ReadLine(); Console.Write("Invertido : " + invertirCadena(cadena.ToCharArray(), cadena.Length, 0)); Console.ReadLine(); } static string invertirCadena(char[] cadena, int n, int m) { if (n == cadena.Length/2) return new string(cadena); else { char aux = cadena[m]; cadena[m] = cadena[n - 1]; cadena[n - 1] = aux; return invertirCadena(cadena, n - 1, m + 1); } }

static void imprimir(string[] a) { foreach (string pais in a) { Console.WriteLine(pais); } }

- Dado como dato el siguiente programa, sígalo y diga qué imprime para los

siguientes valores de X: X=38, X=51, X=24.

static void Main(string[] args) { Console.WriteLine("Con X(38) : {0}", pi(38)); Console.WriteLine("Con X(51) : {0}", pi(51)); Console.WriteLine("Con X(24) : {0}", pi(24)); Console.ReadLine(); } static long pi(long x) { if (x > 100) return (x - 8); else return pi(pi(x + 9)); }

- Escriba un subprograma recursivo que busque un valor X en un arreglo

unidimensional de enteros, ordenado en forma decreciente.

static void Main(string[] args) { Console.Write("Ingrese tamaño : "); int n = int.Parse(Console.ReadLine()); int[] lista = new int[n]; Random p = new Random(); for (int m = 0; m < lista.Length; m++) { //Console.Write("Ingrese elemento [{0}] : ", m); //lista[m] = int.Parse(Console.ReadLine()); lista[m] = p.Next(1, 100); } //Ordenando decreciente int aux = 0; for (int i = 1; i < lista.Length; i++) {

int j = i; while (j >= 1 && lista[j] > lista[j - 1]) { aux = lista[j]; lista[j] = lista[j - 1]; lista[j - 1] = aux; j--; } } foreach (int k in lista) { Console.Write(k + " "); } Console.WriteLine("\nIngrese número a buscar"); int numero = int.Parse(Console.ReadLine()); Console.WriteLine(buscar(lista, lista.Length-1, numero)); Console.ReadLine(); } static string buscar(int[] x, int n, int numero) { if (x[n] == numero) { return "Se encontró el número en la posición " + n; } else if (n == 0) { return "No se halló el número"; } else { return buscar(x, n - 1, numero); } }

- Escriba un subprograma recursivo tal que dado como dato un arreglo

unidimensional de enteros positivos de dimensión N (par), determine si las

sumas de las dos mitades (del elemento 0 al (n/2)-1 y del elemento n/2 al n-1)

son iguales.

static void Main(string[] args) { Console.Write("Ingrese tamaño (par) : "); int par = int.Parse(Console.ReadLine()); if (par % 2 == 0) { int[] m = new int[par]; for (int i = 0; i < m.Length; i++) { Console.Write("Ingrese dato [{0}] : ", i); m[i] = int.Parse(Console.ReadLine()); } Console.WriteLine(sumas(m, 0));

- Dados como datos dos números enteros positivos A y B, escriba un programa

recursivo que calcule AB.

static void Main(string[] args) { Console.Write("Ingrese A : "); long a = long.Parse(Console.ReadLine()); Console.Write("Ingrese B : "); long b = long.Parse(Console.ReadLine()); Console.WriteLine("{0} elevado a {1} es : {2}", a, b, operar(a, b)); Console.ReadLine(); } static long operar(long a, long b) { if (b == 0) return 1; else { return a * operar(a, b - 1); } }

- Escriba un subprograma recursivo que, dado como dato un número entero

positivo, regrese 1 si todos los dígitos de dicho número son pares y 0 en otro

caso.

static void Main(string[] args) { Console.WriteLine("Ingrese un número"); long num = long.Parse(Console.ReadLine()); if (num >= 1) { string aux = num.ToString(); if (operar(aux.ToCharArray(), 0) == 1) { Console.WriteLine("Todos los dígitos son pares"); } else { Console.WriteLine("NO todos los dígitos son pares"); } } else { Console.WriteLine("El número no es entero positivo"); } Console.ReadLine(); } static long operar(char[] x, long a) { if (a == x.Length) {

return 1; } else { if (Convert.ToInt64(Convert.ToString(x[a])) % 2 != 0) { return 0; } return operar(x, a + 1); } }

- Escriba un subprograma recursivo que, dado como dato un número entero

positivo, regrese como resultado la suma de sus divisores

static void Main(string[] args) { Console.WriteLine("Ingrese un número"); long num = long.Parse(Console.ReadLine()); long suma = operar(num, num); Console.WriteLine("La suma de los divisores es " + suma); Console.ReadLine(); } static long operar(long num, long aux) { if (aux == 1) { return 1; } else { if (num % aux == 0) { return aux + (operar(num, aux - 1)); } return operar(num, aux - 1); } }

- Escriba un subprograma recursivo que invierta el orden de los elementos de una

pila. Puede utilizar cualquier estructura de datos como auxiliar, si lo requiere.

static void Main(string[] args) { Stack pila = new Stack(); Stack aux = new Stack(); Console.Write("¿Cuántos datos ingresará a la pila? "); int n = int.Parse(Console.ReadLine());

Solución de la práctica:

bool continuar = true; while (continuar) { Console.Write("Ingrese n : "); int n = int.Parse(Console.ReadLine()); if (n >= 3) { int[,] a = new int[n, n]; int aux = n - 2; for (int i = 1; i < a.GetLength(0) - 1; i++) { for (int j = 1; j < a.GetLength(1) - 1; j++) { Console.Write("Ingrese dato [{0},{1}]", i, j); a[i, j] = int.Parse(Console.ReadLine()); a[0, j] += a[i, j]; //Fila arriba a[n - 1, j] += a[i, j]; //Fila abajo a[i, 0] += a[i, j];//Columna 0 a[i, n - 1] += a[i, j];//Columna n- if (i == j) //Diagonal 1 { a[0, 0] += a[i, j]; } } a[0, n - 1] += a[i, aux]; aux--; //Diagonal 2 } a[n - 1, n - 1] = a[0, 0]; a[n - 1, 0] = a[0, n - 1]; Console.WriteLine("La matriz es : "); for (int i = 0; i < a.GetLength(0); i++) { for (int j = 0; j < a.GetLength(1); j++) { Console.Write(a[i, j] + " "); } Console.WriteLine(); } bandera: Console.WriteLine("Desea continuar (c) o salir (s)"); string op = Console.ReadLine(); switch (op) { case "s": continuar = false;

break; case "c": Console.Clear(); break; default: Console.WriteLine("Opción incorrecta"); goto bandera; } } else { Console.WriteLine("{0} no es >= que 3", n); } } Console.ReadLine();