No solo por su utilidad a la hora de crear aplicaciones, sino también como foro de debate a la hora de plantear ejercicios y su debida resolución, para el entendimiento del lenguaje.
Para programa en C es necesario tener conocimiento sobre la sintaxis de este lenguaje , pero esta característica no es lo único necesario.
1º Necesitaremos un Compilador y un Linkeador, cualidades que emplean diferentes programas en una sola aplicación , ademas ... muchas disponibles gratuitamente y son validas para lenguaje C y C++.
Os recomiendo este Dev-C++. cuya pagina web es http://www.bloodshed.net/
2º Un libro sobre programación C, o un manual en pdf /ebook.
Os recomiendo este: http://www.sisoft.ucm.es/Manuales/Lenguaje_C.pdf
Que distribuye los servicios informaticos de la UCM
(Universidad Complutense de Madrid)
*Yo utilizo el libro de Luis Joyanes
"C, algoritmos ,programación y estructuras de datos"de la editorial SCHAUM (muy recomendado).
3º Lápiz , Papel y paciencia.
Ejercicio: (Calcular edad):
Escribir un programa que recibiendo como entrada 2 datos de fecha en formato dia (1 a 31) , mes (1 a 12) , y año (entero de cuatro dígitos) siendo fecha de nacimiento y fecha actual dichos datos ,calcule la edad en formato "Años" , siendo el calculo para una edad adulta, y en "Meses / Días" si tuviera menos de 1 año ,en caso de calcular la edad de un bebé.
==========================================================
Propongo el mio, como ejercicio resuelto:
#include (stdio.h)
#include (stdlib.h)
#include (conio2.h)
//crear tabla datos "fecha"
typedef struct {
int dia;
int mes;
int anyo;
}fecha;
int main(int argc, char *argv[])
{
//variables
int Edad;
int error=0;
fecha Fnacimiento;
fecha Factual;
fecha Fedad;
//pantalla presentacion
//ESTRUCTURA VISIBLE - PEDIR FECHAS
clrscr ();
gotoxy (2,2);
printf ("Introducir - Fecha de Nacimiento :");
gotoxy (2,4);
printf ("Introducir - Fecha Actual : \n\n\n\n\n\n");
//Pedir fecha de nacimiento en Fecha de Nacimiento
gotoxy (37,2);
scanf (" %d" ,&Fnacimiento.dia);
gotoxy (39,2);
printf ("/");
gotoxy (40,2);
scanf (" %d" ,&Fnacimiento.mes);
gotoxy (42,2);
printf ("/");
gotoxy (43,2);
scanf (" %d" ,&Fnacimiento.anyo);
//comprobar que este sea correcta la introduccion
if (Fnacimiento.mes<1 || Fnacimiento.mes>12)
error=1;
else if (Fnacimiento.dia<1 || Fnacimiento.dia>31)
error=1;
else
//comprobar dia en mes de 30 dias
switch (Fnacimiento.mes) {
case 4:
case 6:
case 9:
case 11:
if (Fnacimiento.dia>30)
error=1;
break;
//comprobar Febrero
case 2:
if (Fnacimiento.dia>28)
error=1;
break;
}
//Pedir fecha de actual en Fecha de Actual
gotoxy (30,4);
scanf (" %d" ,&Factual.dia);
gotoxy (32,4);
printf ("/");
gotoxy (33,4);
scanf (" %d" ,&Factual.mes);
gotoxy (35,4);
printf ("/");
gotoxy (36,4);
scanf (" %d" ,&Factual.anyo);
//comprobar que este sea correcta la introduccion
if (Factual.mes<1 || Factual.mes>12)
error=1;
else if (Factual.dia<1 || Factual.dia>31)
error=1;
else
//comprobar dia en mes de 30 dias
switch (Factual.mes) {
case 4:
case 6:
case 9:
case 11:
if (Factual.dia>30)
error=1;
break;
//comprobar Febrero
case 2:
if (Factual.dia>28)
error=1;
break;
}
//FIN ESTRUCTURA VISIBLE PEDIR FECHAS
Fedad.dia=Factual.dia-Fnacimiento.dia;
Fedad.mes=Factual.mes-Fnacimiento.mes;
Fedad.anyo=Factual.anyo-Fnacimiento.anyo;
//si es un Bebe ...años menor1
if (Factual.anyo-Fnacimiento.anyo==0) {
if (Factual.dia-Fnacimiento.dia<0);
switch (Fnacimiento.mes){
case '4':
case '6':
case '9':
case '11':
Fedad.mes--,Fedad.dia=Fedad.dia+30;
break;
case '2':
Fedad.mes--,Fedad.dia=Fedad.dia+28;
break;
}
(Fedad.mes--,(Fedad.dia=Fedad.dia+31));
printf ("\n La edad es ...: %d Meses / %d Dias \n" ,Fedad.mes,Fedad.dia);
}else
printf ("\n La edad es ...: %d Anyos \n ",Factual.anyo-Fnacimiento.anyo);
system("PAUSE");
return 0;
}
6 comentarios:
Para completarlo 100% correctamente , abría que añadirle la función año Bisiesto.
Que se compone de comprobar que el mes de febrero del año que introducimos si es de 28 o 29 dias , dependiendo de si es bisiesto o no.
Un año es bisiesto si es divisible entre 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.
Saludos!
La función Bisiesto quedaría algo asi:
//funcion bisiesto
int Bisiesto(int anyo)
{
int error=0;
if ( ((anyo%4==0) && (anyo%100!=0) || (anyo%400==0) )
error=0;
else
error=1;
return error;
}
Ya le he encontrado algunos "flecos" por definir mejor , para perfeccionarlo y así poder usarlo mas adelante o incluso convertirlo en "libreria" propia, tipo (calculafechas.h)para poder usar mas adelante esta función,"calcular edad".
Uno de esos "flecos" por ejemplo , es que depende de algunas fechas introducidas , si coincide se da el caso que el programa muestra... X años, X meses y 31 dias...
Para corregirlo , debo añadirle la función de:" si resultado dias es "==31", "dias==0 ,meses++".
Saludos!
Me parece muy interesante como este leguaje en duferentes ramas ya sea computacion, electronica y robotica
el primer leguaje que apredi fue c
y me gusto aunque ya es antiguo
Me gusta como este lenguaje.
Hola me podrian ayudar a hacer el mismo ejemplo en dev c++,, incluyendo lo del año bisiesto,, es una nota para pasar el ciclo,, ayudenme por favor!!!! mi correo es williamdk69@yahoo.com
William
Esta todo explicado...apenas hay que copiar y pegar.
Pero si te digo una cosa ... sino desarrollas tu mismo el programa no seras capaz de entenderlo, que es de lo que se trata el estudio de C y C++.
Mas adelante utilizarás herramientas que esta clase de código lo automatiza.
Pero para saber que estas haciendo es necesario conocer el código fuente.
Un saludo
Publicar un comentario