Programación General > C/C++

 CALENDARIO EN C

<< < (3/3)

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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa