Escolar Documentos
Profissional Documentos
Cultura Documentos
Introduo
F. R. B. Cruz
1.3.2. estruturas bsicas de dados e controle varivel: posio na memria que tem nome e valor associados: NOTA 5 declarao de variveis: declare lista de variveis tipo tipos de dados: inteiro real caracter lgico exemplo: declare x inteiro; vendas, comisso real;
estruturas de controle: a) seqncia de comandos: comando1 comando2 b) comando condicional: se condio ento seqncia de comandos 1 seno seqncia de comandos 2 fim se c) comando de repetio com interrupo no incio (enquanto): enquanto condio faa seqncia de comandos fim enquanto d) comando de repetio com interrupo no final (repita): repita seqncia de comandos at condico e) comando de repetio para: para varivel de valor1 at valor2 faa seqncia de comandos fim para f) comando de entrada e sada: leia lista de variveis escreva lista de variveis
F. R. B. Cruz
g) atribuio: K1 1.3.3. desenvolvimento de algoritmos por refinamentos sucessivos Ex. 1.: Fazer um algoritmo que leia trs valores inteiros, determine e imprima o menor deles. Soluo: Um algoritmo possvel apresentado abaixo: algoritmo defina os tipos das variveis leia os nmeros determine o menor nmero escreva o menor nmero fim algoritmo ref.: leia os nmeros leia a, b, c fim ref. ref.: determine o menor nmero se a<b e a<c ento menor <- a seno determine o menor entre b e c fim se fim ref. ref.: determine o menor entre b e c se b<c ento menor <- b seno menor <- c fim se fim ref. ref.: escreva o menor nmero escreva menor fim ref. ref.: defina os tipos das variveis declare a, b, c, menor numerico fim ref.
F. R. B. Cruz
Inserindo-se os refinamentos nos seus respectivos lugares e colocando-se comentrios: algoritmo {defina os tipos das variveis} declare a, b, c, menor numerico {leia os nmeros} leia a, b, c {determine o menor nmero} se a<b e a<c ento menor <- a seno se b<c ento menor <- b seno menor <- c fim se fim se {escreva o menor nmero} escreva menor fim algoritmo
F. R. B. Cruz
Ex. 2: Fazer um algoritmo que calcule o valor de N! (fatorial de N) sendo que o valor inteiro de N se encontra disponvel em uma unidade de entrada e que: a) N! = 1 x 2 x ... x (N-1) x N; e b) 0! = 1, por definio. Soluo: Um algoritmo possvel descrito abaixo: algoritmo defina os tipos das variveis leia n calcule o fatorial de n escreva fatorial fim algoritmo ref.: calcule fatorial de n fatorial <- 1 i <- 2 enquanto i <= n faca fatorial <- fatorial * i i <- i + 1 fim enquanto fim ref. Inserindo-se o refinamento em seu respectivo lugar algoritmo defina os tipos das variveis leia n fatorial <- 1 i <- 2 enquanto i <= n faca fatorial <- fatorial * i i <- i + 1 fim enquanto escreva fatorial fim algoritmo
F. R. B. Cruz
Ex. 3: Fazer um algoritmo que: a) leia e escreva o nome e altura das moas inscritas em um concurso de beleza. Para cada moa, existe uma linha contendo o seu nome e sua altura. A ltima linha, que no corresponde a nenhuma moa, conter a palavra "vazio" no lugar do nome; b) b) calcule e escreva as duas maiores alturas e quantas moas as possuem. Soluo: Um algoritmo possvel descrito abaixo: algoritmo defina os tipos das variveis atribua valores iniciais necessrios leia nome, altura enquanto nome <> "vazio" faca escreva nome, altura compare altura com as duas maiores alturas leia nome, altura fim enquanto escreva resultados fim algoritmo E os refinamentos sucessivos so: ref.: compare altura com as duas maiores alturas se altura > maior1 entao atualize a 2 maior altura e o nmero de moas que a possui atualize a 1 maior altura e o nemro de moas que a possui seno verifique se altura igual a maior1 fim se fim ref. ref.: atualize a 2 maior altura e o nmero de moas que a possui maior2 <- maior1 contador2 <- contador1 fim ref. ref.: atualize a 1 maior altura e o nmero de moas que a possui maior1 <- altura contador1 <- 1 fim ref.
F. R. B. Cruz
ref.: verifique se altura igual a maior1 se altura = maior1 ento contador1 <- contador1 + 1 seno compare altura com a 2 maior altura fim se fim ref. ref.: compare altura com a 2 maior altura se altura > maior2 ento maior2 <- altura contador2 <- 1 seno se altura = maior2 ento contador2 <- contador2 + 1 fim se fim se fim ref. ref.: escreva resultados escreva maior1, contador1, maior2, contador2 fim ref. ref.: atribua valores iniciais necessrios contador1 <- 0 maior1 <- 0 contador2 <- 0 maior2 <- 0 fim ref. ref.: defina tipo das variveis declare altura, contador1, contador2, maior1, maior2 numrico declare nome caracter fim ref.
F. R. B. Cruz
Inserindo-se os refinamentos nos devidos lugares, teremos: algoritmo declare altura, contador1, contador2, maior1, maior2 numrico declare nome caracter contador1 <- 0 maior1 <- 0 contador2 <- 0 maior2 <- 0 leia nome, altura enquanto nome <> "vazio" faca escreva nome, altura se altura > maior1 ento maior2 <- maior1 contador2 <- contador1 maior1 <- altura contador1 <- 1 seno se altura = maior1 ento contador1 <- contador1 + 1 seno se altura > maior2 ento maior2 <- altura contador2 <- 1 seno se altura = maior2 ento contador2 <- contador2 + 1 fim se fim se fim se fim se leia nome, altura fim enquanto escreva maior1, contador1, maior2, contador2 fim algoritmo
F. R. B. Cruz
1.3.3. exerccio extra Desenvolver um algoritmo para ler diversos coeficientes a, b e c, calcular e escrever as razes da equao ax 2 + bx + c = 0 . Parar quando encontrar um coeficiente a=0. 1.3.4. soluo: Uma soluo possvel para o problema apresentada a seguir. Inicialmente, desenvolvemos uma primeira verso do algoritmo, j identificando a estrutura de repetio que dever estar presente, mas deixando para mais tarde alguns detalhamentos (isto , os refinamentos): algoritmo defina os tipos das variveis repita leia a, b, c se a=0 ento interrompa fim se calcule razes escreva razes fim repita fim algoritmo Refinando-se o clculo das razes: ref.: calcule razes delta <- b*b 4*a*c se delta >= 0 ento xr1 <- (-b + raiz(delta))/(2*a) xr2 <- (-b - raiz(delta))/(2*a) xi1 <- 0 xi2 <- 0 seno xr1 <- -b/(2*a) xr2 <- -b/(2*a) xi1 <- raiz(-delta)/(2*a) xi2 <- -raiz(-delta)/(2*a) fim se fim ref.
F. R. B. Cruz
10
Refinando-se a escrita das razes: ref.: escreva razes escreva xr1, xi1 escreva xr2, xi2 fim ref. Finalmente, refinando-se a declarao das variveis: ref.: defina os tipos da variveis declare a, b, c, xr1, xi1, xr2, xi2, delta numrico fim ref. Inserindo-se os refinamentos nos respectivos lugares, temos o algoritmo completo: algoritmo {defina os tipos das variveis} declare a, b, c, xr1, xi1, xr2, xi2, delta numrico repita leia a, b, c se a=0 ento interrompa fim se {calcule razes} delta <- b*b 4*a*c se delta >= 0 ento xr1 <- (-b + raiz(delta))/(2*a) xr2 <- (-b - raiz(delta))/(2*a) xi1 <- 0 xi2 <- 0 seno xr1 <- -b/(2*a) xr2 <- -b/(2*a) xi1 <- raiz(-delta)/(2*a) xi2 <- -raiz(-delta)/(2*a) fim se {escreva razes} escreva xr1, xi1 escreva xr2, xi2 fim repita fim algoritmo
F. R. B. Cruz
11
Na linguagem do Minitab, este algoritmo pode ser codificado como se segue, disponvel em ftp://ftp.est.ufmg.br/pub/fcruz/pacotes/eq2grau.mac.
macro # template eq2grau # eq2grau calcula raizes da equacao # ax^2 + bx + c = 0 # corpo mconstant delta xr1 xi1 xr2 xi2 mcolumn coef note entre com os coeficientes a, b e c read coef; file 'terminal'; nobs 3. while (coef(1) ~= 0) let delta = coef(2)*coef(2) - 4*coef(1)*coef(3) if delta >= 0 let xr1 = (-coef(2) + sqrt(delta))/(2*coef(1)) let xr2 = (-coef(2) - sqrt(delta))/(2*coef(1)) let xi1 = 0 let xi2 = 0 else let xr1 = -coef(2)/(2*coef(1)) let xr2 = -coef(2)/(2*coef(1)) let xi1 = sqrt(-delta)/(2*coef(1)) let xi2 = -sqrt(-delta)/(2*coef(1)) endif print xr1, xi1 print xr2, xi2 read coef; file 'terminal'; nobs 3. endwhile endmacro
F. R. B. Cruz
12
Na linguagem do S-Plus, pode ser codificado conforme apresentado abaixo, disponvel em ftp://ftp.est.ufmg.br/pub/fcruz/pacotes/eq2grau.txt.
eq2grau <- function() { repeat { cat("Entre com o coef a ") a <- as.numeric(readline()) cat("Entre com o coef b ") b <- as.numeric(readline()) cat("Entre com o coef c ") c <- as.numeric(readline()) if (a==0) { break } delta <- b^2 - 4*a*c if (delta >= 0) { xr1 <- (-b + sqrt(delta))/(2*a) xr2 <- (-b - sqrt(delta))/(2*a) xi1 <- 0 xi2 <- 0 } else { xr1 <- -b/2*a xr2 <- -b/2*a xi1 <- sqrt(-delta)/(2*a) xi2 <- -sqrt(-delta)/(2*a) } cat("x1 = (", xr1, "+", xi1, "i) e x2 = (", xr2, "+", xi2, "i)\n") } }
F. R. B. Cruz