Sie sind auf Seite 1von 7

TRABAJO PRCTICO N 0

2013
Tema: Ejercicios Bsicos
INGENIERA I NFORM TICA LICENCIATURA EN SISTEM AS APU Apellido y Nombre: LU: Fecha:

ESTRUCTURA DE DATOS

1)

Escriba un programa que lea el nombre del usuario y muestre un saludo donde aparezca la fecha y hora del sistema.

Solucin:
using System; namespace TP00 { class Program { static void Main(string[] args) { string nombre; Console.Write("Ingrese su nombre: "); nombre = Console.ReadLine(); Console.WriteLine("\n\nBienvenido {0}, \n\nhoy es {1}\n\n", nombre, DateTime.Now); } } // fin de la class Program } // fin del namespace

Una mejor solucin sera la siguiente:


using System; namespace TP00 { class Program { static void Main(string[] args) { Ejercicio1(); } /// <summary> /// Escriba un programa que lea el nombre del usuario y /// muestre un saludo donde aparezca la fecha y hora del /// sistema. /// </summary> static void Ejercicio1() { string nombre; Console.Write("Ingrese su nombre: "); nombre = Console.ReadLine(); Console.WriteLine("\n\nBienvenido {0}, \n\nhoy es {1}\n\n", nombre, DateTime.Now); } } // fin de la class Program } // fin del namespace

Esta manera de codificar permite escribir un mtodo para cada enunciado que se desee probar.

Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 1 de 7

2)

Escriba un programa que lea tres nmeros y si el primero es positivo calcule el producto de los otros dos, en otro caso calcule la suma. Pregunte al usuario si desea volver a hacerlo.

/// <summary> /// Escriba un programa que lea tres nmeros y si el primero /// es positivo calcule el producto de los otros dos, en otro /// caso calcule la suma. Pregunte al usuario si desea volver /// a hacerlo. /// </summary> static void Ejercicio2() { int num1, num2, num3; string buff; char respuesta; do { Console.WriteLine("Ingrese tres nmeros"); Console.Write("1er numero: "); buff = Console.ReadLine(); num1 = Int32.Parse(buff); Console.Write("2do numero: "); num2 = Int32.Parse(Console.ReadLine()); Console.Write("3er numero: "); num3 = Int32.Parse(Console.ReadLine()); if (num1 > 0) { Console.WriteLine("El producto de {0} por {1} es {2}", num2, num3, num2 * num3); } else { Console.WriteLine("La suma de {0} por {1} es {2}", num2, num3, num2 + num3); } Console.Write("\nDesea continuar (S/N): "); respuesta = Char.Parse(Console.ReadLine()); } while (Char.ToUpper(respuesta) != 'N'); }

3)

Escriba una funcin "LeerInt" que permita ingresar un nmero entero, esta funcin recibe un texto que debe mostrarse antes de solicitar el nmero. La funcin debe controlar los posibles errores que se producen en la entrada de datos por teclado y posterior conversin a nmero entero.

/// <summary> /// Muestra el mensaje enviado como parmetro y permite /// ingresar el texto por el teclado. /// Convierte el texto a numero controlando los errores /// </summary> /// <param name="msg">Mensaje a mostrar en la pantalla</param> /// <returns>Valor numrico (entero) ingresado</returns> static int LeerInt(string msg) { int num; do { if (msg != null) { Console.Write(msg); } } while (!Int32.TryParse(Console.ReadLine(), out num)); return num; }

Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 2 de 7

4)

Escribir un programa que calcule y visualice el ms grande, el ms pequeo y la media de N nmeros (N >0). El valor de N se solicita al principio del programa y los nmeros sern introducidos por el usuario.

/// <summary> /// Escribir un programa que calcule y visualice el ms grande, /// el ms pequeo y la media de N nmeros (N >0). El valor de N /// se solicita al principio del programa y los nmeros sern /// introducidos por el usuario. /// </summary> static void Ejercicio4() { int cantidad; do { cantidad = LeerInt("Ingrese cuantos nmeros: "); } while (cantidad <= 0); int numero; bool primeravez = true; int maximo = 0, minimo = 0, suma = 0; for (int i = 1; i <= cantidad; ++i) { numero = LeerInt(string.Format("Ingrese el nmero {0}: ", i)); if (primeravez) { primeravez = false; maximo = minimo = numero; } else { if (numero > maximo) { maximo = numero; } if (numero < minimo) { minimo = numero; } } suma = suma + numero; } Console.WriteLine("\nEl mximo es {0}", maximo); Console.WriteLine("El mnimo es {0}", minimo); Console.WriteLine("El promedio es {0}", (double)suma / cantidad); }

5)

Implementar un programa que invierta los dgitos de un entero positivo dado. Solucin: Jugando con los nmeros se ve que el nmero 432 se puede escribir como: 4*10*10 + 3*10 + 2 = ((0*10 + 4)*10 + 3)*10 + 2 Esto permite tomar sucesivamente el resto y cociente de un entero positivo al dividirse en 10 y acumular en otro entero positivo multiplicado por 10 el resto calculado.
<summary> Implementar un programa que invierta los dgitos de un entero positivo dado. <remarks> Solucin: Jugando con los nmeros se ve que el nmero 432 se puede escribir como: 4*10*10 + 3*10 + 2 = ((0*10 + 4)*10 + 3)*10 + 2 Esto permite tomar sucesivamente el resto y cociente de un entero positivo al dividirse en 10 y acumular en otro entero positivo multiplicado por 10 el resto calculado. </remarks> </summary>

/// /// /// /// /// /// /// /// /// /// ///

Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 3 de 7

static void Ejercicio5() { int numero = LeerInt("Ingrese el nmero: "); int invertido = 0; int resto = 0; while (numero > 0) { resto = numero % 10; numero = numero / 10; invertido = invertido * 10 + resto; } Console.WriteLine("Nmero invertido {0}", invertido); }

6)

Escribir un programa parar encontrar el mximo comn divisor de dos nmeros enteros positivos. Solucin: El algoritmo de Euclides transforma un par de enteros positivos en otro par, dividiendo repetidamente el entero mayor por el menor y reemplazando el mayor por el menor y el menor por el resto. Cuando el resto es 0, el nmero ms pequeo distinto de cero de la pareja ser el mximo comn divisor de la pareja original.

/// <summary> /// Escribir un programa parar encontrar el mximo comn divisor /// de dos nmeros enteros positivos. /// </summary> static void Ejercicio6() { int n1, n2; do { n1 = LeerInt("Ingrese el primer nmero: "); } while (n1 < 0); do { n2 = LeerInt("Ingrese el segundo nmero: "); } while (n2 < 0); Console.WriteLine("El Mximo Comun Divisor entre {0} y {1} es {2}", n1, n2, MCD(n1, n2)); }

El mtodo (funcin) MCD es el siguiente:


/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// <summary> Implementa el algoritmo de Euclides para hallar el mximo comn divisor entre dos enteros positivos. <remarks> El algoritmo de Euclides transforma un par de enteros positivos en otro par, dividiendo repetidamente el entero mayor por el menor y reemplazando el mayor por el menor y el menor por el resto. Cuando el resto es 0, el nmero ms pequeo distinto de cero de la pareja ser el mximo comn divisor de la pareja original. </remarks> <exeption> Dispara la excepcin de argumento para valores no positivos </exeption> </summary> <param name="n">Primer nmero</param> <param name="m">Segundo nmero</param> <returns>Mximo comn divisor entre los nmeros dados</returns>

Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 4 de 7

static int MCD(int n, int m) { if (n <= 0) { throw new ArgumentException("Error en argumento " + n.ToString()); } if (m <= 0) { throw new ArgumentException("Error en argumento " + m.ToString()); } int resto = n % m; while (resto != 0) { n = m; m = resto; resto = n % m; } return m; }

7)

Implemente una funcin que determine si un nmero positivo es primo. Un nmero positivo es primo, si slo tiene por divisores el uno y el mismo nmero. Solucin: Un nmero positivo es primo, si slo tiene por divisores el uno y el mismo nmero. Teniendo en cuenta que si hay un nmero i que divide a otro nmero menor que la raz cuadrada de n, entonces hay otro que tambin lo divide que es mayor que la raz cuadrad de n, entonces basta con comprobar los posibles divisores menores o iguales que la raz cuadrad del nmero dado.
/// <summary> /// Implemente una funcin que determine si un nmero es primo. /// Un nmero positivo es primo, si slo tiene por divisores el uno /// y el mismo nmero. /// </summary> static void Ejercicio7() { int numero; do { numero = LeerInt("Ingrese un numero: "); } while (numero <= 0); if (EsPrimo(numero)) { Console.WriteLine("El nmero {0} ES PRIMO !!!", numero); } else { Console.WriteLine("Lo siente el nmero {0} no es primo ...", numero); } }

La funcin puede ser la siguiente:


/// /// /// /// /// /// /// /// /// /// <summary> Determina si un nmero es primo </summary> <remarks> Teniendo en cuenta que si hay un nmero i que divide a otro nmero menor que la raz cuadrada de n, entonces hay otro que tambin lo divide que es mayor que la raz cuadrad de n, entonces basta con comprobar los posibles divisores menores o iguales que la raz cuadrad del nmero dado. </remarks>

Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 5 de 7

/// <exception> /// Dispara la excepcin de argumento para valores no positivos /// </exception> /// <param name="num">Nmero a considerar</param> /// <returns>Verdadero (true)si el nmero es primo</returns> static bool EsPrimo(int num) { if (num < 1) { throw new ArgumentException("Error en el argumento " + num.ToString()); } bool primo = true; for (int i = 2; (i * i < num) && primo; ++i) { primo = (num % i) != 0; } return primo; }

8)

Escriba un programa que determine cunto tarda su computadora en hallar los primeros 10000 (diez mil) nmeros primos (en el caso que su computadora sea muy rpida, cambie el lmite).

/// <summary> /// Escriba un programa que determine cunto tarda su computadora /// en hallar los primeros 10000 (diez mil) nmeros primos. /// </summary> static void Ejercicio8() { Console.WriteLine("Busqueda de los 10000 primeros nmeros primos"); DateTime inicio = DateTime.Now; int cuenta = 0; for (int i = 1; cuenta <= 10000; ++i) { if (EsPrimo(i)) { cuenta++; Console.WriteLine(i); } } DateTime fin = DateTime.Now; Console.WriteLine("Se demor: {0}", fin - inicio); }

Existen variantes de los algoritmos que mejoren el resultado obtenido?

9)

Escriba un programa que determine si un nmero es perfecto. Solucin: Un nmero es perfecto cuando la suma de sus divisores excepto el mismo nmero es igual al nmero en cuestin. De este modo lo que se necesita es un mtodo (funcin) que sume los divisores de un nmero dado, si esta suma es igual al nmero resulta que ese nmero es primo.

/// <summary> /// Escriba un programa que determine si un nmero es perfecto. /// Solucin: Un nmero es perfecto cuando la suma de sus divisores /// excepto el mismo nmero es igual al nmero en cuestin. De este /// modo lo que se necesita es un mtodo (funcin) que sume los /// divisores de un nmero dado, si esta suma es igual al nmero /// resulta que ese nmero es primo. /// </summary> static void Ejercicio9() { int numero; do { Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 6 de 7

numero = LeerInt("Ingrese un nmero: "); } while (numero < 0); if (SumarDivisores(numero) == numero) { Console.WriteLine("El nmero {0} es PERFECTO !!!", numero); } else { Console.WriteLine("Lo siento no es perfecto", numero); } }

La funcin para sumar los divisores es la siguiente:


/// <summary> /// Calcula la suma de los divisores del nmero excepto el mismo /// </summary> /// <exception> /// Disparar excepcin de argumento para valores no positivos /// </exception> /// <param name="num">Nmero a considerar</param> /// <returns>Suma de los divisores del numero</returns> static int SumarDivisores(int num) { if (num < 1) { throw new ArgumentException("Error en argumento num = " + num.ToString()); } int suma = 0; for (int i = 1; i < num; ++i) { if ((num % i) == 0) suma += i; } return suma; }

10) Escriba un programa que permita ingresar tres nmeros enteros y muestre en la consola las posibles alternativas relacionados con el orden de los nmeros ingresados. 11) Escriba un programa que muestre la suma de los primeros 1000 (mil) nmeros naturales impares. 12) Escriba un mtodo que muestre el nombre del da de la semana dado un nmero; se establece que el nmero 1 corresponde al da lunes y el nmero 7 al da domingo. Implemente todas las consideraciones posibles de acuerdo a la especificacin. 13) Escriba un programa que permita calcular el rea y volumen de distintos cuerpos geomtricos, por ejemplo un cilindro, un hexaedro, una pirmide, un cilindro, un prisma, un cono. 14) Escriba un programa que permita calcular las races de un polinomio de segundo grado. 15) Escriba un programa que permita ingresar dos valores de tiempo, cada uno de ellos medido en horas, minutos y segundos; el programa debe determinar la cantidad de segundos entre ellos.

Docentes: Tentor, Mendez; Gareca, Prez Ibarra

Pgina 7 de 7

Das könnte Ihnen auch gefallen