1 Capítulo 2 Bucles y Funciones

Anuncio
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
Capítulo 2
Bucles y Funciones
1
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.1) Programa en el que el ordenador lanza 50 veces un dado y cuenta cuantas veces sale el nº 1.
Ejemplo para el uso de ‘bucles’ for para repetir un número determinado de veces unas instrucciones.
También muestra cómo conseguir números al azar.
2.2) Programa que muestra 15 líneas como estas: 1 12 123 1234
Ejemplo del uso de dos bucles anidados de tipo for
2.3) Programa que dibuja un Triangulo isósceles
Una aplicación más compleja i completa del uso de bucles anidados.
2.4) Programa que señala si es múltiplo del número 5
La primera función que aplicamos retorna un valor boolean (verdadero/falso) si el número que
enviamos per analizar es o no múltiplo de 5.
2.5) Programa que muestra el día que será mañana. Ex: 31/12/08 -> 01/01/09
Clásico ejercicio donde se ponen en práctica los conocimientos de programación estructurada.
Se deja como ejercicio pendiente la versión en C# (por otro lado, nada complicada de realizar)
2.6) Programa para calcular Potencias, Tensiones e Intensidades. P = V * I
Más prácticas con funciones simples, comparando diferentes lenguajes de programación.
2.7) Área Triangulo – Variables locales/”globales”
¿Qué pasa si necesitamos una variable “global” a todas las funciones del proyecto?.
2.8) Cálculo raíz cuadrada.
Podemos crear nuestras propias ‘instrucciones de sistema operativo’, compilando este programa y
ejecutando, per ejemplo, desde MS-DOS.
2.9) Calculadora
Ejemplo completo para trabajar con varias funciones en un programa .
2.10) Una empresa nos ha encargado un programa para calcular las nóminas de los trabajadores.
El sueldo base semanal sale aplicando la siguiente fórmula: horastrabajo * preciohora +
horesextra*preciohoraextra
El preciohora es una constante=6. El preciohoraextra depende de las h.extra hechas: si son menos de
10h extras semanales, el precio es un 50% mayor que el preciohora (* 1,5). Si se hacen entre 10 y 20h
extra, el precio es un 40% mayor. Si se hacen más de 20h, el precio es un 20% mayor.
Si el trabajador es de categoría 3, el preciohora es el constante.
Si es de categoría 2; el preciohora es un 25% mayor y si es de categoría 1 es un 45% más....
2
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.1) Programa en el que el ordenador lanza 50 veces un dado y cuenta cuantas veces sale el nº 1.
contador =0
randomize timer
cls
for t = 1 to 50
dado = int(rnd*9)+1
print dado;
if dado = 1 then contador = contador + 1
next t
print "Han salido ";contador ;" números 1 a la lista"
end
VERSIÓ C#
static void Main(string[] args)
{
int contador =0; int dado=0;
Random numero = new Random();
Console.Clear();
for (int t = 0; t<=50; t=t + 1)
{
dado = numero.Next(1, 7);
if (dado == 1)
{
contador = contador + 1;
Console.ForegroundColor = ConsoleColor.Red;
}
else Console.ForegroundColor = ConsoleColor.Gray;
Console.Write(" {0}", dado);
}
Console.WriteLine("-");
Console.WriteLine("Ha salido el número1 {0} veces",contador);
}
google: Consola C# , console C#
http://www.c-sharpcorner.com/UploadFile/scottlysle/ColorConsoleCS06082008055747AM/ColorConsoleCS.aspx
3
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.2) Programa que muestra 15 líneas como estas: 1 12 123 1234
1
12
123 ....
static void Main(string[] args)
{
int i, j;
for (i = 1; i <= 15; i++) // 15 lineas
{
for (j = 1; j <= i; j++) // números a cada línea
Console.Write(" - {0}", j);
Console.WriteLine(" ") ;
}
}
2.3) Programa que dibuja un Triangulo isósceles
static void Main(string[] args)
{
Console.Clear();
// dibujo de cada linea (bucle externo)
for (int fila=1; fila <= 7; fila ++)
{
//dibuja espacios en blanco (1er bucle interno)
for (int espacios = 7 - fila; espacios > 0; espacios--)
Console.Write(" ");// espai en blanc
// dibuja estrellas (2º bucle interno)
for (int conta = 1; conta < (2 * fila); conta++)
Console.Write("*");
Console.WriteLine(" ");
}
}
4
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.4) Programa que señala si es múltiplo del número 5
class Exercici4
{
static void Main(string[] args)
{
int num = 1;
bool respuesta;
while (num <= 50)
{
Console.Write(" - {0}", num);
respuesta = multiplo5(num);
if (respuesta) Console.WriteLine(" Es múltiplo de 5");
else Console.WriteLine(" No es múltiplo de 5");
num++;
}
}
public static bool multiplo5 (int n)
{
if((n % 5) !=0) return false;
else return true;
}
}
5
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.5) Programa que muestra el día que será mañana. Ex: 31/12/08 -> 01/01/09
#include <iostream>
using namespace std;
int funcion_divisor(int numero, int divisor);
void main()
{
int d,max,m,a,resto;
printf("Introduce el dia: ");
scanf("%d",&d);
printf("\nIntroduce el mes: ");
scanf("%d",&m);
printf("\Introduce el anyo: ");
scanf("%d",&a);
printf("\nHoy es dia %d de %d del %d",d,m,a);
if (m==4 || m==6 || m==9 || m==11) max=30;
if (m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) max=31;
if (m==2)
{
resto = funcion_divisor(a,4);
if (resto==0) max=29;
else max=28;
}
d++;
if (d>max)
{
d=1;
m++;
if (m>12) { m=1; a++; }
}
printf("\n\ny mañana será %d de %d del %d",d,m,a);
printf("\n\n");
}
int funcion_divisor(int numero, int divisor)
{
int resto = numero % divisor;
return (resto);
}
6
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.6) Programa para calcular Potencias, Tensiones e Intensidades.
P=V*I
label inicio
cls
Print "Bienvenid@ al programa" : ?:?
Print "¿Qué quieres calcular?"
input "1- Poténcia , 2-Intensidad 3-Tensión "; opcion
if opcion ="1" then goto Calculo_Potencia
if opcion ="2" then goto Calculo_Intensidad
end
label Calculo_Potencia
print : print "Cálculo de poténcia "
input "Introduce Tensión: ";tension
input "Introduce Intensidad¨: ";intensidad
print " - "
potencia = tension * intensidad
print "La poténcia es de ";potencia
input "Pulsa (s) para volver a calcular"; otra
if otra ="s" then goto inicio
end
label Calculo_Intensidad
print : print "Cálculo de Intensidad "
input "Introduce Potencia: ";potencia
input "Introduce Tensión: ";tension
print " - "
Intensidad = potencia / tension
print "La Intensidad es de ";intensidad ;: ? " ampers"
input "Pulsa (s) para volver a calcular"; otra
if otra ="s" then goto inicio
end
7
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
VERSIO C#
using System;
using System.Collections.Generic;
using System.Text;
class Ejercicio_2_6
{
static void Main(string[] args)
{
string n_resultado="";
double resultado=0;
string teclado ="null";
while (teclado != "4")
{
Console.WriteLine("-");
Console.WriteLine("1-Poténcia
teclado = Console.ReadLine();
2-Tensión
3-Intensidad
4-Sortir");
switch (teclado)
{
case "1":
n_resultado = "Potencia";
resultado = fcalcul(n_resultado,"Tension","Intensitat"); break;
case "2":
n_resultado = "Tension";
resultado = fcalcul(n_resultado, "Potencia", "Intens."); break;
case "3":
n_resultado = "Intensidad";
resultado = fcalcul(n_resultado, "Potencia", "Tension"); break;
case "4":
break;
default: Console.WriteLine("Tecla equivocada") ; break;
}
Console.WriteLine("El resultado {0} es {1}", n_resultado, resultado);
}
} // fi Main
public static double fcalcul(string n_calculo, string nom1, string nom2)
{
Console.WriteLine("Introduce {0}",nom1);
string temp1 = Console.ReadLine();
int var1 = Int32.Parse(temp1);
Console.WriteLine("Introduce {0}", nom2);
string temp2 = Console.ReadLine();
int var2 = Int32.Parse(temp2);
if (n_calculo=="Potencia") return (var1 * var2);
else return (var1 / var2);
}
}
//fi class Exercici6
8
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.7) Área Triangulo – Variables locales/”globales”
using System;
using System.Collections.Generic;
using System.Text;
namespace Ejercicio_2_7
{
class ProgramTriangulo
{
static int conta =0; //”pseudo-global”
static void Main(string[] args)
{
double varBase,varAltura,resultado,valor;
do
{
Console.WriteLine ("PROGRAMA CALCULO TRIANGULO");
Console.WriteLine ("Introduce base");
varBase = Double.Parse(Console.ReadLine());
Console.WriteLine ("Introduce altura");
varAltura = Double.Parse(Console.ReadLine());
resultado = calcula_area (varBase,varAltura);
Console.WriteLine("El resultado es {0}", resultado);
Console.WriteLine("Para continuar calculos, pulsa
valor = Double.Parse(Console.ReadLine());
1");
} while (valor == 1);
}//fin Main
public static double calcula_area (double x, double y)
{
ProgramTriangulo.conta ++;
Console.WriteLine("Número veces calculada área {0}",conta);
double area = (x * y)/2;
return (area);
}
}// fin Class
}
9
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.8) Cálculo raíz cuadrada.
Proyecto: Exercici28
Archivo : Raizcuadrada.cs
namespace Exercici28
{
class Raizcuadrada
{
static void Main(string[] args)
{
double numero = Double.Parse(args[0]);
if (numero >= 0)
{
double x = calcul(ref numero);
Console.WriteLine("La raiz es {0}", x);
Console.WriteLine("y su cuadrado es {0}", numero);
}
else
{
Console.WriteLine("No se puede, número negativo.");
}
}
static public double calcul(ref double numero)
{
double resultado = System.Math.Sqrt(numero);
numero = numero * numero;
return (resultado);
}
}
}
EJECUTAR EN EL SISTEMA OPERATIVO MS_DOS:
csc Raizcuadrada.cs
Raizcuadrada 9
10
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.9) Calculadora
using System;
using System.Collections.Generic;
using System.Text;
namespace Calculadora
{
class Program
{
public static double resultado;
static void Main(string[] args)
{
double operador1, operador2;
int tecla=1; string repetir;
do
{
Console.WriteLine("Calculadora: "); Console.WriteLine();
Console.WriteLine("1- Suma");
Console.WriteLine("2- Multiplicacion");
Console.WriteLine("3- Raiz quadrada");
Console.WriteLine("4- Factorial");
bool repetir_try = true;
while (repetir_try == true)
{
try
{
Console.WriteLine("\nIntroducir (1-4):");
tecla = int.Parse(Console.ReadLine());
if (tecla>1 || tecla <=4)
repetir_try = false;
}
catch (FormatException)
{
Console.Clear();
Console.WriteLine("Sólo números.");
repetir_try = true;
}
}
if ( tecla == 3 || tecla == 4 )
// un operador
{
Console.WriteLine("\nIntroducir número a calcular:");
operador1 = Double.Parse(Console.ReadLine());
if (tecla
resultado
else if (
resultado
}
else
== 3 )
= raizcuadrada(operador1);
tecla == 4 )
= factorial(operador1);
// funciones más d’un operador
{
Console.WriteLine("\nIntroducir primer operador:");
11
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
operador1 = Double.Parse(Console.ReadLine());
Console.WriteLine("\nIntroducir segundo operador:");
operador2 = Double.Parse(Console.ReadLine());
if ( tecla == 1 ) resultado = suma (operador1,operador2 );
else if( tecla == 2)resultado = multiplica(operador1,operador2 );
}
Console.WriteLine("\nEl resultado es: {0}", resultado);
Console.WriteLine("\n Pulsa cualquier tecla. 'f' para acabar");
repetir = Console.ReadLine();
}while ( repetir != "f" );
}//fin main
//Funciones
public static double suma (double operador1 , double operador2)
{
return (operador1 + operador2);
}
public static double multiplica (double operador1 , double operador2)
{
return (operador1 * operador2);
}
public static double raizcuadrada (double operador1)
{
return (System.Math.Sqrt(operador1));
}
public static double factorial (double operador1)
{
double calcul =1;
for (;operador1>=1;operador1--)
{
calcul = calcul * operador1;
}
return (calcul);
}
}
//fi Class
}
12
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
2.10) Una empresa nos ha encargado un programa para calcular las nóminas de los trabajadores.
El sueldo base semanal sale aplicando la siguiente fórmula: horastrabajo * preciohora +
horesextra*preciohoraextra
El preciohora es una constante=6. El preciohoraextra depende de las h.extra hechas: si son menos de
10h extras semanales, el precio es un 50% mayor que el preciohora (* 1,5). Si se hacen entre 10 y 20h
extra, el precio es un 40% mayor. Si se hacen más de 20h, el precio es un 20% mayor.
Si el trabajador es de categoría 3, el preciohora es el constante.
Si es de categoría 2; el preciohora es un 25% mayor y si es de categoría 1 es un 45% más....
Un vez calculado el sueldo base, se ha de restar el impuesto IRPF (20%) para tener el sueldo neto.
Si el trabajador es soltero y el sueldo base es menor de 1000€, el IRPF es del 18%, si el sueldo es mayor
de 1000€, es del 20%.
Si el trabajador está casado con un sueldo menor de 1000€, el IRPF es del 15%, si el sueldo es mayor que
1000€, el IRPF es 20%.
class Nominas
{
const double IRPF=0.20;
static double preciohtrabajo=6;
static void Main(string[] args)
{
int departamento,estadocivil;
double hextra,htrabajo,f_IRPF,trabajador=1;
double sueldobase,sueldoneto,factorhextra,fdepartamento,preciohextra;
string opcion="s";
while (opcion == "s")
{
do
{
// try /catch a ReadLine
Console.WriteLine("Introduce departamento (1-5)");
departamento = int.Parse(Console.ReadLine());
} while (departamento <0 || departamento >5);
fdepartamento = Calcula_fdepartamento(departamento);
do
{
Console.WriteLine("Introduce horas semanales (0-40)");
htrabajo = Double.Parse(Console.ReadLine());
} while (htrabajo < 0 || htrabajo > 40);
do
{
Console.WriteLine("Introduce horas extra semanales (0-40)");
hextra = Double.Parse(Console.ReadLine());
} while (hextra <0 || hextra >40);
13
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
//Calculamos el factor hora extra y el precio de la hora extra
factorhextra = Calcula_fhextra(hextra);
preciohextra = preciohtrabajo * factorhextra;
do
{
Console.WriteLine("Intro. estado civil (1 soltero -2 casado)");
estadocivil = int.Parse(Console.ReadLine());
} while (estadocivil != 1 && estadocivil != 2);
sueldobase =
Calcula_sueldobase(htrabajo,fdepartamento,hextra,preciohextra);
f_IRPF = Calcula_IRPF(sueldobase,estadocivil);
sueldoneto =
sueldobase - (sueldobase*IRPF);
Console.WriteLine("Trabajador {0} sueldo {1} y neto de {2}",
trabajador,sueldobase,sueldoneto);
Console.WriteLine("¿Quiere continuar calculando nóminas? (s/n)");
opcion = Console.ReadLine();
}
Console.WriteLine("Programa finalitzat");
}
//funcions
static double Calcula_fdepartamento(int x)
{
switch (x)
{
case 1: return 1;
case 2: return 1.25;
case 3: return 1.35;
case 4: return 1.45;
case 5: return 1.55;
default:
return 1;
}
}
static double Calcula_fhextra(double phoresextra)
{
if (phoresextra>20) return 1.2;
else if (phoresextra>10) return 1.4;
else return 1.5;
}
14
Ejercicios de programación resueltos con C#.
Capítulo 2: Bucles y Funciones
static double Calcula_sueldobase(double htrabajo,double fdep,double
hextra,double preciohextra)
{
return ((htrabajo*preciohtrabajo*fdep)+(hextra*preciohextra));
}
static double Calcula_IRPF(double psueldo,int pestatcivil)
{
double resultado;
switch (pestatcivil)
{
case 1:
if (psueldo>=1000)
{
resultado = 0.9*IRPF;
return resultado;
}
else return IRPF;
case 2:
if (psueldo>=1000) return (0.75 * IRPF);
else return IRPF;
default:
return IRPF;
}
}
}// fin class
15
Descargar