Estruturas de Dados + Algoritmos = Programas

Slides:



Advertisements
Apresentações semelhantes
Estruturação de Linguagens (Pascal e C++)
Advertisements

Programação em Java Prof. Maurício Braga
Linguagem de Programação I
Adaptado de material da profa. Maria Aparecida Livi
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
LPG - I: Alocação Dinâmica de Memória - Ponteiros
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Algoritmos e Estruturas de Dados II
PROGRAMAÇÃO ou LINGUAGEM C?
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Robson Godoi / Sandra Siebra
Ponteiros.
Tratamento de Ficheiros
Revisão da Linguagem C.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
Algoritmos e Programação Thyago Maia Tavares de Farias Aula 25.
O Portal do Estudante de Computação
O Portal do Estudante de Computação
Capítulo 10 Strings & File I/O. Strings Strings são um conjunto de Caracteres ASCII. No Controle de Instrumentação pode-se converter valores numéricos.
GAUSS COM PIVOTEAMENTO
João Lucas de Oliveira Torres
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Aula prática 6 Vetores e Matrizes
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação II Parte IX
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
Introdução a Programação COM 100
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Introdução ao uso de vatores na linguagem PASCAL.
Aula prática 6 Vetores e Matrizes
Prof. Ricardo Santos PONTEIROS
Computação Eletrônica
Linguagem C : Ponteiros
Aula 13 - Armazenamento de Dados em Arquivos
Vetores e Matrizes Ameliara Freire
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Arquivo.
Ambiente de Execução - Rotinas
Algoritmos e Estruturas de Dados I – Ponteiros
Linguagem Pascal Prof. Sérgio Rodrigues.
Linguagem PASCAL1 Módulo 3 Estrutura de Dados.. Linguagem PASCAL2 Arrays (“Variáveis compostas homogêneas”) n Arrays unidimensionais: identificador: array.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
ARQUIVOS.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Aula 11 – 24/05/2014 Arquivos textos. Manipulação de arquivos texto O armazenamento de dados em arquivos é muito utilizado em aplicações pois os dados.
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Algoritmos e Estruturas de Dados
Operações com Arquivos Monitoria A estrutura FILE  É como um tipo de dado, mas não é um tipo propriamente dito  Definido no arquivo cabeçalho.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Aula Prática 11 Operações com Arquivos Monitoria
Programação de Computadores I – Arquivos
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Introdução à Programação
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Computacional Aula 9: Meu primeiro programa em C
AULA 09 PROGRAMAÇÃO I. Estruturas de Dados Heterogêneas 10/08/2010 Programação I 2 Objetivo: Estudar os tipos de dados heterogêneos:  Registros;  Arrays.
Estruturas Homogêneas – Vetores e Matrizes
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Linguagem de Programação
Programação em C Aula 9.
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.
Arquivos textos (text)
Programação e Sistemas da Informação 48 tempos IPTrans, Novembro 2009 Prof. Marisa Gomes.
Transcrição da apresentação:

Estruturas de Dados + Algoritmos = Programas Programação em Pascal Estruturas de Dados + Algoritmos = Programas

Sumário Estruturas de Dados Strings Tipos definidos pelo utilizador Tipos simples Tipos definidos por enumeração Tipos definidos por subdomínio Estruturas complexas Matrizes (Arrays) Fichas (Records) arquivos (Files)

Cadeias de caracteres Strings Em pascal um tipo de dados serve para armazenar explicitamente sequências de caracteres – a string Pode ser dimensionada (com o número máximo de caracteres que pode conter) formato string[X] no caso de não ser dimensionada funciona como X=255 A função length obtém a verdadeira dimensão da string (em caracteres) Na prática uma string[X] é um array de caracteres String[X] é um array [1..X] of char É possível aceder a cada variável char que constitui a string individulmente

Cadeias de caracteres Strings - Exemplo Program TestaString; Var S: string; S1: string[80]; Begin Writeln('Introduza a string a analisar'); S:= 'A string que foi lida foi: '; Readln(S1); Writeln(S, S1); Writeln('O comprimento da string ‘,S1,’ é :',length(S1)); End.

Tipos definidos pelo programador Definição e Sintaxe Zona de definição de tipos Sintaxe: Type NomeTipo = definição_do_tipo; Tipo definido por enumeração NomeTipo = ( nome1, nome2, nome3) Apresenta todos os componentes possíveis para o tipo As suas componentes são identificadores, não valores Cria um tipo enumerado

Tipos definidos pelo programador Definição e Sintaxe Tipo definido por gama de valores ou subdomínio Sintaxe: NomeTipo= ValorInicial ..ValorFinal As suas componente são valores enumeráveis Define que esse tipo possui todos os valores desde ValorInicial até ValorFinal Pode ser definida uma gama de valores sobre qualquer tipo enumerado Nota Não podem ser usados directamente instruções de entrada (read) ou saída (write) em tipos definidos por enumeração.

Tipos definidos pelo programador Exemplo de aplicação ... Type Testacoes=(primavera, verao, outono, inverno); Tmeses= 1..12; Var estacao: Testacoes; mes: Tmeses; mes := 3; estacao := primavera; case estacao of verao: writeln('bom tempo'); primavera, outono: writeln('tempo aceitável'); inverno: writeln('tempo mau'); end;

Arrays Matrizes e Vetores Usam-se arrays para representar variáveis que são: Elementos do mesmo tipo Relacionados entre si Sobre os quais pretendemos fazer operações semelhantes Que pretendemos representar por um nome comum Os arrays podem ser: Unidimensionais (chamados de vetores) Multidimensionais (chamados de matrizes) Cada componente de um array é uma variável individual Possui um nome (derivado do nome do array) Possui um tipo (o do tipo base do array) Possui um valor (manipulado como qualquer variável)

Vetores Arrays unidimensionais Sintaxe: Type tipo_array1 = array [ gama_de_valores1] of tipo_base1; {define o tipo tipo_array1 como um vetor de valores do tipo tipo_base1 } ... Var nome_array1: tipo_array1; {declaração de um tipo definido anteriormente, que é um array} nome_array2: array [gama_de_valores2] of tipo_base2; {declaração explícita} Exemplo: Type tipolista= array [1..3] of real; Var lista: tipolista;

Vetores Exemplos de aplicação Cada elemento de um tipo estruturado pode ser usado exatamente nas mesmas situações em que qualquer outra variável do mesmo tipo pode ser usada ... Readln(Lista[2]); Lista[1]:= 2.0; Lista[3]:= Lista[2]*3+Lista[1]; Writeln(Lista[3]); O índice, que identifica a variável dentro do array, pode ser obtido por qualquer expressão: que devolva um valor do mesmo tipo que o usado na gama do array N:=2; Lista[3]:= Lista[N]+Lista[3-N]; Um array em Pascal tem um número fixo de elementos Não é possível acessar a elementos fora da gama que define o array For i:= 1 To 3 Do If Lista[i]>0 Then Writeln(i, Lista[i]:10:2);

Utilização de Vetores Exemplo de aplicação Program média (input, output); {programa que lê um conjunto de valores e apresenta para cada um destes a distância deste valor à média} Const dimensao = 8; Type ArrayReal = array[1..dimensao] of real; Var X: ArrayReal; media, soma: real; i: integer; Begin Writeln('Escreva ',dimensao,' números reais'); Soma := 0; For i:= 1 to dimensao do begin Readln(X[i]); soma:= soma+X[i]; End; Media := soma/dimensao; Writeln('O valor da média é ', média); End.

Arrays multidimensionais Matrizes O Pascal permite definir arrays com mais do que uma dimensão - matrizes Sintaxe: type tipo_array_mult1 = array [gama_valores1, gama_valores2,..., gama_valoresN] of tipo_base; No caso de apenas termos 2 dimensões podemos considerar o array como uma tabela tradicional Exemplo: Type TTab= array [1..4, 1..10] of integer; Var Tab: TTab; Tab[2,8] Linha 2 Tab Coluna 8

Arrays multimensionais Mais que duas dimensões - exemplo Var VCubo: Array [1..7, 1..10, 'A'..'D'] of integer; VCubo Tabela 'C' Linha 5 VCubo[5,9,'C'] Coluna 9 Informática - OGE VCubo[7,3,'A'] Paulo Melo

Records Fichas ou Registos Ocasionalmente é conveniente guardar informação relacionada entre si numa só estrutura, mesmo que sejam de tipos diferentes. Exemplo: informação acerca de um livro: Titulo Autor Nº de Páginas Ano de Edição Preço Livro Em Pascal: Type Tlivro = record Titulo: string[80]; Autor: string; No_paginas: integer; Ano_edicao: 1457..2002; Preco: real; End;

Records Sintaxe e Exemplo de aplicação Type ficha_util = record BI: integer; nome: string[80]; end; ... Var r1: ficha_util; r2: record campo1: tipo1; campoN: tipoN; Cada campo de uma variável de tipo record é acedido pelo seu nome: Writeln('Introduza o seu nome'); Readln(r2.nome); Writeln('Introduza o seu número de BI'); Readln(r2.BI); É possível usar outros tipos estruturados como blocos de construção (ex: array de records): ... Type grupo_utils= array[1..100] of ficha_util; Var g: grupo_utils; i: integer; for i:= 1 to 100 do begin Writeln('Utilizador: ', i); Writeln('Nome: ', g[i].nome); Writeln('Identidade:', g[i].nome); end; A estrutura assim construída pode ser tão complexa quanto se deseje

Arrays vs. Records Comparação dos tipos estruturados São ambos mecanismos de estruturar informação, mas com funções diferentes; Num registo, os tipos dos dados podem ser diferentes Cada campo dentro de um record tem um tipo independente dos restantes campos Num registo, os nomes dos campos são identificadores Cada componente de um array é indexado por um valor de um tipo enumerado (X[1], Z[2,4], etc.) É possível usar ciclos para iterar (e fazer operações) sobre todos os elementos de um array Cada componente de um record é indexado por um nome (R.nome) Não é possível iterar sobre os campos de um record

Arquivos Informação persistente Os dados (variáveis) de um programa em Pascal apenas existem enquanto o programa executa Uma variável perde o seu valor entre corridas sucessivas do programa Necessidade de um mecanismo de armazenagem de informação em memória secundária arquivos arquivos em Pascal Correspondem aos arquivos geridos pelo sistema operativo São associados a um determinado tipo escolhido pelo programador (arquivo de inteiros, reais, caracteres, etc.)

Arquivos Informação persistente Sintaxe: Type fich_inteiros = file of integer; ... Var fi: fich_inteiros;

Arquivos em Pascal Características e Limitações Em Pascal um arquivo Precisa de ser "aberto" antes de poder ser utilizado E "fechado" após ter sido usado Apenas pode ser usado para leitura OU escrita Não é possível ler de e escrever no mesmo arquivo É necessário fechar o arquivo e voltar a abri-lo para trocar de operações Apenas pode ser lido ou escrito sequencialmente não é possível alterar uma parte do meio de um arquivo É necessário usar um arquivo auxiliar... Porém, em Turbo Pascal algumas destas limitações podem ser levantadas... Em Turbo Pascal, para usar um arquivo é preciso associar a variável que o representa em Pascal ao nome do arquivo físico no sistema operativo Operação Assign Sintaxe: Assign(nome_var, nome_arquivo) Onde nome_var: file of qualquer_tipo nome_arquivo: string

Arquivos em Pascal Operações de Leitura ou Escrita Abrir o arquivo para leitura Reset(f); Ler do arquivo um valor para a variável x Read(f,x); Fechar o arquivo Close(f) Escrita Abrir o arquivo para escrita Rewrite(f); Escrever no arquivo o valor da variável x Write(f,x); Fechar o arquivo Close(f)

Arquivos em Pascal Operações de Leitura ou Escrita Apenas podem ser usadas as instruções que impliquem a mudança de linhas (ReadLn ou WriteLn) em arquivos de texto Tipos text ou file of char Nestes arquivos é possível verificar se estamos no fim da linha usando a função EOLN (end-of-line) Eoln(f) devolve o valor verdadeiro se o arquivo f estiver no fim de uma linha Em todo o tipo de arquivos é possível verificar se chegámos ao fim do arquivo com a função EOF (end-of-file) EOF(f) devolve o valor verdadeiro se o arquivo estiver no fim

Arquivos em Pascal Exemplo de Aplicação Criar um programa para contar quantas linhas e caracteres existem num arquivo de texto (de nome teste.txt) e escrever esses resultados num arquivo de inteiros (de nome result.bin) Lê cada caracter e incrementa um contador de caracteres Usa as funções EOLN para determinar o fim da linha Quando está no fim da linha, incrementa o contador de linhas Usa a função EOF para saber quando chegou ao fim do arquivo a ser lido

Ponteiros em Pascal Até agora temos definido variáveis de forma estática, ou seja, reservamos o espaço na memória necessária para as variáveis que iremos utilizar no programa. Isto funciona bem quando sabemos o quanto de memória iremos utilizar, mas e quando não sabemos? Tome por Exemplo as definições dos ARRAY’s. Será que sempre temos certeza do tamanho de um ARRAY poderá ter por toda a vida de um programa?

Ponteiros em Pascal Será que o meu sistema de cadastro de clientes, o qual usa um ARRAY com 10.000 posições é o suficiente? Será que nunca irá acontecer de se tentar cadastrar o cliente de número 10.001? E o que acontece quando os clientes cadastrados nunca passarem de 100? As posições de memória restantes (9.900) não poderão ser utilizadas por outras variáveis, pois já estão reservadas. Pensando neste tipo de problema, foi desenvolvido um novo conceito para alocação de memória, onde poderemos reservar espaço da memória disponível (HEAP) a medida que for necessário, da mesma forma que poderemos liberar posições de memória quando não mais precisarmos delas.

Ponteiros em Pascal Exemplo: Alocar na memória para uma variável do tipo INTEGER e atribuir a esta posição de memória um valor qualquer PROGRAM ESTATICO; VAR Número : INTEGER; BEGIN Número := 10; END.   No Exemplo acima ocorre as seguintes situações: a) Reservamos espaço na memória suficiente para armazenar dois (2) BYTE’s, ou seja, um INTEGER, e demos a esta posição de memória um Nome simbólico: “Número” b) Atribuímos a variável “Numero” o valor dez (10).

Ponteiros em Pascal A Sintaxe para atribuição de valores é a mesma utilizada em variáveis simples, a única diferença é que devemos colocar após o Nome da variável apontadora o símbolo “ ^ “ Exemplo: PROGRAM ATRIBUI; VAR Ap_Número : ^INTEGER; BEGIN NEW(Ap_Número); Ap_Número ^:= 10; DISPOSE (Ap_Número); END.

Ponteiros em Pascal No Exemplo anterior ocorre o seguinte:   a) Criamos uma variável que irá apontar para dois (2) BYTE’s (um INTEGER) na memória. b) Alocamos espaço suficiente para armazenar um valor do tipo INTEGER e fazemos com que a variável “Ap_Número” aponte para a posição de memória alocada. c) Colocamos na posição de memória apontada por “Ap_Número” o valor dez (10). d) Liberamos os dois (2) BYTE’s apontados por “Ap_Número”. A informação não mais poderá ser acessada.

Ponteiros em Pascal Sintaxe para definição: <Nome da variável> : ^<tipo>   Exemplo 1: Definir variáveis pointer para os tipos STRING, INTEGER, REAL, CHAR, BOOLEAN. PROGRAM DEFINE_POINTER; VAR Ap_STRING : ^STRING; Ap_INTEGER : ^INTEGER; Ap_REAL : ^REAL; Ap_BYTE : ^BYTE; Ap_CHAR : ^CHAR; Ap_BOOLEAN : ^BOOLEAN; BEGIN <comandos>; END.

Ponteiros em Pascal Caso seja necessário definir variáveis pointers para RECORD’s e ARRAY’s será preciso antes criar tipos de dados que representem estes mesmos RECORD’s e ARRAY’s.   Exemplo 2: Definir uma variável pointer para um ARRAY[1..2] OF STRING. PROGRAM DEFINE_ARRAY_POINTER; TYPE Tvetor = ARRAY [1..2] OF STRING; VAR Ap_vetor : ^Tvetor; BEGIN <comandos>; END.

Ponteiros em Pascal Rotina : NEW() Função : Aloca espaço na memória para uma informação, com o tamanho definido pelo tipo da variável pointer. Sintaxe : NEW(Variável Pointer) Exemplo: PROGRAM ALOCA; VAR Ap_WORD : ^WORD; BEGIN NEW(Ap_WORD); END.  

Ponteiros em Pascal Rotina : DISPOSE() Função : Libera espaço na memória, o número de BYTE’s liberados dependerá do tipo da variável pointer utilizada. Uma vez liberada memória, o valor lá armazenado estará perdido. Sintaxe : DIPOSE(Variável Pointer) Exemplo: PROGRAM LIBERA; VAR Ap_WORD : ^WORD; BEGIN NEW(Ap_WORD); DISPOSE (Ap_WORD); END.

Ponteiros em Pascal Exemplo de aplicação (código) Exemplo de uso de ponteiros em C. Coloque em Pascal e explique as linhas: int main () { int i; int vetorTeste[3] = {4, 7, 1}; int *ptr = vetorTeste; printf("%p\n", vetorTeste); printf("%p\n", ptr); printf("%p\n", &ptr); for (i = 0; i < 3; i++) printf("O endereço do índice %d do vetor é %p\n", i, &ptr[i]); printf("O valor do índice %d do vetor é %d\n", I, ptr[i]); } return 0;

Ponteiros em Pascal Exemplo de aplicação (código) Faça: Crie um vetor com 5 elementos, sendo que cada posição do vetor corresponderá a um pointer para um valor do tipo REAL. Faça a leitura de 5 valores e armazene-os na memória.