Propongo esta serie de ejercicios inventados al momento:
Ejercicios matematicosEjercicio nº1:
- Calcular la letra del DNI a partir de un numero introducido
Algoritmo para sacar la letra del DNI (http://descartes.cnice.mecd.es/Algebra/divisibilidad/dni.htm)
Ejercicio nº 2:
- A partir del algoritmo del ejercicio anterior, crear numeros aleatorios validos para una letra del DNI previamente introducida.
Ejercicio nº 3:
- Crear una aplicacion que te pida un año y verifique si el año es bisiesto (http://es.wikipedia.org/wiki/A%C3%B1o_bisiesto) o no.
Ejercicio nº 4:
- Crear una aplicacion que pida un numero y haga la succeción de Fibonacci. (http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci)
Ejercicio nº 5:
- Crear uina aplicacion que pida un numero de filas y respecto a estas, dibuje un triangulo como el siguiente:
*
***
*****
*******
*********
Ejercicio nº 6:
- Crear una alpicacion que pida un numero y lo devuelva en letras, por ejemplo:
Numero introducido: 356
Resultado: trescientos cincuenta y seis
Ejercicios con archivos:Ejercicio nº 7:
- Crear una funcion para hacer un diccionario de fuerza bruta de 4 filas y lo guarde todo en un fichero.
Ejemplo de fuerza bruta
aaaa
aaab
aaac
aaad
aaae
..
..
..
zzzy
zzzz
ejercicio nº 8:
- Crear una funcion la cual se le introduzca el nombre de un archivo de texto y lo guarde, palabra por palabra, por ejemplo:
Archivo fuente: Esto son ejercicios para aprender a programar en C#
Archivo resultado:
Esto
son
ejercicios
para
aprender
a
programar
en
C#
Texto a ordenar:Leonardo de Pisa o Leonardo Pisano o Leonardo Bigollo, también llamado Fibonacci, fue un matemático italiano, famoso por la invención de la sucesión de Fibonacci, surgida como consecuencia del estudio del crecimiento de las poblaciones de conejos, y por su papel en la popularización del sistema de numeración posicional en base 10 en Europa.
Ejercicio nº 9:
- Crear una funcion la cual, a partir del Archivo resutlado del anterior ejercicio, lo ordene alfabeticamente y lo deje del mismo formato que el Archivo resultado (es decir, linea a linea).
Creo que ya es suficiente, a medida que vaya apsando el tiempo, si nadie lo postea, posteare yo mismo las soluciones (estos ejercicios son facilitos, es lo unico que se me venia a la cabeza).
Un Saludo.
using System;
using System.Collections.Generic;
using System.Text;
namespace DNILetra
{
class Program
{
static void Main(string[] args)
{
Dictionary<int,char> Letras = new Dictionary<int,char>();
Letras.Add(0,'T'); Letras.Add(12,'N');
Letras.Add(1,'R'); Letras.Add(13,'J');
Letras.Add(2,'W'); Letras.Add(14,'Z');
Letras.Add(3,'A'); Letras.Add(15,'S');
Letras.Add(4,'G'); Letras.Add(16,'Q');
Letras.Add(5,'M'); Letras.Add(17,'V');
Letras.Add(6,'Y'); Letras.Add(18,'H');
Letras.Add(7,'F'); Letras.Add(19,'L');
Letras.Add(8,'P'); Letras.Add(20,'C');
Letras.Add(9,'D'); Letras.Add(21,'K');
Letras.Add(10,'X'); Letras.Add(22,'E');
Letras.Add(11,'B');
Console.Write("Introduce nº DNI: ");
string snumber = Console.ReadLine();
int inumber = -1;
if ((snumber.Length != 8) || (!Int32.TryParse(snumber, out inumber)))
{
throw new ArgumentException("No válido.");
}
else
{
inumber = inumber % 23;
Console.WriteLine("Letra: {0}",Letras[inumber]);
}
Console.ReadKey();
}
}
}
Un cordial saludos.
fácil no????????
Cita de: Meta en 20 Mayo 2007, 19:25 PM
fácil no????????
Nunca dije lo contrario... ;) ;)
Repsecto al codigo, funciona perfectamente... ;) ;)
Un Saludo.
A ver quién lo hace en modo Visual. No hace falta, pero...
... para aprender novatos está bien.
Esta fue la solucion que encontre del arbolito de navidad
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication13
{
class Program
{
static void Main(string[] args)
{
Console.Write("Escribe un numero");
string str = Console.ReadLine();
double f = double.Parse(str);
if (f > 25)
f = 25;
for (int i = 0; i < f; i++)
{
Console.CursorTop=i;
int k = 39-i;
int l = 40 + i;
for (int j = k; j < l;j++ )
{
Console.CursorLeft=j;
Console.Write("*");
}
}
Console.Read();
}
}
}
y este al de Fibonacci
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication12
{
class Program
{
static void Main(string[] args)
{
Console.Write("Escribe un numero");
string str = Console.ReadLine();
double f = double.Parse(str);
double i = 0, g = 1, h = 0;
Console.WriteLine(i);
Console.WriteLine(g);
for (; h <= f; )
{
h = i + g;
i = g;
g = h;
Console.WriteLine(h);
}
}
}
}
esta es mi solucion recursiva al ej 4
public static int fibonacci(int k)
{
int fib;
if (k<=2)
{
fib =1;
}
else
{
fib= fibonacci(k-1)+ fibonacci(k-2);
}
return fib;
}
Esta es mi solucion recursiva al ejercicio #5(En particular este ejercicio me ah dejado dudas en cuanto a si mi codigo esta suficientemente optimisado) Espero que lo disfruten tal como yo:
using System;
namespace piramide
{
class Class1
{
static void Main(string[] args)
{
for (int i=0;i<80;i++)
{
Piramide p = new Piramide();
p.Show (i);
}
}
}
class Piramide
{
bool flag;
int val,val1;
public void Show(int n)
{
string esp=" ";
string ast="*";
if(n==0&&!flag)Console.WriteLine();
else if (n==1&&!flag)Console.WriteLine(ast);
else if (n==2&&!flag)Console.WriteLine(ast+ast);
else
{
if(!flag)
{
val1=n;
val=(n-1)/2;
flag=true;
}
for (int i=0;i<val-1;i++)esp+=" ";
for (int k=1;k<val1-2*(esp.Length);k++)ast+="*";
Console.Write(esp+ast);
Console.WriteLine();
val--;
if(esp.CompareTo(" ")!=0)Show(val);
else
{
for(int j=0; j<val1;j++)Console.Write("*");
Console.WriteLine ();
}
}
}
}
}
Ahí va mi solución para el ejercicio 1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ElHacker
{
class Program
{
static Func<int, char> ObtenerLetra = x => "TRWAGMYFPDXBNJZSQVHLCKE"[x % 23];
static void Main(string[] args)
{
Console.Write("Introduzca su DNI: ");
Console.WriteLine("Su letra es: {0}",ObtenerLetra(Convert.ToInt32(Console.ReadLine())));
}
}
}
Ejercicio 2:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ElHacker
{
class Program
{
static void Main(string[] args)
{
Console.Write("Introduzca la letra del DNI: ");
char letra = Convert.ToChar(Console.ReadLine().ToUpper());
int posicionLetra = "TRWAGMYFPDXBNJZSQVHLCKE".IndexOf(letra);
Console.Write("Introduzca cuantos números deséa generar: ");
int numero = Convert.ToInt32(Console.ReadLine());
Random rnd = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < numero;i++)
Console.Write("{0} ", 23 * rnd.Next(1000000, 3500000) + posicionLetra);
}
}
}
Para el 3º:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ElHacker
{
class Program
{
static void Main(string[] args)
{
Console.Write("Introduzca un año: ");
int year = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("El año {0}es bisiesto", EsBisiesto(year) ? "" : "NO ");
}
static Func<int, bool> UltimoAno = x => x % 100==0;
static Func<int, bool> SecularBisiesto = x => x % 400==0;
static Func<int, bool> Bisiesto = x => x % 4 == 0;
static bool EsBisiesto(int ano)
{
if (!Bisiesto(ano))
return false;
return (UltimoAno(ano) && SecularBisiesto(ano) || !UltimoAno(ano));
}
}
}
Ejercicio 4:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ElHacker
{
class Program
{
static Func<int, int> TerminoN = numero => Enumerable.Range(0, numero).Aggregate(new { X = 1, Y = 0 }, (p, a) => new { X = p.Y, Y = p.X + p.Y }).Y;
static void Main(string[] args)
{
Console.Write("Introduzca un número: ");
int number = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < number; i++)
Console.Write("{0} ", TerminoN(i));
}
}
}
Respuesta al ej #6using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace letras_a_numeros
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(enletras(Console.ReadLine()));
Console.ReadLine();
}
public static string enletras(string nu)
{
string res, dec = "";
Int64 int_s;
int tens;
double nro;
try
{
nro = Convert.ToDouble(num);
}
catch
{
return "";
}
int_s = Convert.ToInt64(Math.Truncate(nro));
tens = Convert.ToInt32(Math.Round((nro - int_s) * 100, 2));
if (tens > 0)
{
dec = " CON " + tens.ToString() + "/100";
}
res = toText(Convert.ToDouble(int_s)) + dec;
return res;
}
private static string toText(double value)
{
string Num2Text = "";
value = Math.Truncate(value);
if (value == 0) Num2Text = "CERO";
else if (value == 1) Num2Text = "UNO";
else if (value == 2) Num2Text = "DOS";
else if (value == 3) Num2Text = "TRES";
else if (value == 4) Num2Text = "CUATRO";
else if (value == 5) Num2Text = "CINCO";
else if (value == 6) Num2Text = "SEIS";
else if (value == 7) Num2Text = "SIETE";
else if (value == 8) Num2Text = "OCHO";
else if (value == 9) Num2Text = "NUEVE";
else if (value == 10) Num2Text = "DIEZ";
else if (value == 11) Num2Text = "ONCE";
else if (value == 12) Num2Text = "DOCE";
else if (value == 13) Num2Text = "TRECE";
else if (value == 14) Num2Text = "CATORCE";
else if (value == 15) Num2Text = "QUINCE";
else if (value < 20) Num2Text = "DIECI" + toText(value - 10);
else if (value == 20) Num2Text = "VEINTE";
else if (value < 30) Num2Text = "VEINTI" + toText(value - 20);
else if (value == 30) Num2Text = "TREINTA";
else if (value == 40) Num2Text = "CUARENTA";
else if (value == 50) Num2Text = "CINCUENTA";
else if (value == 60) Num2Text = "SESENTA";
else if (value == 70) Num2Text = "SETENTA";
else if (value == 80) Num2Text = "OCHENTA";
else if (value == 90) Num2Text = "NOVENTA";
else if (value < 100) Num2Text = toText(Math.Truncate(value / 10) * 10) + " Y " + toText(value % 10);
else if (value == 100) Num2Text = "CIEN";
else if (value < 200) Num2Text = "CIENTO " + toText(value - 100);
else if ((value == 200) || (value == 300) || (value == 400) || (value == 600) || (value == 800)) Num2Text = toText(Math.Truncate(value / 100)) + "CIENTOS";
else if (value == 500) Num2Text = "QUINIENTOS";
else if (value == 700) Num2Text = "SETECIENTOS";
else if (value == 900) Num2Text = "NOVECIENTOS";
else if (value < 1000) Num2Text = toText(Math.Truncate(value / 100) * 100) + " " + toText(value % 100);
else if (value == 1000) Num2Text = "MIL";
else if (value < 2000) Num2Text = "MIL " + toText(value % 1000);
else if (value < 1000000)
{
Num2Text = toText(Math.Truncate(value / 1000)) + " MIL";
if ((value % 1000) > 0) Num2Text = Num2Text + " " + toText(value % 1000);
}
else if (value == 1000000) Num2Text = "UN MILLON";
else if (value < 2000000) Num2Text = "UN MILLON " + toText(value % 1000000);
else if (value < 1000000000000)
{
Num2Text = toText(Math.Truncate(value / 1000000)) + " MILLONES ";
if ((value - Math.Truncate(value / 1000000) * 1000000) > 0) Num2Text = Num2Text + " " + toText(value - Math.Truncate(value / 1000000) * 1000000);
}
else if (value == 1000000000000) Num2Text = "UN BILLON";
else if (value < 2000000000000) Num2Text = "UN BILLON " + toText(value - Math.Truncate(value / 1000000000000) * 1000000000000);
else
{
Num2Text = toText(Math.Truncate(value / 1000000000000)) + " BILLONES";
if ((value - Math.Truncate(value / 1000000000000) * 1000000000000) > 0) Num2Text = Num2Text + " " + toText(value - Math.Truncate(value / 1000000000000) * 1000000000000);
}
return Num2Text;
}
}
}
Respuesta al ejercicio #8
public static void Write_Text(string str,string FileName)
{
try
{
if (File.Exists(FileName))
{
using (StreamWriter writer = new StreamWriter(FileName))
{
string[] Separated = str.Split(' ');
foreach (string k in Separated)
{
writer.WriteLine(k);
}
writer.Close();
}
}
}
catch (Exception ex)
{
throw new Exception("Error" + ex);
}
}
Ejercicio #7 Mi solucion recursiva no debe ser la mas optima. Pero he tenido que pensarla unos cuantos dias para hacerla. Asi que buena o mala aqui esta. El algoritmo recursivo para toda la cadena sale en 3 lineas pero para un numero espesifico de caracteres es un poco mas complicado. En este caso mi codigo les permite espesificar el numero de caracteres a combinar con todos los caracteres de un array de caracteres. El constructor te pide el archivo a crear o guardar el index, que son la cantidad de caracteres a combinar y finalmente un array de caracteres como referencia. Agradecimientos especiales al primo William UH, ya que sin el no hubiera esclarecido algunas dudas respecto a la combinatoria en general.
Citarusing System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ECDundy.Programmer
{
class ECDundy_Combinatorial
{
static void Main(string[] args)
{
char[] arr = new char[26] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
Combinatorial p = new Combinatorial(@"c:\Combinations.txt", 4, arr);
p.Create();
}
}
class Combinatorial
{
private char[] Elements;
private string Result, FileName;
private List<string> _List;
private int Count,Index;
StreamWriter writer;
public Combinatorial(string FileName, int Index, params char[] Elements)
{
this.FileName = FileName;
this.Elements = Elements;
this.Index = Index;
writer = new StreamWriter(FileName);
Count=-1;
Result = "";
_List = new List<string>();
}
public void Create() { Combining_Characters(Elements, Result, _List, Index); writer.Close(); }
private void Combining_Characters(char[] Elements, string Result, List<string> _List, int Index)
{
char[] temp = new Char[Index];
string temp2 = "";
if (Result.Length == Elements.Length)
{
Count++;
for (int i = Elements.Length - 1, k = 0; i > (Elements.Length) - Index - 1; i--, k++)
{
temp[k] = Result;
}
temp2 = new string(temp);
if (!_List.Contains(temp2))
{
_List.Add(temp2);
Write_Text(temp2);
}
}
else
{
for (int i = 0; i < Elements.Length; i++)
{
if (Count == _List.Count) break;
else Combining_Characters(Elements, Result + Elements, _List, Index);
}
}
}
private void Write_Text(string str)
{
try
{
writer.WriteLine(str);
}
catch (Exception ex)
{
throw new Exception("Error" + ex);
}
}
}
}
Estoy aprendiendo C# desde que me baje Visual Studio 2005 (es decir, ayer), asi que no se metan conmigo si hago cosas innecesarias o mal hechas :xD
Mi solución al ejercicio 1:
using System;
using System.Collections.Generic;
using System.Text;
namespace LetraDNI
{
class LetraDNIApp
{
static void Main(string[] args)
{
int NumerosDNI;
string LetrasDNI = "TRWAGMYFPDXBNJZSQVHLCKE";
char[] Letras = new char[22];
Letras = LetrasDNI.ToCharArray();
Console.Write("Escriba sus numeros de DNI: ");
NumerosDNI = Convert.ToInt32(Console.ReadLine());
Console.Write("Su letra del dni es la {0}.", Letras[NumerosDNI % 23]);
int Pausa = Console.Read();
}
}
}
Mi solución al ejercicio 3:
using System;
using System.Collections.Generic;
using System.Text;
namespace Ejericicio3
{
class Ejericicio3App
{
static void Main(string[] args)
{
int Año;
Console.Write("Introduce un año: ");
Año = Convert.ToInt32(Console.ReadLine());
Console.Write("El año {0} ", Año);
if ((Año % 4 == 0 && Año % 100 != 0) || Año % 400 == 0)
{
Console.WriteLine("es bisiesto.");
}
else
{
Console.WriteLine("no es bisiesto.");
}
Console.Read();
}
}
}
Mi solución al ejercicio 4:
using System;
using System.Collections.Generic;
using System.Text;
namespace Ejericio4
{
class Ejericio4App
{
static void Main(string[] args)
{
Console.Write("Introduce un numero: ");
int Numero = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("f({0}) = {1}", Numero, Fibonacci(Numero));
Console.ReadKey();
}
public static int Fibonacci(int Numero)
{
return (Numero < 2) ? Numero : Fibonacci(Numero - 1) + Fibonacci(Numero - 2) ;
}
}
}
respecto al metodo Fibonacci. ArcheritONE le dio un bonito toque, sin embargo esta incorrecto. Al igual que el mio en parte, explico:
si n=0 en el problema de Fibonacci tenemos que la sucecion no tiene solucion. Y es facilmente demostrable.
Luego si n<=2 el resultado siempre sera 1 como corresponde.
Quedaria entonces de la siguiente manera.
public static long Fibonacci(int n)
{
if (n == 0) throw new InvalidOperationException();
else return (n <= 2) ? 1 : Fibonacci(n - 2) + Fibonacci(n - 1);
}
saludos
Ejercicio 1:
Escribe un programa que calcule la letra del NIF a partir del número del DNI. La letra se obtiene calculando el resto de la división del número del DNI por 23. A cada resultado le corresponde una letra: 0=T; 1=R; 2=W; 3=A; 4=G; 5=M; 6=Y; 7=F; 8=P; 9=D; 10=X; 11=B; 12=N; 13=J; 14=Z; 15=S; 16=Q; 17=V; 18=H; 19=L; 20=C; 21=K; 22=E.
Ejemplo:
Dime tu DNI: 19901130
Tu NIF es: 19901130 - N
Ejercicio 2:
Escribe un programa que convierta números inferiores a 5000 escritos con cifras árabes en números escritos con números romanos. El valor de los diferentes números romanos es el siguiente: I=1, V=5, X=10, L=50, C=100, D=500, M=1000. Para hacer más fácil el ejercicio, puedes utilizar la notación romana antigua, en que podía haber hasta cuatro símbolos iguales seguidos.
Ejemplo:
Dime un número: 3799
En números romanos, 3799 se escribe MMMDCCLXXXXVIIII
Ejercicio 3:
Escribe un programa que pida dos años y calcule el número de años bisiestos que hay entre esos dos años (incluyendo los dos años) y el número de días total entre esos dos años (incluyendo los dos años).
Ejemplo:
Dime un año: 1800
Dime otro año: 1900
Entre 1800 y 1900 (ambos incluidos) hubo 24 años bisiestos y en total 36889 días.
Ejercicio 4:
Escribe un programa que te permita jugar a una versión simplificada del juego Master Mind. El juego consistirá en adivinar una cadena de números distintos. Al principio, el programa debe pedir la longitud de la cadena (de 2 a 9 cifras). Después el programa debe ir pidiendo que intentes adivinar la cadena de números. En cada intento, el programa informará de cuántos números han sido acertados (el programa considerará que se ha acertado un número si coincide el valor y la posición).
Ejemplo:
Dime la longitud de la cadena: 4
Intenta adivinar la cadena: 1234
Con 1234 has adivinado 1 valores. Intenta adivinar la cadena: 1243
Con 1243 has adivinado 0 valores. Intenta adivinar la cadena: 1432
Con 1432 has adivinado 2 valores. Intenta adivinar la cadena: 2431
Con 2431 has adivinado 4 valores. Felicidades
Ejercicio 5:
Escribe un programa que sea capaz de jugar al Master Mind con las reglas del ejercicio anterior. Al principio, el programa debe pedir la longitud de la cadena (de 2 a 9 cifras). Después, el programa debe ir intentando adivinar la cadena de números.
Ejemplo:
Dime la longitud de la cadena: 4
Piensa una cadena de 4 cifras distintas.
¿Es 2431 ? Dime cuántas cifras he acertado: 1
¿Es 1324 ? Dime cuántas cifras he acertado: 2
¿Es 4321 ? Dime cuántas cifras he acertado: 0
¿Es 1234 ? Dime cuántas cifras he acertado: 4
Gracias por jugar conmigo.
POR FAVOR AYUDENME EN ESTOS EJERCICIOS LO MAS PRONTO POSIBLE !!! SALUDOS !!!!