Introduo lgica de programao1 ................................................................................1
1.1.Noes de lgica...................................................................................................................... 1 1.2.Algoritmos.............................................................................................................................. 2 1.3.Linhas de Cdigo de um Algoritmo ou Programa...............................................................5 1.4.Eecu!o do Programa..........................................................................................................5 1.5.Coment"rios............................................................................................................................ # 1.#.Constantes............................................................................................................................... # 1.$.%ari"&eis................................................................................................................................. # 1.'.Estrutura do algoritmo..........................................................................................................( 1.(.)*eradores aritm+ticos........................................................................................................1, 1.1,.)*eradores relacionais......................................................................................................1, 1.11.)*eradores lgicos.............................................................................................................1, 1.12.-egras de *reced.ncia........................................................................................................1, 1.13.Atri/ui!o........................................................................................................................... 11 1.14.Comandos de entrada e sa0da............................................................................................11 1.15.Estruturas de controle.......................................................................................................13 1.1#.Estrutura se12encial..........................................................................................................13 1.1$.Estruturas de sele!o.........................................................................................................13 1.1'.Estruturas de re*eti!o......................................................................................................1' 1.1(.%etores................................................................................................................................ 22 1.2,.3atri4es.............................................................................................................................. 24 Introduo lgica de programao 1
1.1. Noes de lgica A lgica a ao do pensamento humano para a soluo de problemas do dia-a-dia mas, pode tambm, ser a origem de outros problemas. a caracterstica do pensamento correto. A lgica busca a correo do raciocnio, e determinante nas tomadas de decises. Por isso a lgica ensina a colocar ordem no pensamento. A lgica est presente nas aes da nossa vida: quando falamos ou escrevemos algo, por exemplo, devemos ordenar as palavras de forma lgica, de modo a expressar corretamente o que pensamos, o que sentimos e o que queremos. Exemplo: O carro est com o pneu vazio. O macaco e a chave de rodas esto no porta-malas. Preciso primeiro pegar o macaco e a chave de rodas, para depois tomar outro passo para trocar o pneu do carro. 1.2. Algoritmos Algoritmo uma seqncia de aes, organizadas de forma lgica, que visam alcanar um objetivo bem definido. Apesar do nome parecer estranho, algoritmos so comuns em nosso cotidiano, como por exemplo uma receita de bolo. Nela est descrita uma srie de ingredientes necessrios, uma seqncia de diversos passos (aes) a serem executados para que se consiga fazer determinado tipo de bolo (objetivo bem definido). Exemplo: Troca de uma lmpada. pegue uma escada; posicione-a embaixo da lmpada; busque uma lmpada nova suba na escada; retire a lmpada velha; coloque a lmpada nova; Esse algoritmo tem um objetivo, trocar uma lmpada, e faz isso bem. Mas troca a lmpada mesmo que ela no esteja queimada. Podemos melhorar esse algoritmo para que a lmpada no seja trocada caso esteja funcionando, incluindo um teste. ligue o interruptor; se o interruptor no acender, ento: pegue uma escada; posicione-a embaixo da lmpada; busque uma lmpada nova; suba na escada; retire a lmpada velha; coloque a lmpada nova; Ainda pode ocorrer de a nova lmpada tambm no funcionar, podemos alterar o algoritmo para que as lmpadas continuem sendo trocadas at que alguma funcione. ligue o interruptor; se o interruptor no acender, ento: pegue uma escada; posicione-a embaixo da lmpada; busque uma lmpada nova; suba na escada; retire a lmpada velha; coloque a lmpada nova; enquanto a lmpada no acender, faa: retire a lmpada; coloque outra lmpada; Exerccios propostos 1 1) Um homem quer atravessar um rio com um barco que pode carregar ele mesmo e apenas mais uma de suas trs cargas: um lobo, um carneiro e um mao de alfafa. O que o homem deve fazer para atravessar o rio sem perder nenhuma de suas cargas? 2) Suponha que voc possua um rob e queira faz-lo trocar uma lmpada e depois conferir se a mesma acende, sendo que o mesmo foi programado para obedecer os seguintes comandos: pegue <objeto> largue <objeto> pressione <objeto> gire garras 180 graus no sentido horrio (parafusar) gire garras 180 graus no sentido anti-horrio mova <objeto> para/at < lugar> desloque-se para <lugar> O rob ainda capaz de : perceber quando um comando no mais possvel (Utilize escada, lmpada, interruptor, abaixo da lmpada, parte superior da escada, lixeira, etc...) 3) Elabore um algoritmo (descrever os passos) que permita mover 3 discos de uma torre de Hani, que consiste em 3 hastes (a-b-c), uma das quais serve de suporte para os trs discos de tamanhos diferentes (1-2-3), os menores sobre os maiores. Pode-se mover um disco de cada vez para qualquer haste, sendo que nunca deve ser colocado um disco maior sobre um menor. O objetivo transferir os trs discos da haste "a para a haste "c. Mova <disco n> da haste <n1> para haste <n2> 1.2.1. Formas de Representao de Algoritmos Existem diversas formas de representao de algoritmos. Algumas formas de representao de algoritmos tratam os problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao muitas vezes relacionados com alguma linguagem de programao especfica. Por outro lado, existem formas de representao de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes acabam por obscurecer a idia principal, o algoritmo, dificultando seu entendimento. Dentre as formas de representao de algoritmo mais conhecidas, destacam-se: A descrio narrativa; O fluxograma convencional; O pseudocdigo, tambm conhecido como linguagem estruturada ou Portugol. 1.2.2. Descrio Narrativa Nesta forma de representao, os algoritmos so expressos em linguagem nativa, como o exemplo do algoritmo da troca de lmpada, discutido acima. 1.2.3. Fluxograma Fluxograma uma ferramenta desenvolvida e usada pelos profissionais de anlise de sistemas, bem como, por alguns profissionais de Organizao, Sistemas e Mtodos. Tem como finalidade descrever o fluxo, seja manual ou mecnico, especificando os suportes usados para os dados e informaes. Usa smbolos convencionais, permitindo poucas variaes. Representado por alguns desenhos geomtricos bsicos, os quais indicaro os smbolos de entrada de dados, do processamento de dados e da sada de dados, acompanhados dos procedimentos requeridos pelo analista de sistemas e a serem realizados pelo programador por meio do desenvolvimento do raciocnio lgico, o qual dever solucionar o problema do programa a ser processado pelo computador. A tabela abaixo mostra alguns smbolos e seu significado. a 2 3 1 b c Smolo Signi!icado Terminal ndica incio ou fim do fluxo Operao de entrada e sada. Genrica, sem indicar dispositivo. Procedimentos. Comandos simples. Operao de sada. Vdeo, impressora, etc. Deciso. ndica que uma ou mais comparaes sero feitas com a possibilidade de desvio para outras partes do programa. Conectores. Sentido do fluxo. Exemplo: ncio
Ler notas N1 e N2 Med = (N1+N2)/2 No Sim Se Med >= 7.0 Escreva reprovado Escreva aprovado Fim Exerccios propostos 2 1) Elabore um fluxograma para ler duas notas, calcular a mdia semestral e informar ao aluno se ele est reprovado, em exame ou aprovado. Considerar a mdia para aprovao direta igual ou superior a 7,0. Para ficar de recuperao (exame), o aluno ter que ter mdia semestral mnima no inferior a 1,67. 2) Elabore um novo fluxograma a partir do desenvolvido para a questo anterior, informando se o aluno est aprovado ou no aps o exame. O aluno dever ter mdia semestral no inferior a 5,0 obedecendo ao seguinte clculo: mdia semestral aps exame = (media semestral antes do exame x 6 + nota do exame x 4)/10. Vide critrios de avaliao da UDESC no semestre 2003.2. 1.2.". Pseudocdigo A partir deste ponto, iniciaremos o estudo de algoritmos usando pseudocdigo (portugol). Um modelo de escrita para facilitar o desenvolvimento de algoritmos. O pseudocdigo usado aqui ter uma organizao (sintaxe) praticamente idntica da linguagem C, com as palavras chave traduzidas para o portugus e com algumas simplificaes. Este aspecto original, ou seja, no foi baseado em nenhuma referncia. Preferimos que o algoritmo seja ensinado com a sintaxe semelhante a linguagem C pela facilidade que se obter com este aspecto quando o C for estudado. O objetivo de apresentar o pseudocdigo, tornar o aluno familiarizado com a lgica de programao, atravs de algoritmos simples, antes de efetivamente comear a programar com a linguagem C. extremamente importante compreender os assuntos aqui abordados pois sero necessrios quando estivermos programando em C. A lgica de programao # !undamental para aprender a programar e muito importante para $%rias disciplinas de um curso de ci&ncia da computao' portanto' apro$eite e estude muito. 1.3. (in)as de *digo de um Algoritmo ou +rograma Linhas de cdigo nada mais so do que a escrita do programa linha a linha, ou seja, a sintaxe do programa. Todas as linhas escritas de um programa definem o cdigo de comandos do programa, e, junto ao cdigo pode-se escrever comentrios sobre ele. 1.". ,xecuo do +rograma Quando escrevemos um programa, para que ele mostre os efeitos (resultados) do que foi escrito e solicitado atravs das linhas de comando, necessrio que o programa seja executado. Para tanto basta que acionemos um comando para essa execuo comear. Em um algoritmo escrito em portugol ou similar, s possvel a execuo do mesmo a nvel do raciocnio lgico de ns mesmos com o crebro. Um algoritmo ou programa s executvel por uma mquina (computador) se nele tiver um outro programa (compilador) que transforme a linguagem usada no cdigo do programa para a linguagem que o computador entenda. Por isso importante que faamos um bom exerccio mental colocando o crebro para executar algoritmos. Fazendo assim, aprenderemos a lgica de programao e consequentemente aprenderemos a programar. 1.-. *oment%rios Comentrios so anotaes escritas nas proximidades das linhas de cdigo de um algoritmo ou programa, e so usados para explicar melhor alguma parte do cdigo para evitar confuses de entendimento na hora de sua anlise. Para podermos identificar um comentrio no cdigo do programa ou algoritmo usaremos o smbolo /* antes do comentrio e o */ aps terminar o comentrio. Nada do que for especificado como comentrio valer como cdigo de programa, portanto no interferir na execuo. 1... *onstantes Entendemos que uma informao constante quando no sofre nenhuma variao no decorrer do tempo na execuo do programa. Exemplo: Pi=3,141516. De fato, se o valor da constante Pi for utilizada em um programa, esta no deve ser modificada, portanto deve ser tratada como constante. 1./. 0ari%$eis Tem-se como definio de varivel toda informao que sujeita a variaes durante a execuo do programa ou algoritmo. No programa so requisitados espaos de memria que so alocados para armazenar o valor inicial da varivel e os demais valores que ela assumir at o fim da execuo do programa. magine que a memria de um computador um grande armrio com diversas gavetas, onde cada gaveta pode conter somente um valor. Deve-se concordar que necessrio identificar cada gaveta para sua utilizao posterior, atravs de um nome. 1./.1. Nomes de variveis O nome de uma varivel faz referncia ao endereo de memria onde essa varivel se encontra. Existem algumas regras para a utilizao das variveis: Nome de varivel pode ter 1 ou mais caracteres. O primeiro caractere de uma varivel deve ser uma letra ou sublinhado ( _ ). Nenhuma varivel pode ter espao em branco em seu nome. Nenhum nome de varivel pode ser uma palavra reservada a uma instruo da linguagem usada. Podero ser utilizados somente letras, nmeros e sublinhado; Procure sempre utilizar variveis que tenham sentido Mnemnico. 1./.2. 1ipos de 2ados 2e!inidos +ara as 0ari%$eis Para definir uma varivel necessrio dar um nome para ela e definir o tipo de informao que ela ir guardar. Esse tipo pode ser um valor numrico inteiro, um valor real ou um caracter ou conjunto de caracter (string). Inteiro3 toda e qualquer informao numrica que pertena ao conjunto dos nmeros inteiros. Exemplos: a) 100 b) 9 c) 318 d) 5900
4eal3 toda e qualquer informao numrica que pertena ao conjunto dos nmeros reais. Exemplos: a) 100.99 b) 0.001 c) 1.5 d) 8.5056 *aractere3 So caracterizadas com as seqncias contendo letras, nmeros e smbolos especiais, ou seja, qualquer smbolo existente um caracter. Uma seqncia de caracteres deve ser indicada entre aspas dupla ("aqui 24"), tambm denominada String. Um caracter deve ser colocado entre aspas simples ('A'). Exemplos: a) "oi mundo! b) "no pise na grama c) '1' d) 'a' e) ' ' 1./.3. 2eclarao de 0ari%$eis m programa, em muitas ve!es, precisa utili!ar variveis e constantes. ma constante ser definida no ca"eal#o do programa e, normalmente, no mudar seu valor durante o processamento$e%ecuo do programa. &s variveis podem ter o seu valor alterado durante a e%ecuo do programa. &s constantes, para o caso dos algoritmos que vamos construir sero definidas com letras mai'sculas. &s variveis tero que ser declaradas logo no in(cio de cada programa. &s variveis devem ser declaradas antes de serem usadas e no local adequado para seu funcionamento. ma declarao especifica um tipo, e pode ser seguida por uma ou mais variveis daquele tipo, separadas por virgulas. ) fim da declarao indicada por ponto e v(rgula. Sintaxe: tipo lista_de_nomes; E%emplos* inteiro dia, m+s, caracter se%o, escol#a, caracter nome-./0, dia1semana-2/0, real nota2, nota3, media, &o declarar variveis do tipo caracter com mais de um caracter, ou outro tipo com o o"jetivo de guardar mais de um valor, deve4se definir o seu taman#o entre colc#etes, logo ap5s o nome da varivel, como no e%emplo acima. &"ai%o mostra4se um pequeno programa e%emplo. MAX = 80 NOME = Maria !rograma principal In"cio Inteiro idade# ano# me$# dia% &eal media# notoa1# nota'% (aracter $e)o% (aracter nome*80+% media = ,nota1 - nota'./'% 0im 6o pequeno programa acima, nota4se que MAX e NOME so constantes. &s variveis declaradas so* idade, ano, me$ e dia como inteiro, media, nota1, nota' como real, $e)o como caracter de uma letra e nome como caracter de oitenta (./) letras. )"servem a posio em que cada uma escrita no programa. &s constantes so definidas antes do in(cio do programa principal. &s variveis so declaradas logo ap5s o in(cio do programa principal. Exerccios propostos 1) Determine qual o tipo primitivo de informao presente nas sentenas abaixo: a) A placa "Pare! tinha dois furos de bala. b) Josefina subiu 5 degraus para pegar uma ma boa. c) Alberta levou 3 horas e meia para chegar ao hospital onde concebeu uma garota. d) Felisberto recebeu sua 18 medalha por ter alcanado a marca de 57,3 segundos nos 100 metros rasos. e) melhor seguir pela "Rua 'A' . 2a) Assinale os identificadores de tipos vlidos: a) 'X' b) U2 c) Ah! d) "aluno e) 55 f) km/l g) UYT h) Asdrubal i) AB*C j) 2.43 k) P{O} l) B25 2b) Assinale os identificadores de variveis vlidas: m) 'X' n) U2 o) Ah! p) "aluno q) 55 r) km/l s) UYT t) Asdrubal u) AB*C v) 2.43 w) P{O} x) B25 3) Suponha que as variveis NB, NA, NMat, SX sejam utilizadas para armazenar, respectivamente, a nota do aluno, o nome do aluno, um nmero inteiro para a matrcula e o sexo com uma letra, declare-as corretamente. 4) Encontre os erros ou inadequao em relao a mnemnicos nas seguintes declaraes de variveis: a) inteiro endereo, nFilhos; b) caractere ida de, 1x; c) real cruzeiros, 9xpto, c, peso, out; 5) Se uma varivel armazenar nomes com o mximo de 90 letras, declare uma varivel para guardar um nome qualquer. 6) Defina uma constante e declare uma varivel para receber o valor da diviso da constante P (3.141516) por 10. 7) Explique os termos: a) Algoritmos b) Cdigo c) Programa d) Varivel e) Constante f) Comentrios g) Memria h) Execuo i) Compilao j) Tipos 1.5. ,strutura do algoritmo Os algoritmos sero estruturados da seguinte maneira: definio de constantes /*Definio das funes para tarefas especficas*/ Nome_funo_1(lista de declaraes) { declaraes de variveis; comandos; . . . retorno(valor); } . . . Nome_funo_n(lista de declaraes) { declaraes de variveis; comandos; . . . retorno(valor); } Programa rincial( ) { declarao de variveis; comandos! inclusive as c"amadas ara funes! etc; } Onde o abrir chaves e o fechar chaves delimitam respectivamente onde o algoritmo comea e onde este termina. Nas declaraes sero definidos os nomes e os tipos das variveis usadas, no algoritmo. ) corpo do programa conter todas as instru7es que devero ser e%ecutadas. ) n'mero de m5dulos (fun7es) do programa depender do programador. 8 recomendvel para a porta"ilidade, clare!a de c5digo e manuteno do algoritmo que os programas sejam feitos em mdulos e com endenta!o. 1.6. 7peradores aritm#ticos Os operadores so um conjunto de smbolos que indicam uma determinada operao a ser feita pelo programa. 7perador Signi!icado + Adio - Subtrao * Multiplicao / Diviso % Resto de diviso inteira 1.18. 7peradores relacionais Utilizamos os operadores relacionais para realizar comparaes entre dois valores de mesmo tipo. Tais valores so representados por constantes, variveis ou expresses aritmticas. Os operadores relacionais so: 7perador Signi!icado = = gual a !=, <>, = Diferente de > Maior que >=, < maior ou igual a < Menor que <=, > menor ou igual O resultado obtido sempre um valor lgico. Exemplo: 2 * 4 = = 24 / 3 (verdadeiro) 8 = = 8 (verdadeiro) 1.11. 7peradores lgicos Utilizaremos trs operadores bsicos para a formao de expresses lgicas. Os operadores lgicos so: 7perador Signi!icado .E., && Operador lgico e .OU., || Operador lgico ou ! Negao 1.12. 4egras de preced&ncia Algumas vezes a ordem em que so realizadas as operaes podem alterar o resultado de uma expresso, essa ordem definida pelas regras de precedncia. A tabela a baixo lista em ordem decrescente a precedncia dos operadores. Essa ordem pode ser mudada com o uso dos parnteses, sendo executadas primeiro as operaes dentro dos parnteses mais internos. Operador Signi!icado ! - Negao e negativo * / % Multiplicao, diviso e resto da diviso inteira + - Adio e subtrao < > < > Maior que, maior ou igual a, menor que e menor ou igual a = = = gual e diferente .E. Operador lgico e .OU. Operador lgico ou = Atribuio Exerccio proposto Determine os resultados obtidos na avaliao das expresses lgicas seguintes, sabendo que A, B, C, D e E contm respectivamente 2, 7, 3.5, "noite e "frio: a) B = = A * C b) "dia = = D .OU. "frio = "clima c) B / A < C .OU. (A > C) d) 3 / 7 * 2 = = 14 / A .OU. (B 3 > C + 0,5) e) (B + (-2)) = = (((2 * C) * 2) / 10) 1.13. Atriuio Para atribuir um valor a uma varivel, o tipo do valor fornecido deve ser compatvel com o tipo da varivel. sso feito da seguinte forma: varivel = expresso; Exemplo: inteiro x; /* declara a varivel */ x = 8 + 13; /* x agora guarda 21, o resultado de 8 + 13 */ OBS.: De acordo com a ordem de precedncia dos operadores, a atribuio ser feita por ltimo. Exerccios propostos 1) Encontre os erros nos seguintes comandos de atribuio: real B, C; inteiro D; D = B; C + 1 = B + C; B = 10 + 2 / 9 (15 / (-4 / 2)) > (5 * (-1)); C .E. B = 3.5; 1.1". *omandos de entrada e sada Na criao de algoritmos precisamos de comandos para entrar com as informaes para o algoritmo e esperamos que o algoritmo nos retorne uma informao como sada. 1.1".1. Entrada de dados O comando de entrada, atravs do qual faremos o algoritmo esperar que lhe seja passada alguma informao ser o leia. Sintaxe: leia(parmetro_! parmetro_"! ###! parmetro_n$; Os parmetros sero variveis que recebero os valores digitados pelo usurio. 1.1".2. Sada de dados Um algoritmo no teria serventia alguma se no pudesse nos devolver algum resultado. Faremos os algoritmos retornarem seus resultados atravs do comando escreva. Sintaxe: escreva(parmetro_! parmetro_"! ###! parmetro_n$; Os parmetros podem ser variveis, constantes ou expresses que sero impressas na tela, na ordem em que aparecem na funo. Exemplo: /* programa media */ Programa Principal ( ) { real valor1, valor2, media; escreva("entre com os dois valores: ); /* escreve o texto entre aspas na tela */ leia(valor1, valor2); /* atribui os valores digitados pelo usurio a valor1 e valor 2 */ media = (valor1 + valor2) / 2; escreva("media: , media); /* escreve na tela o texto entre aspas seguido do valor contido em media */ } Exerccios propostos 1) Utilizando o seguinte trecho de algoritmo: ... inteiro x, y; real z; escreva("x: ); leia(x); escreva(x, " ao cubo = , x*x*x); escreva("y: ); leia(y); escreva(x + y); z = x / y; escreva(z); z = z + 1; x = (y + z) % 2; escreva(x); ... Explique o que est acontecendo em cada linha e qual o resultado de cada ao executada. 2) Cite e discorra sobre trs exemplos do seu dia-a-dia nos quais voc encontra explicitados entrada, sada e processamento. 3) Faa uma analogia de entrada, processamento e sada de dados com o que acontece quando voc l e sintetiza um livro e quando voc dialoga com outra pessoa. 4) Calcular e exibir a rea de um quadrado, a partir do valor de sua aresta que ser digitado. 5) Calcular e exibir a rea de um quadrado a partir do valor de sua diagonal que ser digitado. 6) A partir dos valores da base e altura de um tringulo, calcular e exibir sua rea. 7) Calcular e exibir a mdia aritmtica de quatro valores quaisquer que sero digitados. 8) Calcular e exibir a tenso de um determinado circuito eletrnico a partir dos valores da resistncia e corrente eltrica que sero digitados. Utilize a lei de Ohm. 9) Entrar via teclado com o valor de uma temperatura em graus Celsius, calcular e exibir sua temperatura equivalente em Fahrenheit. 10) Entrar via teclado com o valor da cotao do dlar e uma certa quantidade de dlares. Calcular e exibir o valor correspondente em Reais (R$). 11) Entrar via teclado com o valor de cinco produtos. Aps as entradas, digitar um valor referente ao pagamento da somatria destes valores. Calcular e exibir o troco que dever ser devolvido. 1.1-. ,struturas de controle Atravs das estruturas bsicas de controle do fluxo de execuo seqencial, seleo, repetio e da combinao delas, poderemos criar um algoritmo para solucionar vrios problemas. 1.1.. ,strutura se9:encial Aes que sero executadas na ordem em que foram escritas, de cima para baixo e da esquerda para a direita. O ponto-e-vrgula (;) delimita o fim de um comando. 1.1/. ,struturas de seleo 1.1/.1. Seleo simples Uma estrutura de seleo permite a escolha de um bloco de comandos a ser executado quando determinadas condies, representadas por expresses lgicas, so ou no satisfeitas. Sintaxe: se (condio) { comando_; comando_"; comando_n; ; Onde condio uma expresso lgica. Os comandos s sero executados se a condio resultar verdadeira. As chaves permitem a execuo de todos os comando dentro da estrutura de seleo. Se houver apenas um comando no necessrio as chaves, e a seleo termina no primeiro ponto e vrgula. 1.1/.2. Seleo composta Um segundo bloco de comandos adicionado, estes sero executados somente se a condio testada for falsa, isto se faz usando a palavra reservada seno. Se a condio resultar verdadeira, somente os comandos dentro da seleo se sero executados, os comandos dentro do seno no so executados, passando-se a avaliar a linha logo abaixo do ltimo comando seno. Sintaxe: se (condio) { comando_; comando_"; comando_n; } seno { comando_; comando_";
comando_n; } Exemplo1: /* programa mdia */ Programa principal( ) { real n1, n2, n3, n4, media; escreva("entre com as quatro notas: ); leia(n1, n2, n3, n4); media = (n1 + n2 + n3 + n4) / 4; escreva("mdia: , media); se (media < 7) /* verifica se a mdia maior ou igual a 7 */ escreva("Aluno aprovado); /* escreva executado se o teste resultar verdadeiro */ seno escreva("Aluno reprovado); /* executado se o teste resultar falso */
} Se desejarmos escrever mais de um comando dentro da estrutura se<seno, devemos usar as chaves, como segue: Exemplo2: /* programa mdia */ Programa principal( ) { real n1, n2, n3, n4, media; escreva("Entre com as quatro notas: ); leia(n1, n2, n3, n4); media = (n1 + n2 + n3 + n4) / 4; se (media < 7) /* verifica se a mdia maior ou igual a 7 */ { escreva("Aluno aprovado); /* escreva executado se o teste resultar verdadeiro */ escreva ("Mdia = ", media); } seno { escreva("Aluno reprovado); /* executado se o teste da condio resultar falso */ escreva ("Mdia= ", media); }
} 1.1/.3. Seleo Anin)ada Estruturas de seleo podem ser aninhadas, ou seja, podemos incluir uma estrutura de seleo dentro de outra. sso pode ser feito quantas vezes for necessrio. Para melhor compreenso observe a sintaxe abaixo. Sintaxe: se (condio) { comando_; comando_"; comando_n; } seno { se (condio) { comando_; comando_"; comando_n; % seno & se (condio$ & comando_; comando_"; comando_n; % seno & # # # % % % Exemplo /* programa nmero maior menor ou igual a zero*/ Programa principal( ) { real num; escreva("Entre com um nmero: ); leia(num); se(num < 0) { escreva("Nmero menor que zero.); escreva(num); } seno { se (num = = 0) { escreva("Nmero igual a zero.); escreva(num); } seno { escreva ("Numero maior que zero.); escreva (num); } /* fim do ltimo seno */ } /* fim do penltimo seno */ } /* fim do programa */ 1.1/.". Seleo de m=ltipla escol)a O uso de uma estrutura c)a$e (s>itc)) de mltipla escolha em programao, pode ser feito com o uso da avaliao de casos em que uma constante?c)a$eadora ou valor de uma varivel dentro da c)a$e comparado com a constante de cada caso. Se na avaliao do caso resultar em satisfizer a condio (resultado verdadeiro), normalmente executado o comando de parada pare (rea@) e a estrutura c)a$e abandonada executando-se os comandos fora da estrutura. Se nenhum dos casos satisfizer a condio (todos os casos forem falsos), o comando caso?contr%rio (de!ault), se existir, ser executado. Se o comando caso?contr%rio no existir, o smbolo chaves ( ; ) no programa encontrado e fechada a estrutura de mltipla escolha saindo da mesma. Vejamos a sintaxe abaixo. Sintaxe: c)a$eA constante?c)a$eadora B C caso constante?13 comando_1; comando_2; . . comando_n; pareD . . . caso constante?n3 comando_1; comando_2; . . comando_n; pareD . . caso?contr%rio3 comando_1; comando_2; . . comando_n; ; Exemplo: Programa principal( ) { real preo; inteiro origem; leia(preo, origem); c)a$e (origem) { caso 13 escreva(preco, " produto do sul); pareD
caso 23 escreva(preco, " produto do norte); pareD caso 33 escreva(preco, " produto do leste); pareD caso "3 escreva(preco, " produto do oeste); pareD caso -3 escreva(preco, " produto do sudeste); caso .3 escreva(preco, " produto do centro-oeste); caso /3 escreva(preco, " produto do nordeste); caso contr%rio3 escreva(preco, " produto importado); ; /* Fim das escolhas ou chaveamento */ ; /* Fim do programa*/ Exerccios propostos 1) Fazer um algoritmo para entrar via teclado com dois valores distintos e exibir o maior deles. 2) Usando a estrutura de escolha de vrios casos (chave caso) fazer um algoritmo para entrar com dois valores quaisquer e exibir o maior deles, se existir, caso contrrio, enviar mensagem avisando que os nmeros so idnticos. 3) Fazer um algoritmo para calcular e exibir a rea de um retngulo, a partir dos valores da base e altura que sero digitados. Se a rea for maior que 100, exibir a mensagem "Terreno grande. 4) Fazer um algoritmo para calcular e exibir a rea de um retngulo, a partir dos valores da base e altura que sero digitados. Se a rea for maior que 100, exibir a mensagem "Terreno grande, caso contrrio, exibir a mensagem "Terreno pequeno. 5) Fazer um algoritmo para entrar via teclado com trs valores distintos. Exibir o maior deles. 6) Fazer um algoritmo para, a partir de trs valores que sero digitados, verificar se formam ou no um tringulo. Em caso positivo, exibir sua classificao: "ssceles, escaleno ou eqiltero. Um tringulo escaleno possui todos os lados diferentes, o issceles, dois lados iguais e o eqiltero, todos os lados iguais. Para existir tringulo necessrio que a soma de dois lados quaisquer seja maior que o outro, isto, para os trs lados. 7) Fazer um algoritmo para verificar se trs valores quaisquer (a, b, c) que sero digitados formam ou no um tringulo retngulo. 8) Escreva um algoritmo para determinar se um nmero lido do teclado maior, menor, ou igual a zero. 9) Usando a estrutura se<seno aninhada, faa um algoritmo que leia o nome do aluno e suas duas notas. A partir das informaes lidas: Calcule e mostre a mdia do aluno; Verifique qual ser o conceito atribudo ao aluno: se a mdia for menor que 5: E se a mdia for maior ou igual a 5 e menor que 6: D se a mdia for maior ou igual a 6 e menor que 7,5: C se a mdia for maior ou igual a 7,5 e menor que 9,0: B se a mdia for maior ou igual a 9 e menor ou igual a 10,0: A 1.15. ,struturas de repetio So estruturas usadas para repetir um trecho de cdigo, quando a avaliao da condio for satisfeita, enquanto essa condio for verdadeira os comandos dentro da estrutura ficam se repetindo. A condio deve, em algum momento, tornar-se falsa ou a estrutura ficar se repetindo infinitamente. 1.15.1. 4epetio com teste no incio Aqui o teste feito antes de iniciar cada execuo dos seus comandos. Sintaxe: enquanto (condio$ { comando_; comando_"; # # # comando_n; } Os comandos entre chaves so repetidos enquanto a condio lgica entre os parnteses for verdadeira, sendo que o teste feito antes da execuo dos comandos. Exemplo: /* programa mdia 50 calcula a mdia anual para 50 alunos */ Programa principal( ) { real n1, n2, n3, n4, ma; /* notas bimestrais e mdia anual */ inteiro cont; /* contador */ caracter nome[80]; cont = 0; en9uanto (cont < 50) /* termina o loop se as mdias dos 50 alunos j foram calculadas */ C escre$a ("Entre com o nome do aluno); leia (nome); escre$a("Entre com suas 4 notas bimestrais); leia(n1, n2, n3, n4); ma = (n1 + n2 + n3 + n4) / 4; escre$a("Nome: ", nome, "Mdia anual: , ma); se (ma >= 7) escreva("aluno aprovado); seno escreva("aluno reprovado); cont = cont + 1; /* aumenta em um o nmero de alunos que j tiveram a mdia calculada*/ ; } 1.15.2. 4epetio com teste no !inal Nesta estrutura de repetio, os seus comandos so executados antes de acontecer o teste, sendo o resultado do teste verdadeiro o bloco de comandos da estrutura ser executado novamente. Sintaxe: faa { comando_; comando_"; comando_n; } enquanto (condio$; O bloco de comandos executado, ento, se a condio for verdadeira, o bloco executado novamente, at que a condio seja falsa. Exemplo: /* programa para calcular a mdia anual de uma turma de 50 alunos */ Programa principal ( ) { real ma, /* mdia anual de um aluno */ acm, /* acumulador */ mat; /* mdia anual da turma */ inteiro cont; /* contador */ cont = 1; acm = 0; faa C escreva("entre com a mdia anual do aluno: ); leia(ma); /* acumula as mdias dos alunos */ acm = acm + ma; /* conta para o prximo aluno */ cont = cont + 1; ; enquanto (con <=50); /* para de somar depois do 50 aluno */ mat = acm / 50; /*calcula a mdia anual da turma*/ escreva("mdia anual da turma: , mat); } 1.15.3. 4epetio com $ari%$el de controle Essa estrutura traz algumas facilidades para ocasies onde o nmero de repeties (iteraes) definido. Ela permite inicializar a varivel que servir de contador, definir a condio de parada e o incremento do contador. Sintaxe: para (iniciali'ao; condio; controle$ { comando_; comando_"; comando_n; } Exemplo: Programa Principal ( ) C real ma, acm, mat; inteiro i; acm = 0; para (i = 1; i < =50; i = i + 1) C escreva("entre com a mdia anual do aluno); leia(ma); acm = acm + ma; ; mat = acm / 50; escreva("mdia anual da turma: , mat); ; Este exemplo faz o mesmo que o exemplo anterior, mas usa a estrutura para. Geralmente um problema pode ser resolvido de vrias maneiras diferentes, cabe ao programador escolher a melhor opo. No exemplo acima o termo para parece ser mais adequado. Exerccios propostos 1) Fazer um algoritmo para entrar com dois valores via teclado, onde o segundo dever ser maior que o primeiro. Caso contrrio solicitar novamente apenas o segundo valor. 2) Fazer um algoritmo para entrar via teclado com dez valores positivos. Verificar a digitao e enviar mensagem de erro, se necessrio. Aps a digitao, exibir: a) O maior valor; b) A soma dos valores; c) A mdia aritmtica dos valores; 3) Fazer um algoritmo para criar uma rotina de entrada que aceite somente um valor positivo. 4) Fazer um algoritmo para entrar via teclado com o sexo de determinado usurio, aceitar somente "F ou "M como respostas vlidas. 5) Fazer um algoritmo para exibir a tabuada do nmero cinco no intervalo de um a dez. 6) Fazer um algoritmo para exibir a soma dos nmeros inteiros positivos do intervalo de um a cem. 7) Fazer um algoritmo para exibir os trinta primeiros valores da sequencia de Fibonacci: 1, 1, 2, 3, 5, 8, 13, ... 8) Fazer um algoritmo para entrar via teclado com um valor qualquer. Travar a digitao, no sentido de aceitar somente valores positivos. Aps a digitao, exibir a tabuada do valor solicitado, no intervalo de um a dez. 9) Fazer um algoritmo para entrar via teclado com um valor (X) qualquer. Travar a digitao, no sentido de aceitar somente valores positivos. Solicitar um intervalo (A B) para que o programa possa calcular a tabuada do valor digitado, sendo que o segundo valor (B), dever ser maior que o primeiro (A), caso contrrio, digitar novamente somente o segundo. Aps a validao dos dados, exibir a tabuada do valor digitado, no intervalo decrescente, ou seja, a tabuada de X no intervalo de B para A. 10) Fazer um algoritmo para calcular o fatorial de um valor que ser digitado. Este valor no poder ser negativo. Enviar mensagem de erro e solicitar o valor novamente, se necessrio. Perguntar se o usurio deseja ou no fazer um novo clculo, consistir a resposta em "S ou "N. 11) Fazer um algoritmo para entrar via teclado com "N valores quaisquer. O valor "N (que representa a quantidade de nmeros) ser digitado, dever ser positivo, mas menor que vinte. Caso a quantidade no satisfaa a restrio, enviar mensagem de erro e solicitar o valor novamente. Aps a digitao dos "N valores, exibir: a) maior valor; b) menor valor; c) A soma dos valores; d) A mdia aritmtica dos valores; e) A porcentagem de valores que so positivos; f) A porcentagem de valores negativos; 12) Fazer um algoritmo para aps exibir os dados, perguntar ao usurio se deseja ou no uma nova execuo do programa. Consistir a resposta no sentido de aceitar somente "S ou "N e encerrar o programa em funo dessa resposta. 13) O jogo da mega-sena consiste em acertar seis dos sessenta nmeros disponveis em um volante. Fazer um programa para calcular a quantidade de jogos que temos que fazer, para com certeza acertar o resultado da mega-sena. Admitindo que faremos jogos de seis nmeros por volante, o programa dever exibir quais seriam estes nmeros em cada volante, ou seja, exibir todos os resultados possveis. 1.16. 0etores At aqui, apresentamos uma forma simples para reservar espao de memria no computador, ou seja: atravs do artifcio da declarao de variveis simples. Exemplo de uso simples da memria Considere o cdigo de declarao abaixo: inteiro num; real media; MEMRA Conforme se pode observar na figura acima, a memria dividida em clulas. Consideramos que cada clula constituda de 8 (oito) bits de capacidade e pode armazenar um nico caracter. Ao declarar a varivel num como inteiro, a mquina reservar uma quantidade dessas clulas para armazenar um valor numrico inteiro. Como os inteiros so menores que os valores reais, o espao de memria reservado para este tipo (inteiro) tambm menor que o espao reservado para o tipo real. Normalmente nas mquinas, para um tipo real armazenado o dobro do espao do tipo inteiro. Desta forma, se para um inteiro a arquitetura da mquina dispor de 2 clulas e cada clula for constituda por 8 bits, o inteiro ter capacidade para 16 bits enquanto um valor real ter 32 bits de capacidade. Entretanto, a declarao de variveis simples no garante que possamos guardar na memria mais que um valor ao mesmo tempo. Por exemplo, no problema de clculo de mdia aritmtica de duas notas de uma turma de alunos, se declararmos uma varivel simples definida como media, esta varivel somente poder guardar na memria um valor por vez, sendo este valor substitudo pelo prximo e assim por diante. num media Se desejarmos armazenar vrios valores reais do mesmo nome ao mesmo tempo, como no caso de vrias mdias de alunos, pode-se determinar que a mquina (computador) reserve espao de memria referenciada pelo nome mdia mas com vrios campos do tamanho de um valor do tipo real, colocando um colchetes aps a definio do nome da varivel e o tamanho que se deseja reservar dentro dos colchetes, conforme mostrado abaixo na declarao da varivel mdia com tamanho para 5 (cinco) mdias de alunos e no mais apenas uma mdia como apresentado anteriormente. real media[5]; MEMRA Desta forma, pode-se deduzir, que para armazenar vrios valores correspondentes a mesma varivel pode-se utilizar vetores para alocao de memria. Entretanto, quando tentarmos armazenar espao em memria para vrios nomes, bom lembrar que um nico nome j ocupa uma cadeia de clulas na memria. Devido a isso, para armazenar espao para vrios nomes ficarem armazenados na memria ao mesmo tempo, necessrio fazermos o uso de um vetor de duas dimenses: uma dimenso para os caracteres do nome e uma outra para indicar cada nome. Assim, nas colunas ficam armazenados os caracteres de cada nome e em cada linha reservado o espao para a posio (endereo) de cada nome. Veja a declarao no cdigo a seguir e o esquema abaixo. caracter nome[5][10]; MEMRA Como pode-se observar, no esquema acima est a representao da memria com espao para cinco nomes de no mximo 10 caracteres cada um. Exemplo1 Fazer um algoritmo para ler um vetor real de 10 elementos e imprimir os valores maiores ou iguais a zero. /* Algoritmo mprimir vetor real maior ou igual a zero */ ncio real vet [10]; int ; para ( = 0; <10; = +1) { Escreva ("vet[", , "]= "); Leia (vet [ ]); media[0] media[1] media[2] media[3] media[4] 0123456789nome[0]MariaPeranome[1]TiaoSouzanome[2]CacoBomn ome[3]DarciGol nome[4]MartaSilv caracteres Endereo dos nomes } para ( = 0; <10; = +1) { Escreva ("vet[", , "]= "); se (vet [ ] > = 0 ) { Escreva (vet [ ] ); } } Fim No exemplo acima pode-se escrever o valor de cada elemento do vetor depois de todos os elementos lidos. Claro, isso feito somente para comprovar que os valores ficam todos armazenados na memria, seno, para escrever cada valor do vetor poderia ser implementado o comando "se e o comando "escreva no primeiro lao de repetio logo abaixo da leitura dos valores. 1.28. EatriFes Uma matriz nada mais que um vetor bidimensional. No exemplo dado acima, com a varivel nome, na realidade, usamos uma matriz para guardar 5 (cinco) nomes. Desta forma, podemos tambm reservar espao em memria para uma matriz numrica, seja ela do tipo real ou inteira. O cdigo a seguir e o esquema de memria abaixo ajudam a compreender o que acontece. inteiro A[4][5]; /* Matriz A de tamanho 4x5*/ Como pode-se observar acima, o contedo de A[0][0] ocupar a primeira clula, o contedo de A[0] [1] ocupar a segunda clula, assim por diante at a ltima clula ou o contedo de A[3][4]. Ao estudar uma estrutura como vetores ou matrizes pode-se concluir que qualquer varivel de um tipo (caracter, inteiro ou real) pode ser definida como uma dessas estruturas. A opo pelo uso delas est na necessidade para a soluo do problema. Exemplo2 Fazer um algoritmo para ler uma matriz A e uma outra matriz B de valores inteiros, somar as duas matrizes e colocar o resultado em uma matriz C. A matriz C dever ser impressa na tela. Considerar a ordem de todas as matrizes lidas como 2x2. /* Algoritmo soma de duas matrizes inteiras 2x2 */ ncio int , J, A [2][2], B[2][2], C[2][2]; para ( = 0; <2; =+1) { para (J = 0; J<2; J = J+1) { Escreva("A[", , "] [", J, "]= ); Leia (A [][J]); 0 1 2 3 4 0 A[0][0] A[0][1] A[0][2] A[0][3] A[0][4] 1 A[1][0] A[1][1] A[1][2] A[1][3] A[1][4] 2 A[2][0] A[2][1] A[2][2] A[2][3] A[2][4] 3 A[3][0] A[3][1] A[3][2] A[3][3] A[3][4] Escreva("B[", , "] [", J, "]= ); Leia (B [][J]); C[][J]= B[][J] + A[][J]; Escreva("C[", , "] [", J, "]= , C[][J]); } } fim Exerccios propostos 1) Dado o vetor VET, definido por: inteiro VET[100]; a) preench-lo com o valor 30; b) preench-lo com os nmeros inteiros 1, 2, 3..., 100; c) preencher VET[] com 1, se quadrado perfeito, e com 0, nos demais casos. 2) Dado o seguinte vetor: qual ser a sua configurao depois de executados os comandos: para ( = 7; >=4; =-1) { aux=VET[]; VET[] = VET[7 +1]; VET[7 + 1] = aux; } VET[2]=VET[0]; VET[VET[2]] = VET[VET[1]]; 3) Escreva um algoritmo em portugol, para um programa que: a) leia um conjunto A de 100 elementos reais; b) construa e imprima um outro conjunto B formado da seguinte maneira: i) os elementos de ordem par so os correspondentes de A divididos por 2; ii) os elementos de ordem mpar so os correspondentes de A multiplicados por 3. 4) Dado o seguinte vetor de caracteres: Qual ser a sua configurao aps serem executados os comandos a seguir ? aux = VET[5]; VET[5]=VET[8]; VET[8]=aux; para (=0; <=3; =+1) { aux = VET[]; VET[]=VET[8 ]; VET[8 ] = aux; } VET[5] = VET[1]; 5) Escreva um algoritmo em portugol que: 32412583 VET VET TRXSEOBA! a) Leia um conjunto A de 20 elementos do teclado; b) calcule e imprima o valor de S, onde: S = (A1 A20)2 + (A2 A19)2 + ......+ (A10 A11)2 10 ou seja, S = (Ai A21-i)2 i = 1 6) Fazer um algoritmo para ordenar um vetor de nmeros em ordem crescente. O vetor ordenado dever ser impresso na tela. 7) Escreva um algoritmo que leia dois vetores de 10 posies e faa a multiplicao dos elementos de mesmo ndice, colocando o resultado em um terceiro vetor. Mostre o vetor resultante. 8) Escreva um algoritmo que leia um vetor de 20 posies e mostre-o. Em seguida, troque o primeiro elemento com o ltimo, o segundo com o penltimo, o terceiro com o antepenltimo, e assim sucessivamente. Mostre o novo vetor depois da troca. 9) Escreva um algoritmo que leia um vetor de 80 elementos inteiros. Encontre e mostre o menor elemento e sua posio no vetor. 10) Escrever um algoritmo que l 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um vetor Z que seja a) a unio de X com Y; b) a diferena entre X e Y; c) a soma entre X e Y; d) o produto entre X e Y; e) a interseco entre X e Y. Escreva o vetor Z a cada clculo. 11) Faa um algoritmo que leia um vetor de 500 posies de nmeros inteiros e divida todos os seus elementos pelo maior valor do vetor. Mostre o vetor aps os clculos. 12) Uma locadora de vdeos tem guardada, em um vetor de 500 posies, a quantidade de filmes retirados por seus clientes durante o ano de 1993. Agora, esta locadora est fazendo uma promoo e, para cada 10 filmes retirados, o cliente tem direito a uma locao grtis. Faa um algoritmo que crie um outro vetor contendo a quantidade de locaes gratuitas a que cada cliente tem direito. 13) Escrever um algoritmo para a gerao da seguinte matriz: 14) Dada a matriz MAT abaixo: Qual ser a configurao de MAT depois de executado o algoritmo? incio inteiro , J; caracter aux; 1 1 1 1 1 1 1 2 2 2 2 1 1 2 3 3 2 1 1 2 3 3 2 1 1 2 2 2 2 1 1 1 1 1 1 1 a b c d e f g h i 1 2 1 3 1 4 1 3 2 1 1 4 caracter MAT [4][4]; para (=0; <=3; =+1) { para (J=+1; J<=3; J=J+1) { aux = MAT[][J]; MAT[][J]=MAT[J][]; MAT[J][]=aux; } } aux=MAT[1][1]; MAT[1][1]=MAT[4][4]; aux=MAT[2][2]; MAT[2][2]=MAT[3][3]; MAT[3][3]=aux; fim 15) Descreva o que ser produzido depois de executados os comandos abaixo se: A = C= para (=0; <2; =+1) { para (J=0; J<2; J=J+1) { para (k=0; k<=2; k=k+1) { escreva(A[][k] + C[k][j]); } } } 16) Fazer um algoritmo para multiplicar duas matrizes de mesma ordem. A matriz produto dever ser impressa na tela. 17) Escreva um algoritmo que l uma matriz M(5x5) e calcula as somas: a) da linha 4 de M b) da coluna 2 de M c) da diagonal principal d) da diagonal secundria e) de todos os elementos da matriz M Escrever essas somas e a matriz. 18) Escrever um algoritmo que l uma matriz M(10x10) e a escreve. Troque, a seguir: a) a linha 2 com a linha 8 b) a coluna 4 com a coluna 10 c) a diagonal principal com a diagonal secundria d) a linha 5 com a coluna 10. Escreva a matriz assim modificada. 19) Escrever um algoritmo que l uma matriz M(5x5) e cria 2 vetores SL(5) e SC(5) que contenham, respectivamente, as somas das linhas e das colunas de M. Escrever a matriz e os vetores criados. 5i/liogra6ia "Lgica de programao de Forbellone e Eberspcher "Algoritmos e Estruturas de Dados de Guimares/Lages. Exerccios cedidos pelas professoras: Luciana Rita Guedes Guisleri Janine Kniess 7ser$ao3 Por favor, ao encontrar algum erro/falha no material favor entrar em contato pelo e-mail: david@joinville.udesc.br nformando a pgina e o erro. Ficaremos muito agradecido por voc ajudar a construir um material didtico melhor para os alunos da UDESC de Joinville Universidade Pblica de qualidade e gratuita.