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; }
void calcularPorcentaje() { int i = 0; while (1) { i++; retardo(60); //duerme cada 60 segundos void sacaPorcentaje(t_cpu* cpu) { // 60 instrucciones ejecutadas equivale al 100% //en este if es para una instruccion que empezo antes de los 60s y terminara despues de estos if (cpu->estado == NO_TERMINO_RAFAGA && cpu->terminaInstruccion == NO_TERMINO) { ////esta ejecutando aun una instruccion, pero no ha terminado, entonces la sumo, esta en memoria incrementaInstPorcentaje(cpu); calculaAcumulado(cpu); //// cpu->retardoTotal = (uint8_t) dameDiferencia( //// cpu->inicioInstruccion, cpu->finInstruccion); // printf("acumuladoSegundos %f\n", cpu->acumuladoSegundos); // cpu->porcentajeUso = (uint8_t)(cpu->acumuladoSegundos * 100) // /60; // resetValPorcentaje(cpu); //lo reseteo porque luego cuando termine la instruccion se contara } //ya termino la rafaga // cpu->porcentajeUso = (uint8_t) ((cpu->cantInstEjecutadasPorcentaje * 100) // / instEquivalenteCienPorciento(configuracion->retardo)); pthread_mutex_lock(&mutexCPUPorcentaje); // cpu->porcentajeUso = (cpu->acumuladoSegundos * 100) // /60; // printf("cant Inst ejecutadas %d \n", // cpu->cantInstEjecutadasPorcentaje); // printf("acumuladoSegundos %f\n", cpu->acumuladoSegundos); // cpu->porcentajeUso = (cpu->acumuladoSegundos * 100) / 60; // if (cpu->porcentajeUso > 100) // cpu->porcentajeUso = 93.331133; // tiempo promedio que demora una instruccion double result = cpu->acumuladoSegundos / cpu->cantInstEjecutadasPorcentaje; //cuantas instrucciones se podrian ejecutar en 60 segundos int cienPorcien = redondea(result); // printf("max instrucciones que se pueden ejecutar %d \n", // cienPorcien); double resultadoPor = ((cpu->cantInstEjecutadasPorcentaje * 100) / cienPorcien); double parte_entera; modf(resultadoPor, &parte_entera); cpu->porcentajeUso =(int) parte_entera; // cpu->porcentajeUso = ((cpu->cantInstEjecutadasPorcentaje * 100) // / instEquivalenteCienPorciento(configuracion->retardo)); resetValPorcentaje(cpu); //calculo el inicio de la otra mitad de esta instruccion calculafecha(cpu); pthread_mutex_unlock(&mutexCPUPorcentaje); //muestra y loguea resultado puts( string_from_format( KRED "++++++++++++++++++++++"RESET "++++++++"KRED "+++++++++++++++++++++++++++\n" RESET)); puts(string_from_format("%s,\n", queCPUsoy(cpu))); puts(string_from_format("Para el minuto %d, \n", i)); puts( string_from_format( "el porcentaje de uso es de %i porciento. \n", cpu->porcentajeUso)); puts( string_from_format( KBLU "++++++++++++++++++++++"RESET "+++++++++"KBLU "++++++++++++++++++++++++++\n"RESET)); pthread_mutex_lock(&mutexCPULogs); log_info(logger, identificaCPU(queHiloSoy())); log_info(logger, "se ejecuta el calculo del porcentaje de la cpu"); log_info(logger, string_from_format("para el minuto %i \n", i)); log_info(logger, string_from_format("porcentaje de %i \n", cpu->porcentajeUso)); pthread_mutex_unlock(&mutexCPULogs); } list_iterate(procCPU->listaCPU, (void*) sacaPorcentaje); } }