Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
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.