Skip to content

Instantly share code, notes, and snippets.

@matheusleite
Created October 31, 2015 20:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matheusleite/9f0c160ae9231e998751 to your computer and use it in GitHub Desktop.
Save matheusleite/9f0c160ae9231e998751 to your computer and use it in GitHub Desktop.
Código exemplo de manipulação de arquivos em C
MATRICULA FAIXA ETARIA SEXO IMC CONDICAO
1 Jovem M 35.787754 Obeso
2 Adulto M 43.915264 Obeso
3 Jovem F 38.164780 Obeso
4 Jovem M 26.785103 Marginalmente acima do Peso
5 Jovem F 17.415363 Abaixo do Peso
6 Jovem F 21.419756 Peso Normal
7 Jovem F 38.746044 Obeso
8 Jovem M 14.396194 Abaixo do Peso
9 Jovem F 13.991672 Abaixo do Peso
10 Adolescente F 45.166485 Obeso
11 Adolescente M 32.388355 Obeso
12 Jovem M 64.051170 Obeso
13 Jovem F 28.045235 Acima do peso ideal
14 Adolescente M 19.474377 Abaixo do Peso
15 Jovem F 46.334690 Obeso
16 Adolescente F 50.280960 Obeso
17 Jovem F 24.761908 Peso Normal
18 Jovem M 30.176006 Acima do peso ideal
19 Adulto M 15.801606 Abaixo do Peso
20 Adulto F 44.283195 Obeso
21 Adulto M 26.861773 Marginalmente acima do Peso
22 Adulto F 32.979919 Obeso
23 Adulto F 32.005550 Acima do peso ideal
24 Adulto M 18.497143 Abaixo do Peso
25 Adulto F 39.262722 Obeso
26 Adulto M 26.689346 Marginalmente acima do Peso
27 Adulto F 41.210545 Obeso
28 Adulto F 56.269466 Obeso
29 Idoso M 37.133469 Obeso
30 Idoso F 41.995827 Obeso
31 Adulto M 51.066021 Obeso
32 Adulto F 30.278599 Acima do peso ideal
33 Idoso M 10.618685 Abaixo do Peso
34 Idoso F 13.970935 Abaixo do Peso
35 Adulto M 24.775913 Peso Normal
36 Idoso F 25.960947 Marginalmente acima do Peso
37 Idoso F 33.962143 Obeso
38 Idoso F 20.278542 Peso Normal
39 Idoso F 16.565657 Abaixo do Peso
40 Adulto M 16.040186 Abaixo do Peso
41 Idoso M 18.679373 Abaixo do Peso
42 Idoso M 32.129951 Obeso
43 Idoso F 23.625978 Peso Normal
44 Idoso F 28.754341 Acima do peso ideal
45 Idoso M 37.079700 Obeso
46 Idoso F 14.067248 Abaixo do Peso
47 Idoso F 12.870968 Abaixo do Peso
48 Adulto M 46.400951 Obeso
1 24 1 M 1.75 109.60
2 25 1 M 1.85 150.30
3 18 2 F 1.63 101.40
4 24 1 M 2.09 117.00
5 18 2 F 1.92 64.20
6 24 2 F 1.80 69.40
7 24 2 F 1.98 151.90
8 22 1 M 2.05 60.50
9 20 2 F 2.05 58.80
10 15 2 F 1.69 129.00
11 16 1 M 1.62 85.00
12 19 1 M 1.49 142.20
13 19 2 F 1.69 80.10
14 15 1 M 1.81 63.80
15 19 2 F 1.75 141.90
16 17 2 F 1.55 120.80
17 22 2 F 2.10 109.20
18 21 1 M 1.99 119.50
19 37 1 M 1.64 42.50
20 33 2 F 1.83 148.30
21 41 1 M 2.07 115.10
22 43 2 F 1.46 70.30
23 25 2 F 1.74 96.90
24 25 1 M 1.93 68.90
25 29 2 F 1.78 124.40
26 41 1 M 2.10 117.70
27 29 2 F 1.94 155.10
28 42 2 F 1.51 128.30
29 55 1 M 1.58 92.70
30 89 2 F 1.71 122.80
31 53 1 M 1.59 129.10
32 51 2 F 1.83 101.40
33 58 1 M 2.07 45.50
34 62 2 F 1.84 47.30
35 47 1 M 1.78 78.50
36 65 2 F 2.09 113.40
37 66 2 F 1.77 106.40
38 90 2 F 1.98 79.50
39 64 2 F 1.65 45.10
40 45 1 M 2.03 66.10
41 68 1 M 1.54 44.30
42 83 1 M 1.83 107.60
43 89 2 F 1.79 75.70
44 89 2 F 1.92 106.00
45 71 1 M 2.02 151.30
46 79 2 F 2.02 57.40
47 82 2 F 2.01 52.00
48 51 1 M 1.64 124.80
49 60 2 F 1.96 152.10
//
// TSA12015.c
// Estruturas de Dados e Algoritmos - EDA
// Professor Nilton
//
// Universidade de Brasília - Campus Gama (UnB-FGA)
// Created by Matheus Leite on 14/04/15.
// Copyright (c) 2015 Matheus Leite. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
//struct que abrigará os dados de um cliente
struct Cliente
{
int matricula;
int idade;
char sexo;
float altura;
float peso;
char *faixaEtaria;
float imc;
char *condicao;
};
int main(int argc, char const *argv[])
{
//declaracao de variaveis
char ch;
int qtdLinhas=0;
FILE *arquivoClientes;
arquivoClientes = fopen("ArquivoClientes.txt", "r");
//criando novo arquivo, caso nao exista
FILE *analiseIMC;
analiseIMC = fopen("analiseIMC.txt", "w");
if(arquivoClientes==NULL){
printf("Erro ao abrir o arquivo. \n");
}
//quantidade de linhas
while(1){
ch=fgetc(arquivoClientes);
switch(ch){
case'\n':
qtdLinhas++;
break;
default:
break;
}
if(ch==EOF)
break;
}
//alocacao dinamica de memoria da struct
struct Cliente *umCliente;
umCliente = (struct Cliente*) calloc(qtdLinhas, sizeof(struct Cliente));
//faz o ponteiro voltar pra o inicio da struct
rewind(arquivoClientes);
//lendo dados do arquivo e atribuindo ao vetor de structs
for (int i = 0; i < qtdLinhas; ++i)
{
int lixo;
fscanf(arquivoClientes, "%d %d %d %c %f %f", &umCliente[i].matricula, &umCliente[i].idade, &lixo, &umCliente[i].sexo, &umCliente[i].altura, &umCliente[i].peso);
}
for (int i = 0; i < qtdLinhas; ++i)
{
//calculando o IMC de cada cliente
float peso = umCliente[i].peso;
float altura = umCliente[i].altura;
umCliente[i].imc = (peso/(altura*altura));
//atribuindo faixa etaria do cliente
if (umCliente[i].idade<=11)
{
umCliente[i].faixaEtaria = "Infantil";
} else if (umCliente[i].idade>11 && umCliente[i].idade<18)
{
umCliente[i].faixaEtaria = "Adolescente";
} else if (umCliente[i].idade>17 && umCliente[i].idade<25)
{
umCliente[i].faixaEtaria = "Jovem";
} else if (umCliente[i].idade>24 && umCliente[i].idade<55)
{
umCliente[i].faixaEtaria = "Adulto";
} else if (umCliente[i].idade>54)
{
umCliente[i].faixaEtaria = "Idoso";
}
}
for (int i = 0; i < qtdLinhas; ++i)
{
//atribuindo condicao do cliente
//caso seja mulher
if (umCliente[i].sexo=='F'){
if (umCliente[i].imc<19.1)
{
umCliente[i].condicao = "Abaixo do Peso";
} else if (umCliente[i].imc>19.0 && umCliente[i].imc<25.9)
{
umCliente[i].condicao = "Peso Normal";
} else if (umCliente[i].imc>25.8 && umCliente[i].imc<27.4)
{
umCliente[i].condicao = "Marginalmente acima do Peso";
} else if (umCliente[i].imc>27.3 && umCliente[i].imc<32.4)
{
umCliente[i].condicao = "Acima do peso ideal";
} else if (umCliente[i].imc>32.3)
{
umCliente[i].condicao = "Obeso";
}
} else if (umCliente[i].sexo=='M'){
if (umCliente[i].imc<20.7)
{
umCliente[i].condicao = "Abaixo do Peso";
} else if (umCliente[i].imc>20.6 && umCliente[i].imc<26.5)
{
umCliente[i].condicao = "Peso Normal";
} else if (umCliente[i].imc>26.5 && umCliente[i].imc<27.9)
{
umCliente[i].condicao = "Marginalmente acima do Peso";
} else if (umCliente[i].imc>27.8 && umCliente[i].imc<31.2)
{
umCliente[i].condicao = "Acima do peso ideal";
} else if (umCliente[i].imc>31.1)
{
umCliente[i].condicao = "Obeso";
}
}
}
//imprimindo resultados no arquivo analiseIMC.txt
fprintf(analiseIMC, "MATRICULA\t\tFAIXA ETARIA\t\tSEXO\t\tIMC\t\tCONDICAO\t\n");
for (int i = 0; i < qtdLinhas; i++)
{
fprintf(analiseIMC, "%d\t\t%s\t\t%c\t\t%f\t\t%s\t\n",umCliente[i].matricula, umCliente[i].faixaEtaria, umCliente[i].sexo, umCliente[i].imc, umCliente[i].condicao);
}
//fechando acesso aos arquivos
fclose(analiseIMC);
fclose(arquivoClientes);
printf("Qtd linhas %d\n",qtdLinhas);
printf("Operacao concluida! Procure o arquivo analiseIMC.txt.\n");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment