Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <math.h>
- struct medidas {
- float cintura;
- float quadril;
- };
- typedef struct medidas Medidas;
- struct cliente {
- char nome[80];
- int id;
- char genero;
- Medidas med;
- };
- typedef struct cliente Cliente;
- FILE* openFile(const char* file, const char* mode) {
- FILE* arq = fopen(file, mode);
- if (arq == NULL) {
- printf("Erro ao abrir o arquivo");
- exit(1);
- }
- return arq;
- }
- // ok
- float WHRindex(Cliente** cliente, int* grauRisco) {
- float whr = (*cliente)->med.cintura / (*cliente)->med.quadril;
- if ( (*cliente)->genero == 'F') {
- if (whr <= 0.8) {
- *grauRisco = 0;
- }
- else if (whr >= 0.85) {
- *grauRisco = 2;
- }
- else {
- *grauRisco = 1;
- }
- }
- else {
- if (whr <= 0.95) {
- *grauRisco = 0;
- }
- else if (whr >= 1) {
- *grauRisco = 2;
- }
- else {
- *grauRisco = 1;
- }
- }
- return whr;
- }
- Cliente** estatistica(Cliente** clientes, int nClientes, float* media, float* desvioPadrao) {
- float whr;
- float whrTEMP = 0;
- int maiorWHR;
- float mediaTEMP = 0;
- float desvioPadraoTEMP = 0;
- // agora é só fazer a media
- for (int i = 0; i < nClientes; i++) {
- whr = clientes[i]->med.cintura / clientes[i]->med.quadril;
- mediaTEMP += whr;
- if (whrTEMP < whr) {
- whrTEMP = whr;
- maiorWHR = i;
- }
- }
- (*media) = mediaTEMP / nClientes;
- //e o desvio padrao
- for (int i = 0; i < nClientes; i++) { // somatorio
- whr = clientes[i]->med.cintura / clientes[i]->med.quadril;
- desvioPadraoTEMP += pow((whr - *media), 2);
- }
- desvioPadraoTEMP = desvioPadraoTEMP / (float)nClientes; // divide
- *desvioPadrao = sqrt(desvioPadraoTEMP); // acha a raiz
- return clientes[maiorWHR];
- }
- int main(void) {
- //ler o binário
- int qtdPacientes, n, grauRisco;
- char* msgRisco[] = {"risco baixo", "risco moderado", "risco alto"};
- FILE* finb = openFile("writing.dat", "rb");
- printf("Lendo o binario:\n");
- fread(&qtdPacientes, sizeof(int), 1, finb);
- Cliente** vclient = (Cliente**)malloc(sizeof(Cliente*) * qtdPacientes); // ponteiro para T12
- if (vclient == NULL) {
- printf("erro de alocacao");
- return NULL;
- }
- printf("%d\n", qtdPacientes);
- float whr;
- // agr vai alocar
- for (int i = 0; i < qtdPacientes; i++) {
- //aloca
- vclient[i] = (Cliente*)malloc(sizeof(Cliente));
- if (vclient[i] == NULL) {
- printf("erro de alocacao");
- return NULL;
- }
- //le no endereco alocado
- n = fread(*(vclient + i), sizeof(Cliente), 1, finb);
- if (n == 1) {
- whr = WHRindex(vclient+i, &grauRisco);
- 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] );
- }
- }
- fclose(finb);
- //parte da media e desvio padrao
- float media, desvioPadrao;
- Cliente* cli;
- cli = estatistica(vclient, qtdPacientes, &media, &desvioPadrao);
- printf("\nWHR: Media= %f Desvio Padrao= %f\n", media, desvioPadrao);
- printf("Cliente com o maior WHR: %s %d %c %.2f %.2f", cli->nome, cli->id, cli->genero, cli->med.cintura, cli->med.quadril);
- // desalocar o vetor
- free(vclient);
- free(cli);
- return 0;
- }
Add Comment
Please, Sign In to add comment