Programación General > C/C++
CALENDARIO EN C
Alehtokita:
Alguien me puede ayudar a realizar un ejercicio en lenguaje C que realice un programa con FUNCIONES que imprima cualquier mes a partir de enero de 1900. Debe tener en cuenta lo siguiente:
-Recibir el año y el mes que se desea imprimir
-Validar el año y el mes
-imprimir el mes teniendo en cuenta:
-Mostrar el nombre del mes
- Determinar que día es el primero del mes
- Dar el respectivo margen para el primer día del mes
:ayuda:
Manzanit0:
Éste código lo tenía guardado de cuando estudiaba... presenta cuántos días quedan para que acabe el año, puestos una fecha:
--- Código: ---#include <stdio.h>
#include <stdlib.h>
int main ()
{
int dia, mes, anno;
int i;
int r = 0;
int dias_mes[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
error:printf("Introduzca un dia, mes y anno: ");
scanf("%d %d %d", &dia, &mes, &anno);
if(dia>31 || dia<1)
{
printf("\nEl dia introducido no es valido, introduzca otra fecha\n");
goto error;
}
if(mes>12 || mes <1)
{
printf("\nEl mes introducido no es valido, introduzca otra fecha\n");
goto error;
}
if(anno%4==0 || anno%4==0 && anno%100==0)
dias_mes[2] = 29;
else
dias_mes[2] = 28;
for(i = mes; i<13; i++)
{
r += dias_mes[i];
}
printf("\n\nQuedan %d dias para que acabe el anno.\n\n", r);
system("pause");
}
--- Fin del código ---
De todos modos, para lo que buscas plantéate un pseudocódigo tal que así:
1) Pide la fecha en cuestión
2) Analizar si el año es bisiesto o no
3) SI es bisiesto, tener en cuenta que febrero tiene 29 días, y disponerlo
4) EN CASO CONTRARIO, tener en cuenta que febrero tiene 28 días
Eso, en mi opinión, serían los cálculos más dificiles. El resto sería imprimir la información. Es decir, si has introducido la variable mes como 02, pues que imprima febrero.
En cuanto a lo de saber si el primer día es lunes o demás... ahora mismo no sé como lo puedes saber, pero mira en internet y seguro que hay algún algoritmo que sigan los días de la semana jajaja
¿A qué te refieres con "Dar el respectivo margen para el primer día del mes"?
:suerte:
droezva:
Hola que tal,
checate este codigo que tenia, lo modifique un poco.
Utilizo el Algoritmo DoomsDay para obtener el dia de una fecha dada, con eso se puede saber que dia de la semana es el primer dia del mes que se quiere ver.
se validan el mes y año y se imprimen los días del mes.
bueno ahi dentro del codigo he colocado algunas explicaciones
No dudes en preguntar, Saludos :suerte:
--- Código: C ---#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h> char *meses[] = {"Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"}; int agnoBisiesto(int agno){ return !(agno%4) && (agno%100 || !(agno%400));} int diaFecha(int dia, int mes, int agno){ //Algoritmo de Doomsday int modA[2][12]= {{0,3,3,6,1,4,6,2,5,0,3,5},{0,3,4,0,2,5,0,3,6,1,4,6}}; agno--; return ( (agno%7) + ((agno/4)-(3*(agno/100+1))/4) + modA[agnoBisiesto(agno+1)][mes-1] + dia%7 )%7;} int diaFinal(int mes, int agno){ int dias[] = {31,28 + agnoBisiesto(agno),31,30,31,30,31,31,30,31,30,31}; return dias[mes-1];} void mostrarMes(int mes, int agno){ clrscr(); int diaSem = diaFecha(1,mes, agno); int ultimoDia = diaFinal(mes, agno); int x; printf("%s de %d\n",meses[mes-1],agno); printf("Dom\tLun\tMar\tMie\tJue\tVie\tSab\n"); for(x = 0; x < diaSem; x++) //Imprime la tabulacion de los dias vacios inciales del Mes printf("\t"); for(x = 1; x <= ultimoDia; x++) { printf("%d\t",x); if( !( ++diaSem % 7 ) )//si el modulo de diaSem despues de incrementar es 0 inicia en una nuea linea printf("\n"); } //Por si te gusta reducir el codido :D //for(x = 0; x < diaSem; printf("\t"), x++); //for(x = 1; x <= ultimoDia; printf("%d%s",x++, (++diaSem % 7 ) ? "\t":"\n" ) );}/*Funcion para evitar errores al ingresar un valor que no se un numeroSe lee primero como cadena y despues se convierte a numero entero -> atoisi el numero es valido se convertira correctamente sino sera un cero*/int leerNum(){ char valorTexto[4]; scanf("%4s",valorTexto); return atoi(valorTexto);} void leerMesAgno(int *mes, int *agno){ printf("Ingrese el mes y agno para visualizarlo\n"); do{ printf("Mes(1-12): "); *mes = leerNum(); if (*mes < 1 || *mes > 12) printf("Ingresa un mes valido\n"); else break; }while(1); printf("Mes Seleccionado: %s(%d)\n",meses[*mes-1],*mes); do{ printf("Agno(>1900): "); *agno = leerNum(); if (*agno < 1900) printf("Ingresa un Agno valido\n"); else break; }while(1);} void main(){ int mes, agno, resp; do{ clrscr(); leerMesAgno(&mes, &agno); mostrarMes(mes, agno); printf("\nDesea ver otro mes (s/n): "); resp = tolower(getch()); }while(resp!='n');}
Alehtokita:
:gracias:! pero ahora al profesor se le ocurrió la "grandiosa idea" de modificarlo para que reciba los parámetros de la línea de ordenes y no tengo ni idea de como hacerlo.. :ayuda:
por cierto, mi compilador es code::blocks :S
Manzanit0:
Para eso tienes que tener en cuenta que en la función main tienes que poner:
--- Código: ---int main(int argc, char *argv[])
--- Fin del código ---
dónde argc es un entero que indica el número de argumentos pasados a través de la línea de órdenes (incluyendo el nombre del programa) y argv[] es una matriz de punteros a cadenas de caracteres. Cada elemento de argv apunta a un argumento, de manera que argv[0] contiene el nombre del programa, argv[1] el primer argumento de la linea de órdenes, argv[2] el segundo, etc.
También tienes que tener en cuenta que en este caso la función main retorna un int que expresa o no el éxito de la ejecución.
Ahora, puedes operar, por ejemplo:
--- Código: ---main(int argc, char **argv) {
switch(argv[1]) {
case "-v": ....
}
}
--- Fin del código ---
o
--- Código: ---main(int argc, char **argv) {
if(argv[1]=="-v") ....
}
--- Fin del código ---
Aquí te dejo un ejemplo completo:
--- Código: ---#include <stdio.h>
#include <string.h>
void main(int argc,char *argv[],char *ent[])
{
if(!strcmp(argv[1],"/?"))
{
printf("pro [/ARG]\n");
printf("[ARG]\n");
printf("/? : Ayuda\n");
printf("/1 : Imprime HOLA\n");
}
if(!strcmp(argv[1],"/1"))
{
printf("HOLA\n");
}
}
--- Fin del código ---
Si te sirve, me alegro, si no entendiste muy bien, pregunta. Sin embargo te recomiendo una cosa: busca un buen manual de programación y síguelo página a página. Es la manera con que más se aprende. Yo por ejemplo cuando estudié en 1º programación seguí el libro de Ceballos. Viene bien explicado y con muchos ejemplos. Aquí tienes una vista previa:
desde su página pero seguro que en amazon o en una papelería lo puedes encargar :)
Navegación
[#] Página Siguiente
Ir a la versión completa