Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação

Documentos relacionados
Linguagem C: agregados heterogêneos, arquivos binários, recursividade. Prof. Críston Algoritmos e Programação

Programação Estruturada

DATA DIA DIAS DO FRAÇÃO DATA DATA HORA DA INÍCIO DO ANO JULIANA SIDERAL T.U. SEMANA DO ANO TRÓPICO

Recursividade. Prof. Jesus José de Oliveira Neto

C++ - Matrizes. Observ.: C++ não avisa quando o limite de uma matriz foi excedido. Providenciar a verificação é responsabilidade do programador.

Recursão David Déharbe

1/27. Registos (Estruturas - struct)

Lista de Exercícios de Algoritmos - 04 Para cada um dos exercícios abaixo, faça um programa (em laboratório) que teste a função.

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: tipos de dados definidos pelo programador: struct union enum typedef

Recursividade. Recursividade

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

SCC0214 Projeto de Algoritmos

Estruturas. Estruturas. Estruturas. Estruturas. Estruturas. Algoritmos e Lógica de Programação. Estruturas. Uniões Enumerações CANSI

Introdução a Programação. Arquivos

Introdução a Programação. Ponteiros para Estruturas, Outros Tipos de Estruturas

1ª versão. #include <stdio.h> #include <string.h> #include <stdlib.h> #define maxdiscos 1000

Estruturas. K&R: Capitulo 6. Estruturas IAED, 2014/2015. Introdução às Estruturas Estruturas e Funções Vectores de Estruturas Typedef Exemplo

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

SCC Capítulo 2 Recursão

UNIVERSIDADE DA BEIRA INTERIOR

Introdução à Programação

Prova de Programação (21090) Data: 31 de Janeiro de 2008

Legibilidade do código fonte

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: Manipulação de arquivos

Aula 21 - Algoritmos e Funções Recursivas

Programação: Vetores

Programação de Computadores II

DEMONSTRATIVO DE CÁLCULO DE APOSENTADORIA - FORMAÇÃO DE CAPITAL E ESGOTAMENTO DAS CONTRIBUIÇÕES

Métodos Computacionais. Tipos Estruturados

UNIVERSIDADE DA BEIRA INTERIOR

Programação Mestrado Integrado em Engenharia Aeronáutica 1º ano, 1º semestre. T. 09 Estruturas

Aluno: Valor Nota Q1 3.0 Q2 2.5 Q3 2.5 Q4 2.0 Total 10.0

Linguagens de Programação Conceitos e Técnicas. Amarrações Prof. Tiago Alves de Oliveira

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

Algoritmos e Funções Recursivas

Introdução à Computação

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

ALGORITMOS E ESTRUTURAS DE DADOS CES-11

Aula 10 Algoritmos e Funções Recursivas

PRÓ-TRANSPORTE - MOBILIDADE URBANA - PAC COPA CT /10

PRÓ-TRANSPORTE - MOBILIDADE URBANA - PAC COPA CT /10

Programação 5374 : Engenharia Informática 6638 : Tecnologias e Sistemas de Informação. Cap. 11 Estruturas (Structs) Structs

Programação de Computadores I Funções de Repetição da Linguagem C PROFESSORA CINTIA CAETANO

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Suponha um conjunto habitacional, com várias famílias... imagina se todas elas morassem em uma única casa?

INF 1620 P2-01/11/03 Questão 1 Nome:

Linguagem de Programação

struct <identificador> { tipo <nome_variável>; tipo <nome_variável>; : } <variáveis_estrutura>;

Algoritmos e Estruturas de Dados I

UNIVERSIDADE DA BEIRA INTERIOR

GDOC INTERESSADO CPF/CNPJ PLACA

Algoritmos e Estruturas de Dados I IEC012. Procedimentos e Funções. Prof. César Melo Todos os créditos para o professor Leandro Galvão

UNIVERSIDADE DA BEIRA INTERIOR

Algoritmos e Funções Recursivas

INF 1620 P4-09/07/03 Questão 1 Nome:

3. Linguagem de Programação C

Permite modularidade (dividir programa em partes): Facilita a depuração (debug) e portabilidade.

Aula 05. Modularização Função Subrotina Recursividade

INF 1005 Programação I - Prof. Hélio Lopes 24/04/2012

Capacitação em Linguagem C Parte 1

Programação Estruturada

Tipos Abstratos de Dados

C Estruturas. Adriano Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

INF1005: Programação 1. Vetores. 02/05/10 (c) Paula Rodrigues 1

Tópicos em C. Eliade F. Lima

Introdução à Programação

Arquivos em C. Material da Prof. Ana Eliza

Linguagem C: diretivas, compilação separada. Prof. Críston Algoritmos e Programação

MC-102 Aula 19 Registros

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Aula 25: Alocação Dinâmica

Instituto Superior Técnico Introdução aos Algoritmos e Estruturas de Dados

Processamento da Informação

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Linguagem de Programação. Thiago Leite Francisco Barretto

Programação de Computadores II. Cap. 5 Vetores

Introdução a Programação. Tipos Estruturados de Dados

INF 1620 P1-04/10/03 Questão 1 Nome:

Cap. 3 Entrada e Saída e Controle de Fluxo

Linguagens de Programação Conceitos e Técnicas. Amarrações

Tipos de Dados Definidos Pelo Usuário. Estruturas Uniões Enumerações O Comando sizeof O Comando typedef

SSC INTRODUÇÃO À COMPUTAÇÃO PARA ENGENHARIA AMBIENTAL REGISTROS E ARQUIVOS. Profa. Dra. Milena Guessi Margarido

Algoritmos e Estruturas de Dados

LISTA DE EXERCÍCIOS 2

Programação Estruturada Prof. Rodrigo Hausen Agregados de Dados Heterogêneos (structs)

INF 1620 P3-02/07/02 Questão 1 Nome:

INF 1007 Programação II

Elementos de programação em C

INF 1007 Programação II

Linguagem C. Funções. Prof. Maurício Dias

Algoritmos e Programação

Linguagens de Programação I

Algoritmos e Estruturas de Dados I (AEDI) Introdução - AEDI. Prof. Paulo Henrique Pisani

ESTRUTURA DE DADOS (TCC )

Macros e funções. Prof. Dr. Silvio do Lago Pereira. Departamento de Tecnologia da Informação Faculdade de Tecnologia de São Paulo

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: funções

Algoritmos e Estruturas de Dados

Transcrição:

Linguagem C: agregados heterogêneos, arquivos binários, recursividade Prof. Críston Algoritmos e Programação

Agregados heterogêneos Permitem agrupar variáveis de diferentes tipos em um único registro struct nome_estrutura tipo1 campo1; tipo2 campo2;... tipon campon; ;

Exemplo #include <string.h> #include <stdio.h> struct aluno int matricula; char nome[50]; double nota; int faltas; ; struct aluno joao; joao.matricula = 1234; strcpy(joao.nome, "Joao da Silva"); joao.nota = 8.0; joao.faltas = 5; printf("%d, %s, %f, %d\n", joao.matricula, joao.nome, joao.nota, joao.faltas);

Exemplo #include <string.h> #include <stdio.h> struct aluno int matricula; char nome[50]; double nota; int faltas; joao; joao.matricula = 1234; strcpy(joao.nome, "Joao da Silva"); joao.nota = 8.0; joao.faltas = 5; printf("matricula: %d\nnome: %s\nnota: %.1f\nFaltas: %d\n", joao.matricula, joao.nome, joao.nota, joao.faltas);

Definição de um novo tipo typedef tipo nome_tipo; Exemplos: typedef int inteiro; inteiro faltas; typedef struct int matricula; char nome[50]; double nota; int faltas; aluno; aluno joao, maria;

Exemplo typedef struct int matricula; char nome[50]; double nota; int faltas; aluno; aluno joao; joao.matricula = 1234; strcpy(joao.nome, "Joao da Silva"); joao.nota = 8.0; joao.faltas = 5; printf("%d, %s, %f, %d\n", joao.matricula, joao.nome, joao.nota, joao.faltas);

Inicialização e atribuição typedef struct int x; double y; teste; teste a, b = 1, 2.0; // a = 3, 4.0; ERRO printf("%d, %f\n", a.x, a.y); a = b; printf("%d, %f\n", a.x, a.y);

Vetor de registros // definição global typedef struct int matricula; char nome[50]; double nota; int faltas; aluno; aluno turma[20];... turma[4].nota = 7.0;...

Lendo registros de um arquivo texto aluno turma[30]; int i, n = 0; FILE *f = fopen("alunos.txt", "r"); while (fscanf(f, "%d %s %lf %d", &turma[n].matricula, &turma[n].nome, &turma[n].nota, &turma[n].faltas) == 4) n++; fclose(f); for (i=0; i<n; i++) printf("%d, %s, %f, %d\n", turma[i].matricula, turma[i].nome, turma[i].nota, turma[i].faltas);

Função para retornar a média da turma double media_turma(aluno turma[], int num_alunos) double soma = 0; int i; for (i=0; i < num_alunos; i++) soma += turma[i].nota; return soma / num_alunos; aluno turma[30];... printf("media da turma = %f\n", media_turma(turma, n));

Gravando em um arquivo binário aluno turma[30]; int i, n = 0; FILE *f = fopen("alunos.txt", "r"); while (fscanf(f, "%d %s %lf %d", &turma[n].matricula, &turma[n].nome, &turma[n].nota, &turma[n].faltas) == 4) n++; fclose(f); f = fopen("alunos.bin", "wb"); fwrite(turma, sizeof(aluno), n, f); fclose(f);

Lendo de um arquivo binário aluno turma[30]; int i = 0; FILE *f = fopen("alunos.bin", "rb"); while(fread(&turma[i], sizeof(aluno), 1, f) == 1) printf("%d, %s, %f, %d\n", turma[i].matricula, turma[i].nome, turma[i].nota, turma[i].faltas); i++; fclose(f);

Algumas funções úteis na manipulação de arquivos fseek(file *f, long int num_bytes, int origem) Origem 0 início do arquivo Origem 1 ponto atual Origem 2 fim do arquivo rewind(file *f) posiciona no início remove(char *nome_arquivo) apaga arquivo feof(file *f) testa fim de arquivo (não zero se fim)

Enumeração Fornece identificadores para a sequência numérica 0, 1, 2, 3 Define um novo tipo enum nome_tipo lista_valores lista_variaveis; enum nome_tipo lista_valores; enum lista_valores lista_variaveis;

Enumeração enum dias_semana domingo, segunda, terca, quarta, quinta, sexta, sabado; enum dias_semana d1, d2; d1 = segunda; d2 = 3; if (d1 == terca) printf("d1 = terca"); printf("%d\n", d1); printf("%d\n", quinta);

Enumeração enum mes Jan = 1, Fev, Mar, Abr, Mai, Jun, Jul, Ago, Set, Out, Nov, Dez; enum mes m1 = Abr, m2 = Jun, m3; if(m1<m2) printf("o mes %d vem antes do mes %d.\n",m1,m2); m3 = m2 - m1; printf("de Abril a Junho decorrem %d meses.\n",m3);

União Permite declarar uma região de memória onde podem ser armazenados valores de vários tipos union nome_tipo tipo1 nome1; tipo2 nome2;... tipon nomen; Atenção! Uma union utiliza o mesmo espaço de memória a ser compartilhado com diferentes membros, enquanto a struct aloca um espaço diferente para cada membro

União union inteiro_real int inteiro; double real; // float real ; union inteiro_real x; printf("%d\n", sizeof(x)); x.inteiro = 4; printf("%d %f\n", x.inteiro, x.real); x.real = 5.2; printf("%d %f\n", x.inteiro, x.real);

Recursividade Quando uma função chama ela própria Alguns problemas têm definição naturalmente recursiva Ex.: números de fibonacci Problema pode ser desmembrado em sub problemas semelhantes Desvantagem: pode produzir muitas chamadas de funções Sempre que uma função A chama uma função B, os valores das variáveis locais de A são guardados para serem utilizados quando a função B encerrar Este processo consome CPU e memória Devemos sempre lembrar da condição de parada da recursão, senão teremos loop infinito

Multiplicar dois números naturais int multiplica(int a, int b) int i, produto = 0; for (i=1; i <= b; i++) produto += a; return produto; // versão recursiva int multiplica(int a, int b) if (b == 1) return a; // condição de parada return a + multiplica(a, b-1);

Números de Fibonacci int fibonacci(int n) if (n < 3) return 1; return fibonacci(n-2) + fibonacci(n-1); int i; for (i=1; i<10; i++) printf("%d ", fibonacci(i));

Fatorial int fatorial(int n) if (n == 1) return 1; return n * fatorial(n-1); int i; for (i=1; i <= 10; i++) printf("%d! = %d\n", i, fatorial(i));

Torres de Hanoi Transferir os discos da torre A para a torre C, podendo utilizar a torre B Um disco não pode ser colocado sobre um disco menor A B C

Torres de Hanoi void hanoi(int n, char origem, char auxiliar, char destino) if (n == 1) printf("%c -> %c\n", origem, destino); else hanoi(n-1, origem, destino, auxiliar); printf("%c -> %c\n", origem, destino); hanoi(n-1, auxiliar, origem, destino); hanoi(3, 'A', 'B', 'C');