Baixe o app para aproveitar ainda mais
Prévia do material em texto
Aula 7 LINGUAGEM C – PARTE III 23/10/2016 DIEGOQUIRINO@GMAIL.COM 1 Agenda 1. Estruturas Básicas (typedef) e Estruturas de Registro (struct) 2. Modularização em C (passagem por valor e referência) 3. Ponteiros de Arquivos 23/10/2016 DIEGOQUIRINO@GMAIL.COM 2 Estruturas NA LINGUAGEM C 23/10/2016 DIEGOQUIRINO@GMAIL.COM 3 Struct 1. Um registro (= record) é um pacote de variáveis, possivelmente de tipos diferentes. 2. Cada variável é um campo do registro. 3. Na linguagem C, registros são conhecidos como structs (o nome é uma abreviatura de structure) 23/10/2016 DIEGOQUIRINO@GMAIL.COM 4 Sintaxe: struct dma { int dia; int mês; int ano; }; Uso: struct dma niver; niver.dia = 1; niver.mes = 2; niver.ano = 1999; Printf(“%2d / %2d / %4d”, niver.dia, niver.mes, niver.ano); Struct e Ponteiro 1. Podemos usar ponteiros para estruturas! 23/10/2016 DIEGOQUIRINO@GMAIL.COM 5 Sintaxe: struct dma { int dia; int mês; int ano; }; Uso: struct dma niver; struct dma *pNiver; pNiver = niver; //malloc(1*sizeof(struct dma*)) *pNiver.dia = 1; *pNiver.mes = 2; *pNiver.ano = 1999; Printf(“%2d / %2d / %4d”, *pNiver.dia, *pNiver.mes, *pNiver.ano); OBS: se há ponteiro, há como fazer alocação dinâmica de memória! Não irá funcionar! Pois o operador . (ponto) é precedente sobre o * (desreferenciação) Struct e Ponteiro 1. A sintaxe “seta” serve para resumir o “apontamento” para uma estrutura. 23/10/2016 DIEGOQUIRINO@GMAIL.COM 6 Sintaxe: struct dma { int dia; int mês; int ano; }; Uso: struct dma niver; struct dma *pNiver; pNiver = niver; //malloc(1*sizeof(struct dma*)) (*pNiver).dia = 1; pNivermes = 2; (*pNiver).ano = 1999; Printf(“%2d / %2d / %4d”, pNiverdia, pNivermes, pNiverano); OBS: se há ponteiro, há como fazer alocação dinâmica de memória! Agora vai funcionar! O operador seta resume a notação com parênteses! Typedef 1. Faz a definição de um novo tipo de dados nomeado pelo programador da linguagem C. 2. Podemos criar, por exemplo, um novo tipo de dados para representar a data (nossa estrutura criada em slides anteriores). 23/10/2016 DIEGOQUIRINO@GMAIL.COM 7 Sintaxe: struct dma { ... }; typedef struct dma Data; Uso: Data niver; Data *pNiver; ... Modularização NA LINGUAGEM C 23/10/2016 DIEGOQUIRINO@GMAIL.COM 8 Conceito - Modularização - Lógica Complexa; - Difícil compreensão; - Muitas partes envolvidas. - Lógica simples; - Fácil compreensão; - Poucas partes envolvidas. P ro b le m a G ra n d e P ro b le m a s M e n o re s 9 Vantagens da Modularização 1. Redução da complexidade: ◦ Pequeno número de variáveis; ◦ Redução dos caminhos de controle das funcionalidades. 2. Reusabilidade: ◦ Evita repetições e eventuais inconsistências; ◦ Soluciona uma única vez o problema. 3. Delimitação de escopo do problema: 4. Manutenção facilitada. 10 Módulos ou Subalgoritmos 11 Problema Grande (monolítico) Decomposição Principal Módulo (A) Módulo (B) Módulo (C) Módulo (N) Módulo (...) Tipos: 1) Procedimentos 2) Funções Funções 1. São a expressão de funcionalidades num sistema, cujo objetivo principal é a criação/modificação de resultados e valores para o negócio. 12 Exemplo 02: int calcularMedia ( int n1, int n2) { return ( n1 +n2 ) / 2; } Passagem “por Valor” 1. Acontece quando os parâmetros da função são passados por novas variáveis que copiam o valor originalmente passado. 2. Exemplo: 23/10/2016 DIEGOQUIRINO@GMAIL.COM 13 void funcaoSemPonteiro(int num); //protótipo int main() { int num = 100; funcaoSemPonteiro(num); printf("NUM na função main após execução função sem ponteiro: %d\n", num); // Será exibido 100 } void funcaoSemPonteiro(int num) { num = 10; } Não há ponteiro Passagem “por Referência” 1. Acontece quando os parâmetros da função são passados por ponteiros que referenciam o valor originalmente passado. 2. Exemplo: 23/10/2016 DIEGOQUIRINO@GMAIL.COM 14 void funcaoComPonteiro(int *num); //protótipo int main() { int num = 100; funcaoComPonteiro(&num); printf("NUM na função main após execução função sem ponteiro: %d\n", num); //Agora, Será exibido 10! } void funcaoComPonteiro(int *num) { *num = 10; } Há ponteiro Manipulação de Arquivos PONTEIROS DE ARQUIVOS NA LINGUAGEM C 23/10/2016 DIEGOQUIRINO@GMAIL.COM 15 Arquivos 1. Arquivos são utilizados para manipular dados, de forma que você possa salvar e resgatar informações dentro do computador, de forma persistente. 2. Após a execução, os dados nas variáveis (memórias) serão apagados (volátil) ao final da execução do programa. 3. Dada a grande importância do uso de informação persistente, utilizaremos 2 abordagens simples de leitura e uma de gravação em arquivos (utilizaremos ponteiros) 23/10/2016 DIEGOQUIRINO@GMAIL.COM 16 Escrevendo e Alterando um Arquivo Exemplo 01: FILE *file; int i; file = fopen("numero.txt","w"); for(i = 0; i<10; i++) { fprintf(file, "%d\n", i); } fclose(file); 23/10/2016 DIEGOQUIRINO@GMAIL.COM 17 Nome do arquivo Ponteiro para o arquivo Função utilizada para escrever no arquivo Modo: w = escrita r = leitura a = alteração Após usar o arquivo, devemos fechá-lo. Leitura de Arquivos (fgets) 23/10/2016 DIEGOQUIRINO@GMAIL.COM 18 Exemplo 02: FILE *file; char linha[100]; file = fopen("numero.txt",“r"); while(fgets(linha, 100, file)!=NULL) { printf("%s\n", linha); } fclose(file); Nome do arquivo Ponteiro para o arquivo Função utilizada para ler linha a linha do arquivo Modo: w = escrita r = leitura a = alteração Após usar o arquivo, devemos fechá-lo. Leitura de Arquivos (getc) 23/10/2016 DIEGOQUIRINO@GMAIL.COM 19 Exemplo 02: FILE *file; int i=0; char letra[100]; file = fopen("numero.txt",“r"); while((letra[i]=getc(file))!=EOF) { printf("%c\n", letra); } fclose(file); Nome do arquivo Ponteiro para o arquivo Função utilizada para ler caractere a caractere o arquivo, até encontrar o EOF – end of file (fim de arquivo) Modo: w = escrita r = leitura a = alteração Após usar o arquivo, devemos fechá-lo. Vamos ao CodeBlocks PRATICAR OS CONCEITOS APRENDIDOS NESTA AULA 23/10/2016 DIEGOQUIRINO@GMAIL.COM 20 O que aprendemos? REVISÃO GERAL DO CONTEÚDO APRESENTADO 23/10/2016 DIEGOQUIRINO@GMAIL.COM 21 Agora é a sua vez! ATIVIDADE PRÁTICA E EXERCÍCIOS 23/10/2016 DIEGOQUIRINO@GMAIL.COM 22 Bibliografia Complementar 1. GRIFFITHS, Dawn; GRIFFITHS, David. Use a Cabeça: C. 1ª ed. São Paulo: Alta Books, 2013. 2. DEITEL, H.; DEITEL, P. C – Como Programar. 6ª Ed. São Paulo: Pearson Education, 2011 3. University of Rhode Island. Site: http://www.urionlineju dge.com.br 23/10/2016 DIEGOQUIRINO@GMAIL.COM 23
Compartilhar