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.