Buscar

Manipulação de Arquivos e Pré-Processador

Prévia do material em texto

Bruno Jurkovski
Fábio da Fontoura Beltrão
Felipe Augusto Chies
Kauê Soares da Silveira
Lucas Fialho Zawacki
Marcos Vinicius Cavinato
Revisão da Aula 6
� Na aula passada aprendemos como 
manipular arquivos.
� Vamos revisar o que vimos corrigindo o 
último exercício da aula:
Revisão da Aula 6
/* Definição da estrutura ESTUDANTE */
typedef struct estudante 
{
char nome[20];
int idade;
char sexo;
int matricula;
}ESTUDANTE;
/* Função para receber os dados do usuário */
void recebe_dados() {
FILE *arq;
arq = fopen("dados.bin", "a");
ESTUDANTE est;
if(arq) {
scanf(" %s", est.nome); scanf(" %d", &est.idade);
scanf(" %c", &est.sexo); scanf(" %d", &est.matricula);
fwrite(&est,sizeof(ESTUDANTE),1,arq);
fclose(arq);
}
}
Revisão da Aula 6
void ler_dados() {
ESTUDANTE est;
FILE *arq;
arq = fopen("dados.bin", "r");
if(arq) {
while( fread(&est,1,sizeof(ESTUDANTE),arq) ) {
printf( “Nome: %s | Idade: %d | Sexo: %c | Matricula: %d\n”, est.nome, 
est.idade, est.sexo, est.matricula);
}
}
fclose(arq);
} 
main() {
printf("Recebendo dados :\n"); receber_dados();
printf("Lendo o arquivo:\n"); ler_dados();
}
Pré-Processador - Introdução
� O pré-processador consiste em um 
programa que é executado sobre o código 
antes da compilação. Ele implementa 
duas facilidades:
� Inclusão de Arquivos;
�Definição de Macros.
Inclusão de Arquivos
� #include <arquivo>
� Inclui um arquivo do diretório padrão
� Exemplo: <stdio.h>
� #include “arquivo”
� Inclui um arquivo do diretório atual
� Exemplo: “meu_arquivo.h”
Inclusão de Arquivos
� A linha com #include é substituída pelo 
conteúdo do arquivo.
� Este arquivo, por sua vez, pode incluir 
outros arquivos ...
Macros
� #define NOME expressão
�Todas as ocorrências de NOME no código 
são substituídas pela expressão
�Exemplo: #define PI 3.14
�Útil para não ter que modificar o código 
inteiro, podendo modificar apenas o define
Macros
� Podemos usar macros para definir valores 
constantes e referenciarmos eles em 
várias partes do programa pelo mesmo 
nome. Dessa forma, se precisarmos 
modificar esses valores, podemos fazê-lo 
apenas na definição da constante.
Macros
#define MAX 100
int main() {
int z;
float a_float[MAX];
for ( z = 0; z < MAX ; z++) {
printf(“Digite o valor %d:\n”, z + 1);
scanf(“%f”, &a_float[z]) ;
}
for ( z = MAX - 1; z >= 0 ; z--) // imprimir na ordem inversa
printf(“Valor do indice %d: %f \n”, z, a_float[z]);
Macros
� Se quiséssemos, por exemplo, testar o 
nosso programa anterior, com menos 
valores (digitar 100 vezes é muita coisa), 
poderíamos substituir a definição de MAX 
pela linha.
� #define MAX 5
Macros
� Também podemos definir macros que 
recebem parâmetros:
#include <stdio.h>
#define PI 3.14
#define GRAU_RAD(x) x * PI / 180
main() { 
printf(“%f”, GRAU_RAD(60));
printf(“%f”, GRAU_RAD(30+30));
}
Macros
� Mas é preciso tomar cuidado com este 
tipo de operação, a segunda linha, por 
exemplo, nos imprimirá um resultado 
inusitado.
� Para impedir este tipo de comportamento, 
deveríamos definir o macro da seguinte 
maneira.
Macros
� Sem parênteses:
� GRAU_RAD(30 + 30) vira 30 + 30 * PI / 180
� Com parênteses:
� GRAU_RAD(30 + 30) vira (30 + 30) * PI / 180
#include <stdio.h>
#define PI 3.14
#define GRAU_RAD(x) (x) * PI / 180
main() {
printf(“%f”, GRAU_RAD(60));
printf(“%f”, GRAU_RAD(30+30));
}
Exercícios
� Defina um macro que recebe uma 
temperatura em graus Celcius e calcula a 
temperatura em Fahrenheit.
� Fórmula: ºF = ºC * 1,8 + 32
Bibliotecas
� Existem várias bibliotecas com funções 
pré-definidas, as quais, podemos utilizar 
para facilitar as tarefas que desejamos 
realizar.
� Falaremos sobre algumas que 
acreditamos que lhes serão úteis.
Bibliotecas
� math.h : Contém várias funções matemáticas definidas, 
como por exemplo:
� pow (double x, double n) – eleva x na n
� srqt (double a) – calcula a raiz quadrada de a
� sin (double grau) – retorna o seno do grau passado 
(deve estar em radianos)
� cos(double grau) – retorna o cosseno do grau 
passado (deve estar em radianos)
� muitas outras...
Bibliotecas
� string.h : Inclui diversas funções essenciais para a 
manipulação de strings, entre as mais úteis:
� strcpy(char *dest, char *font) – copia font para dest
� strlen(char *str) – retorna o tamanho de str
� strcmp(char *str1, char * str2) – compara str1 com 
str2 e, retorna 0 se forem iguais, um valor positivo se 
a primeira vem antes que a segunda e um valor 
negativo caso contrário
� muitas outras...
Exercícios
� Declare uma matriz de inteiros, com 
dimensões m por n (usem define) e a 
inicializem com a(ij) = i+j. Leia dois 
números do usuário, referentes a uma 
posição na matriz, e depois leia uma string 
com o nome de uma operação 
matemática (“RAIZ” e ”QUADRADO”) e 
imprime o resultado dessa operação 
aplicada no número daquela posição.

Continue navegando