ADTs (Abstract Data Types): Motivação

Documentos relacionados
LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

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

Fundamentos de Arquivos. SCC203 Algoritmos e Estruturas de Dados II

1.2 OPERAÇÕES BÁSICAS EM ALGORITMOS E PROGRAMAS 18

UNIVERSIDADE DO VALE DO RIO DOS SINOS - UNISINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS - CENTRO 06. Funções, variáveis, parâmetros formais

Curso C: Ponteiros e Arrays

INF1007: Programação 2 9 Tipos Abstratos de Dados. (c) Dept. Informática - PUC-Rio 1

Estrutura da linguagem de programação C Prof. Tiago Eugenio de Melo tiago@comunidadesol.org

Árvores. ! utilizada em muitas aplicações. ! modela uma hierarquia entre elementos. ! O conceito de árvores está diretamente ligado à recursão

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

Conteúdo programático

UNIVERSIDADE DO TOCANTINS TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS PRÁTICA EM PROGRAMAÇÃO DE SISTEMAS

Introdução à orientação a objetos

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Manipulação de Arquivos

Iniciação rápida à Linguagem C

ALGORITMOS E COMPLEXIDADE PROBLEMAS E ALGORITMOS

Module Introduction. Programação. Cap. 10 Estruturas (Structs)

14. Arquivos. W. Celes e J. L. Rangel. Estruturas de Dados PUC-Rio 13-1

Programação. MEAer. Bertinho Andrade da Costa. Instituto Superior Técnico. Introdução ao Pré-Processador. 2011/2012 1º Semestre

#define MAIN_MODULE //define as variáveis e estruturas, e não apenas declara como extern

Introdução. Manipulação de arquivos em C. Estrutura de Dados II Prof Jairo Francisco de Souza

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

17 - Funções e Procedimentos em C Programação Modular

Arquivos. Estruturas de Dados II Vanessa Braganholo

Programação 2009/2010 MEEC - MEAer Laboratório 5 Semana de 26 de outubro de 2009

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Sobre o Visual C

Curso de Linguagem C

Trabalho 3: Agenda de Tarefas

DAS5102 Fundamentos da Estrutura da Informação

INTRODUÇÃO À LINGUAGEM PASCAL PREFÁCIO

struct LISTA item quant

Trabalho Prático II - Resta 1 Data de Entrega: Conferir no calendário!

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

Métodos Computacionais. Fila

Conceito de classe em C++

Do alto-nível ao assembly

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Introdução ao. Script. Baltazar Tavares (Psycho Mantys)

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

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

PROGRAMAÇÃO DE COMPUTADORES

Método de ordenação - objetivos:

Departamento de Informática - PUC-Rio INF 1005 Programação I P1 22/09/2010 Nota

XML Schema. Um XML schema descreve a estrutura de um documento XML.

Algoritmos e Programação Estruturada

CURSO BÁSICO DE PROGRAMAÇÃO EM TURBO C DESCRIÇÃO DO PROGRAMA. Introdução e conceitos básicos

6. Comunicação entre processos - Pipes

Simulado de Linguagem de Programação Java

2 Segmentação de imagens e Componentes conexas

Resumo da Introdução de Prática de Programação com C. A Linguagem C

ISS Eletrônico. Formato de Arquivos para Transmissão de Documentos Declarados através do aplicativo OFFLINE. Extensão do Arquivo JUNHO2006.

Comunicação entre pai e filho

Introdução à Programação

#define SIM 1 equivale a definição de constantes; a palavra SIM é substituída por 1 toda vez que é utilizada no programa.

PROVA P2 INF /10/2014 Programação II

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

Programação de Computadores I. Linguagem C Função

Fundamentos de Programação

Banco de Dados. Banco de Dados Parte 2. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

Operaçõe õ s c om o Strings Intr oduç ão a o Ponte iros o e Funçõe õ s

Engenharia de Software II

Arquivos. 1 Primeiras palavras. Jander Moreira

Comunicação entre Processos Canal de comunicação Arquitetura da comunicação Modelos de comunicação

Estruturas (Registros)

Programação WEB. Prof. André Gustavo Duarte de Almeida www3.ifrn.edu.br/~andrealmeida. Aula II jquery UI

Curso de C: uma breve introdução

Manipulação de Arquivos

Java RMI. RMI Remote Method Invocation. Chamadas Remotas de Procedimentos (RPC) RPC - Implementação

Linguagem C. Programação Estruturada. Fundamentos da Linguagem. Prof. Luis Nícolas de Amorim Trigo

Tubos ou Pipes de Comunicação

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

SENAC Serviço Nacional de Aprendizagem Comercial Curso de Programação em C. Linguagem C

OProtocolo RPC é um dos protocolos de aplicação mais utilizados, pois permite

Sistemas Operacionais. Sincronização: Semáforos Problema dos Leitores/Escritores

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

Sistema de Entrada/Saída

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS TURMA 2008/1 2 PERÍODO MÓDULO 3 AVALIAÇÃO MP2 DATA 2/10/2008 ESTRUTURAS DE DADOS 2008/2

Programação de Sistemas Carris

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

1 Cálculo do valor à vista

Algoritmos e Programação

Enunciados de exercícios seleccionados de testes e exames P2 / EDa

CRIAÇÃO DE TABELAS NO ACCESS. Criação de Tabelas no Access

Procedimento Gestão Documental

Tipo de Dados em Linguagem C

Linguagens de Programação I

,QVWDODomR. Dê um duplo clique para abrir o Meu Computador. Dê um duplo clique para abrir o Painel de Controle. Para Adicionar ou Remover programas

INF 1007 Programação II

SUPERVISÃO Supervisão Comportamental

Programação 2009/2010 MEEC

Transcrição:

ADTs (Abstract Data Types): Motivação Mesmas estruturas são usadas com vários tipos de dados Listas Pilhas Amontoado FIFOs Inteiros Reais Strings Estruturas O procedimento para inserir um inteiro, real, uma string ou uma estrutura numa lista é similar O código pode (e deve) ser re-utilizado Abstracção dos detalhes de implementação 1

ADT e Colecções de Objectos ADTs são úteis para manipular colecções de objectos Operações típicas Comparações entre objectos Operações de entrada e saída (leitura e escrita) Inserção em colecções Apagamento de colecções Alteração de propriedades (e.g., prioridade) ADTs deste tipo são denominados filas generalizadas 2

Vantagens do Uso de ADTs Solução elegante Separa os problemas: Alto nível: interface de operações sobre tipo de dados Baixo nível: como manter as estruturas de dados Permite comparar diferentes implementações Permite re-utilizar o código Para utilizarmos ADTs, vamos aprender um pouco mais de C 3

Regras de Scope

Organização de Programas Programas normalmente dividos em vários ficheiros Cada ficheiro permite implementar conjunto de funcionalidades relacionadas calculadora.c estatistica.c trigonom.c aritmetica.c 5

Regras de Scope Em C todas as variáveis têm um scope, i.e., um âmbito de acessibilidade & visibilidade, que podem tomar 1 de 4 (na realidade 3) estados: Bloco (variáveis locais) Função Ficheiro (variáveis globais apenas visíveis dentro do ficheiro onde são declaradas) Programa (variáveis globais visíveis em múltiplos ficheiros) 6

Block scope Em C todas as variáveis têm um scope, i.e., um âmbito de acessibilidade & visibilidade Bloco int soma(int v[], int n) { int i, soma=0; for (i=0 ; i<n; i++) soma+=v[i]; return soma; 7

Block scope Em C todas as variaveis tem um scope, i.e., um âmbito de acessibilidade & visibilidade Bloco A utilização do qualificador static permite manter o valor da variável entre chamadas à função int soma(int v[], int n) { 8 int i, static int soma=0; for (i=0 ; i<n; i++) soma+=v[i]; return soma;

Block scope Em C todas as variaveis tem um scope, i.e., um âmbito de acessibilidade & visibilidade Bloco void bubble(int a[], int l, int r){ int i, j; for (i = l; i < r; i++) for (j = r; j > i; j--) if (a[j-1]>a[j]){ ; int t = a[j-1]; a[j-1]=a[j]; a[j]=t; 9

File & Program scope: variáveis globais Um programa C pode ser composto por um conjunto de objectos externos, que podem ser variáveis ou funções Podem ser utilizadas por qualquer função, ao contrário de variáveis internas/locais, que apenas podem ser utilizadas dentro da uma função ou bloco int acumulador; void soma(int valor) { acumulador += valor; 10

File scope: variáveis globais estáticas Variáveis globais definidas como estáticas permitem limitar o seu scope ao ficheiro em que são definidas Funções também podem ser definidas como estáticas: Limita scope da função entre ponto da definição e o fim do ficheiro onde definição ocorre static int acumulador; void soma(int valor) { acumulador += valor; 11

Program scope: variáveis externas Uma variável externa é definida quando são indicadas as propriedades da variável, e quando são especificados os seus requisitos em termos de memória Uma variável externa é declarada quando apenas são indicadas as suas propriedades extern int int b; a; Uma variável apenas pode ter uma definição, embora possa ser declarada várias vezes 12 int a; Dimensão de um array obrigatória na definição do array, mas opcional na declaração Inicialização de uma variável externa apenas pode ter lugar na definição da variável

De uma forma geral, temos que Os programas são divididos em vários módulos Cada módulo providencia um conjunto de funcionalidades bem definido e coerente, incluindo a especificação, a documentação e os testes de validação necessários. No caso da programação em C, cada um desses módulos é em geral implementado em ficheiros diferentes e, de facto, cada módulo pode ser subdividido também por vários ficheiros.

De uma forma geral, temos que Existem em geral dois tipos de ficheiros: header files, ou ficheiros de cabeçalho, onde devem ser incluídas todas as declarações partilhadas para um dado módulo, incluindo o cabeçalho das funções e os tipos de dados; source files, ou ficheiros fonte, onde devem ser implementadas todas as funções.

Header Files (Ficheiros de Cabeçalho) São utilizados para incluirem todas as declarações partilhadas por mais de um ficheiro. calculadora.c estatistica.c trigonom.c aritmetica.c calculadora.h 15

Exemplo 1: variáveis externas Variáveis externas utilizadas antes de serem definidas, ou definidas noutro ficheiro, deverão ser declaradas com a palavra-chave extern #include stuff.h int x; int main() { x=2; print(); return 0; main.c #ifndef _STUFF_ #define _STUFF_ #include <stdio.h> void print(); extern int x; #endif stuff.h #include stuff.h void print() { printf( %d\n,x); stuff.c 16

Exemplo 1: variáveis externas Variáveis externas utilizadas antes de serem definidas, ou definidas noutro ficheiro, deverão ser declaradas com a palavra-chave extern #include stuff.h int x; int main() { x=2; print(); return 0; #ifndef _STUFF_ #define _STUFF_ #include <stdio.h> void print(); extern int x; #endif Aqui não estou a reservar memória. #include stuff.h void print() { printf( %d\n,x); 17 main.c stuff.h Aqui estou a definir x e a reservar memoria para um inteiro stuff.c

Exemplo 2: Módulo para números complexos complexos.h #ifndef COMPLEXOS_H #define COMPLEXOS_H Garante que este ficheiro é apenas incluído uma vez. typedef struct { float real, img; complexo; complexo soma(complexo a, complexo b); complexo le_complexo(); void escreve_complexo(complexo a); #endif

Exemplo 2: Módulo para números complexos complexos.c #include <stdio.h> #include "complexos.h" complexo soma(complexo a, complexo b) { a.real += b.real; a.img += b.img; return a; complexo le_complexo() { complexo a; char sign; scanf("%f%c%fi", &a.real, &sign, &a.img); if (sign == '- ) a.img *= -1; return a; void escreve_complexo(complexo a) { if (a.img >= 0) printf("%f+%fi", a.real, a.img); else printf("%f%fi", a.real, a.img);

Exemplo 2: Módulo para números complexos main.c #include <stdio.h> #include "complexos.h" int main() { complexo x, y, z; x = le_complexo(); y = le_complexo(); z = soma(x, y); escreve_complexo(x); printf(" + "); escreve_complexo(y); printf(" = "); escreve_complexo(z); printf("\n"); Compilação! return 0; $ gcc -Wall -ansi -pedantic -o complexos main.c complexos.c

I/O Operações sobre ficheiros

Operações sobre ficheiros Até este momento fizemos sempre leituras do stdin e escrevemos sempre para o stdout. Vamos ver agora como realizar estas operações sobre ficheiros. Como abrir um ficheiro? FILE *fp; Ponteiro para ficheiro Modo de abertura do ficheiro. Neste caso estamos a abrir o ficheiro em modo de leitura fp=fopen( tests.txt", "r"); 24

Operações sobre ficheiros Até este momento fizemos sempre leituras do stdin e escrevemos sempre para o stdout. Vamos ver agora como realizar estas operações sobre ficheiros. Como abrir um ficheiro? r abre para leitura (read) w abre um ficheiro vazio para escrita (o ficheiro não precisa de existir) a abre para acrescentar no fim ( append ; ficheiro não precisa de existir) r+ abre para escrita e leitura; começa no início; o ficheiro tem de existir w+ abre para escrita e leitura (tal como o w ignora qualquer ficheiro que exista com o mesmo nome, criando um novo ficheiro) a+ abre para escrita e leitura (output é sempre colocado no fim) mas há mais Modos de abertura 25

Exemplo #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; fp = fopen("teste.txt", "r"); if (fp == NULL) { printf( teste.txt: No such file or directory\n ); exit(1); Se não conseguir abrir fp fica igual a NULL return 0; 26

Exemplo #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; fp = fopen("teste.txt", "r"); if (fp == NULL) { perror( teste.txt ); exit(1); Escreve a mesma mensagem de erro. return 0; 27

Exemplo 2 #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; fp = fopen("teste.txt", "r"); if (fp == NULL) { perror( teste.txt ); exit(1); Fecha o ficheiro fclose(fp); return 0; 28

Exemplo 3 #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; fp = fopen("teste.txt", w"); if (fp == NULL) { perror( teste.txt ); exit(1); Escreve para um ficheiro fprintf(fp, "Hi file!\n"); fclose(fp); 29 return 0;

Exemplo 3 #include <stdio.h> #include <stdlib.h> int main() { FILE *fp; fp = fopen("teste.txt", w"); if (fp == NULL) { perror( teste.txt ); exit(1); Escreve para um ficheiro (alternativa) fputs("hi file!, fp); fclose(fp); 30 return 0;

Exemplo 4 #include <stdio.h> #include <stdlib.h> int main() { FILE *myfile; int i; float mydata[100]; myfile = fopen( info.dat", r"); if (myfile== NULL) { perror( info.dat ); exit(1); for (i=0;i<100;i++) fscanf(myfile, %f,&mydata[i]); Lê um conjunto de 100 floats guardados num ficheiro 31 fclose(myfile); return 0;

32