示例#1
0
int main(int argc, char *argv[]) {

    FILE *fichero;
    char sopa[NMAX][NMAX];
    int opcion;
    char nombre_de_fichero[0x20];
    srand(time(NULL));
    int sopa_cargada = 0; // 0 equivale a falso, cualquier cosa != 0 es verdadero

    do {
        switch(opcion = leer_menu()) {
        case crear:
            cabecera("Nueva Sopa");
            rellenar(sopa);
            sopa_cargada = 1;
            pintar(sopa);
            break;
        case abrir:
            imprimir_directorio("./");
            printf("Elige un fichero sopa: ");
            scanf(" %s", nombre_de_fichero);
            fichero = fopen(nombre_de_fichero, "r");
            leer(fichero, sopa);
            sopa_cargada = 1;
            fclose(fichero);
            break;
        case ver:
            if (sopa_cargada) {
                cabecera("Sopa Activa");
                pintar(sopa);
            } else
                inform("De momento no hay ninguna sopa cargada.");
            break;
        case guardar:
            if (sopa_cargada) {
                imprimir_directorio("./");
                printf("Elige un nombre para guardar la sopa: ");
                scanf(" %s", nombre_de_fichero);
                fichero = fopen(nombre_de_fichero, "w");
                escribir(fichero, sopa);
                fclose(fichero);
                inform("Fichero Guardado.");
            } else
                inform("De momento no hay ninguna sopa cargada.");
            break;
        }
    } while(opcion != salir);

    return EXIT_SUCCESS;
}
示例#2
0
void trimestre(int ano,int mesMin,int mesMax){
	cabecera(ano,mesMin,mesMax);
	semana(1,1,7,ano,mesMin,mesMax);
	semana(2,8,14,ano,mesMin,mesMax);
	semana(3,15,21,ano,mesMin,mesMax);
	semana(4,22,28,ano,mesMin,mesMax);
	semana(5,29,35,ano,mesMin,mesMax);
	semana(6,36,42,ano,mesMin,mesMax);
}
int menu(void){
    system("clear");
    cabecera();
    char resp;
    printf( "\n\tSeleccione una opcion del menu.\n"
           "\n\t\ta) Calcular el area de cualquier poligono a"
           "\n\t\t partir de las coordenadas de los vertices."
           "\n\t\tb) Calcular area de un poligono regular."
           "\n\t\tc) Calcular area de un poligono cualquiera,"
           "\n\t\t introduciendo lados y angulos."
           "\n\n\t\ts) Salir"
           "\n\n\n\t\t\tRespuesta: ");
           scanf("%c", &resp);
           if(resp>=90)resp=resp-32;
           return(resp);
}
示例#4
0
void imprimir_directorio(const char *nombre_directorio) {
    DIR *dp;
    struct dirent *ep;

    cabecera("Contenidos Del Directorio");

    dp = opendir (nombre_directorio);
    if (dp != NULL)
    {
        while (ep = readdir (dp))
            if (ep->d_name[0] != '.') {
                printf("\t");
                puts (ep->d_name);
            }
        (void) closedir (dp);
    }
    else
        perror ("Couldn't open the directory");
    printf("\n");
}
int main(int argc, char **argv)
{
    struct vertice *poligono, *aux;
    char resp, menu_resp;
    double x=0, y=0;
    double peri=0, lado, angulo;
    int numero=0;
    int regular=1;
    int i, mos=1;
    //int vertices;
    do{
        numero=0;
        do{
            menu_resp=menu();
            }while((menu_resp<'A')||(menu_resp>'Z'));
        while(getchar()!='\n');
        switch(menu_resp){
            case 'A':
            aux=(struct vertice*) malloc(sizeof(struct vertice));
            poligono=aux;
            do{
                system("clear");
                cabecera();
                printf("\n\tPor favor, introduzca las coordenadas de los vértices del "
                       "polí-\n\tgono en sentido horario.\n");
                       regular=1;
                    for(i=0;i<numero;i++){
                        if(i%4==0)printf("\n");
                        printf("\t(%.2f, %.2f) ", poligono->x, poligono->y);
                        poligono=poligono->siguiente;
                        }
                        printf("\n\n");
                        if(resp=='S'){
                            aux->siguiente=(struct vertice*) malloc(sizeof(struct vertice));
                            aux=aux->siguiente;
                            }
                            numero++;
                        printf("\tVértice %d\n", numero);
                        printf("\tx: ");
                        scanf("%lf", &(aux->x));
                    while(getchar()!='\n');
                    printf("\ty: ");
                    scanf("%lf", &(aux->y));
                    while(getchar()!='\n');
                        aux->siguiente=poligono;
                        do{
                            if(numero>=3){
                                printf("\n\t\t¿Desea introducir otro vértice?(S/N)");
                                resp=getchar();
                            while(getchar()!='\n');
                                if(resp>=90)resp=resp-32;
                                }else
                                resp='S';
                            }while(resp!='N'&&resp!='S');
                        }while(resp=='S');
                    regular = lados_angulos(poligono, numero);
                    mos=1; break;
                    case 'B':
                        aux=(struct vertice*) malloc(sizeof(struct vertice));
                        poligono=aux;
                        system("clear");
                        cabecera();
                        printf( "\n\tPor favor, introduzca el número de vértices del "
                               "polígono.\n\n");
                               do{
                                   printf( "\tNúmero: ");
                                   scanf("%d", &numero);
                                   while(getchar()!='\n');
                                   }
                                   while(numero<3);
                                   angulo = 180 -(360/numero);
                                   printf( "\n\tPor favor, introduzca la longitud de los lados del "
                                          "polígono.\n\n");
                                          do{
                                              printf("\tLongitud: ");
                                              scanf("%lf", &lado);
                                              while(getchar()!='\n');
                                              }while(lado<=0);
                                            printf("\n\tPor favor, introduzca las coordenadas del primer vertice"
                                                   " del\n\tpolígono.\n");
                                                   printf("\tx: ");
                                                   scanf("%lf", &(aux->x));
                                                   while(getchar()!='\n');
                                                   printf("\ty: ");
                                                   scanf("%lf", &(aux->y));
                                                   while(getchar()!='\n');
                                                   aux->angulo=angulo;
                                                   aux->arista_poste=lado;
                                                for(i=0;i<numero-1;i++){
                                                    aux->siguiente=(struct vertice*) malloc(sizeof(struct vertice));
                                                    aux->siguiente->x=aux->x+(cos(((i*(PI*2/numero))))*aux->arista_poste);
                                                    aux->siguiente->y=aux->y+(sin(((i*(PI*2/numero))))*aux->arista_poste);
                                                    aux=aux->siguiente;
                                                    aux->angulo=angulo;
                                                    aux->arista_poste=lado;
                                                }
                                                aux->siguiente=poligono;
                                                mos=1; break;
                    case 'C':
                    aux=(struct vertice*) malloc(sizeof(struct vertice));
                    poligono=aux;
                    numero=0;
                    system("clear");
                    cabecera();
                    printf("\n\tPor favor, introduzca las coordenadas del primer vertice"
                           " del\n\tpolígono.\n");
                           printf("\tx: ");
                           scanf("%lf", &x);
                           while(getchar()!='\n');
                           printf("\ty: ");
                           scanf("%lf", &y);
                           while(getchar()!='\n');
                           do{
                               system("cls");
                               cabecera();
                               for(i=0;i<numero;i++){
                                   if(i%4==0)printf("\n");
                                   printf("\t(%.2G, %.2G) ", poligono->x, poligono->y);
                                   poligono=poligono->siguiente;
                                }
                                if(numero>=1){
                                    aux->siguiente=(struct vertice*) malloc(sizeof(struct vertice));
                                    aux=aux->siguiente;
                                    }
                                    printf( "\n\tPor favor, introduzca la amplitud del %dº ángulo del "
                                           "polígono.\n", numero+1);
                                    printf( "\n\tAmplitud (en grados): ");
                                    scanf("%lf", &aux->angulo);
                                    while(getchar()!='\n');
                                    printf( "\n\tPor favor, introduzca la longitud del %dº lado del "
                                           "polígono.\n",numero+1);
                                           printf( "\n\tLongitud: ");
                                           scanf("%lf", &aux->arista_poste);
                                        while(getchar()!='\n');
                                        aux->x=x;
                                        aux->y=y;

                                        x=aux->x+(cos(numero*(PI*2/(360/(180-aux->angulo))))*aux->arista_poste);
                                        y=aux->y+(sin(numero*(PI*2/(360/(180-aux->angulo))))*aux->arista_poste);
                                        aux->siguiente=poligono;
                                        numero++;
                                        }
                                        while(((numero<3))||!(((redondea(x,6))==redondea(poligono->x,6))&&((redondea(y,6))==redondea(poligono->y,6))));
                                        mos=1; break;
                    case 'S': return 0;
                    default: mos=0; break;
                    }
                    if(mos){
                        system("clear");
                        cabecera();
                        printf("\n\t\t\t\tResultados:\n\n");
                        printf("\tVértice A \tÁngulo\t\tVértice B\tÁngulo\t\tDist");
                    for(i=0;i<numero;i++){
                        if(i%1==0)printf("\n");
                        printf("%d\t(%.2f, %.2f) <) %.2fº", i+1, poligono->x, poligono->y, poligono->angulo);
                        printf(" \t(%.2f, %.2f) <) %.2fº", poligono->siguiente->x, poligono->siguiente->y, poligono->siguiente->angulo);
                        printf(" \t|%.2f|", poligono->arista_poste);
                        poligono=poligono->siguiente;
                        }
//Reconocemos de que polígono se trata
//numero=45;
nombre_poligono(numero, regular);

//Hallamos el area
double area=0;
x=y=0;
for(i=0;i<numero;i++){
    x = x + (poligono->x*(poligono->siguiente)->y);
    y = y + (poligono->y*(poligono->siguiente)->x);
    poligono=poligono->siguiente;
}
area=fabsf((x-y))/2;

//Calculamos el perímetro
peri=0;
double x_max, x_min, y_max, y_min;
x_max=x_min=poligono->x;
y_max=y_min=poligono->y;
for(i=0;i<numero;i++){
    x_max=mayorque(poligono->x, x_max);
    x_min=menorque(poligono->x, x_min);
    y_max=mayorque(poligono->y, y_max);
    y_min=menorque(poligono->y, y_min);
    peri=peri+poligono->arista_poste;
    poligono=poligono->siguiente;
    }
//area=fabsf(area);
printf("\tÁrea: %G u²\n", area);
printf("\tPerímetro: %G u\n", peri);
mostrar_poligono(poligono, numero, x_max, y_max, x_min, y_min);
//Liberamos la memoria dinámica
aux=poligono->siguiente;
poligono->siguiente=NULL;
poligono=aux;
for(i=0;i<numero;i++){
    aux=poligono;
    poligono=poligono->siguiente;
    free(aux);
}
}else
    printf("\n\n\t\tOpcion seleccionada incorrecta.");
    printf("\n\n\t\tPresiona intro para continuar...");
    while(getchar()!='\n');
    }
    while(1<2);
return 0;
}