Advertisement
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;
- }
- 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[3] = { {"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) return NULL;
- printf("%d\n", qtdPacientes);
- float whr;
- for (int i = 0; i < qtdPacientes; i++) {
- 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);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement