MirandaWopps

Untitled

Jun 3rd, 2022 (edited)
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5.  
  6. struct medidas {
  7.     float cintura;
  8.     float quadril;
  9. };
  10.  
  11. typedef struct medidas Medidas;
  12.  
  13. struct cliente {
  14.     char nome[80];
  15.     int id;
  16.     char genero;
  17.     Medidas med;
  18. };
  19.  
  20. typedef struct cliente Cliente;
  21.  
  22. FILE* openFile(const char* file, const char* mode) {
  23.     FILE* arq = fopen(file, mode);
  24.     if (arq == NULL) {
  25.         printf("Erro ao abrir o arquivo");
  26.         exit(1);
  27.     }
  28.     return arq;
  29. }
  30.  
  31. // ok
  32. float WHRindex(Cliente** cliente, int* grauRisco) {
  33.     float whr = (*cliente)->med.cintura / (*cliente)->med.quadril;
  34.     if ( (*cliente)->genero == 'F') {
  35.         if (whr <= 0.8) {
  36.             *grauRisco = 0;
  37.         }
  38.         else if (whr >= 0.85) {
  39.             *grauRisco = 2;
  40.         }
  41.         else {
  42.             *grauRisco = 1;
  43.         }
  44.     }
  45.     else {
  46.         if (whr <= 0.95) {
  47.             *grauRisco = 0;
  48.         }
  49.         else if (whr >= 1) {
  50.             *grauRisco = 2;
  51.         }
  52.         else {
  53.             *grauRisco = 1;
  54.         }
  55.     }
  56.     return whr;
  57. }
  58.  
  59. Cliente** estatistica(Cliente** clientes, int  nClientes, float* media, float* desvioPadrao) {
  60.     float whr;
  61.     float whrTEMP = 0;
  62.     int maiorWHR;
  63.     float mediaTEMP = 0;
  64.     float desvioPadraoTEMP = 0;
  65.     // agora é só fazer a media
  66.     for (int i = 0; i < nClientes; i++) {
  67.         whr = clientes[i]->med.cintura / clientes[i]->med.quadril;
  68.         mediaTEMP += whr;
  69.         if (whrTEMP < whr) {
  70.             whrTEMP = whr;
  71.             maiorWHR = i;
  72.         }
  73.     }
  74.     (*media) = mediaTEMP / nClientes;
  75.  
  76.     //e o  desvio padrao
  77.     for (int i = 0; i < nClientes; i++) {  // somatorio
  78.         whr = clientes[i]->med.cintura / clientes[i]->med.quadril;
  79.         desvioPadraoTEMP += pow((whr - *media), 2);
  80.     }
  81.     desvioPadraoTEMP = desvioPadraoTEMP / (float)nClientes;  // divide
  82.     *desvioPadrao = sqrt(desvioPadraoTEMP); // acha a raiz
  83.  
  84.  
  85.     return clientes[maiorWHR];
  86. }
  87.  
  88.  
  89.  
  90. int main(void) {
  91.     //ler o binário
  92.     int qtdPacientes, n, grauRisco;
  93.     char* msgRisco[] = {"risco baixo", "risco moderado", "risco alto"};
  94.     FILE* finb = openFile("writing.dat", "rb");
  95.     printf("Lendo o binario:\n");
  96.     fread(&qtdPacientes, sizeof(int), 1, finb);
  97.     Cliente** vclient = (Cliente**)malloc(sizeof(Cliente*) * qtdPacientes);  // ponteiro para T12  
  98.     if (vclient == NULL) {
  99.         printf("erro de alocacao");
  100.         return NULL;
  101.     }
  102.     printf("%d\n", qtdPacientes);
  103.     float whr;
  104.     // agr vai alocar
  105.     for (int i = 0; i < qtdPacientes; i++) {
  106.         //aloca
  107.         vclient[i] = (Cliente*)malloc(sizeof(Cliente));
  108.         if (vclient[i] == NULL) {
  109.             printf("erro de alocacao");
  110.             return NULL;
  111.         }
  112.         //le no endereco alocado
  113.         n = fread(*(vclient + i), sizeof(Cliente), 1, finb);
  114.         if (n == 1) {
  115.             whr = WHRindex(vclient+i, &grauRisco);
  116.             printf("-> %s %d %c %.2f %.2f     WHR = %f  - %s\n", vclient[i]->nome, vclient[i]->id, vclient[i]->genero, vclient[i]->med.cintura, vclient[i]->med.quadril, whr, msgRisco[grauRisco] );
  117.         }
  118.     }
  119.  
  120.     fclose(finb);
  121.    
  122.  
  123.  
  124.     //parte da media e desvio padrao
  125.     float media, desvioPadrao;
  126.     Cliente* cli;
  127.     cli = estatistica(vclient, qtdPacientes, &media, &desvioPadrao);
  128.     printf("\nWHR: Media= %f  Desvio Padrao= %f\n", media, desvioPadrao);
  129.     printf("Cliente com o maior WHR: %s %d %c %.2f %.2f", cli->nome, cli->id, cli->genero, cli->med.cintura, cli->med.quadril);
  130.    
  131.  
  132.  
  133.     // desalocar o vetor
  134.     free(vclient);
  135.     free(cli);
  136.  
  137.     return 0;
  138. }
Add Comment
Please, Sign In to add comment