Programación General > C/C++
CALENDARIO EN C
Alehtokita:
Oye lo que pasa es que el programa que me diste no me compila en Windows... :S
droezva:
Bueno realmente es sencillo el utilizar los parametros para main
en teoria cuando compilar tu programa se crea un archivo ejecutable *.EXE en windows ;D
entonces desde consola o tambien conocido como simbolo de sistema puedes ejecutar es programa que se creo cuando compilastes y ejecutastes tu programa.
bueno digamos que estamos en consola nosotros podemos escribir lo siguiente:
c:\FECHA.EXE
o
c:\FECHA
Entonces se ejecutara nuestro programa, ahora si nosotros queremos pasarle algunos datos iniciales a nuestro programa como en este caso que le podamos pasar un numero que sea el mes y otro que sea el año lo tendriamos que hacer asi:
c:\FECHA 12 2012
o
c:\FECHA.EXE 12 2012
pero para que en nuestro programa entienda que pasamos estos valores tendriamos que colocar ciertos parametros en la funcion main()
asi:
--- Código: C ---void main(int argc,char *argv[],char *ent[]){}
Realmente los nombre pueden ser a tu gusto jejeje!! podrian ser asi:
--- Código: C ---void main(int numeroDeParametro,char *valoresDeParametro[],char *variableEntorno[]){}
ahora te explico que pasa en main cuando le colocas estos parametros y cuando pasas valores cuando ejecutas tu programa
cuando llamas tu programa a ejecutar pasas los siguiente valores de esta forma
c:\FECHA 12 2012
En main pasa lo siguiente
en argv se asignan los valores que has pasado cuando llamastes a tu programa
argv[0] tendra el valor de FECHA (siempre tendra el nombre del programa)
argv[1] tendra el valor de 12
argv[2] tendra el valor de 2012
y en la variable argc tendra el valore de 3 si pasaras mas valores el valor de argc corresponderia siempre a los valores que pasastes + 1 que es el nombre del programa
--- Código: C ---void main(int argc,char *argv[]){// asi podemos hacer uso de estos valores int mes = atoi(argv[1]); int agno = atoi(argv[2]);}
bueno espero que te sirva la explicación y bueno se me ha acabado el tiempo
pero te dejo el programa modificado 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 es numero es valido se convertira correctamente sino sera un cero*/int leerNum(){ char valorTexto[4]; scanf("%4s",valorTexto); return atoi(valorTexto);}int mesValido(int mes){ int valido = !(mes < 1 || mes > 12); if (!valido) printf("El %d no es un mes valido (1-12)\n",mes); return valido;} int agnoValido(int agno){ int valido = !(agno < 1900); if (!valido) printf("El %d no es un agno valido (>=1900)\n",agno); return valido;} void leerMesAgno(int *mes, int *agno){ printf("Ingrese el mes y agno para visualizarlo\n"); do{ printf("Mes(1-12): "); *mes = leerNum(); if (mesValido(*mes)) break; }while(1); printf("Mes Seleccionado: %s(%d)\n",meses[*mes-1],*mes); do{ printf("Agno(>=1900): "); *agno = leerNum(); if (agnoValido(*agno)) break; }while(1);} int continuar(){ printf("\nDesea ver otro mes (s/n): "); return tolower(getch())!='n';} int main(int argc, char *arg[]){ int mes, agno, resp=1; if(argc==3) { mes = atoi(arg[1]); agno = atoi(arg[2]); clrscr(); printf("Mes: %d[%s] Agno: %d[%s]\n", mes,arg[1],agno,arg[2]); if( (mesValido(mes) && agnoValido(agno)) ) mostrarMes(mes, agno); else printf("Se esperaban 2 parametros: Mes(1-12) y Agno(>=1900)\nEn el Formato(mm yyyy)"); resp = continuar(); } while(resp) { clrscr(); leerMesAgno(&mes, &agno); mostrarMes(mes, agno); resp = continuar(); }}
Navegación
[*] Página Anterior
Ir a la versión completa