Baixe o app para aproveitar ainda mais
Prévia do material em texto
DIM0436 28. Modularizacao 2 20141111 DIM0436 20141111 1 / 18 Outline 1 Vetores e modularização 2 Manipulação de texto 3 Exercícios DIM0436 20141111 2 / 18 1 Vetores e modularização 2 Manipulação de texto 3 Exercícios DIM0436 20141111 3 / 18 Vetores como parâmetros ? Problemas Em VisuAlg Portugol: Vetores (e matrizes) não podem ser usados como parâmetros formais de função Vetores (e matrizes) não podem ser retornados como valores de função Exemplo (Elementos proibidos) 1 procedimento f(v: vetor [1..10] de inteiro) 1 funcao f(i, j: inteiro) : vetor [1..8, 2..75] de real DIM0436 20141111 4 / 18 Como fazer ? Regras de escopo + variáveis globais 1 algoritmo "Preenchimento" 2 var v : vetor [1..10] de real 3 n : inteiro 4 5 funcao checked_size(): inteiro 6 var n : inteiro 7 inicio 8 repita 9 escreval("Entre com um inteiro: ") 10 leia(n) 11 ate (n >= 1) e (n <= 10) 12 retorne n 13 fimfuncao 14 15 procedimento fill(size: inteiro) 16 var i : inteiro 17 inicio 18 para i de 1 ate size faca 19 escreval("Valorda célula ", i, "? ") 20 leia(v[i]) 21 fimpara 22 fimprocedimento 1 procedimento write(size: inteiro) 2 var i : inteiro 3 inicio 4 para i de 1 ate size faca 5 escreval(v[i]) 6 fimpara 7 fimprocedimento 8 9 inicio 10 n <- checked_size() 11 fill(n) 12 write(n) 13 fimalgoritmo DIM0436 20141111 5 / 18 Escrever a declaração duma rotina Rotina Toda função é uma rotina Todo procedimento é uma rotina 1 Escolher um nome que indica claramente o que a rotina faz 2 Identificar os parâmetros que variam nas diferentes chamadas de rotina no módulo principal. Dar um nome a cada um desses parâmetros formais. 3 Identificar o tipo adequado para cada um dos parâmetros formais. 4 Identificar se a rotina retorna um valor e, se sim, o tipo desse valor. DIM0436 20141111 6 / 18 1 Vetores e modularização 2 Manipulação de texto 3 Exercícios DIM0436 20141111 7 / 18 Funções da biblioteca + permite a concatenação de texto : “a” + “bc” + “de” → “abcde” asc (s : caractere) retorna um inteiro com o código ASCII do primeiro caractere da expressão. carac (c : inteiro) retorna o caractere cujo código ASCII corresponde à expressão. caracpnum (c : caractere) retorna o inteiro ou real representado pela expressão. DIM0436 20141111 8 / 18 Funções da biblioteca (2) compr (c : caractere) retorna um inteiro contendo o comprimento (quantidade de caracteres) da expressão. copia (c : caractere ; p, n : inteiro) retorna um valor do tipo caracter contendo uma cópia parcial da expressão, a partir do caractere p, contendo n caracteres. Os caracteres são numerados da esquerda para a direita, começando de 1. maiusc (c : caractere) retorna um valor caractere contendo a expressão em maiúsculas. minusc (c : caractere) retorna um valor caractere contendo a expressão em minúsculas. numpcarac (n : inteiro ou real) retorna um valor caractere contendo a representação de n como uma cadeia de caracteres. pos (subc, c : caractere) retorna um inteiro que indica a posição em que a cadeia subc se encontra em c, ou zero se subc não estiver contida em c. DIM0436 20141111 9 / 18 Resumo 1 Vetores e modularização 2 Manipulação de texto 3 Exercícios DIM0436 20141111 10 / 18 Perguntas ? http://dimap.ufrn.br/~richard/dim0320 DIM0436 20141111 11 / 18 1 Vetores e modularização 2 Manipulação de texto 3 Exercícios DIM0436 20141111 12 / 18 Cadeia de caracteres (leitura) 1 funcao sub(s: caractere; i, j:inteiro):caractere 2 var mys: caractere 3 k: inteiro 4 inicio 5 mys <- "" 6 para k de i ate j faca 7 mys <- mys + car(s,k) 8 fimpara 9 retorne mys 10 fimfuncao “a” + “bcde” + “fs” → “abcdef” car(s,i) retorna o i-ésimo caractere de s como cadeia de caracteres Assunto O que faz essa função ? Identificar problemas potenciais. DIM0436 20141111 13 / 18 Declarações e implementações Declarações Escrever as declarações das funções abaixo 1 Uma função que calcula a velocidade média dum elemento dado o tempo de percurso e a distância percorrida. I1 funcao vmedia(distancia, tempo: real): real 1 Uma função que verifica se é possível construir um triângulo a partir de 3 segmentos de medição dados. I1 funcao e_triangulo(s1, s2, s3: real): logico 2 Uma função que calcula o mdc de 2 inteiros. I1 funcao mdc(m, n: inteiro): inteiro 3 Um procedimento que escreve na tela as iniciais duma pessoa cujo nome completo foi dado. I1 procedimento esc_iniciais(nome: caractere) DIM0436 20141111 14 / 18 Declarações e implementações Declarações Escrever as declarações das funções abaixo 1 Uma função que calcula a velocidade média dum elemento dado o tempo de percurso e a distância percorrida. I1 funcao vmedia(distancia, tempo: real): real 1 Uma função que verifica se é possível construir um triângulo a partir de 3 segmentos de medição dados. I1 funcao e_triangulo(s1, s2, s3: real): logico 2 Uma função que calcula o mdc de 2 inteiros. I1 funcao mdc(m, n: inteiro): inteiro 3 Um procedimento que escreve na tela as iniciais duma pessoa cujo nome completo foi dado. I1 procedimento esc_iniciais(nome: caractere) DIM0436 20141111 14 / 18 Implementações Implementar as rotinas 1 e 3 Para 3, pode-se usar I copia (c : caractere ; p, n : inteiro) : retorna um valor do tipo caractere contendo uma cópia parcial da expressão, a partir do caractere p, contendo n caracteres. Os caracteres são numerados da esquerda para a direita, começando de 1. I compr (c : caractere) : retorna um inteiro contendo o comprimento (quantidade de caracteres) da expressão. DIM0436 20141111 15 / 18 Sufixo Um número b é dito ser sufixo de um número a se o número formado pelos últimos dígitos de a são iguais a b. Assim: a b 567890 890 → sufixo 1234 1234 → sufixo 2457 245 → não é sufixo 457 2457 → não é sufixo Construa uma função sufixo que dados dois números inteiros a e b verifica se b é um sufixo de a. Utilizando a função do item anterior, escreva um algoritmo que leia dois números inteiros a e b e verifica se o menor deles é subsequência do outro. Exemplo: a b 567890 678 → b é subsequência de a 1234 2212345 → a é subsequência de b 235 236 → um não é subsequência do outro DIM0436 20141111 16 / 18 Maiusc Assunto Implementar a função maiusc (c: caractere) da biblioteca padrão. É permitido usar qualquer função da biblioteca fora de maiusc mesmo. Os códigos ASCII da =’A’-’Z’= vão de 65 a 90, e de =’a’-’z’= de 97 a 122. DIM0436 20141111 17 / 18 Conversões (avaliação 2014.1) Escreva um algoritmo com os módulos abaixo: 1 A função celsius retorna o equivalente em graus Celsius de uma temperatura em graus Fahrenheit. 2 A função fahrenheit retorna o equivalente em graus Fahrenheit de uma temperatura em graus Celsius. 3 Na função principal, use essas funções para escrever na tela tabelas dando os equivalentes em graus Fahrenheit de todas as temperaturas (inteiras) em graus Celsius entre 0 e 100 graus, e os equivalentes em graus Celsius de todas as temperaturas (inteiras) entre 32 e 212 graus Fahrenheit. A conversão entre graus Fahrenheit e graus Celsius é dada pela fórmula: [ ◦F ] = [ ◦C ] ∗ 9 5 + 32 DIM0436 20141111 18 / 18 Vetores e modularização Manipulação de texto Exercícios
Compartilhar