Prévia do material em texto
1 Aula 6 Professores: Dante Corbucci Filho Alexandre Plastino Conteúdo: - Tipos Estruturados (1a Parte) - Array (Vetor) - String (Cadeia de Caracteres) 2 Array (ou Vetor) Um array é um agregado de elementos (valores) de um mesmo tipo. Lista nome do vetor 4o_ elemento Lista[4] posição dos elementos Lista é um vetor de 100 elementos 7 19 4 10 8 1 1 2 3 4 99 100 3 Array (ou Vetor) Lista[1] representa o primeiro elemento e possui o valor 7. Lista[2] representa o segundo elemento e possui o valor 19. Lista[100] representa o centésimo elemento e possui o valor 1. Lista[i] representa o i-ésimo elemento. _ _ _ O índice ou seletor do elemento indica sua ordem (posição) 7 19 4 10 8 1 1 2 3 4 99 100 Lista 4 Array (ou Vetor) Os elementos de um vetor podem ser caracterizados como variáveis comuns, podendo aparecer em expressões e atribuições. Lista[1] := Lista[3]*2 + Lista[4] 7 19 4 10 8 1 1 2 3 4 99 100 Lista 18 19 4 10 8 1 1 2 3 4 99 100 Lista 5 Array (ou Vetor) O índice de um elemento do vetor pode ser uma variável ou expressão. i:= 2; Lista[i] := Lista[i-1]*2 - Lista[Lista[100]] 14 1 7 7 19 4 10 8 1 1 2 3 4 99 100 Lista 7 7 4 10 8 1 1 2 3 4 99 100 Lista 6 Array (ou Vetor) Suponha que se queira somar todos os elementos de um vetor. begin Soma:=0; for Ind:= 1 to 100 do Soma:= Soma + Lista[Ind]; end 7 Características: • Trata-se de uma estrutura homogênea, isto é, formada por elementos de um mesmo tipo, chamado tipo base; • Todos os elementos da estrutura são igualmente acessíveis, ou seja, o tempo e o tipo de procedimento para acessar qualquer elemento são iguais; • Cada elemento da estrutura tem um nome próprio, composto pelo nome do vetor e pelo índice. Array (ou Vetor) 8 Array (ou Vetor) Declaração type T_Vetor = array [1 . . 100] of integer; var Lista: T_Vetor; ou ainda var Lista: array [1 . . 100] of integer; 9 Array (ou Vetor, ou Matriz N-Dimensional) Declaração - Diagrama Sintático • Tipo do índice pode ser qualquer tipo escalar; • Tipo base pode ser qualquer tipo simples ou estruturado. , array [ ] of Tipodo Índice Tipo Base 10 Array (ou Matriz) A declaração a seguir corresponde a uma matriz (ou array de duas dimensões) cujo tipo base é boolean. var Matriz: array [1 . . 2,1 . . 5] of boolean; Matriz true falsefalse true true true true false true false Matriz[2,3] 11 Array (ou Vetor) program Atribuicao(input{teclado}, output{vídeo}); type t_vetor = array[1..100] of integer; var X, Y: t_vetor; Z: array[1..10] of integer; begin X:= Y; {Esta atribuição pode ser feita diretamente pois X e Y são vetores de mesmo tipo, ou pode ser feita elemento a elemento} Z:= Y; {Erro de compilação: Z e Y são vetores de tamanhos e tipos diferentes} Y:= Z; {Erro de compilação: Apesar de Z ser menor que Y, são de tipos diferentes} end. 12 program Erros(input{teclado}, output{vídeo}); var X: array[1..100] of integer; A: boolean; B,I: integer; begin A:= X[1]; {Erro de compilação: A não é do mesmo tipo que os elementos de X} I:= 200; B:= X[I]; {Erro de execução: valor de I fora do intervalo 1..100} B:= X[A]; {Erro de compilação: A não é do mesmo tipo que o índice de X} end. Array (ou Vetor) 13 Array (ou Vetor) Observação: Leitura e Escrita de um vetor devem ser realizadas elemento a elemento. 14 Exemplos Uma lista com 100 números inteiros const Tamanho = 100; type T_Vetor = array [1 . . Tamanho] of integer; var Lista: T_Vetor; 15 Exemplos Uma linha de texto de 80 posições const Num_Col = 80; type T_Linha = array [1 . . Num_Col] of char; var Buffer: T_Linha; 16 Exemplos Vetor para guardar quantas vezes um caracter aparece em um texto type T_Positivo = 0 . . maxint; T_Conta = array [char] of T_Positivo; var Frequencia: T_Conta; 17 Exemplos Uma página de 66 linhas de texto Folha representa uma matriz de 66 linhas por 80 colunas, Folha[i] representa a i-ésima linha da matriz, ou seja, um vetor de 80 caracteres, Folha[i][j] representa o caracter que está na linha i e coluna j. type T_Linha = array [1 . . 80] of char; T_Pagina = array [1 . . 66] of T_Linha; var Folha: T_Pagina; 18 Exemplos Lista com os nomes dos funcionários const NumMaxFunc = 250; TamNome = 30; type T_Nome = array [1 . . TamNome] of char; T_ListaNome = array [1 . . NumMaxFunc] of T_Nome; var ListaNomeFunc: T_ListaNome; 19 Exemplos Estado do Jogo da Velha type T_Marca = (Nada, Cruz, Bola); T_Tabuleiro = array [1 . . 3] of array [1 . . 3] of T_Marca; var Jogada: T_Tabuleiro; 20 Exemplos Tabela com os resultados de cada aluno para cada prova const NumAlunos = 100; NumProvas = 10; type T_CodAluno = 1 . . NumAlunos; T_CodProva = 1 . . NumProvas; var Resultado: array [T_CodAluno] of array [T_CodProva] of real; 21 String (ou Cadeia de Caracteres) Um objeto do tipo string representa um vetor de caracteres (cadeia de caracteres) de tamanho variável. A declaração indica que a variável Nome representa uma cadeia de até 20 caracteres. var Nome: string [20] 22 String (ou Cadeia de Caracteres) A atribuição é válida e será internamente representada da seguinte forma. Nome:= ’Ana’ Nome Indica o tamanho da cadeia armazenada 3 A n a 0 1 2 3 19 20 23 String (ou Cadeia de Caracteres) A atribuição é válida, mas a constante atribuída à variável Nome possui mais de 20 caracteres, sendo truncada! Nome:= ’Ana Maria Ribeiro de Carvalho’ 24 String (ou Cadeia de Caracteres) Declaração - Diagrama Sintático • Tamanho é um valor entre 1 e 255. • Se a definição do tamanho for omitida, será declarada uma cadeia de caracteres de tamanho 255 (default). string [ ]Tamanho 25 String (ou Cadeia de Caracteres) Atribuição program Cadeia1(input{teclado}, output{vídeo}); var X: string[10]; Y: string[20]; Z: string[30]; begin Z:= ’Ensino a Distância’; Y:= Z; {Neste ponto, Y vale ’Ensino a Distância’} X:= Y; {Neste ponto, X vale ’Ensino a D’} end. 26 String (ou Cadeia de Caracteres) Comparação: operadores relacionais =, <>, <=, >=, <, > program Cadeia2(input{teclado}, output{vídeo}); var X, Y, Z: string[10]; begin X:= ’ABCD’; Y:= ’ABCZ’; Z:= ’ABCDEFG’; {Neste ponto, retornam true as seguintes comparações: X < Y, X <> ’DCBA’, X < Z, Y > Z } end. 27 String (ou Cadeia de Caracteres) Indexação de cada caracter O tipo string pode ser tratado também como um Array. Considere a declaração: e a atribuição: Temos então que: var Nome: string [20]; Nome:= ’Ana’; Nome[0] = ASCII 3 Nome[1] = ’A’ Nome[2] = ’n’ Nome[3] = ’a’ 28 String (ou Cadeia de Caracteres) Função length(Cad{e}:string): integer • Retorna o tamanho da cadeia Cad. Considere a declaração: e a atribuição: Temos então que: length(Nome) = 3 var Nome: string [20]; Nome:= ’Ana’; 29 String (ou Cadeia de Caracteres)Função length(Cad{e}: string): integer Observe que, para qualquer string A, length(A) = ord( A[0] ) 30 String (ou Cadeia de Caracteres) Função concat(A{e},B{e}: string): string Retorna a concatenação das cadeias A e B. Considere a declaração: var Nome, Sobrenome, NomeCompleto: string; e as atribuições: Nome:= ’Ana’; Sobrenome:= ’Carvalho’ NomeCompleto:= concat (Nome,Sobrenome); Temos então que: NomeCompleto = ’AnaCarvalho’ 31 String (ou Cadeia de Caracteres) Função concat(A{e},B{e}: string): string A concatenação pode ser realizada pelo operador + Considere a declaração: var Nome, Sobrenome, NomeCompleto: string; e as atribuições: Nome:= ’Ana’; Sobrenome:= ’Carvalho’ NomeCompleto:= Nome + ’ ’ + Sobrenome; Temos então que: NomeCompleto = ’Ana Carvalho’ 32 String (ou Cadeia de Caracteres) Procedimento delete (var Cad{e/s}: string; Inicio{e}, Quantos{e}: integer) Retira Quantos caracteres da cadeia Cad, começando na posição Inicio. Considere a declaração: var Nome: string [20]; e o trecho de programa: Nome:= ’Ana Carvalho’; delete (Nome, 4, 9); Temos então que: Nome = ’Ana’ 33 String (ou Cadeia de Caracteres) Procedimento insert(Nova{e}: string; var Velha{e/s}: string; Inicio{e}: integer) Insere a cadeia Nova na cadeia Velha, começando na posição Inicio. Considere a declaração: var Nome: string [20]; e o trecho de programa: Nome:= ’Ana Carvalho’; insert (’ de’, Nome, 4); Temos então que: Nome = ’Ana de Carvalho’ 34 String (ou Cadeia de Caracteres) Função copy(Cad{e}: string; Inicio{e}, Quantos{e}: integer): string Retorna a subcadeia de Cad, que tem Quantos caracteres, começando na posição Inicio. Considere a declaração: var Nome, A: string [20]; e o trecho de programa: Nome:= ’Ana Carvalho’; A:= copy(Nome, 5, 8); Temos então que: A = ’Carvalho’ 35 String (ou Cadeia de Caracteres) Função pos(Parte{e}, Completa{e}: string): integer Retorna a posição inicial da subcadeia Parte dentro da cadeia Completa. Considere a declaração: var Nome: string [20]; i: integer; e o trecho de programa: Nome:= ’Ana Carvalho’; i:= pos(’Carvalho’,Nome); Temos então que: i = 5 36 String (ou Cadeia de Caracteres) Função pos(Parte{e}, Completa{e}: string): integer Retorna 0 (zero) caso Parte não seja subcadeia de Completa. Considere a declaração: var Nome: string [20]; i: integer; e o trecho de programa: Nome:= ’Ana Carvalho’; i:= pos(’de’,Nome); Temos então que: i = 0 37 String (ou Cadeia de Caracteres) Leitura e Escrita Variáveis do tipo string podem ser lidas e escritas através dos comandos read, readln, write e writeln. 38 Exemplo com Vetor Program Classico(input{teclado}, output{vídeo}); Const Tam = 10; Type T_Dominio = 1..Tam; T_Vetor = array[T_Dominio] of real; Var Numeros: T_Vetor; Begin End. Especificação do Problema: Faça um programa para ler, do teclado, dez números reais e escrevendo-os, no vídeo, em ordem crescente. Metodologia para a Solução: 2. Escolha um nome para o programa e diga os parâmetros do programa; 3. Salve o programa no seu diretório; 4. Identifique a "necessidade" de constantes: Tam; 5. Identifique a "necessidade" de tipos: T_Dominio e T_Vetor; 6. Salve-o, novamente, e compile-o (via fpc). 7. Declare as variáveis necessárias: Numeros; 39 Exemplo com Vetor Metodologia para a Solução: 2. Identifique "macro" operações a serem realizadas: Ler, Ordenar, Escrever; Program Classico(input{teclado}, output{vídeo}); Const Tam = 10; Type T_Dominio = 1..Tam; T_Vetor = array[T_Dominio] of real; Var Numeros: T_Vetor; Begin Ler(Numeros); Ordenar(Numeros); Escrever(Numeros); End. Vídeo Teclado Classico 40 1. Faça os cabeçalhos e blocos vazios ("stubs") das operações; 2. Salve o programa novamente. Compile-o. Program Classico(input{teclado}, output{vídeo}); Const Tam = 10; Type T_Dominio = 1..Tam; T_Vetor = array[T_Dominio] of real; Procedure Ler(Var V{s}: T_Vetor); begin end; Procedure Ordenar(Var V{e/s}: T_Vetor); begin end; Procedure Escrever(V{e}: T_Vetor); begin end; Var Numeros: T_Vetor; begin Ler(Numeros); Ordenar(Numeros); Escrever(Numeros); end. 41 Program Classico(input{teclado}, output{vídeo}); ... Procedure Ler(Var V{s}: T_Vetor); var ind: integer; begin for ind:= 1 to Tam do begin write(output, ’Elemento[’, Ind, ’]= ’); readln(input, V[Ind]); end; end; ... Var Numeros: T_Vetor; Begin Ler(Numeros); Ordenar(Numeros); Escrever(Numeros); End. 1. Escreva o corpo de uma primeira operação (escolhida por funcionalidade); 2. Salve, compile e execute o programa. V Teclado Ler Vídeo {s} 42 1. Escreva o corpo da próxima operação (escolhida por funcionalidade); 2. Salve, compile e execute o programa. Program Classico(input{teclado}, output{vídeo}); ... Procedure Escrever(V{e}: T_Vetor); var ind: integer; begin for ind:= 1 to Tam do writeln(output, ’Elemento[’, Ind, ’]= ’, V[ind]); end; ... Var Numeros: T_Vetor; Begin Ler(Numeros); Ordenar(Numeros); Escrever(Numeros); End. V Vídeo {e} Escrever 43 Procedure Ordenar(Var V{e/s}: T_Vetor); Procedure Trocar(Var A{e/s}, B{e/s}: Real); begin end; Procedure Selecionar(Vet{e}: T_Vetor; Inicio{e}:T_Dominio; Var Local{s}: T_Dominio); begin end; Var ind: T_Dominio; Begin for ind:= 1 to Tam-1 do begin Selecionar(V, Ind, Posicao); Trocar(V[Ind], V[Posicao]); end; End; • Escreva o corpo da próxima operação (escolhida por funcionalidade); V {e/s} Ordenar 44 Procedure Ordenar(Var V{e/s}: T_Vetor); Procedure Trocar(Var A{e/s}, B{e/s}: Real); var Temp: real; begin Temp:= A; A:= B; B:= Temp; end; Procedure Selecionar(Vet{e}: T_Vetor; Inicio{e}:T_Dominio; Var Local{s}: T_Dominio); var Indice: Integer; begin Local:= Inicio; for Indice:= Inicio+1 to Tam do if Vet[Indice]<Vet[Local]then Local:= Indice; end; Begin . . . End; 45 Aula 6 Professores: Dante Corbucci Filho Alexandre Plastino Conteúdo: - Tipos Estruturados (1a Parte) - Array (Vetor) - String (Cadeia de Caracteres)