Advertisement
MirandaWopps

T12 - "Miranda Wopps"

Jun 3rd, 2022 (edited)
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.88 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. float WHRindex(Cliente* cliente, int* grauRisco) {
  32.     float whr = cliente->med.cintura / cliente->med.quadril;
  33.     if (cliente->genero == 'F') {
  34.         if (whr <= 0.8) {
  35.             *grauRisco = 0;
  36.         }
  37.         else if (whr >= 0.85) {
  38.             *grauRisco = 2;
  39.         }
  40.         else {
  41.             *grauRisco = 1;
  42.         }
  43.     }
  44.     else {
  45.         if (whr <= 0.95) {
  46.             *grauRisco = 0;
  47.         }
  48.         else if (whr >= 1) {
  49.             *grauRisco = 2;
  50.         }
  51.         else {
  52.             *grauRisco = 1;
  53.         }
  54.     }
  55.     return whr;
  56. }
  57.  
  58. Cliente estatistica(Cliente* clientes, int  nClientes, float* media, float* desvioPadrao) {
  59.     float whr;
  60.     float whrTEMP = 0;
  61.     int maiorWHR;
  62.     float mediaTEMP = 0;
  63.     float desvioPadraoTEMP = 0;
  64.     // agora é só fazer a media
  65.     for (int i = 0; i < nClientes; i++) {
  66.         whr = clientes[i].med.cintura / clientes[i].med.quadril;
  67.         mediaTEMP += whr;
  68.         if (whrTEMP < whr) {
  69.             whrTEMP = whr;
  70.             maiorWHR = i;
  71.         }
  72.     }
  73.     (*media) = mediaTEMP / nClientes;
  74.  
  75.     //e o  desvio padrao
  76.     for (int i = 0; i < nClientes; i++) {  // somatorio
  77.         whr = clientes[i].med.cintura / clientes[i].med.quadril;
  78.         desvioPadraoTEMP += pow((whr - *media), 2);
  79.     }
  80.     desvioPadraoTEMP = desvioPadraoTEMP / (float)nClientes;  // divide
  81.     *desvioPadrao = sqrt(desvioPadraoTEMP); // acha a raiz
  82.  
  83.     return clientes[maiorWHR];
  84. }
  85.  
  86.  
  87.  
  88. int main(void) {
  89.     //ler o binário
  90.     int qtdPacientes, n, grauRisco;
  91.     char* msgRisco[3] = { {"risco baixo" }, {"risco moderado" }, { "risco alto" } };
  92.     FILE* finb = openFile("writing.dat", "rb");
  93.     printf("Lendo o binario:\n");
  94.     fread(&qtdPacientes, sizeof(int), 1, finb);
  95.     Cliente* vclient = (Cliente*)malloc(sizeof(Cliente) * qtdPacientes);  // ponteiro para T12 
  96.     if (vclient == NULL) return NULL;
  97.  
  98.     printf("%d\n", qtdPacientes);
  99.     float whr;
  100.     for (int i = 0; i < qtdPacientes; i++) {
  101.         n = fread(&vclient[i], sizeof(Cliente), 1, finb);
  102.         if (n == 1) {
  103.             whr = WHRindex(vclient + i, &grauRisco);
  104.             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]);
  105.         }
  106.     }
  107.  
  108.     fclose(finb);
  109.  
  110.     //parte da media e desvio padrao
  111.     float media, desvioPadrao;
  112.     Cliente cli;
  113.     cli = estatistica(vclient, qtdPacientes, &media, &desvioPadrao);
  114.     printf("\nWHR: Media= %f  Desvio Padrao= %f\n", media, desvioPadrao);
  115.     printf("Cliente com o maior WHR:    %s %d %c %.2f %.2f", cli.nome, cli.id, cli.genero, cli.med.cintura, cli.med.quadril);
  116.  
  117.     // desalocar o vetor
  118.     free(vclient);
  119.  
  120.     return 0;
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement