Sie sind auf Seite 1von 124

Lgica de Programao e Algoritmos Professores autores Nlio Alessandro Azevedo Cacho Keivilany Janielle de Lima Coelho Apresentao da disciplina

Se tivermos um objetivo na vida, iremos mais longe, pois as chances de sucesso so bem maiores quando h planejamento. Dessa forma, para desenvolver um programa de computador, precisamos primeiro analisar o problema, descrever os passos para se atingir a soluo desejada e, depois, instruir o computador para que execute esses passos. Para realizar esse processo, interessante o estudo da lgica de programao e dos algoritmos, a fim de aprendermos a estruturar nosso pensamento e criar seqncias lgicas de passos para se atingir a soluo de problemas. A construo de algoritmos auxilia o indivduo a esquematizar o problema a ser resolvido, delimitando as necessidades, de forma a permitir uma economia de tempo e custos na hora de desenvolver uma soluo. E nesse contexto que introduzimos a nossa disciplina: Lgica de Programao e Algoritmos. Ao longo das nossas aulas, pretendemos auxiliar voc a treinar a habilidade que voc j possui de construir sequncias lgicas para resolver problemas. Voc ver que h diversos caminhos possveis que, se bem estruturados, podem constituir solues eficazes e eficientes para tais problemas.

Aula 1 Introduo aos algoritmos Na nossa primeira aula, veremos conceitos introdutrios da lgica como uma estruturao do pensamento voltada para a soluo de problemas, e dos algoritmos enquanto sequncias de passos para resolver tais problemas. Voc conhecer, ao final desta aula, uma ferramenta de construo de algoritmos denominada VisuAlg e ser orientado quanto instalao e utilizao dessa ferramenta, que ser usada para implementar os exemplos prticos das aulas posteriores. Objetivos Ao final desta aula, voc ser capaz de:

Conceituar Lgica de Programao e disciplinar o raciocnio no sentido de solucionar problemas. Conceituar algoritmos e construir algoritmos simples de forma eficaz. Instalar e explorar a ferramenta VisuAlg e suas principais

funcionalidades na construo de algoritmos.

Lgica Observe as seguintes afirmaes: 1. O nmero 4 menor que o nmero 7. O nmero 9 maior que o nmero 7. Logo, o nmero 4 menor que os nmeros 9 e 7. 2. Um casal com trs filhos notou que um vaso estava quebrado, enquanto duas das crianas estavam na escola. Quem o culpado? 3. H uma caneta dentro de uma gaveta fechada. Sabemos que, para pegar a caneta, devemos, antes, abrir a gaveta. Podemos deduzir, a partir dessas afirmaes, que, em nosso cotidiano, sempre que pensamos, j estamos utilizando a lgica. Se consultarmos em um dicionrio da lngua portuguesa o verbete lgica, veremos que se trata de uma parte da filosofia que estuda as leis do raciocnio. uma cincia que estuda as formas do pensamento. Xavier (2005, p. 25) define a lgica como uma seqncia coerente, regular e necessria de acontecimentos, de coisas. Veja, a seguir, uma sequncia de passos para comprar um determinado produto em uma loja. Imagine se seria possvel comprar o produto seguindo os passos dessa sequncia: 1. 2. 3. 4. 5. 6. sair da loja; pagar pelo produto; entrar na loja; retirar o dinheiro da carteira; dirigir-se ao caixa; escolher o produto na prateleira.

Seria impossvel conseguir efetuar a compra do produto, pois apesar de todas as aes estarem corretas, a sequncia est errada. Como voc poderia pagar pelo produto aps sair da loja? Ou escolher o produto aps pagar por ele? A sequncia correta, nesse caso, seria: 1. 2. 3. 4. 5. 6. entrar na loja; escolher o produto na prateleira; dirigir-se ao caixa; retirar o dinheiro da carteira; pagar pelo produto; sair da loja.

A lgica, dessa forma, utilizada para conduzir pensamentos ou aes voltados para a soluo de problemas. Voc sabe que a lgica est correta em determinada situao, se

a soluo do problema tiver sido atingida. Na programao de computadores, o treino dessa habilidade fundamental para aprimorarmos a nossa capacidade de resolver problemas e programar. Devemos, portanto, aprender a pensar de forma estruturada. O que isso significa? Significa desenvolver e aperfeioar a tcnica de pensamento, dentro de um raciocnio lgico e matemtico, que a base de todo o trabalho na programao de computadores. Algoritmos Para resolver um problema em um computador, de modo semelhante ao que fazemos para resolver um problema do nosso cotidiano, devemos encontrar uma maneira de descrever esse problema de uma forma clara e precisa, atravs de uma sequncia de passos a serem seguidos at que se atinja a soluo procurada (CRUZ; KNOPMAN, 2001). Vimos que essa estruturao deve seguir uma determinada lgica para se atingir um objetivo. A lgica aplicada programao de computadores, dessa forma, tambm deve buscar a melhor sequncia de aes para se resolver um problema. A essa sequncia de aes damos o nome de algoritmo.

Um algoritmo um conjunto finito de regras que fornece uma sequncia de operaes para resolver um problema especfico. algo como uma receita, ou uma rotina.

Observe a receita de bolo a seguir: RECEITA DE BOLO COMUM DE OVOS INCIO Passo 1: Receber os ingredientes Ingredientes: 1. 2. 3. 4. 5. 6. 2 xcaras de acar; 3 ovos; 250g de margarina; 3 xcaras de farinha de trigo; 1 e colher de fermento; 1 xcara de leite.

Modo de preparo: Passo 2: aquea o forno a 180 graus; Passo 3: bata as claras em neve e reserve; Passo 4: em uma travessa, bata o acar, a manteiga e as gemas; Passo 5: misture a farinha e o leite; Passo 6: bata bem, at ficar bem homogneo; Passo 7: com a ajuda de uma colher, acrescente o fermento; Passo 8: por ltimo, adicione as claras em neve e mexa cuidadosamente;

Passo 9: coloque em uma forma untada com manteiga e farinha de trigo e leve ao forno mdio para assar por aproximadamente 35 minutos ou at que, ao espetar um palito, esse saia seco; Passo 10: aps assado, desligue o forno e deixe o bolo esfriar; Passo 11: desenforme e saboreie. FIM Observando a receita de bolo, podemos contemplar as cinco caractersticas que so inerentes aos algoritmos (CRUZ; KNOPMAN, 2001): 1. Finitude um algoritmo sempre deve terminar aps um nmero finito de passos. Veja que o algoritmo do nosso exemplo encerra no momento em que o bolo est pronto para ser saboreado. 2. Definio cada passo do algoritmo deve ser bem definido e sem ambiguidades, ou seja, no deve dar margem para uma interpretao dupla. 3. Entradas um algoritmo deve ter zero ou mais entradas, que so as informaes que devem ser fornecidas antes do algoritmo ser iniciado (no caso da receita de bolo, as entradas so os ingredientes, ou seja, o acar, os ovos, etc.). 4. Sadas um algoritmo deve ter uma ou mais sadas. O nmero de sadas tem uma relao especfica com as entradas. Mais uma vez, observando a nossa receita, vemos que os ingredientes (entradas) so misturados dentro da sequncia de passos, gerando uma nica sada (o bolo). 5. Efetividade todo algoritmo deve ser descrito por operaes bsicas e possveis de ser realizadas de forma precisa, dentro de um determinado tempo, por qualquer pessoa. Por exemplo, se na receita vssemos uma instruo do tipo coloque acar vontade, isso impossibilitaria a sua execuo de uma forma precisa.

Veja agora um exemplo de algoritmo utilizando nmeros e expresses matemticas. CLCULO DA MDIA ARITMTICA DO ALUNO Passo 1: informe a primeira nota; Passo 2: informe a segunda nota; Passo 3: some a primeira nota com a segunda nota; Passo 4: divida o resultado da soma por dois; Passo 5: mostre o resultado obtido. O algoritmo acima tem incio e fim, como no anterior, tem passos bem definidos, tem os dados de entrada (primeira nota e segunda nota), tem uma sada (mdia) e as instrues de cada passo so precisas, ou seja, rene tambm as cinco caractersticas que ns mencionamos anteriormente. Diante de tudo isso, podemos afirmar que a construo de algoritmos uma atividade que faz parte do nosso cotidiano, pois todas as atividades que realizamos (como tomar banho, ir escola, voltar para casa) precisam de uma srie de entradas para que sejam realizadas (como a hora de acordar, escolher o melhor caminho para ir escola, escolher o melhor meio de transporte), seguem uma sequncia lgica de passos e

geram suas respectivas sadas (que so os resultados alcanados). Voc consegue perceber como simples?

importante lembrar, no entanto, que podem existir vrias maneiras de solucionar um problema. O importante chegar soluo. Melhor ainda, se essa soluo for atingida de forma eficiente e eficaz.

Atividade 1 Desenvolver a habilidade de construir algoritmos de forma eficaz o primeiro passo para aprender a programar sistemas de computadores. Vamos treinar essa habilidade resolvendo os exerccios a seguir. 1. 2. 3. 4. 5. Escreva o seu algoritmo usual para ir escola. Escreva um algoritmo para fritar batatas. Escreva o seu algoritmo usual para tomar banho. Escreva um algoritmo que, dado um nmero, exiba o seu antecessor. Faa o mesmo para exibir o sucessor do nmero dado.

Antes de fazer a atividade, considere as tcnicas para elaborao de um algoritmo baseadas nas observaes de Ascencio e Campos (2002), relacionadas a seguir: 1. 2. 3. 4. ler atentamente o enunciado, destacando os pontos mais importantes; definir os dados de entrada; definir que dados de sada se deseja obter; definir o processamento (de que maneira ser ordenada a sequncia de passos); 5. construir o algoritmo; 6. testar o algoritmo realizando simulaes.

Descrio da ferramenta VisuAlg

Para executar os exerccios prticos desta disciplina, utilizaremos uma ferramenta de criao de algoritmos, o VisuAlg. O VisuAlg um programa idealizado e desenvolvido por Cludio Morgado de Souza, da empresa de consultoria e desenvolvimento de sistemas Apoio Informtica. A ferramenta foi criada para ser usada no auxlio construo de algoritmos e teve colaborao do professor Bruno Tonet, da Universidade de Caxias do Sul e do professor Carlos Alberto A. Sanches. A verso que utilizaremos ser a mais recente: a verso 2.0. Para instalar o VisuAlg, execute o arquivo nomeado setupv2.exe, que voc encontrar no CD que recebeu. Ao executar o arquivo, voc ver a primeira de muitas telas de instalao, conforme mostra a Figura 1.

Figura 1 - Primeira tela de instalao do VisuAlg A primeira tela (veja a Figura 1) exibe uma mensagem de boas vindas e explicaes iniciais sobre a instalao. Ao clicar em Avanar, voc ser levado tela seguinte (Figura 2).

Figura 2 - Segunda tela de instalao do VisuAlg Nesta segunda tela, exibido o caminho da localizao dos arquivos de instalao do programa. Os arquivos que voc salvar no programa ficaro armazenados no mesmo diretrio. Clique em Avanar para ir prxima tela de instalao.

Figura 3 - Terceira tela de instalao do VisuAlg Na terceira tela de instalao, que vemos na Figura 3, voc selecionar as opes de componentes do programa que voc deseja que sejam instaladas. As opes exibidas so os arquivos de ajuda online e exemplos. recomendvel que voc selecione todas as opes, pois esses componentes sero de tima ajuda, caso voc venha a ter dvidas na utilizao do software. Aps selecionar, clique em Avanar. Voc ser, ento, levado quarta tela de instalao, que vemos na Figura 4.

Figura 4 - Quarta tela de instalao do VisuAlg Na quarta tela (Figura 4), voc ser informado do local em que ser colocado um atalho de acesso ao programa no menu iniciar do seu computador. Assim, voc poder acessar o programa atravs do menu iniciar, procurando o diretrio de nome Apoio Informtica. Clique mais uma vez em Avanar.

Figura 5 - Quinta tela de instalao do VisuAlg Estamos quase l! Voc est agora na quinta tela de instalao (veja a Figura 5). Nessa tela, voc ter as opes de tarefas adicionais de instalaes. No obrigatrio selecionar essas tarefas, mas interessante que voc selecione pelo menos a primeira opo, que cria um cone na rea de trabalho do seu computador. Dessa forma, voc poder acessar facilmente o programa assim que ligar o computador, sem ter que procurar por um atalho. Aps selecionar as opes desejadas, clique em Avanar.

Figura 6 - Sexta tela de instalao do VisuAlg Chegamos sexta tela de instalao (Figura 6), em que o instalador exibe as caractersticas da instalao, como o diretrio de destino, o tipo de instalao e as opes que voc selecionou. Confira e, caso queira alterar alguma coisa, clique em voltar. Se estiver tudo certo, clique em instalar.

Figura 7 - ltima tela de instalao do VisuAlg Concluda a instalao, voc ver a ltima tela (Figura 7), que informa a concluso da instalao e oferece a opo de abrir o programa. Clique em Concluir. O programa ser executado nesse momento e voc ver a tela inicial, conforme a Figura 8.

Figura 8 Tela inicial do VisuAlg Na parte superior da tela inicial do programa, voc ver a barra de tarefas, com a barra de menu e a barra de ferramentas. Imediatamente abaixo, temos o editor de textos do programa. No canto inferior esquerdo, est o quadro de variveis (que mostra as informaes referentes a cada varivel do algoritmo) e, no canto inferior direito, est o simulador de sada (que mostra os resultados do algoritmo). Abaixo de ambos, fica a barra de status do programa. O texto que aparece no editor de textos representa o formato padro de um algoritmo (aprenderemos isso mais adiante, nas prximas aulas). A barra de menu tem as seguintes opes: Arquivo, Editar, Exibir, Algoritmo, Cdigo, Ferramentas e Ajuda. Cada item do menu tem diversos subitens com funcionalidades diferentes. Veja a seguir as funcionalidades de cada item e subitem do menu do VisuAlg (entre parnteses, esto os atalhos de teclado para cada funcionalidade). 1. Arquivo i. Novo (Ctrl + N) cria um novo arquivo. ii. Abrir (Ctrl + A) abre um arquivo existente. iii. Salvar (Ctrl + S) salva o documento que est em uso. iv. Salvar Como... salva o documento que est em uso com outro nome. v. Enviar por e-mail permite enviar por e-mail o texto do documento em uso. vi. Imprimir (Ctrl + P) permite imprimir o texto do documento em uso. vii. Sair encerra a ferramenta. Obs.: Acima da opo Sair, o VisuAlg exibe um histrico dos cinco ltimos arquivos abertos com um atalho para que voc possa abri-los diretamente. 1. Editar i. Desfazer (Ctrl + Z) desfaz a ao mais recente. ii. Refazer (Shift + Ctrl + Z) refaz a ltima ao desfeita.

iii. iv. v. vi. vii. viii. ix. x. xi. xii.

Recortar (Ctrl + X) extrai o texto selecionado. Copiar (Ctrl + C) copia o texto selecionado. Colar (Ctrl + V) cola texto no local em que est o cursor. Corrigir identao (Ctrl + G) insere um espao de tabulao para a esquerda no texto. Selecionar tudo (Ctrl + T) seleciona todo o contedo do editor de textos. Localizar (Ctrl + L) permite localizar texto digitado pelo usurio dentro do texto do documento em uso. Localizar de novo (F3) continua a pesquisa pelo texto buscado na opo Localizar. Substituir (Ctrl + U) permite substituir o texto pesquisado por outro digitado pelo usurio. Gravar bloco... (Ctrl + W) grava o texto selecionado em um arquivo com extenso .inc. Inserir bloco (Ctrl + R) insere, no editor de textos, o contedo de um arquivo de extenso .inc selecionado pelo usurio.

2. Exibir i. Nmero de linhas ativa ou desativa a exibio, esquerda do editor de textos, da numerao das linhas. ii. Variveis modificadas ativa ou desativa a exibio das variveis que esto sendo modificadas. iii. Restaurar tela restaura a tela inicial. 3. Algoritmo i. Executar (F9) inicia a execuo do algoritmo (ou continua, caso tenha sido parada). ii. Passo a passo (F8) executa o algoritmo linha a linha, realando a linha executada. iii. Executar com timer (Shift + F9) insere um atraso especificado pelo usurio, durante a execuo. iv. Parar (Ctrl + F2) encerra a execuo do algoritmo. v. Liga/desliga breakpoint (F5) insere ou remove pontos de parada no local que o usurio escolher. vi. Desmarcar todos os breakpoints (Ctrl + F5) desativa todos os breakpoints que estiverem ativos. vii. Executar em modo DOS mostra a execuo do algoritmo em uma janela semelhante ao DOS. viii. Gerar valores aleatrios ativa a gerao de valores aleatrios para as variveis, substituindo a digitao dos dados. ix. Perfil (F7) exibe o nmero de vezes em que cada linha foi executada. x. Pilha de ativao (Ctrl + F3) exibe a pilha de subprogramas ativados num dado momento. 4. Cdigo permite a traduo do cdigo do algoritmo para quatro linguagens: Pascal, C, CA-Clipper e Basic. Apenas a opo da linguagem Pascal est funcionando nessa verso da ferramenta. 5. Ferramentas permitem configurar as opes de configurao dos elementos do programa, como cores, estilos e tamanhos de fonte. 6. Ajuda permite acesso ao contedo de ajuda da ferramenta. Os cones da barra de ferramentas executam as funcionalidades existentes no menu.

Ao lado de cada item do menu, voc ver (no VisuAlg) o cone correspondente. Se voc tiver dvidas, passe o mouse sobre cada cone e veja que o nome da funcionalidade do cone ser exibido. Ao longo das prximas aulas, voc ter a oportunidade de explorar o VisuAlg com maior profundidade e ver o quanto a ferramenta o auxiliar a desenvolver o seu raciocnio algortmico. Por enquanto, aproveite para navegar pelas funcionalidades, a fim de se familiarizar com a ferramenta. Leituras complementares Ao longo de nossas aulas, utilizaremos o VisuAlg para a construo dos algoritmos. importante que voc se familiarize com a ferramenta e seus comandos, a fim de utilizla de forma proveitosa. Como falamos, a ferramenta foi idealizada e desenvolvida pela equipe da empresa Apoio Informtica. No website da empresa, voc encontrar informaes interessantes sobre o VisuAlg, como o objetivo de sua criao, um tutorial de suas funcionalidades e vrios aspectos acerca da linguagem. Por isso, sugerimos, como leitura complementar, que voc visite o website: http://apoioinformatica.inf.br/visualg/objetivos.htm Na pgina, voc encontrar algumas curiosidades a respeito da motivao que os criadores do VisuAlg tiveram para desenvolv-lo, ver explicaes a respeito da linguagem que o programa utiliza (como as palavras reservadas e as regras especficas) e conhecer aspectos interessantes do programa que auxiliaro voc a escrever os algoritmos com mais agilidade (como recursos de autodigitao e sugestes de digitao). Vale pena conferir! Resumo Nesta aula, voc viu os conceitos introdutrios de lgica e algoritmos e aprendeu a construir sequncias lgicas de passos para se atingir a soluo de problemas. Aprendeu, tambm, a instalar, como tambm explorar a ferramenta VisuAlg, buscando nos familiarizar com os seus comandos. O conhecimento desses conceitos bsicos e o treino da habilidade de desenvolver um raciocnio lgico e estruturado so de fundamental importncia para que possamos avanar em nosso estudo, a fim de que nos tornemos aptos a construir solues eficazes e eficientes na programao de computadores. Autoavaliao 1. Defina lgica de programao e explique a importncia do treino dessa habilidade para a programao de computadores. 2. O que um algoritmo?

3. Resolva os seguintes problemas: a. Faa um algoritmo que, dado o valor da conta de uma refeio realizada em um restaurante, acrescente os 10% do garom e exiba o valor total da conta. b. Faa um algoritmo que calcule o resto da diviso inteira entre dois nmeros dados. Exemplo: se dividirmos 25 por 4, temos resto=1. c. Construa um algoritmo que, dado o valor de uma mercadoria, sejam aplicados 15% de desconto em uma venda vista e exiba o valor a ser pago. d. Escreva um algoritmo que, dados o valor da mercadoria e o valor pago, calcule e exiba o troco a ser devolvido. e. Escreva um algoritmo que, dados trs nmeros, informe o maior e o menor. 4. Faa um tour pelas funcionalidades do VisuAlg, a fim de se familiarizar com a ferramenta, e tente construir, nele, os algoritmos do exerccio anterior. Utilize os itens do menu Ajuda, como auxiliares, nessa tarefa. Aula 2 Formas de representao de algoritmos Na aula anterior, fizemos uma introduo nossa disciplina. Conceituamos lgica e algoritmos. Identificamos a importncia do estudo desses elementos e da estruturao do nosso raciocnio no sentido de encontrar a soluo de problemas. Aprendemos a construir sequncias lgicas de passos para atingir tais solues. Conhecemos, tambm, uma ferramenta que nos auxiliar a construir algoritmos ao longo de nossas aulas: o VisualG. Realizamos os procedimentos de instalao e conhecemos as principais funcionalidades da ferramenta. Nesta segunda aula, daremos continuidade ao estudo dos algoritmos, identificando as suas principais formas de representao: a descrio narrativa, o fluxograma e o pseudocdigo (ou portugol). Refletiremos sobre as principais vantagens e desvantagens de cada uma, veremos exemplos e exercitaremos a construo de algoritmos nessas trs formas de representao. Objetivos Ao final desta aula, voc ser capaz de:

Identificar as trs principais formas de representao de algoritmos. Identificar as principais vantagens e desvantagens de cada uma dessas trs formas de representao. Construir algoritmos utilizando as trs formas de representao.

Descrio narrativa A descrio narrativa a forma de representao de algoritmos que utilizamos na nossa primeira aula. Nessa forma de representao, analisamos o enunciado do problema e, simplesmente, descrevemos a sequncia de passos em nossa lngua nativa (em nosso caso, o portugus). A vantagem de se utilizar esse procedimento que no precisamos aprender nenhum conceito novo, pois j temos domnio sobre a nossa lngua nativa. A desvantagem que a lngua natural pode ser interpretada de diferentes maneiras. Para a linguagem de programao, a linguagem natural abstrata, imprecisa e pouco confivel. Isso poderia trazer problemas na hora de transcrever o algoritmo para o programa (em uma linguagem de programao). Vamos voltar receita de bolo da aula anterior. RECEITA DE BOLO COMUM DE OVOS INCIO Passo 1: Receber os ingredientes Ingredientes: 1. 2. 3. 4. 5. 6. 2 xcaras de acar; 3 ovos; 250g de margarina; 3 xcaras de farinha de trigo; 1 e colher de fermento; 1 xcara de leite.

Modo de preparo: Passo 2: Aquea o forno a 180 graus; Passo 3: Bata as claras em neve e reserve; Passo 4: Em uma travessa, bata o acar, a manteiga e as gemas; Passo 5: Misture a farinha e o leite; Passo 6: Bata bem, at ficar bem homogneo; Passo 7: Com a ajuda de uma colher, acrescente o fermento; Passo 8: Por ltimo, adicione as claras em neve e mexa cuidadosamente; Passo 9: Coloque em uma forma untada com manteiga e farinha de trigo e leve ao forno mdio para assar por aproximadamente 35 minutos ou at que, ao espetar um palito, esse saia seco; Passo 10: Aps assado, desligue o forno e deixe o bolo esfriar; Passo 11: Desenforme e saboreie. FIM fato que a receita contm passos simples de entender, por ser escrita em nossa linguagem natural. Agora, vamos reler o passo 9 da receita: Passo 9: Coloque em uma forma untada com manteiga e farinha de trigo e leve ao forno mdio para assar por aproximadamente 35 minutos ou at que, ao espetar um palito, esse saia seco;

A informao em negrito imprecisa e pode ser interpretada de diferentes formas por diferentes pessoas. Ou seja, aproximadamente 35 minutos, pode ser um pouco menos que 35 minutos pra uma pessoa e um pouco mais que 35 minutos pra outra pessoa executando a mesma receita. Essa impreciso dificultaria, portanto, a transcrio para uma linguagem de programao. Fluxograma Nessa forma de representao, escrevemos o algoritmo utilizando smbolos grficos predefinidos, enfatizando os passos individuais e suas interconexes. Observe, no Quadro 1, os smbolos que so utilizados no fluxograma e o que cada um deles representa no algoritmo: Incio ou fim do algoritmo Indica o sentido do fluxo de execuo do algoritmo. Conecta os objetos grficos Representa a entrada de dados Indica clculos e atribuies de valores (processamento) Indica desvios ou tomadas de decises (Por exemplo: SE isso, ENTO aquilo) Representa a sada de dados, no Portugol IDE Tambm representa a sada de dados Quadro1 Smbolos utilizados em um Fluxograma A principal vantagem de se utilizar fluxogramas para construir algoritmos que mais fcil entender um contedo descrito de forma grfica do que um descrito textualmente. Alm disso, os fluxogramas obedecem a um padro mundial, quanto simbologia. J as desvantagens so as seguintes: os dados podem no ser suficientemente detalhados, dificultando, assim, a transcrio do algoritmo para o programa a ser desenvolvido; necessrio aprender a simbologia dos fluxogramas; e, para algoritmos mais extensos, a construo do fluxograma pode se tornar mais complicada. Vamos escrever o exemplo do clculo da mdia da aula anterior sob a forma de fluxograma: ALGORITMO PARA CALCULAR A MDIA ARITMTICA DE UM ALUNO

As entradas para a execuo do algoritmo so a primeira e a segunda nota (veja que as notas 1 e 2 esto no smbolo de fluxograma correspondente entrada de dados). O clculo da mdia efetuado no smbolo seguinte, referente ao processamento, ou seja, os clculos. O smbolo de sada de dados do fluxograma exibe o resultado esperado, que foi calculado na execuo anterior (a mdia do aluno). Os smbolos de Incio e Fim so os delimitadores da execuo do algoritmo.

Atividade 1 1. Caracterize com suas prprias palavras uma descrio narrativa. 2. Faa um algoritmo que descreva alguma situao do seu dia a dia (como tomar banho ou ir escola, por exemplo) e construa um fluxograma contendo os smbolos que voc viu no Quadro 1.

Pseudocdigo (OU PORTUGOL) Se voc for pesquisar em outras fontes, ver que alm desses termos (pseudocdigo ou portugol), podemos nos referir a essa forma de representao de outras maneiras, como: portugus estruturado, linguagem estruturada ou pseudolinguagem. O pseudocdigo obedece a regras predefinidas de estrutura para descrever um algoritmo. Vimos que a descrio narrativa pode ser interpretada de diversas maneiras. Isso pode gerar ambiguidades. J o fluxograma tem maior preciso, mas pouco descritivo, o que pode torn-lo insuficiente, alm de complicar-se, conforme o crescimento do

algoritmo. O pseudocdigo uma combinao das melhores caractersticas das duas formas de representao anteriores. A principal vantagem da utilizao do pseudocdigo que, mesmo sendo independente de qualquer linguagem de programao, sua estruturao facilita a transcrio do algoritmo criado para o cdigo dessas linguagens (logo mais voc ver que aspectos da pseudolinguagem facilitam essa transcrio). Outras vantagens: pode definir quais os dados a ser utilizados e como eles vo estar estruturados, alm de utilizar o portugus como base. A desvantagem que precisamos aprender as regras dessa forma de representao. Tambm figura como desvantagem a no padronizao de sua estruturao. Isso quer dizer que voc encontrar um mesmo termo descrito de formas diferentes em diferentes literaturas. O pseudocdigo ser a forma de representao utilizada durante o estudo dessa disciplina. Vamos ver como funciona a estruturao de algoritmos com pseudocdigo. Observe o exemplo abaixo, tambm com o clculo da mdia de um aluno. Observao: vamos utilizar, em nossos exemplos, a notao utilizada na ferramenta VisualG. algoritmo Mdia //aqui, definimos o nome do algoritmo var //incio das declaraes das variveis nota1 : real //aqui, definida a entrada da primeira nota do aluno nota2 : real // aqui, definida a entrada da segunda nota do aluno media : real //declarao da varivel em que ser armazenado o resultado do clculo da mdia Inicio //incio do bloco de execuo (local onde instrumos o computador a executar os comandos) escreva ("Digite o valor da primeira nota: ") //o programa exibe na tela o texto entre aspas leia (nota1) // o programa l o que o usurio escreveu: a primeira nota escreva ("Digite o valor da segunda nota: ") //o programa exibe na tela o texto entre aspas leia (nota2) // o programa l o que o usurio escreveu: a segunda nota media <- (nota1 + nota2)/2 // realizado o clculo da mdia escreva ("A mdia do aluno : ", media) //o valor encontrado exibido na tela fimalgoritmo //fim do algoritmo Vamos chamar as instrues que esto entre as palavras incio e fimalgoritmo de bloco de execuo do algoritmo. Veja que o bloco de execuo no est posicionado no mesmo alinhamento das palavras incio e fimalgoritmo. Chamamos esse recuo de identao. A identao no necessariamente obrigatria, mas uma prtica recomendada, que torna o cdigo mais legvel, pois facilita a visualizao da delimitao dos blocos de execuo de qualquer algoritmo.

Nesse algoritmo, s h um bloco de execuo entre o incio e o fim. Por isso, talvez voc s compreenda a importncia da identao, quando comear a construir algoritmos mais complexos, com diversos blocos de execuo entre o incio e o fim. As palavras em negrito, no cdigo do algoritmo, so as palavras reservadas da linguagem. Palavras reservadas so as instrues comuns a diversas linguagens de programao, como comandos de escrita ou leitura de dados e a declarao de variveis (que a definio dos dados de entrada), entre outras coisas. Leia os comentrios (o texto verde, em itlico), que explicam o que executado em cada linha do algoritmo. O VisualG no diferencia, no texto dos algoritmos, as letras maisculas das letras minsculas. Porm, no aceita a utilizao de acentos grficos, til e cedilha. Ns convencionaremos, portanto, a no utilizao de acentos grficos, til e cedilha. Vamos tentar limitar, tambm, a utilizao de letras maisculas apenas nos textos entre aspas. Isso permitir que voc se habitue a convenes que so comuns maioria das linguagens de programao.

Atividade 2 1. Conceitue as trs principais formas de representao de algoritmos. 2. Descreva algumas das principais vantagens e desvantagens da utilizao do pseudocdigo.

Resumo Nesta aula, voc compreendeu os conceitos referentes s trs principais formas de representao dos algoritmos. Voc viu tambm as vantagens e desvantagens de cada uma dessas formas de representao e aprendeu (e exercitou) a construo de algoritmos utilizando as trs formas, sobretudo, o pseudocdigo, que ser a forma de representao mais utilizada em nossas aulas. Percebemos que construir algoritmos nem sempre uma tarefa simples. Contudo, o treino constante, atravs da prtica de exerccios, no s auxilia no aprendizado das regras e tcnicas, como tambm treina o raciocnio. Autoavaliao Vamos treinar a construo de algoritmos nas trs formas de representao que vimos nesta aula. 1. Implemente o algoritmo da receita de bolo na forma de representao fluxograma. Ao concluir, responda: a. O algoritmo ficou descrito de forma clara e legvel? b. Qualquer indivduo seria capaz de executar a receita de bolo descrita com essa

forma de representao? Justifique sua resposta.

2. Agora, implemente, em pseudocdigo, um algoritmo que, dados dois nmeros inteiros, some esses nmeros e multiplique pelo primeiro nmero, exibindo, em seguida, o resultado obtido. Depois, responda: a. Voc encontrou dificuldades para construir o algoritmo? Se sim, quais? b. Por que voc acha que teve essas dificuldades?

3. Copie o exemplo de pseudocdigo mostrado nesta aula (mdia do aluno) e cole no VisualG. Execute e veja o resultado. Depois, utilize a funcionalidade do menu Algoritmo passo a passo da ferramenta. Utilize, como guia para essa tarefa, a primeira aula. 4. Tente executar o algoritmo que voc criou no item 2 dessa atividade no VisualG. Dicas importantes

Procure se lembrar das tcnicas de construo de algoritmos que vimos na aula anterior. Lembre-se, durante a realizao das atividades, de que cada forma de representao tem caractersticas que lhe so peculiares. Procure ser fiel s caractersticas que voc aprendeu, na construo dos algoritmos. Se encontrar dificuldades em escrever o algoritmo em pseudocdigo, escrevao, antes, em forma de descrio narrativa e depois aplique as regras de pseudocdigo que voc aprendeu nesta aula.

Aula 3 Tipos de dados Na aula anterior, voc viu os conceitos referentes s trs principais formas de representao de algoritmos: descrio narrativa, fluxograma e pseudocdigo. Voc conheceu as principais vantagens e desvantagens de cada uma dessas formas de representao e viu exemplos de construo de algoritmos nas trs formas. Ficou definido, tambm, que o pseudocdigo vai ser a forma mais utilizada para construir algoritmos ao longo de nossas aulas. Por fim, sero propostos alguns exerccios. Ao longo desta terceira aula, voc aprender como ocorre o processo de armazenamento de dados na memria do computador, conhecer o conceito de variveis e constantes e a maneira de utiliz-las nos algoritmos. Ir aprender tambm a reconhecer os tipos de dados que podem ser utilizados, percebendo a importncia de sua definio na construo dos algoritmos.

Objetivos Ao final desta aula, voc ser capaz de:


descrever o processo de armazenamento de dados na memria do computador; definir o conceito de varivel e constante, identificando as regras bsicas para sua criao e utilizao nos algoritmos; justificar a importncia da definio dos tipos de dados na construo dos algoritmos; identificar os tipos de dados utilizados.

Armazenamento de dados na memria Voc viu, nas aulas anteriores, que um algoritmo recebe dados de entrada e, ao final da execuo, retorna uma ou mais sadas. No exemplo da receita de bolo, voc pde ver que os ingredientes so os dados de entrada e a sada o bolo pronto. Na execuo de um algoritmo ou de um programa, para receber dados de entrada, processar as instrues e fornecer os dados de sada, necessrio que o computador armazene esses dados e instrues em sua memria, a fim de poder acess-los posteriormente. Por exemplo, imagine que voc e um amigo desejam calcular o algoritmo da mdia, de cabea, sem fazer anotaes. Veja os passos descritos a seguir. 1. Voc diz a primeira nota. 2. Seu amigo, ento, guarda esse valor na sua memria humana, enquanto aguarda a segunda nota. 3. Voc diz a segunda nota. 4. Seu amigo guarda o valor da segunda nota em outro local da memria diferente do anterior, para no sobrescrever (e acabar esquecendo) a primeira nota. 5. O seu amigo recupera os valores das notas em sua memria, faz o clculo da mdia e coloca o valor encontrado em um terceiro local de sua memria. 6. Voc pergunta: Qual o valor da mdia? 7. O seu amigo informa o resultado obtido. De forma similar, o computador precisa guardar os dados e instrues em endereos especficos de sua memria, durante a execuo de um algoritmo, a fim de no esquecer as informaes, podendo, assim, process-las eficazmente. Definio e utilizao de variveis Agora voc j sabe que os dados utilizados nos algoritmos so armazenados na memria do computador para serem posteriormente acessados. Mas, de que forma conseguimos acessar esses dados? Para acessar os dados, precisamos descobrir em que posio na memria do computador eles esto armazenados. O conceito de varivel foi criado para facilitar essa busca.

Vamos compreender de que forma isso funciona?! Imagine um grande arquivo com vrias gavetas. Para conseguirmos acessar o contedo dessas gavetas, importante que o armazenamento seja feito de maneira organizada, de forma que possamos encontrar facilmente o que procuramos. Para isso, seria interessante identificar as gavetas com nomes e/ou nmeros. Cada gaveta identificada representa, dessa forma, o endereo do contedo que ela armazena, observe a Figura 1.

Figura 1 - Arquivo de gavetas representando espaos reservados na memria de um computador. Na Figura 1, est representado um arquivo com 15 gavetas que podem armazenar os documentos de diferentes pessoas. Veja que as gavetas esto numeradas e cada gaveta s armazena um documento por vez. Cada nmero corresponde ao endereo da gaveta. Algumas delas esto, tambm, marcadas com nomes de pessoas. Essas so as que esto reservadas. Por exemplo, a gaveta de nmero 01 est reservada para armazenar um documento de Maria. Ningum alm de Maria poder colocar seus documentos na gaveta 01. Veja que tem gavetas reservadas tambm para Joo, Slvia, Francisco e Jos. E h gavetas que no foram reservadas, ou seja, esto livres para serem reservadas quando necessrio (essas gavetas, porm, s podem ser utilizadas se forem previamente reservadas). Dessa forma, se perguntarmos a Maria onde ela guarda os seus documentos, ela responder: na gaveta 01 do arquivo. o endereo dos documentos dela. O endereo ao qual nos referimos, em algoritmos, corresponde a uma posio na memria do computador. A essa posio na memria do computador, damos o nome de varivel.

Uma varivel uma posio na memria do computador, que reservada para armazenar os dados que o algoritmo vai manipular.

Uma varivel precisa ter um nome (ou identificador), um tipo de dado associado a ela (tipo da varivel) e a informao que ela armazena. O identificador serve para diferenciar a varivel das demais, por isso deve ser nico para cada varivel. O processo de criao de uma varivel chamado de declarao da varivel. As variveis devem ser declaradas no algoritmo antes de serem utilizadas, pois a declarao das variveis permite que seja reservado um espao na memria para o dado que vai ser armazenado e utilizado. Para declarar uma varivel, devemos proceder da seguinte forma: <nome_da_varivel> : <tipo_da_varivel> ou: <lista_de_variveis> : <tipo_da_varivel>

nota

real tipo da varivel

nome da varivel :

II

idade

inteiro tipo da varivel

nome da varivel :

III

sexo

caracter tipo da varivel

nome da varivel :

IV

frase

literal tipo da varivel

nome da varivel :

nota1, nota2

real tipo da varivel

lista de variveis :

Veja, nos exemplos, que declaramos as variveis vazias, isto , sem informaes associadas a elas (e, ento, fornecemos essas informaes posteriormente, no corpo do algoritmo). Lembre-se do exemplo das gavetas. Para reservar uma gaveta para uma pessoa, no era necessrio armazenar o contedo, de imediato, na gaveta. Igualmente, s possvel armazenar contedo em uma gaveta que j foi previamente reservada. Ou

seja, primeiro deve-se reservar uma gaveta e depois armazenar seu contedo. Veja, tambm, no exemplo V, que duas ou mais variveis de um mesmo tipo podem ser declaradas juntas, na mesma linha, separadas por vrgula (lista de variveis). Uma varivel pode assumir valores diferentes, mas s pode armazenar um valor a cada instante. Alm disso, o seu contedo pode mudar ao longo do tempo na execuo do algoritmo.

Existem algumas regras bsicas para a definio dos nomes (identificadores) das variveis. Vamos conhec-las. 1. Podem-se utilizar nmeros e letras maisculas ou minsculas. 2. No se deve utilizar caracteres especiais, exceo do caractere sublinhado, ou underline ( _ ). 3. O primeiro caractere deve ser sempre letra ou sublinhado, mas nunca um nmero. 4. No deve utilizar acentos grficos, til ou cedilha. 5. Alm dos smbolos, no permitido espao em branco. 6. No se devem utilizar as palavras reservadas da linguagem (observe a Figura 1).

Figura 2 Comportamento do VisuAlg durante a tentativa de nomear uma varivel com uma palavra reservada O termo inicio, no VisuAlg, utilizado para comear o algoritmo. Ao tentar identificar uma varivel com o nome inicio, a resposta do programa o encerramento da execuo e a linha em que est o erro realada em vermelho. Vejamos alguns exemplos de acertos e erros na identificao de variveis:

Identificadores vlidos: a. b. c. d. e. nome1 ano_de_nascimento salario nota_aluno qtd_dias

Identificadores invlidos: a. b. c. d. e. f. 1nome no deve comear por nmero Ano de nascimento no deve ter espao em branco @salrio$ no deve conter caracteres especiais (contm @ e $) Nota*aluno/01 no deve conter caracteres especiais (contm * e /) fim no devemos utilizar palavras reservadas remdio no deve utilizar acentos grficos

Obs. 1: importante que, ao identificar uma varivel, voc utilize palavras ou termos significativos. Por exemplo, para armazenar o valor do salrio do ms janeiro, use salrio_janeiro; para armazenar um nmero de telefone, use num_fone. Essa prtica ajudar no entendimento do algoritmo (para quem l), tornando-o autoexplicativo. Obs. 2: apesar de no haver limitaes para a quantidade de caracteres que comporo o nome de uma varivel, no alongue desnecessariamente os nomes. Por exemplo: salario_do_mes_de_janeiro_com_desconto. Obs. 3: ao utilizar nomes de variveis com mais de uma palavra, separe as palavras com o caractere sublinhado. Por exemplo: salrio_do_mes. Obs. 4: ao declarar as variveis de um algoritmo, primeiro analise o problema, depois defina todos os dados de entrada e sada e o tipo de cada um para, ento, criar os identificadores. Isso o ajudar a se lembrar de declarar todas as variveis necessrias execuo do algoritmo. Constantes Alm das variveis, em algoritmos, tambm lidamos com constantes. Tratam-se de valores fixos ou estveis, que so escritos no programa de forma literal. No VisuAlg, temos constantes numricos, caracteres e lgicos. So exemplos de constantes numricos: a. 15 b. 250 c. 38.5 Exemplos de constantes caracteres ou literais:

a. F b. Maria c. Avenida So Jos Exemplos de constantes lgicos: a. Verdadeiro b. Falso Ao atribuir valores s variveis, podemos utilizar outras variveis, expresses ou constantes. Veja:

Var a : inteiro b : inteiro c : inteiro d : lgico f : literal Inicio a <- 2 //atribuio de constante b <- a + 1 //atribuio de expresso c <- b //atribuio de varivel d <- falso //atribuio de constante f <- Teste //atribuio de constante fimalgoritmo Atividade 1 Esta atividade vai ajud-lo a fixar o que foi estudado nesta primeira parte da aula. Com base na nossa aula responda as questes a seguir. 1. Qual a importncia da utilizao das variveis na criao de um algoritmo? 2. Por que importante declarar uma varivel antes de utiliz-la? 3. Por que o identificador de uma varivel deve ser nico? 4. Explique os problemas nos identificadores abaixo, sugerindo, em seguida, uma alternativa vlida para cada um: a. %unidades b. anos sem aumento c. ah! d. Nota*do*aluno e. Real f. Numero_de_vezes_que_fui_ao_shopping_hoje 5. Explique com suas palavras o que uma constante.

Tipos de dados Vamos relembrar o exemplo do arquivo. Vimos que cada gaveta tem um determinado contedo. Para que possamos acessar esse contedo, a gaveta precisa estar identificada com um endereo representado por um nome e/ou nmero de identificao. Imagine agora que, no momento da identificao, seja associado gaveta um determinado tipo de contedo. A partir desse momento, criada uma regra: essa gaveta s pode armazenar o tipo de contedo ao qual ela foi associada. Voc viu que, no momento da criao de uma varivel, associado a ela um tipo de dado. A partir desse momento (de forma similar ao que ocorre com a gaveta do nosso exemplo), a varivel s pode armazenar o tipo de dado ao qual foi associada. Voc viu que, no momento da criao de uma varivel, associado a ela um tipo de dado. A partir desse momento (de forma similar ao que ocorre com a gaveta do nosso exemplo), a varivel s pode armazenar o tipo de dado ao qual foi associada. Os algoritmos lidam com o conceito de tipos de dados para diferenciar dados de naturezas distintas e, assim, saber que operaes podem ser realizadas com eles. Por exemplo, no faria sentido uma operao de soma entre os dados ana e 5. Assim, dependendo da natureza dos dados utilizados, algumas operaes podem ou no fazer sentido. Os tipos de dados que um algoritmo pode manipular so: dados numricos, dados literais e dados lgicos. Vamos conhecer cada tipo e compreender de que forma cada um deles pode ser utilizado. Dados numricos No estudo da matemtica, voc aprendeu que existem diversos conjuntos numricos (conjunto dos nmeros naturais, inteiros, racionais, irracionais e reais). No estudo dos algoritmos, lidaremos apenas com os nmeros inteiros e os nmeros reais. Nmeros inteiros Os nmeros inteiros so os nmeros positivos ou negativos que no possuem parte decimal ou fracionria. Ex.: 15, -487, 0, 27835, -14937, 100. Em algoritmos, os nmeros inteiros so utilizados geralmente para expressar valores, como quantidades ou idade. Observe o exemplo abaixo:

ALGORITMO QUE CALCULA A IDADE DE UMA PESSOA, DADOS O ANO ATUAL E O ANO EM QUE ELA NASCEU. algoritmo "calcula idade" var ano_atual : inteiro ano : inteiro

idade_hoje : inteiro inicio ano_atual <- 2009 leia (ano) idade_hoje <- ano_atual - ano escreva (idade_hoje) fimalgoritmo Os dados de entrada nesse algoritmo so o ano atual e o ano de nascimento digitado pelo usurio (ano). O dado de sada a idade atual do usurio (idade_hoje). Todos os dados nesse algoritmo so numricos do tipo inteiro. Vamos analisar o cdigo em detalhes. Na primeira linha do algoritmo, temos: algoritmo "calcula idade" Nesta primeira linha, estamos nomeando o algoritmo. Veja que o nome do algoritmo est entres aspas duplas. Na segunda linha do algoritmo, o termo var indica o campo onde ficaro as declaraes das variveis. Nas linhas 3, 4 e 5, as variveis so declaradas. Veja: Linha 2 - var Linha 3 - ano_atual : inteiro Linha 4 - ano : inteiro Linha 5 - idade_hoje : inteiro No VisuAlg, a declarao das variveis feita fora do bloco de execuo dos algoritmos. O bloco de execuo tem seu incio em seguida, na linha 6, indicado pela palavra reservada inicio, e finalizado com a palavra reservada fimalgoritmo. Na primeira linha do bloco de execuo, temos a seguinte instruo: ano_atual <- 2009 O termo ano_atual o nome que foi dado varivel. O smbolo <- (seta para a esquerda) um smbolo que indica atribuio. Estamos dizendo, portanto, nessa linha de cdigo, que est sendo atribudo o valor 2009 varivel do tipo inteiro, que foi nomeada ano_atual. Na linha seguinte do cdigo, temos: leia (ano) A instruo leia uma solicitao ao usurio para que insira, no programa, alguma informao. No momento da execuo dessa linha de cdigo, no VisuAlg, uma caixa de dilogo aparece na tela, com um campo onde o usurio digita a informao pedida (caso o software esteja configurado para executar em modo DOS, aparecer uma tela escura semelhante ao DOS e voc digitar a informao nesta tela). Quando o usurio insere a informao, o programa a recebe e guarda na varivel que foi previamente reservada (ano). Essa varivel foi criada para armazenar o dado inserido pelo usurio (o seu ano de nascimento).

Na linha seguinte, temos outra atribuio: idade_hoje <- ano_atual ano Este comando indica que estamos armazenando o valor encontrado na operao ano_atual ano(operao de subtrao) no espao da memria representado pela varivel idade_hoje. Nesse momento, o objetivo do algoritmo foi atingido. A ltima instruo exibe na tela o resultado encontrado: escreva (idade_hoje) O comando escreva utilizado para exibir, na tela, alguma informao. atravs dele que o computador comunica-se com voc, informando o resultado encontrado no algoritmo. Atividade 2 Agora que analisamos todo o algoritmo do clculo da idade, copie o cdigo para o editor de textos do VisuAlg e faa a execuo passo a passo, para visualizar, na prtica, o que acabou de ser explicado.

Nmeros reais Os nmeros reais so os nmeros positivos ou negativos que englobam nmeros decimais ou fracionrios. Ex.: 15, -487, 1.78, 0.254, 27835, 100, 8.50. So tambm chamados de pontos flutuantes, nas linguagens de programao. Valores reais so aplicveis em algoritmos que manipulam dados que expressam valores fracionrios, como salrio, mdia, preo, porcentagem, entre outros. O algoritmo da mdia, que vimos nas duas primeiras aulas, utiliza dados numricos reais. Observe: ALGORITMO QUE CALCULA A MDIA DO ALUNO algoritmo "calcula mdia" var nota1 : real nota2 : real media : real inicio leia (nota1) leia (nota2) media <- (nota1 + nota2)/2 escreva (media) fimalgoritmo Note que os dados de entrada (as notas do aluno) e o dado de sada (a mdia) so do

tipo real, pois a nota de um aluno pode assumir valores fracionrios, como 8.5 ou 5.2, por exemplo. Obs.: as casas decimais, nos nmeros reais, devem ser separadas por ponto (.) e no por vrgula (,). Por exemplo: use 8.5 e no 8,5. Atividade 3 Tente fazer, no exemplo do clculo da mdia, a anlise de cdigo que fizemos no exemplo do clculo da idade, examinando cada linha do algoritmo e reconhecendo as declaraes de variveis e os comandos. Execute, em seguida, o passo a passo no VisuAlg.

Dados Literais Os dados literais so formados por um nico caractere ou uma sequncia de caracteres, que podem ser letras (maisculas ou minsculas), nmeros ou smbolos especiais (como #, $, @, ?, &, entre outros). Os nmeros, quando representados como caracteres, no podem ser utilizados para clculos. Uma sequncia de caracteres pode ser chamada tambm de cadeia de caracteres ou string. Exemplos de dados literais: Fone: 3222-2222, Av. Senador Salgado Filho, N 1550, Joo Silveira, M, 152, CEP: 59052-250, F. Nos nossos algoritmos, representaremos todos os dados literais sempre entre aspas duplas, sejam eles caracteres isolados ou strings, pois essa a conveno utilizada no VisuAlg. Observe o exemplo abaixo, utilizando uma string (cadeia de caracteres). algoritmo "literais" var nome : literal sobrenome : literal inicio nome <- "Maria" escreva ("Digite o sobrenome:") leia (sobrenome) escreva (nome," ",sobrenome) fimalgoritmo Note que utilizaremos a notao literal quando nos referirmos a strings. Veja outro exemplo, com um caractere isolado: algoritmo "caractere" var sexo : caractere inicio sexo <- "F"

escreva (sexo) fimalgoritmo Para um caractere isolado, utilizaremos a notao caracter ou caractere e no literal, como no exemplo anterior. Execute, tambm, esses dois cdigos no VisuAlg (salve em arquivos separados). Dados lgicos Os dados lgicos so tambm chamados de booleanos, por ter sua origem na lgebra booleana. Os valores que esses tipos de dados podem assumir so Verdadeiro ou Falso, podendo representar apenas um desses dois valores. Um exemplo simples: algoritmo "logicos" var igualdade : logico inicio igualdade <- 10 = 10 escreva (igualdade) fimalgoritmo Veja que utilizamos a notao logico para representar o dado lgico. Sabemos que 10 no igual a 12. Logo, a sada para esse algoritmo ser FALSO. Cole o cdigo no editor de textos do VisuAlg e execute. Veja a sada, no simulador de sada. Agora, no lugar do nmero 12, coloque o nmero 10 (de forma que fique 10=10) e execute novamente. Observe a nova sada no simulador de sada. Resumo Nesta aula, voc viu o processo de armazenamento de dados na memria do computador. Voc aprendeu o conceito de variveis e as regras para a sua declarao e utilizao. Viu tambm a importncia da definio de tipos de dados, identificando os tipos existentes para a construo de algoritmos. Autoavaliao 1. Explique, com suas palavras, o processo de armazenamento de dados na memria de um computador. 2. Defina o conceito de varivel e explique o procedimento para a declarao de uma varivel. Cite pelo menos trs exemplos que demonstrem esse procedimento. 3. Defina o conceito de constante e cite exemplos de atribuio de valores constantes s variveis.

4. Responda as questes a seguir. a. Quais as palavras reservadas do VisuAlg para os tipos de dados que estudamos nesta aula? b. Qual o nico smbolo permitido no identificador de uma varivel? c. Por que os algoritmos lidam com diferentes tipos de dados? d. Quais so os tipos de dados manipulados pelos algoritmos? Cite exemplos de cada um deles. 5. Declare as variveis dos problemas listados abaixo. a. Faa um algoritmo que, dado o valor da conta de uma refeio realizada em um restaurante, acrescente os 10% do garom e exiba o valor total da conta. b. Escreva um algoritmo que, dados o valor unitrio da mercadoria e a quantidade comprada, exiba o valor total a ser pago. c. Escreva um algoritmo que, dado um nmero, exiba o seu antecessor. d. Escreva um algoritmo que, dados dois nmeros, retorne se eles so iguais.

6. Escreva, na ntegra, os algoritmos descritos no exerccio 5 e execute-os no VisuAlg. Aula 4 Expresses Na aula anterior, descrevemos o armazenamento de dados na memria de um computador, conceituamos variveis e constantes e identificamos suas regras de declarao e utilizao. Tambm identificamos e discutimos sobre a importncia dos tipos de dados que podem ser manipulados em um algoritmo. Nesta quarta aula, voc aprender o conceito e conhecer os tipos de operadores e expresses. Voc reconhecer a sua importncia fundamental nas resolues dos problemas representados nos algoritmos. Perceber que, em algoritmos, as expresses possibilitam a relao entre variveis e constantes, atravs de operadores especficos, para encontrar certos valores. Assim, desse momento em diante, pretendemos que voc utilize os conceitos abordados nesta aula, a fim de atingir os objetivos da maioria dos algoritmos que voc ir construir.

Objetivos Ao final desta aula, voc ser capaz de:


Conceituar expresses e operadores, identificando os tipos existentes. Determinar as regras de prioridade entre os diversos tipos de operadores. Escrever e resolver expresses de diferentes tipos.

Expresses e operadores Em termos gerais, podemos definir uma expresso como uma frmula matemtica, em que um conjunto de variveis e constantes numricas se relacionam atravs de operadores aritmticos. Essa frmula, quando avaliada, resulta num valor. Observe abaixo: a = b2 + c2 d A expresso acima, de acordo com o que voc aprendeu na matemtica, tem quatro variveis (a, b, c e d). Se atribuirmos valores a trs delas, poderemos encontrar, facilmente, o valor da quarta. Em algoritmos, o conceito de expresso similar ao conceito matemtico:

Em algoritmos, uma expresso uma combinao de variveis, constantes e operadores, e que, uma vez avaliada, resulta num valor.

Os operadores so os smbolos especficos que relacionam as variveis e constantes em uma expresso. Eles so responsveis pela execuo das operaes que sero realizadas sobre os dados armazenados nessas variveis e constantes. As expresses e seus operadores esto sempre em conformidade com os tipos de dados que manipulam. H trs tipos de expresses: aritmticas (envolvendo dados numricos), lgicas (envolvendo dados lgicos) e literais (envolvendo caracteres e strings). Expresses aritmticas As expresses aritmticas envolvem clculos matemticos, fornecendo um resultado numrico. O Quadro 1 mostra as expresses e operadores aritmticos. Operador Expresso Exemplos

+ / * Mod ou % ^

Adio Subtrao Diviso Multiplicao Resto da diviso inteira Potenciao

a + b, 5 + 7 8 4, x y 20 / 4, x / y 3 * a, x * y 25%4(resulta 1) 2^3 (resulta 8)

Quadro 1 Operadores e expresses aritmticas O quadro anterior mostra os operadores, as expresses nas quais cada um utilizado e exemplos de sua aplicao. Vejamos um algoritmo que apresenta uma expresso aritmtica:

ALGORITMO QUE CALCULA A REA DE UMA CIRCUNFERNCIA

algoritmo "area circunferencia" var raio : real varpi : real area : real inicio varpi <- 3.14 leia (raio) area <- varpi*raio*raio escreva (area) fimalgoritmo Neste algoritmo, utilizamos os conceitos que voc aprendeu na aula anterior. Declaramos trs variveis (raio, rea e varpi), no campo de declarao de variveis, aps a palavra reservada var. No incio do bloco de execuo, aps a palavra reservada inicio, atribumos o valor de PI (3.14) varivel varpi. Lembre-se de que o smbolo <- (seta para esquerda) indica atribuio, ou seja, atribui um valor a uma varivel. Em seguida, o programa solicita ao usurio o valor do raio. Aps a entrada do usurio, o programa recebe o dado inserido (leia (raio)) e armazena na varivel raio. A linha seguinte nos mostra a expresso aritmtica: area <- varpi* raio* raio Observe que a expresso poderia assumir outra forma, sem que se alterasse o seu resultado: area <- varpi*raio^2 Ao final, o resultado exibido.

Execute esse algoritmo no VisuAlg. Experimente com as duas formas de expresso de

clculo da rea da circunferncia. As expresses devem ser escritas sempre na forma linear, ou seja, colocadas em linhas. Observe, abaixo:

Sempre que for utilizar operaes em forma de frao, nas expresses, voc deve utilizar o caractere / (barra inclinada), ao invs da barra horizontal que utilizamos nas equaes matemticas. Alm disso, em algoritmos, no utilizamos colchetes ([ ]) ou chaves ({ }). Apenas parntesis so permitidos. Os parntesis, nos algoritmos, so utilizados para modularizar as expresses. Ou seja, eles dividem a expresso em partes, proporcionando maior compreenso e definindo prioridades para a sua resoluo. Veja: 4*(8-5)/9 Na expresso acima, os parntesis nos permitem compreender que o primeiro clculo que deve ser feito 8-5. Mas no so apenas os parntesis que definem as prioridades dos operadores. Existem certas regras que determinam essas prioridades. So as regras de precedncia. Veja o Quadro 2. Operador * / % + Prioridade 1 1 1 2 2

Quadro 2 Precedncia de operadores aritmticos A precedncia funciona como uma hierarquia de operadores. Os operadores *, / e % devem ser avaliados primeiro, seguidos dos operadores + e -.

Operadores de menor prioridade devem ser avaliados primeiro. Em caso de empate, as expresses devem ser resolvidas sempre da esquerda para a direita. Os parntesis foram uma prioridade e, no caso de parntesis aninhados, os mais internos devem ser avaliados primeiro.

Observe os exemplos: a. 2 * 3 + 4 / 2 = 8 i. ii. iii. Primeiro, resolvemos a multiplicao: 2 * 3 = 6 A expresso fica: 6 + 4 / 2 Depois, resolvemos a diviso: 4/2 = 2, ficando a operao: 6+2=8

b. 2 * ( 3 + 4 ) / 2 = 7 Nesse caso, com os mesmos operandos, o resultado ser diferente. Veja: i. ii. iii. Resolvemos primeiro o que est entre parntesis: 3 + 4 = 7 A expresso fica: 2 * 7 / 2 Os operadores * e / tm mesma prioridade, ento, resolvemos da esquerda para a direita: multiplicamos: 2 * 7 = 14 e ficamos com 14 / 2 = 7

c. 27 % 4 * 15 / ( 5 * ( 8 4 ) 5 ) = 3 i. ii. iii. iv. v. vi. vii. viii. ix. Primeiro, calculamos os parntesis mais internos: 8-4=4 A expresso fica: 27%4*15/(5*4-5) Em seguida, resolvemos, mais uma vez, os parntesis (primeiro a multiplicao): 5*4-5 = 20-5=15 A expresso fica: 27%4*15/15 Temos, nesse momento, os operadores %, * e / empatados. Logo, a prioridade se d da esquerda para a direita da expresso Resolvemos 27%4 = 3 A expresso fica: 3*15/15 Em seguida, calculamos 3*15 = 45 Finalmente, ficamos com 45/15=3

Os operadores aritmticos que vimos na Quadro 1 so operadores binrios, ou seja, operam sobre dois operandos. H tambm os operadores unrios, que so: + (manuteno de sinal) e (inverso de sinal). Por exemplo: +1, -5. Os operadores unrios esto frente de quaisquer outros na escala de prioridade.

Atividade 1 1. Avalie as seguintes expresses na ordem correta e mostre o resultado:

i. ii. iii. iv. v. vi.

4*7+826/3 (6 + 4) / 10 6 + 4 / 10 10 % 3 * 9 4 / 2 + 5 16 / 2 * 2 / ( 6 / 3 ) 16 / 2 / 2 * ( 7 +1 2 )

2. Construa, no VisuAlg, um algoritmo que calcule o volume de um cilindro, dados os valores de sua altura e do raio da circunferncia de sua base. 3. Escreva as seguintes expresses, de forma que possam ser utilizadas em algoritmos: a. b.

c.

4. Faa um algoritmo que calcule o resto da diviso inteira entre dois nmeros dados, tambm no VisuAlg.

Expresses lgicas As expresses lgicas estabelecem relaes de comparao entre variveis e constantes, de forma que o seu resultado s pode assumir um valor: verdadeiro ou falso. Essas expresses podem utilizar dois tipos de operadores: operadores relacionais e operadores lgicos. Operadores relacionais Os operadores relacionais estabelecem comparao entre dados de quaisquer tipos (numricos, lgicos ou literais). Veja esses operadores no Quadro 3. Operador = <> > >= Descrio Igual Diferente Maior que Maior ou igual Exemplos A = B, 8 = 8 X<>Y, 7<> 5 X > Z, 9 > 8 A>=5, 8>=5

< <=

Menor que Menor ou igual Quadro 3 Operadores relacionais

X < Y, 2 < 3 B<=C, 2<=4

Observe que as expresses que vemos na terceira coluna do Quadro 3 s podem assumir um valor (verdadeiro ou falso) como resultado. Vejamos alguns exemplos de expresses utilizando os operadores relacionais: 1. A = B. Se A = 5 e B = 7, ento, o resultado da expresso Falso. 2. A <> B. nas mesmas circunstncias do item anterior, o resultado seria Verdadeiro. 3. 9 > 15 Falso 4. 9 < 15 Verdadeiro A Figura 1 mostra a execuo de algumas expresses com operadores relacionais no VisuAlg.

Figura 1 Expresses com operadores relacionais no VisuAlg Declaramos e atribumos os valores das variveis lgicas a, b, c e d e criamos variveis (s, t, u, v, x e z) para as quais atribumos os valores das expresses que voc v na

Figura 1, utilizando os operadores relacionais que acabamos de conhecer. Aps a anlise das expresses, os resultados so os exibidos no simulador de sada do VisuAlg (no canto direita). Veja, tambm, no quadro de variveis, os valores de cada varivel ao final da execuo. Atividade 2 Sabendo que a = 7, b = 12 e c = 3, diga se o resultado das seguintes expresses verdadeiro ( v ) ou falso ( f ): 1. 2. 3. 4. 5. ( ( ( ( ( ) (a + c) > b ) b >= (a + 2) ) c = (b - a) ) (b + a) <= c ) (c + a) > b

Operadores lgicos Alm dos operadores relacionais, as expresses lgicas lidam com os operadores lgicos. Esses operadores so utilizados para combinar os resultados de expresses relacionais, retornando, ao final, um resultado verdadeiro ou falso. Os operadores lgicos so: 1. 2. 3. 4. OU lgico disjuno E lgico conjuno NO lgico negao XOU lgico disjuno exclusiva

Observe o Quadro 4. Chamaremos o valor Falso de F e o Verdadeiro de V. A F F V V B F V F V A OU B F V V V AEB F F F V A XOU B F V V F NO A V V F F

Quadro 4 Operadores e expresses lgicas No Quadro 4, vemos que: 1. A OU B verdadeiro se pelo menos um dos dois (ou A ou B), ou ambos forem verdadeiros. 2. A E B verdadeiro somente se ambos (tanto A quanto B) forem verdadeiros. 3. A XOU B um OU exclusivo, ou seja, verdadeiro somente se um dos dois for verdadeiro e o outro falso (ou vice-versa). Ou seja, eles so mutuamente exclusivos.

4. NO A verdadeiro se A for falso e falso se A for verdadeiro, pois trata-se de uma negao. Podemos extrair, dessas afirmaes, o Quadro Verdade (Quadro 5). V V F F V F V F OU V ou V = V V ou F = V F ou V = V F ou F = F E VeV=V VeF=F FeV=F FeF=F XOU V xou V = F V xou F = V F xou V = V F xou F = F NO No V = F No F = V

Quadro 5 Quadro Verdade com operadores lgicos Os operadores lgicos, como os aritmticos, obedecem a regras de precedncia. As prioridades so as seguintes: 1. NO 2. E 3. OU Os parntesis, com operadores lgicos, tambm foram a precedncia. Vamos resolver as seguintes expresses, assumindo os seguintes valores para A, B, C e D (acompanhe o quadro verdade durante a resoluo): A = falso B = verdadeiro C = verdadeiro D = falso a. A ou B e C = verdadeiro Veja: I -A II - F III - F ou ou ou BeC VeV V = V

O resultado da expresso , portanto, verdadeiro. b. (A ou B) e C = verdadeiro I - (A ou B) e II - (F ou V) e III V e C V V = V

Resultado: verdadeiro c. No A e B ou C e D = verdadeiro I - No A II - No F III - V e V e e V B V ou ou V ou ou V C V e F e e F D F

Resultado, portanto, verdadeiro. d. No (A e (B ou C)) e D = Falso I - No (A e (B ou C)) e D II - No (F e (V ou V)) e F III - No (F e V IV - No VVI V F e F F ) e F e F

O resultado final fica, portanto, falso. Veja que nos exemplos dos itens c e d, apesar dos operandos e operadores serem os mesmos, o resultado foi diferente, devido s regras de precedncia dos operadores. Vamos analisar as duas ltimas expresses no VisuAlg. Veja, na Figura 2, o resultado exibido no simulador de sada da ferramenta, aps a execuo da expresso do item c.

Figura 2 Expresso lgica do item c, executada no VisuAlg A Figura 2 mostra que foram atribudos os valores lgicos a cada varivel (conforme o nosso exemplo) e foi criada uma varivel (a varivel s) qual foi atribudo o resultado da expresso do item c do exemplo. Em seguida, foi solicitado ao programa que exibisse o valor de s (na instruo escreva ( s ,s). O simulador de sada exibe, ento, o resultado verdadeiro. Veja, agora, a Figura 3 com a anlise do item d do nosso exemplo.

Figura 3 Expresso lgica do item 'd', executada no VisuAlg

Dessa vez, conforme vemos na Figura 3, utilizamos a expresso do item d, com os mesmos operadores e operandos, seguindo, porm, as regras de precedncia, devido utilizao dos parntesis. O resultado exibido no simulador de sada , portanto, diferente do anterior, Falso. Atividade 3 Sabendo que a = 10, b = 8, c = 6 e d = 12, informe se as expresses abaixo so verdadeiras ou falsas: a. b. c. d. ( ( ( ( ) a > c e c <= d ) (a + b) > 20 ou (a + b) = (c + d) ) a >= c e d >= c ) no (a < d) e c > b

Expresses literais Podemos utilizar para expresses literais (caracteres e textos), o operador aritmtico +. Ele utilizado para concatenar literais ou caracteres. Veja o exemplo: algoritmo "operaes com literais" var nome, sobrenome, nome_completo : literal inicio nome <- "Ana" sobrenome <- "dos Santos" nome_completo <- nome + " "+sobrenome escreva (nome_completo) fimalgoritmo Esse algoritmo deve exibir, como resultado, o texto Ana dos Santos. Faa o teste no VisuAlg. Tambm podemos utilizar operadores lgicos com literais e caracteres. Veja: algoritmo "operaes logicas com caracteres" var c, d : literal f : logico inicio c <- "casa" d <- "CaSa" f <- c = d escreva (f) fimalgoritmo

O resultado para esse agoritmo Verdadeiro, pois, para efeito de comparao entre textos, o VisuAlg no faz diferenas entre maisculas e minsculas. Resumo Nesta aula, voc viu que as expresses possibilitam a relao entre variveis e constantes, atravs de operadores especficos, para encontrar certos valores. Voc conheceu os trs tipos de expresses (aritmticas, lgicas e relacionais), com os seus respectivos operadores. Discutimos sobre as regras de precedncia dos operadores e analisamos expresses dos diversos tipos. Voc reconheceu, tambm, nesta aula, a importncia das expresses para as resolues dos problemas representados nos algoritmos. Autoavaliao 1. Em algoritmos, o que uma expresso? 2. Qual a funo dos operadores nas expresses? 3. Quais os tipos de expresses que podem ser utilizadas nos algoritmos? Que tipos de dados cada uma delas manipula? Qual o possvel resultado para cada uma delas? 4. Cite exemplos de cada um dos tipos de expresso. 5. Construa um algoritmo que calcule o permetro de um tringulo escaleno, dados os valores de seus trs lados. 6. Construa um algoritmo que resolva uma equao do segundo grau, dados os valores de a, b e c. 7. Resolva as seguintes expresses: a. 2 + 9 * 3 ^ 2 2 b. 3 * ( 4 2 ) + 7 * 5 c. 23 % 7 + 5 ^ 3 2 * 4 / 2 d. ( 14 + ( 10 3 ) ) % 8 * 4 8 / 4 8. Determine os resultados obtidos na avaliao das expresses lgicas seguintes, sabendo que A=2, B=7, C=3: a. ( ) A > B-1 ou A > B- 2 b. ( ) B = A * C e (A > C) c. ( ) C > A ou B < C e A + 5 > B d. ( ) A = C-1 e B * 2 > A*C e (A+B+C)/2 < B e. ( ) C-A > B / 3 ou 5+C A <= 12 f. ( ) B > C e C > A e A + 1 >= B g. ( ) C*3 >= B e 5+A <= B e B-C >= A*2 e B*3 > (B+C)*2

Antes de resolver uma expresso, lembre-se de primeiro avaliar se a expresso vlida, ou seja, se foi escrita corretamente, com operadores compatveis com os tipos e a quantidade de operandos. Em seguida, lembre-se de obter os resultados parciais, como vimos na aula, obedecendo s regras de precedncia dos operadores. Aula 5 Instrues primitivas Na aula anterior, voc viu os conceitos e conheceu os tipos de operadores e expresses, reconhecendo a sua importncia no embasamento das resolues dos problemas

representados nos algoritmos. Nesta quinta aula, voc conhecer as instrues primitivas, que so os comandos bsicos de um algoritmo. Voc perceber a importncia dessas instrues enquanto meios de comunicao entre o programa e o mundo exterior. Ver, alm disso, como utilizar essas instrues, conhecendo sua sintaxe e sua semntica. E ainda exercitar a construo de blocos de execuo utilizando tais instrues. Objetivos Ao final desta aula, voc ser capaz de:

Conceituar instrues primitivas, identificando a sua importncia como meio de comunicao entre o programa e o mundo exterior. Definir os tipos de instrues primitivas, a sintaxe e a semntica de cada uma. Construir blocos de execuo de algoritmos utilizando os comandos aprendidos na aula.

Instrues primitivas Voc j sabe que um algoritmo uma sequncia de passos utilizados para atingir um determinado objetivo. Para executar um algoritmo, voc deve informar ao computador o que voc deseja que ele faa. A essas informaes que voc transmite ao computador, damos o nome de instrues primitivas. As instrues primitivas so os comandos bsicos que executam as tarefas essenciais ao longo de um algoritmo. Esses comandos permitem a comunicao do computador com o usurio e com os dispositivos de entrada e sada.

Dispositivos de entrada so os meios atravs dos quais voc pode transmitir informaes ao computador. Por exemplo: teclado e mouse.

Dispositivos de sada so os meios atravs dos quais o computador se comunica com voc. Por exemplo: monitor, impressora, caixas de som.

As instrues primitivas possibilitam, tambm, a movimentao dos dados na memria do computador (como na declarao das variveis e clculos de expresses). Podemos dizer, diante disso, que, sem as instrues primitivas, o algoritmo torna-se intil, pois sem elas no haveria possibilidade de comunicao entre o programa e o mundo exterior. No seria possvel, por exemplo, o usurio saber o resultado do

algoritmo ou informar algum dado importante para a sua execuo. Vamos voltar ao nosso exemplo do clculo da mdia. ALGORITMO PARA CALCULAR MDIA ARITMTICA DE UM ALUNO algoritmo "calcula mdia"//crie um algoritmo de nome "calcula mdia" var//abra o campo para declarao das variveis nota1:real//reserve um espao na memria e d a ele o nome de 'nota1' nota2:real//reserve um espao na memria e d a ele o nome de 'nota2' media:real//reserve um espao na memria e d a ele o nome de 'media' inicio//inicie a execuo do algoritmo escreval ("Digite o valor da primeira nota:")//mostre na tela o texto entre aspas leia (nota1)// leia o que o usurio escreveu e guarde no espao nomeado 'nota1' escreval ("Digite o valor da segunda nota:")//mostre na tela o texto entre aspas leia (nota2)// leia o que o usurio escreveu e guarde no espao nomeado 'nota2' media <- (nota1 + nota2)/2//guarde no espao chamado 'media' o resultado da expresso '(nota1 + nota2)/2' escreva (media)//mostre na tela o valor que foi armazenado na varivel 'media' fimalgoritmo//termine o algoritmo

Observe, no algoritmo, que os comandos executados so escritos de uma determinada forma e cada um instrui o computador a executar uma determinada ao (veja os comentrios em verde). Isso ocorre porque esses comandos ou instrues devem possuir uma sintaxe e uma semntica. Sintaxe a forma como o comando deve ser escrito para que possa ser entendido pelo programa que vai executar o algoritmo.

Essa forma, geralmente, obedece a alguma regra predefinida, de acordo com o programa utilizado (no nosso caso, o VisuAlg). Se voc viola a regra sinttica, o programa no consegue entender a instruo e um erro gerado, interrompendo a execuo.

Semntica o significado da instruo, ou seja, o que voc est ordenando que o computador faa ao transmitir essa instruo. Alm da declarao de variveis, as principais instrues que voc d ao computador so a atribuio de valores ou expresses a essas variveis e os comandos de entrada e sada de dados. Vamos conhecer essas instrues?! Instruo de atribuio J falamos, brevemente, nas Aulas 3 (Tipos de dados) e 4 (Expresses) sobre a instruo de atribuio. Ela representada pelo smbolo (seta para a esquerda). No VisuAlg, usamos <-. A instruo de atribuio nos permite armazenar informaes dentro das variveis. Essas informaes podem ser valores ou expresses. A sintaxe de uma atribuio a seguinte: <nome_da_variavel > <valor_ou_expresso> Veja os exemplos abaixo: i. media 8.5

Nesse exemplo, estamos armazenando no espao de memria correspondente varivel media o valor 8.5. ii. media (nota1 + nota2)/2

Neste outro exemplo, estamos armazenando no espao de memria correspondente varivel media o valor resultante da expresso (nota1 + nota2)/2. Vejamos alguns exemplos de instrues de atribuio de valores e expresses:

nota1<-8.5 precoTotal <- preo_unitario * quantidade nome <- Maria sexo <- F idade <- 16 idade_atual <- ano_atual ano_nascimento temFilhos <- falso igualdade <- a=b

Em fluxograma, a instruo de atribuio representada, como vimos na aula sobre formas de representao de algoritmos, pelo smbolo a seguir:

Veja agora, na Figura 1, um dos exemplos que acabamos de mencionar, segundo esse tipo de representao.

Figura 1 - atribuio em fluxograma Na Figura 1, vemos a atribuio de valores s variveis a e b e a atribuio de uma expresso varivel igualdade. Observe, a seguir, o algoritmo da Figura 1 em pseudocdigo:

algoritmo "atribuio" var a, b : inteiro igualdade : logico inicio a <- 5 b <- 7 igualdade <- a = b fimalgoritmo

Lembre-se de que s possvel atribuir a uma varivel um valor do mesmo tipo que a varivel. Alm disso, qualquer valor que uma varivel possua antes da atribuio se perde, e substitudo pelo novo valor.

Atividade 1 Esta atividade vai auxiliar voc a exercitar o uso da instruo de atribuio nos algoritmos. 1. Identifique e descreva a semntica de cada uma das atribuies dos exemplos que acabamos de mencionar (inclusive o exemplo da Figura 1). 2. Para calcular o volume mnimo de um reservatrio de gua residencial, devemos prever o armazenamento de 200 litros de gua para cada morador por trs dias. Sabendo disso, crie um algoritmo (no VisuAlg) que realize esse clculo. Declare as variveis qtd_dias, qtd_moradores e volume_reservatorio e atribua a essas variveis os devidos valores ou expresses (supondo que a residncia possui 5 moradores). O algoritmo no precisa exibir o resultado. 3. Faa o fluxograma do algoritmo que voc criou. Observao: se preferir, faa o caminho inverso: crie o algoritmo em fluxograma e depois escreva em pseudocdigo.

Instruo de sada de dados A instruo de sada de dados a instruo atravs da qual o computador se comunica com voc durante a execuo do algoritmo. Isso feito, geralmente, atravs da exibio de alguma informao na tela. So duas as sintaxes possveis para essa instruo: i. ou ii. escreva (<varivel_ou_lista_de_variveis>) escreva (Mensagem ao usurio)

A palavra reservada escreva utilizada para instruir o computador a mostrar algo na tela, que pode ser o valor armazenado em uma varivel ou uma informao, solicitao

ou alerta em forma de texto entre aspas duplas.

Veja: i. ii. escreva (Digite o valor da primeira nota: ) escreva (media)

A primeira instruo do exemplo (i) exibe na tela uma mensagem que solicita ao usurio uma entrada (a primeira nota). A segunda instruo do exemplo (ii) exibe na tela o resultado obtido do clculo realizado no algoritmo, que est armazenado na varivel media. A representao da instruo de sada de dados em um fluxograma utiliza o seguinte smbolo:

Na Figura 2, veja como a representao do exemplo da Figura 1 se torna mais interessante, quando acrescido da instruo de sada, com o resultado do algoritmo.

Figura 2 Fluxograma com instrues de atribuio e sada de dados Veja o smbolo de sada de dados, o qual exibe o valor armazenado na varivel igualdade. Veja, tambm, abaixo, a representao do algoritmo em pseudocdigo. O que voc acha que aparecer na tela ao executar o algoritmo? Execute-o no VisuAlg e

veja o resultado.

algoritmo "atribuio com sada" var a, b : inteiro igualdade : logico inicio a <- 5 b <- 7 igualdade <- a = b escreva (igualdade) fimalgoritmo

Na sintaxe da instruo de sada de dados h uma terceira opo, que permite mesclar a exibio de variveis com mensagem ao usurio. Veja o exemplo abaixo: escreva (O valor da mdia : , media) Nesse caso, separa-se a mensagem das variveis por vrgulas. Nesse tipo de instruo voc pode, tambm, inserir uma quebra de linha aps o texto digitado. Dessa forma, possvel determinar a partir de que momento voc deseja que o texto passe a ser escrito em outra linha. Basta, para isso, acrescentar a letra l ao final do comando escreva. Veja:

inicio media <- 8.5 escreval ("O valor da mdia : ", media) fimalgoritmo Texto exibido ao usurio: O valor da mdia : 8.5 Atividade 2 Vamos praticar mais um pouco para que voc se familiarize, tambm, com a sintaxe das instrues de sada de dados. 1. Construa o algoritmo do item 2 da Atividade 1, dessa vez, exibindo o resultado para o usurio. 2. Faa, tambm, o fluxograma do algoritmo e veja em que ele foi

alterado, com relao ao anterior. Observao: na instruo de sada de dados do algoritmo que voc criou, utilize a sintaxe que mescla a mensagem ao usurio com a varivel. Utilize, tambm, o comando de sada com quebra de linha.

Instruo de entrada de dados A instruo de entrada de dados a instruo atravs da qual voc ordena o computador a realizar alguma tarefa. A sintaxe desse tipo de instruo a seguinte: leia (<varivel_ou_lista_de_variaveis>) Da mesma forma que a palavra escreva, em nossos algoritmos, a palavra leia uma palavra reservada. Essa palavra utilizada para ordenar ao computador que leia os dados que foram inseridos pelo usurio e os armazene em espaos que foram reservados na memria. Esses espaos, como voc j viu, so representados pelas variveis que foram declaradas.

Exemplo: leia (nota1) A palavra reservada leia, no exemplo, recebe o valor que o usurio digitou (a primeira nota) e o armazena no espao da memria representado pela varivel nota1. A representao dessa instruo em fluxograma feita com o seguinte smbolo:

Vamos ver o exemplo que vimos nas Figuras 1 e 2, acrescidos da instruo de entrada de dados. Observe a Figura 3.

Figura 3 Fluxograma com a utilizao das instrues de atribuio, sada e entrada de dados Veja que, agora, o algoritmo solicita ao usurio que determine um valor para ser armazenado em cada uma das variveis que foram criadas. Examine o pseudocdigo do algoritmo abaixo:

algoritmo "atribuio, entrada e sada" var a, b : inteiro igualdade : logico inicio escreval ("Determine um valor para 'a':") leia (a) escreval ("Determine um valor para 'b':") leia (b) igualdade <- a = b escreval (igualdade) fimalgoritmo

Atividade 3 Agora, vamos praticar um pouco a criao de instrues de entrada de dados. 1. Escreva o algoritmo exemplificado na Figura 3, no VisuAlg, e faa a execuo passo a passo, a fim de verificar como cada instruo

processada no decorrer do algoritmo. 2. Acrescente instrues de entrada de dados no algoritmo do reservatrio de gua, que voc escreveu nas Atividades 1 e 2 desta aula e execute-as. Faa, tambm, a execuo passo a passo para esse algoritmo.

Resumo Nesta aula, voc aprendeu os conceitos das instrues primitivas e conhecemos os trs tipos de instruo: atribuio, sada de dados e entrada de dados. Aprendeu tambm a forma como essas instrues devem ser representadas nos algoritmos, ou seja, sua sintaxe e ainda a reconhecer o significado de cada uma (sua semntica). Voc viu, alm disso, a sua representao em pseudocdigo e fluxograma. Por fim, exercitou a criao dessas instrues no VisuAlg. Com isso, finalizamos a parte conceitual bsica de algoritmos. Autoavaliao 1. Com base no que voc estudou nesta aula, defina, com suas palavras, a importncia das instrues primitivas para a construo e execuo dos algoritmos. 2. Descreva, de forma sucinta, os tipos de instrues primitivas que voc conheceu nesta aula, explicando a sintaxe e a semntica de cada uma. 3. Escreva um algoritmo, no VisuAlg, que calcule o valor total a ser pago em uma compra, de acordo com as seguintes informaes: a. b. c. d. quantidade de produtos do tipo a = 7 preo unitrio do produto de tipo a = R$ 217.00 quantidade de produtos do tipo b = 12 preo unitrio do produto de tipo b = R$ 175,00

Resolva o algoritmo utilizando todas as instrues primitivas que voc conheceu nesta aula. 4. Construa um algoritmo que leia quatro nmeros e mostre a soma desses nmeros. 5. Construa um algoritmo que calcule o valor que ser gasto com combustvel por Joo para fazer uma viagem at a cidade vizinha. O algoritmo deve ler a distncia entre a casa de Joo e o destino (em Km), o consumo do carro de Joo (em Km rodados/litro) e o preo do litro de combustvel e mostrar o valor que ser gasto em combustvel na viagem. Aula 6 Controle de fluxo de execuo: estrutura sequencial Nas aulas anteriores, voc conheceu as formas de representao dos algoritmos, aprendeu a identificar e definir os tipos de dados e a utilizar variveis para armazenar

esses dados na memria do computador. Alm disso, voc aprendeu a relacionar os dados em expresses e operadores e conheceu, na aula 5 (Instrues primitivas), os comandos bsicos de um algoritmo: as instrues primitivas. Todos os conceitos que voc viu at agora consistiram numa apresentao de todos os elementos que so essenciais para a construo de algoritmos. Nesta sexta aula, daremos incio a uma nova fase em nossos estudos. Voc conhecer o conceito de controle de fluxo de execuo, inserindo esse conceito na estrutura de organizao de um algoritmo. Falaremos das principais estruturas de controle de fluxo e nos deteremos, por ora, em uma delas: a estrutura sequencial. Ao final desta aula, voc ser capaz de construir algoritmos completos, utilizando a estrutura de execuo sequencial. Objetivos Ao final desta aula, voc ser capaz de:

Identificar a organizao estrutural de um algoritmo, reconhecendo os seus principais elementos. Conceituar controle de fluxo de execuo, reconhecendo sua importncia na organizao das instrues em um algoritmo. Identificar a estrutura sequencial e construir algoritmos completos utilizando essa estrutura de execuo.

Estrutura geral de um algoritmo Voc j conhece todos os elementos essenciais para a construo dos algoritmos. Afinal, voc j est familiarizado com as formas de representao, os tipos de dados e variveis, as expresses e as instrues primitivas. Voc deve ter percebido, tambm, que todos esses elementos devem estar estruturados de acordo com uma determinada ordem. interessante que seja dessa forma, para tornar o algoritmo mais legvel e tambm para auxiliar voc a estruturar o seu pensamento, enquanto modela o algoritmo. Vamos relembrar essa estrutura, observando alguns aspectos importantes. Veja a seguir os tpicos sobre a sintaxe que utilizaremos. a. A estrutura que utilizaremos em nossos algoritmos comea com a palavra reservada algoritmo, na primeira linha, seguido do nome que quisermos dar ao algoritmo, entre aspas duplas (). b. Em seguida, abrimos o campo de declarao de variveis, com a palavra reservada var e declaramos as variveis logo abaixo dela. c. Depois, comeamos o bloco de execuo de comandos do algoritmo, com a palavra reservada inicio. d. Seguem-se as instrues que fazem parte da descrio do algoritmo. Esses elementos compem o bloco de execuo do algoritmo, que tudo o que fica localizado entre as palavras inicio e fimalgoritmo. e. Cada linha s pode ter uma instruo ou comando. No VisuAlg, se voc d um

enter, est sinalizando o fim do comando daquela linha. f. interessante que o bloco de execuo fique em uma posio recuada no texto, com relao s palavras inicio e fimalgoritmo. Chamamos esse recuo de identao. A identao torna o algoritmo mais legvel, delimitando de forma clara onde o algoritmo comea e onde termina. g. O algoritmo finalizado com a palavra reservada fimalgoritmo. h. Se voc desejar, poder inserir no algoritmo comentrios explicativos. So textos precedidos por duas barras (//), que servem para explicar o comando que ser executado a seguir. As duas barras isolam o comentrio dos comandos do algoritmo. Ou seja, o texto precedido por // no executado. Veja o exemplo a seguir. ALGORITMO PARA CALCULAR MDIA ARITMTICA DE UM ALUNO

algoritmo "calcula mdia" // Funo : // Autor : // Data : 31/12/2009 // Seo de Declaraes var nota1:real nota2:real media:real //incio do bloco de execuo dos comandos inicio escreval ("Digite o valor da primeira nota:") leia (nota1) escreval ("Digite o valor da segunda nota:") leia (nota2) media <- (nota1 + nota2)/2 escreva ("A mdia =",media) //fim do algoritmo fimalgoritmo

Comentrios

Declaraes de variveis

Bloco de execuo de comandos

Atividade 1 Essa uma atividade simples, que servir para voc fixar o que viu sobre a estrutura geral de um algoritmo. Por isso, desejvel que voc utilize, na construo desses algoritmos, todos os elementos estruturais que acabamos de

ver (mesmo aqueles que so opcionais). 1. Escreva um algoritmo que leia um nmero inteiro positivo e exiba o dobro do mesmo. 2. Faa um algoritmo para calcular o volume de uma esfera de raio R, em que R um dado fornecido pelo usurio. O volume da esfera calculado por . 3. Escreva um algoritmo para calcular e exibir o comprimento de uma circunferncia, sendo dado o valor de seu raio. Execute os algoritmos criados no VisuAlg.

Controle de fluxo de execuo Observando o algoritmo da mdia, percebemos que possvel obter o resultado desejado, utilizando apenas as instrues bsicas de entrada (leia) e sada (escreva) e uma nica expresso aritmtica aplicada sobre os dados de entrada (que so as notas). Mas, nem sempre ser assim. Existem inmeros tipos de problemas que podem ser resolvidos com algoritmos. Dependendo do conjunto de dados de entrada de cada algoritmo, deve-se executar um conjunto diferente de instrues. Alm disso, um determinado conjunto de instrues pode ser executado de forma repetida, de acordo com o tipo de problema que se deseja resolver. Por isso, necessrio que haja uma forma de controlar o fluxo da execuo das instrues do algoritmo, de acordo com os seus dados de entrada. Controle de fluxo de execuo a maneira de organizar a sequncia em que as instrues so executadas em um algoritmo. Ou seja, consiste em definir em que ordem as instrues sero executadas sobre os dados. Esse controle exercido com a utilizao das estruturas de controle de fluxo de execuo. As estruturas de controle bsicas so as seguintes: a. Estrutura sequencial b. Estruturas de deciso c. Estruturas de repetio Nesta aula, trataremos da estrutura de execuo sequencial. Estrutura sequencial Os algoritmos que utilizamos como exemplos at agora em nossas aulas, utilizam, basicamente, em sua execuo, as instrues de atribuio, entrada e sada de dados. A

ordem da execuo tambm simples: um comando executado imediatamente aps o trmino do anterior. Essa estrutura de execuo de um algoritmo a estrutura sequencial. A estrutura sequencial organizada da forma que j conhecemos: PSEUDOCDIGO FLUXOGRAMA

Inicio Comando 1 Comando 2 Comando 3 . . . Comando n Fimalgoritmo

A estrutura sequencial aquela em que os comandos do algoritmo so executados em uma sequncia pr-estabelecida. Cada comando, nessa estrutura, s executa aps o trmino do anterior.

Atividade 2 1. Como voc capaz de definir se um algoritmo est escrito utilizando-se a estrutura sequencial? 2. Faa um algoritmo que calcule o permetro de um retngulo, recebendo os valores dos lados. 3. Escreva um algoritmo que leia dois valores em variveis diferentes e troque-os entre si, ou seja, a primeira varivel ir conter o valor da segunda, e a segunda o valor da primeira. 4. Faa um algoritmo que receba uma quantidade qualquer em minutos e converta em horas. 5. Escreva um algoritmo para calcular e exibir a mdia ponderada de 2 notas dadas (nota1 = peso 6 e nota2 = peso 4).

Resumo Nesta aula, voc conheceu a forma de organizao geral de um algoritmo e seus elementos essenciais. Voc identificou, tambm, o conceito de controle de fluxo de execuo, observando a importncia desse controle na ordenao das instrues de um

algoritmo. importante que voc seja capaz de perceber quando um algoritmo est escrito na forma sequencial. Alm disso, estar apto a construir algoritmos nessa forma, sem grandes dificuldades , sem dvidas, requisito fundamental para que possamos progredir em nosso curso. Autoavaliao 1. Quais so os elementos essenciais para a construo de um algoritmo? 2. Explique, com suas palavras, como deve ser a sintaxe de um algoritmo simples, escrito no VisuAlg. Quais so os elementos obrigatrios? Quais so os elementos opcionais e para que servem? 3. O que identao? Por que o seu uso considerado uma boa prtica na construo de algoritmos? 4. O que controle de fluxo de execuo? Por que importante que haja esse controle em algoritmos? 5. Quais as principais caractersticas das estruturas sequenciais? 6. Construa, com base no que voc aprendeu, os seguintes algoritmos. a. Algoritmo que l o salrio de um funcionrio, calcula e mostra o novo salrio, sabendo-se que esse sofreu um aumento de 25%. b. Algoritmo que l um nmero positivo maior que zero, calcula e mostra: i. o nmero digitado ao quadrado; ii. o nmero digitado ao cubo. c. Algoritmo que l o ano de nascimento de uma pessoa e o ano atual e mostra: i. a idade da pessoa em anos; ii. a idade da pessoa em meses; iii. a idade da pessoa em dias; iv. a idade da pessoa em semanas. d. Algoritmo que calcula e mostra a tabuada de multiplicao de um nmero digitado pelo usurio. 7. Escreva um algoritmo que leia o valor da hora aula, o nmero de aulas dadas no ms e o percentual de desconto do INSS e calcule o salrio lquido de um professor. 8. Escreva um algoritmo que leia uma temperatura em graus centgrados e apresente a temperatura convertida em graus Fahrenheit. A frmula de

converso : a temperatura em centgrados.

, onde F a temperatura em Fahrenheit e C

Aula 7 Estruturas de deciso simples SE... FIM SE Na aula 6 (Controle de fluxo de execuo: estrutura sequencial), falamos acerca da necessidade do controle de fluxo de execuo para definir a ordem em que os

comandos do algoritmo sero executados. E foi a partir dessa necessidade que surgiu o conceito de estruturas de controle. Voc viu que os algoritmos que utilizamos como exemplos, at agora, utilizam a estrutura sequencial, que uma estrutura simples, com comandos bsicos e sem desvios na execuo. Porm, na programao de computadores, voc ir se deparar com diferentes tipos de problemas, originados por necessidades diversas. Nesta aula, voc ver que, muitas vezes, existir a necessidade de estabelecer desvios na execuo dos comandos. Esses desvios devem ocorrer quando houver uma deciso a ser tomada. Ou seja, quando houver dois caminhos possveis, o algoritmo ter que decidir qual dos dois caminhos ir seguir para atingir a soluo do problema. dessa forma que introduzimos as estruturas de deciso. A estrutura de deciso pode ser simples, encadeada ou composta. Nesta aula, voc conhecer as estruturas de deciso simples e construir algoritmos utilizando-as. Objetivos Ao final desta aula, voc ser capaz de:

Identificar a estrutura de deciso simples e seus comandos, reconhecendo sua sintaxe; Conhecer as formas de se trabalhar com estruturas de deciso simples e encadeadas; Construir algoritmos completos utilizando tais estruturas.

Estrutura de deciso As estruturas de deciso so tambm denominadas estruturas de seleo ou condicionais. Nesse tipo de estrutura de controle, h uma deciso a ser tomada, sempre com base em uma condio especfica, pr-estabelecida. Ou seja, de acordo com uma determinada condio, o algoritmo decide, entre dois caminhos possveis, qual ele ir executar. Como j dissemos na apresentao, a estrutura de deciso pode ser simples, encadeada ou composta. Vamos conhecer cada um desses tipos. Estrutura de deciso simples A estrutura de deciso simples executa um comando ou bloco de comandos se a condio for verdadeira. Se a condio for falsa, a estrutura finalizada sem executar comandos. O comando bsico que define a estrutura de deciso representado pela palavra reservada SE. Veja o algoritmo abaixo, sobre o que fazer no sbado pela manh: INICIO acordar SE fizer sol ENTO Ir praia

FIM SE FIM Veja que, no exemplo, tratamos de uma estrutura simples. Se a condio (fazer sol) satisfeita, eu vou praia. Caso contrrio, no fao nada (nenhum comando executado, caso a condio no seja atendida). A estrutura de deciso obedece seguinte sintaxe: PSEUDOCDIGO FLUXOGRAMA

Inicio Se <condio> ento Comando 1 Comando 2 . . . Comando n fimSe Fimalgoritmo

O termo condio, nessa estrutura, representa uma expresso lgica. Voc deve recordar que uma expresso lgica s pode assumir dois possveis resultados: verdadeiro ou falso. Esse resultado, na estrutura de deciso, determina qual caminho o algoritmo vai escolher. Ou seja, dependendo do resultado da expresso lgica, o algoritmo segue para esse ou aquele caminho. Vamos analisar o algoritmo da mdia mais uma vez. S que, dessa vez, com comandos de desvios. ALGORITMO PARA CALCULAR MDIA ARITMTICA DE UM ALUNO E DIZER SE O MESMO FOI APROVADO

algoritmo "calcula mdia com desvio" var nota1:real nota2:real media:real inicio escreval ("Digite o valor da primeira nota:") leia (nota1) escreval ("Digite o valor da segunda nota:") leia (nota2) media <- (nota1 + nota2)/2 escreval ("A mdia =",media)

se media >= 7 entao escreval ("Aluno aprovado!") fimse fimalgoritmo

Estrutura de deciso

Observe que, dessa vez, inserimos um desvio condicional ao algoritmo da mdia. Se o aluno obteve mdia igual ou superior a 7.0, ento, ele foi aprovado. Importante: da mesma forma que o algoritmo tem um incio e um fim, a estrutura de deciso tambm deve ser devidamente inicializada e finalizada. Veja, em nossos exemplos, que o comando SE chamado no incio e o comando FIM SE chamado ao final da execuo dessa estrutura.

Atividade 1 1. O que caracteriza as estruturas de deciso? 2. Qual a sintaxe dessa estrutura? 3. Que tipo de expresso representa a condio estabelecida antes da tomada de deciso nessa estrutura? 4. Elabore um algoritmo que leia um nmero e informe se ele par ou mpar.

Estrutura de deciso simples encadeada Vamos ver novamente o algoritmo sobre o que fazer no sbado pela manh:

INICIO acordar SE fizer sol ENTO //inicio do primeiro SE SE tiver dinheiro ENTO //inicio do segundo SE Ir praia FIM SE //fim do segundo SE FIM SE //fim do primeiro SE FIM Antes, tnhamos uma condio para ir praia no sbado pela manh: fazer sol. Agora, alm do sol, a nossa ida praia depende de outro importante fator: ter dinheiro. Temos, ento, no s uma, mas duas condies. Da mesma forma, voc ver, em alguns algoritmos, a necessidade de atender a mais de uma condio ao mesmo tempo.

Para atender a duas ou mais condies simultneas, utilizamos a estrutura de deciso encadeada, que podemos chamar de SEs encadeados ou SEs aninhados. Veja como fica a sintaxe da estrutura de deciso simples com selees encadeadas:

PSEUDOCDIGO

FLUXOGRAMA

Inicio Se <condio> ento Se <condio> ento Comando 1 Comando 2 . . Comando n fimSe fimSe Fimalgoritmo

Observe que cada SE, na estrutura encadeada, tem a sua devida finalizao, ou seja, cada SE tem o seu respectivo FIM SE. extremamente importante que voc esteja atento a esse detalhe, pois o compilador sempre associar o FIM SE ao SE que estiver mais prximo. E se voc se esquecer de finalizar um bloco de comandos de deciso, um erro ser gerado e o seu algoritmo no ser executado. Vamos resolver o problema a seguir.

Exerccio Resolvido 1 Escreva um algoritmo que solicite ao usurio que digite os tamanhos de trs lados de um tringulo e informe se os lados de fato compem um tringulo. Lembre-se de que, em um tringulo, cada lado menor que a soma dos outros dois lados. Resoluo:

algoritmo "triangulo" var

lado1, lado2, lado3 : inteiro inicio escreval ("Digite o valor do primeiro lado: ") leia (lado1) escreval ("Digite o valor do segundo lado: ") leia (lado2) escreval ("Digite o valor do terceiro lado: ") leia (lado3) se (lado3<lado1+lado2) entao se (lado2<lado1+lado3) entao se (lado1<lado2+lado3) entao escreval ("Os lados formam um tringulo.") fimse fimse fimse fimalgoritmo

A rea destacada em amarelo, no algoritmo, mostra a estrutura de deciso encadeada. Lembre-se da finalizao de cada SE. Execute esse algoritmo no VisuAlg.

Agora, observe: INICIO acordar SE fizer sol SE tiver dinheiro Ir praia FIM SE FIM SE FIM INICIO acordar SE (fizer sol) E (tiver dinheiro) Ir praia FIM SE FIM

O que cada um dos algoritmos acima faz? Observando os algoritmos acima, voc pode concluir que um SE encadeado pode, algumas vezes, ser equivalente a um SE simples, com a utilizao de duas expresses lgicas combinadas. Voc se lembra que os operadores lgicos E, NO e OU so utilizados para combinar duas ou mais expresses relacionais ou lgicas? No algoritmo da direita, vemos uma combinao de duas expresses que podem ter por resultado um valor verdadeiro ou falso. Est fazendo sol? Alm disso, tenho dinheiro? Se as duas condies forem atendidas, eu vou praia. Ou seja, utilizamos apenas um comando SE, porm com uma expresso combinada. J no algoritmo da esquerda, como vimos anteriormente, ocorre o mesmo, porm, utilizamos dois comandos SE separadamente. Veja que o cdigo exibido na rea destacada, no algoritmo do tringulo, que resolvemos h pouco, poderia ser substitudo, sem alteraes no resultado final, pelo

seguinte cdigo: se (lado3<lado1+lado2) e (lado2<lado1+lado3) e (lado1<lado2+lado3) ento escreval ("Os lados formam um tringulo.") fimSe Existem, porm, casos de estruturas encadeadas que NO PODEM ser substitudas por combinaes de expresses lgicas. Isso ocorre quando, aps o teste da primeira condio, h algum comando ou bloco de comandos, que deve ser executado antes do teste da condio seguinte. Por exemplo: SE fizer sol ENTO eu vou praia SE tiver muita gente l ENTAO Eu vou ao clube FIMSE FIMSE No exemplo, no poderamos utilizar a expresso: Se fizer sol E Se tiver muita gente l, pois s vou at a praia se fizer sol. Mas, s posso saber se tem muita gente l, depois que eu tiver ido. Ou seja, s posso testar a segunda condio aps a execuo do comando que depende da primeira. Vejamos outro exemplo.

Exerccio Resolvido 2 Fazer um algoritmo para calcular o dobro de um nmero inteiro, caso seja par e, caso o dobro seja menor do que 10, escrever o seu quadrado. Resoluo:

algoritmo "quadrado do dobro" var num, dobro, quadrado : inteiro inicio escreval ("Digite um nmero:") leia (num) se num % 2 = 0 entao dobro <- num * 2 escreval ("O dobro do nmero digitado : ",dobro) se dobro < 10 entao quadrado <- dobro * dobro escreval ("O quadrado do dobro : ",quadrado) fimse

fimse fimalgoritmo

Veja que a segunda condio (dobro<10) s pode ser testada aps a execuo do comando que determina esse dobro. E esse comando depende da primeira condio (o nmero tem que ser par). Dessa forma, essa estrutura encadeada tambm no pode ser substituda por uma deciso simples com expresses lgicas combinadas. Atividade 2 1. Quais as formas possveis de se atender a duas condies simultneas na hora de construir um algoritmo? 2. Qual a sintaxe da estrutura de deciso encadeada? 3. Escreva um algoritmo que leia a idade, o sexo e a altura de um candidato a uma vaga de um concurso para policial militar e exiba se ele est classificado. Para o candidato ser classificado, tem que ser maior de 18 anos, ser do sexo masculino e ter mais de 1.60m de altura. Utilize a estrutura de deciso encadeada para construir esse algoritmo. 4. Escreva o algoritmo do item anterior, utilizando apenas um comando SE com expresses lgicas combinadas.

Resumo Nesta aula, voc viu o conceito de estruturas de deciso, viu tambm a sua sintaxe e comandos bsicos e estudou sobre a classificao dessas estruturas. Voc viu, atravs de exemplos, as estruturas de deciso simples e encadeadas, lembrando da importncia em sempre finalizar os comandos que foram inicializados. Voc aprendeu, portanto, o que caracteriza uma estrutura de deciso, conheceu a sua sintaxe e identificou que tipos de problemas podem ser resolvidos com a utilizao dessa estrutura. Autoavaliao 1. O que caracteriza uma estrutura de deciso simples? 2. Quando devemos utilizar uma estrutura de deciso simples encadeada? 3. Qual a sintaxe para a estrutura de deciso simples? E para a estrutura de deciso simples encadeada? Apresente exemplos simples em pseudocdigo. 4. O que ocorre se esquecermos de finalizar um comando SE que foi inicializado? 5. Escreva um algoritmo que leia o peso e a altura de uma pessoa e diga se ela est no peso ideal. O clculo do ndice de Massa Corprea (IMC) de uma pessoa obtido pela diviso entre o valor do seu peso e o quadrado do valor da sua altura. O valor do IMC para o peso ideal deve estar entre 20 e 25. 6. Escreva um algoritmo que, a partir de um ms fornecido (nmero inteiro de 1 a 12), escreva o nome do ms por extenso. 7. Apresente dois exemplos de algoritmos com estruturas encadeadas que NO PODEM ser substitudas por estruturas simples com expresses lgicas

combinadas. 8. Apresente outros dois exemplos de estruturas encadeadas que PODEM ser substitudas por estruturas simples com expresses lgicas combinadas. 9. Escreva um algoritmo que leia o valor do salrio de um funcionrio e aplique um aumento de 30% se o salrio for igual ou inferior a R$500,00. Aula 8 Estruturas de deciso composta e de mltipla escolha se... seno... fim se escolha...caso Na aula 7 (Estruturas de deciso simples SE... FIM SE), introduzimos as estruturas de deciso. Voc viu que, para encontrar a soluo de certos problemas, os algoritmos iro se deparar, algumas vezes, com a necessidade de tomar decises. E essas decises so tomadas com base em condies especficas pr-estabelecidas. Essa necessidade acaba por estabelecer desvios na execuo do algoritmo. Tambm na aula 7, classificamos as estruturas de deciso em simples, encadeadas e compostas. Voc conheceu a estrutura simples e viu exemplos bsicos de estruturas encadeadas. Nesta aula, encerraremos o estudo das estruturas de deciso, contemplando a estrutura de deciso composta e as decises de mltipla escolha. Voc conhecer um novo comando, que indicar um segundo caminho, na estrutura de deciso, quando a condio pr-estabelecida no for atendida: o comando SENO, que ser utilizado na estrutura composta. Alm disso, voc ver que, em alguns casos, dentre vrias opes de comandos, a deciso por executar um desses comandos exclui a possibilidade de executar os demais. Quando isso ocorre, o mais interessante utilizar as estruturas de deciso de mltipla escolha. Voc conhecer, portanto, o comando ESCOLHA, em que o usurio seleciona uma dentre vrias opes apresentadas, para determinar o final da execuo do algoritmo. Objetivos Ao final desta aula, voc ser capaz de:

Identificar a estrutura de deciso composta e seus comandos, reconhecendo sua sintaxe. Construir algoritmos completos utilizando essa estrutura. Identificar a estrutura de deciso de mltipla escolha e seus comandos, reconhecendo sua sintaxe. Construir algoritmos completos utilizando a estrutura de mltipla escolha.

Estrutura de deciso composta Voc j sabe que a estrutura de deciso simples executa um comando ou bloco de comandos se uma determinada condio for atendida. Se a condio no for atendida, a estrutura finalizada sem executar comandos.

A estrutura composta segue o mesmo princpio, com a diferena de que, quando a condio no satisfeita, h um desvio para outro comando ou bloco de comandos. A estrutura de deciso composta executa um comando ou bloco de comandos quando uma condio satisfeita e outro comando ou bloco de comandos quando a condio no satisfeita. A partir desse momento, voc vai comear a utilizar, alm do SE, a palavra reservada SENO. Vamos ver, mais uma vez, o algoritmo sobre o que fazer no sbado pela manh:

INICIO acordar SE fizer sol ENTO Ir praia SENO Ler um livro FIM SE FIM Veja que, dessa vez, tratamos de uma estrutura composta. Se a condio (fazer sol) satisfeita, eu vou praia. Caso contrrio, fao outra coisa: leio um livro. Ou seja, a condio no sendo satisfeita, logo, eu executo outra atividade. A estrutura de deciso composta obedece seguinte sintaxe: PSEUDOCDIGO Inicio Se <condio> ento Comando 1 Comando 2 . . . Comando n Senao Comando 1 Comando 2 . . . Comando n fimSe Fim FLUXOGRAMA

Observe que, da mesma forma que na estrutura simples, o algoritmo executa um comando ou bloco de comandos, de acordo com a satisfao de uma condio. Essa condio, como foi exposto na aula 7, representada por uma expresso lgica. Porm, de forma diferente da estrutura simples, a estrutura composta executa outro comando ou bloco de comandos, quando a condio no satisfeita. Sabendo disso, vamos tornar, agora, o algoritmo da mdia um pouco mais interessante? Veja:

ALGORITMO PARA CALCULAR MDIA ARITMTICA DE UM ALUNO E DIZER SE O MESMO FOI APROVADO OU NO algoritmo "calcula mdia com desvio" var nota1:real nota2:real media:real inicio escreval ("Digite o valor da primeira nota:") leia (nota1) escreval ("Digite o valor da segunda nota:") leia (nota2) media <- (nota1 + nota2)/2 escreval ("A mdia =",media) se media >= 7 entao escreval ("Aluno aprovado!") //instruo com condio verdadeira senao escreval ("Aluno no aprovado!") //instruo com condio falsa fimse fimalgoritmo

Agora, o algoritmo pode executar uma instruo quando a condio (nota >=7) for satisfeita e outra instruo quando a condio no for satisfeita.

Atividade 1 1. O que diferencia uma estrutura de deciso composta da estrutura simples que conhecemos na aula anterior? 2. Qual a sintaxe dessa estrutura? 3. Elabore um algoritmo que leia um nmero e informe se ele maior ou menor que zero. 4. Elabore um algoritmo que leia a idade de um desportista e informe se ele se classifica ou no na categoria Juvenil (11 a 17 anos).

Estrutura de deciso composta encadeada Da mesma forma que na estrutura simples, na estrutura composta tambm podemos utilizar SEs encadeados. Voc sabe que isso ocorre quando h vrias condies a serem testadas. Agora, observe as duas situaes abaixo:

Situao 01: INICIO acordar SE fizer sol ENTO Ir praia SENO SE estiver nublado ENTO Dar uma volta no parque SENO Est chovendo. Fique em casa e leia um livro. FIM SE FIM SE FIM

Situao 02: INICIO acordar SE fizer sol ENTO Ir praia SENO SE tiver dinheiro ENTO Ir ao cinema SENO Fique em casa e leia um livro. FIM SE FIM SE FIM

fcil perceber que, em ambas as situaes, h a utilizao de estruturas encadeadas. Mas, qual a diferena entre as duas? Na Situao 01, temos vrias estruturas separadas, com condies que so mutuamente exclusivas, ou seja, se uma das condies for verdadeira, todas as outras so falsas. Se no fizer sol, nem estiver nublado, com certeza, estar chovendo. H uma ao diferente para cada condio possvel (ir praia, dar uma volta no parque ou ficar em casa e ler um livro). Na Situao 02, veja que h uma estrutura composta inserida em outra estrutura composta. Se fizer sol, eu vou praia. Se no fizer sol, no irei praia, mas me restam duas opes possveis: ir ao cinema, se tiver dinheiro, ou ficar em casa e ler um livro, caso no tenha dinheiro. Com base nesses exemplos, podemos afirmar que a sintaxe de uma estrutura composta encadeada pode ser definida das duas formas a seguir:

Com condies mutuamente

Com uma estrutura composta inserida em outra

exclusivas Inicio se <condio1> ento <comandos1> seno se <condio2> ento <comandos2> seno se<condion> ento <comandosn> seno <comandos> fimSe fimSe fimSe fim fim

estrutura composta inicio se <condio> ento <comandos> seno se <condio> ento <comandos> seno <comandos> fimSe fimSe

Para ilustrar melhor, vamos incrementar um pouco mais o algoritmo da mdia:

algoritmo "calcula mdia com desvio composto encadeado" var nota1:real nota2:real media:real inicio escreval ("Digite o valor da primeira nota:") leia (nota1) escreval ("Digite o valor da segunda nota:") leia (nota2) media <- (nota1 + nota2)/2 escreval ("A mdia =",media) se media >= 7 entao escreval ("Aluno aprovado! Parabns!") senao se (media<7) e (media>=4) entao escreval ("Aluno em recuperao! Estude") senao escreval ("Aluno Reprovado!") fimse

fimse fimalgoritmo Veja que, no exemplo, temos a situao de excluso mtua. Se a mdia no for maior que 7.0, nem est entre 4.0 e 7.0, s pode ser menor que 4.0. Nesse caso, ou o aluno aprovado, ou fica em recuperao, ou reprovado. Vejamos, agora, um exemplo de deciso composta inserida em outra deciso composta. Em uma empresa, os funcionrios que forem solteiros no recebero bnus natalinos. Os funcionrios que no forem solteiros e tiverem filhos recebero um bnus de 20% de seu salrio-base (ou seja, recebero o valor de seu salrio acrescido de 20%). Os funcionrios que no forem solteiros e no tiverem filhos recebero um bnus de 15% de seu salrio-base (ou seja, recebero o valor de seu salrio mais 15%). Veja o algoritmo que calcula o bnus dos funcionrios:

algoritmo "Bonus natalino" var salario:real estado_civil:caracter tem_filhos:caracter inicio escreval ("Digite o valor do salario: ") leia (salario) escreval (" solteiro? S ou N?") leia (estado_civil) se (estado_civil = "S") ou (estado_civil = "s") entao escreval ("Voc no tem direito a bnus.") escreval ("Seu salario : R$ ",salario) senao escreval ("Tem filhos? S ou N?") leia (tem_filhos) se (tem_filhos = "S") ou (tem_filhos = "s") entao salario <- salario * 1.20 escreval ("Seu salrio natalino : R$ ",salario) senao salario <- salario * 1.15 escreval ("Seu salrio natalino : R$ ",salario) fimse fimse fimalgoritmo No algoritmo que acabamos de escrever, perceba que, se um funcionrio no solteiro, ele pode ser casado com filhos ou sem filhos. Ou seja, temos uma estrutura de deciso composta inserida em outra estrutura de deciso composta.

Atividade 2 1. Quais as possveis sintaxes da estrutura de deciso composta encadeada? 2. Quando utilizada uma ou outra? 3. Apresente um exemplo de algoritmo para cada uma das situaes. 4. Construa um algoritmo que leia trs nmeros e diga qual o maior. 5. Escreva um algoritmo que leia os tamanhos dos lados de um tringulo e diga se o tringulo issceles, equiltero ou escaleno. Um tringulo issceles, se dois de seus lados tiverem tamanhos iguais. equiltero se todos os seus lados forem iguais. E escaleno e todos os seus lados forem diferentes. 6. Escreva um algoritmo que receba a altura e o peso de uma pessoa e calcule seu IMC (peso/altura). Se for menor que 25, escrever Est no peso ideal. Seno, se tiver menos de 40 anos de idade, determinar aulas de aerbica, se tiver mais de 40 anos, determinar aulas de hidroginstica.

Estruturas de deciso de mltipla escolha Nas estruturas de deciso que vimos na aula 7, um comando ou bloco de comandos executado de acordo com uma ou mais condies. Voc viu que, quando a condio no satisfeita, a estrutura pode encerrar (estrutura de deciso simples) ou seguir outro caminho (estrutura composta). Existem problemas, porm, em que uma expresso (ou uma varivel) pode assumir diversos valores e que, para cada valor assumido, comandos diferentes so executados. Ou seja, os valores so mutuamente exclusivos. Para essas situaes, utilizamos as estruturas de mltipla escolha. Imagine que voc quer decidir o que vai fazer no final de semana. Veja: VAR opcao : Inteiro INICIO escreval (Digite 1, para praia) escreval (Digite 2 para cinema) escreval (Digite 3 para churrasco) leia opcao ESCOLHA opcao CASO 1 escreva (Sair de casa s 8 horas da manh.) CASO 2 escreva (Sair de casa s 2 horas da tarde.) CASO 3

escreva (Sair de casa ao meio-dia.) OUTROCASO //caso escolha opo diferente das anteriores escreva (J que no optou, fique em casa mesmo e leia um livro.) FIMESCOLHA FIM Ao tentar decidir o que fazer no fim de semana, voc tinha trs opes: ir praia, ir ao cinema ou ir a um churrasco. Para cada opo, h um comando diferente (nesse caso, um horrio diferente para sair de casa). Isso mostra que os comandos so como dissemos a pouco, mutuamente exclusivos. Veja que, caso voc no escolha nenhuma das opes anteriores, h um comando definido por padro (que, nesse caso, ficar em casa e ler um livro). A sintaxe da estrutura de mltipla escolha a seguinte: PSEUDOCDIGO Inicio escolha <opo> caso <opo 1> <comandos1> caso <opcao2> <comandos2> ... caso <opo n> <comandosn> outrocaso <comandos_padro> fimescolha Fim FLUXOGRAMA

Atividade 3 1. Vamos praticar? Para compreender o funcionamento da estrutura de mltipla escolha, escreva o algoritmo do exemplo que acabamos de utilizar (do fim de semana) no VisuAlg e execute. Lembre-se de adequar o algoritmo, se necessrio, de acordo com a sintaxe.

Exerccio Resolvido 1 Escreva um algoritmo que diga se uma capital brasileira da regio Nordeste ou Sudeste, de acordo com a opo digitada pelo usurio. Em caso do usurio digitar o nome de uma capital que no esteja entre as opes, escreva que a capital de outra regio.

Resoluo:

algoritmo "capitais" //o primeiro passo declarar uma varivel do tipo literal para armazenar o nome da capital: var capital : literal inicio // solicitar que o usurio digite o nome da capital: escreval ("Entre com o nome de uma capital do Brasil: ") // receber o valor digitado: leia (capital) //inicio da estrutura de mltipla escolha. O algoritmo seleciona o nome da capital digitado: escolha capital //o algoritmo compara o nome digitado com as opes existentes (para capitais da regio nordeste): caso "Natal", "Joo Pessoa", "Salvador", "Fortaleza", "So Lus", "Macei", "Aracaju","Recife", "Teresina" // se o resultado da comparao (teste de igualdade) for verdadeiro para uma das capitais acima: escreval (" uma capital da Regio Nordeste.") //se a comparao anterior no for verdadeira para nenhuma das capitais nordestinas, o algoritmo compara o nome digitado com as opes existentes no outro grupo (de capitais do Sudeste do Pas): caso "So Paulo", "Rio de Janeiro", "Belo Horizonte", "Vitria" // se o resultado da comparao (teste de igualdade) for verdadeiro para um deles: escreval (" uma capital da Regio Sudeste.") //caso o teste de igualdade das opes anteriores no tiver resultado verdadeiro (a capital digitada no nenhuma das existentes), a soluo default (padro) selecionada: outrocaso escreval (" de outra regio.") //fim da estrutura de mltipla escolha: fimescolha fimalgoritmo

Observao 1: a palavra reservada outrocaso pode ser entendida como um desvio, em caso do usurio escolher uma opo que no esteja entre as opes existentes. Sua utilizao opcional. Execute o algoritmo no VisuAlg. Observao 2: para uma melhor fixao, evite copiar e colar o texto da aula. Prefira reescrever o algoritmo no VisuAlg. Dessa forma, voc ficar mais familiarizado com a sintaxe e, logo, sua habilidade em utilizar a estrutura ser melhorada. Deciso de mltipla escolha x deciso encadeada Se voc compreendeu tudo o que vimos at agora sobre as estruturas de deciso, pode estar se perguntando: Mas, essa estrutura de mltipla escolha no a mesma coisa

que uma estrutura de deciso composta encadeada? De fato, elas podem ser similares. Os dois algoritmos abaixo fazem a mesma coisa:

DECISO ENCADEADA Var opcao:inteiro inicio leia (opcao) se opcao=1 entao escreval ("praia") senao se opcao=2 entao escreval ("cinema") senao se opcao=3 entao escreval ("churrasco") senao escreval ("Fique em casa") fimse fimse fimse fimalgoritmo

MLTIPLA ESCOLHA Var opcao:inteiro inicio leia (opcao) escolha opcao caso 1 escreval ("praia") caso 2 escreval ("cinema") caso 3 escreval ("churrasco") outrocaso escreval ("fique em casa") fimescolha fimalgoritmo

Execute os dois algoritmos no VisuAlg e veja que, em ambos os casos, a sada a mesma. Por que, ento, utilizar a estrutura de mltipla escolha, se podemos utilizar a deciso encadeada que aprendemos at aqui? Cada palavra reservada que utilizamos em um algoritmo representa um comando que o programa vai executar, desde a inicializao do algoritmo, passando pelos comandos bsicos (as instrues primitivas) e os comandos de cada estrutura de controle, at a finalizao do algoritmo. Tudo isso so instrues que passamos para que o computador execute. Sabendo disso, podemos ver que o algoritmo que utiliza a deciso encadeada tem um nmero maior de instrues. Isso demanda uma quantidade maior de memria e processamento do computador para executar o algoritmo, o que afeta diretamente o desempenho. Seria como se voc precisasse caminhar de um ponto a outro, tendo duas opes de caminho: em uma, voc segue em linha reta e, na outra, voc vai em zigue-zague. Em qual dessas opes voc acha que chegaria mais rpido? Em qual chegaria menos cansado? Em um algoritmo simples, provavelmente, voc no perceber a diferena. Mas, em programas maiores e mais complexos, fica evidente a queda no desempenho. Por isso, mais conveniente, nesses casos (de seleo mutuamente exclusiva), utilizar a estrutura de mltipla escolha. H, tambm, outra diferena bsica entre as duas estruturas, que pode determinar

quando utilizar uma ou outra: DECISO ENCADEADA Pode testar mais de um valor ao mesmo tempo. Ou seja, podem ser utilizadas expresses relacionais. MLTIPLA ESCOLHA S pode testar igualdade e s testa um valor por vez, por isso, no pode utilizar expresses lgicas ou relacionais.

Atividade 4 1. Escreva um algoritmo que leia o nmero equivalente a um ms do ano e diga se do primeiro, segundo ou terceiro bimestre. Se no for de nenhum, exiba a mensagem: do segundo semestre. 2. Escreva um algoritmo que leia o nmero equivalente a um ms do ano e diga o nmero de dias do ms correspondente. Exiba a mensagem valor invlido, se o nmero digitado no corresponder a nenhum ms (1 a 12).

Resumo Nesta aula, voc encerrou o estudo das estruturas de deciso. Voc conheceu a estrutura de deciso composta e viu que essa estrutura se caracteriza pela existncia de um caminho alternativo, caso a condio pr-estabelecida no tenha sido atendida. Voc viu, tambm, que esse caminho alternativo precedido pela palavra reservada SENO, na sintaxe da estrutura. Alm disso, voc conheceu exemplos de estruturas compostas encadeadas, viu a diferena entre estruturas com condies mutuamente exclusivas e estruturas de deciso compostas inseridas em outras decises compostas. Alm disso, voc viu as estruturas de mltipla escolha, com o comando ESCOLHA. Voc conheceu os comandos e a sintaxe dessa estrutura. Viu que os algoritmos escritos com essa estrutura poderiam utilizar, tambm, a estrutura de deciso composta encadeada. Viu, porm, que h diferenas importantes que podem determinar quando mais conveniente utilizar uma ou outra. Autoavaliao 1. Diferencie estruturas de deciso simples de estruturas de deciso compostas. 2. Explique as duas possveis sintaxes da estrutura de deciso composta, diferenciando-as entre si. 3. Escreva um algoritmo que leia um nmero e diga se mltiplo de 3. 4. Escreva um algoritmo que leia dois nmeros e diga se o primeiro divisvel pelo segundo. 5. Escreva um algoritmo que leia um nmero e diga se positivo, negativo ou nulo. 6. Escreva um algoritmo que leia um nmero e diga se ele divisvel por 5, por dois ou por nenhum deles. 7. Escreva um algoritmo que leia duas datas digitadas pelo usurio (trs valores inteiros, primeiro o dia, depois o ms e depois o ano) e, em seguida, exiba a

data mais recente. 8. Escreva um algoritmo que leia trs nmeros inteiros e os coloque em ordem crescente. 9. Escreva um algoritmo que leia trs nmeros inteiros e os coloque em ordem decrescente. 10. Escreva um algoritmo que leia o nmero equivalente a um ms do ano e diga se do primeiro, segundo ou terceiro bimestre. Se no for de nenhum, exiba a mensagem: do segundo semestre. 11. Escreva um algoritmo que receba a idade de uma pessoa e, caso seja maior de 15 anos, dizer que pode fazer musculao. Caso contrrio, dizer que menores de 15 anos no podem fazer musculao e oferecer as opes de futebol, caso seja do sexo masculino, e ginstica, caso seja do sexo feminino. 12. Determine a sintaxe da estrutura de mltipla escolha. 13. Explique para que usado o comando outrocaso. obrigatrio? Qual a importncia desse comando? 14. Qual a estrutura de controle que pode ser considerada similar estrutura de mltipla escolha? 15. Apresente um exemplo de algoritmo que possa ser resolvido com qualquer uma dessas duas estruturas. 16. Qual a principal diferena entre essas duas estruturas? Quando sabemos que melhor utilizar uma ou outra? 17. Escreva um algoritmo que receba o cdigo correspondente ao cargo de um funcionrio de uma escola e seu salrio atual e mostre o valor do novo salrio, com aumento, conforme tabela abaixo:

Cdigo do Cargo 1 2 3 4 5

Cargo Secretrio Professor Tesoureiro Coordenador Diretor

Aumento 45% 35% 25% 15% No tem aumento

18. Voc acabou de almoar em um restaurante e quer uma bela sobremesa. O restaurante dispe de um sistema informatizado em que, sem precisar chamar o garom, voc pode pedir a sobremesa atravs de um dispositivo porttil, que entregue a cada cliente assim que ele entra no restaurante. L, existem as seguintes opes de sobremesa: 1- Mousse; 2- Sorvete; 3- MilkShake e 4Sunday. Para pedir a sobremesa, voc s precisa digitar o nmero desejado e aguardar. Escreva um algoritmo que mostre esse menu de sobremesas. Se a opo digitada no estiver entre os valores 1 e 4, exiba um alerta de erro e pea ao cliente que digite um valor vlido. 19. Uma fbrica oferece s suas operrias um auxlio mensal alm do salrio. Para as casadas sem filhos, o auxilio mensal de 15% do seu salrio-base. Para as que tm filhos, casadas ou no, o auxlio de 35% do salrio-base. Para as solteiras sem filhos, no h auxlio extra. Faa um algoritmo que receba a

opo (1, 2 ou 3) que determine em que categoria a funcionria se encontra, o valor do salrio-base (igual para todas) e mostre o valor do salrio com o auxlio.

Aula 9 Estruturas de repetio Repetio com varivel de controle Nas aulas anteriores, conhecemos as estruturas de deciso. Voc conheceu as estruturas de deciso simples, compostas, aninhadas e as decises de mltipla escolha. Voc viu que tais decises so utilizadas quando h a necessidade de se estabelecer desvios na execuo dos comandos e o algoritmo tem que decidir que caminho seguir. E essa deciso tomada de acordo com uma condio especfica. A partir de agora, conheceremos outro grupo de estrutura de controle: as estruturas de repetio. Voc ver que h momentos em que h a necessidade de repetir um determinado trecho do algoritmo por um nmero especfico de vezes. O objetivo das estruturas de repetio executar uma instruo (ou conjunto de instrues) repetidas vezes, enquanto (ou at que) uma dada condio seja satisfeita. Nesta aula, voc identificar as caractersticas de uma estrutura de repetio e a sua classificao em: estrutura de repetio com teste condicional no incio, estrutura com teste condicional no final, e estrutura com varivel de controle. Alm disso, entraremos em um estudo mais detalhado sobre a estrutura de repetio com varivel de controle, desejando que voc, ao longo da aula, torne-se capaz de construir algoritmos utilizando-a. Objetivos Ao final desta aula, voc ser capaz de:

Definir o objetivo de estruturas de repetio, reconhecendo os tipos existentes. Identificar a estrutura de repetio com varivel de controle, com o comando PARA, reconhecendo sua sintaxe. Construir algoritmos completos utilizando essa estrutura.

Estruturas de repetio Voc j sabe que alguns algoritmos precisam executar instrues com base em uma condio pr-estabelecida. Nas estruturas de deciso que vimos nas aulas anteriores, se uma condio verdadeira, um comando ou grupo de comandos executado. Aps isso, a estrutura finalizada. Ou h o caminho alternativo, caso a condio no seja atendida. Nas estruturas de repetio, condies tambm so testadas. Mas, o que, de fato, caracteriza essa estrutura que um conjunto de aes executado de forma repetida enquanto a condio permanece vlida ou no. Por exemplo, se algum lhe solicita que faa um algoritmo que escreva cinco vezes a frase: Bem vindo Metrpole Digital, de que forma voc faria? Levando em considerao o que aprendemos at o momento, o algoritmo correto seria:

ALGORITMO Repete frase INICIO escreval ("Bem Vindo ao Metrpole Digital.") escreval ("Bem Vindo ao Metrpole Digital.") escreval ("Bem Vindo ao Metrpole Digital.") escreval ("Bem Vindo ao Metrpole Digital.") escreval ("Bem Vindo ao Metrpole Digital.") FIMALGORITMO Parece simples, no? Mas, e se mudssemos o nmero de repeties? Se, ao invs de cinco vezes, tivssemos que escrever essa mesma frase cem vezes? Ou mil vezes? Seria um tanto exaustivo para voc ficar digitando tantas vezes o mesmo comando. Para o computador, tambm, no seria interessante. J falamos brevemente na aula anterior sobre o aumento da demanda por processamento e memria, quando um mesmo comando repetido muitas vezes. A soluo para esse impasse a utilizao das estruturas de repetio. Veja o mesmo algoritmo de outra forma: algoritmo "Repete frase" var contador : inteiro inicio para contador de 1 ate 5 passo 1 faca escreval ("Bem Vindo ao Metrpole Digital.") fimpara fimalgoritmo No algoritmo acima, criamos uma varivel de controle (contador) que quem determina quantas vezes o comando escreval ser executado. A repetio s para quando a condio no for mais atendida, ou seja, quando o contador for maior que 5. Repetio (ou looping) um conjunto de aes que so executadas repetidamente. O objetivo das estruturas de repetio executar uma srie de instrues em looping, enquanto (ou at que) uma dada condio analisada seja verdadeira. Tipos de estruturas de repetio As estruturas de repetio podem funcionar de diferentes formas, de acordo com a necessidade do algoritmo que voc vai criar. Assim como nas estruturas de deciso, h uma classificao para as estruturas de repetio: a. Repetio com teste de condio no incio (comandos ENQUANTO...FAA) repete as instrues enquanto a condio for verdadeira. b. Repetio com varivel de controle (comando PARA) repete as instrues sob controle de um contador que percorre valores, de acordo com limites

iniciais e finais pr-estabelecidos. c. Repetio com teste da condio no final (comandos REPITA...AT) repete as instrues at que a condio seja verdadeira. Ao longo das nossas aulas, contemplaremos em detalhes cada um dos tipos de estruturas de repetio mencionados acima. Nesta aula, especificamente, nos ateremos estrutura de repetio com varivel de controle.

Atividade 1 1. Qual o objetivo das estruturas de repetio? 2. Na aula 6 Controle de Fluxo de Execuo Estrutura Sequencial, no tpico 6, item d da autoavaliao, foi proposto que voc escrevesse um algoritmo que mostrasse a tabuada de um nmero digitado. Escreva-o, novamente, na forma sequencial. Depois responda: a. De que forma voc acredita que poderamos melhorar esse algoritmo? b. Isso afetaria o desempenho do computador, ao executar o algoritmo? Justifique sua resposta. 3. Quais os tipos existentes de estruturas de repetio?

Estrutura de repetio com varivel de controle Na repetio com varivel de controle, a quantidade de execues do comando que ir repetir conhecida previamente. Uma varivel criada para funcionar como contador para essas repeties e cessar a repetio no momento em que a contagem chegar ao final. H, tambm, um valor de incremento, que define de quantas em quantas unidades a repetio executar. No exemplo do incio da aula (que escreve uma frase cinco vezes), utilizamos esse tipo de estrutura de repetio. Vamos conhecer a sintaxe dessa estrutura:

PSEUDOCDIGO para <varivel inteiro> de <valor inicial> ate <valor final> passo <valor de incremento> faca <instrues> fimpara OU para <varivel inteiro> de <valor inicial> ate <valor final>faca <instrues> fimpara

FLUXOGRAMA

Veja a seguir algumas consideraes sobre a sintaxe da estrutura. a. A varivel de controle deve ser uma varivel numrica do tipo inteiro, pois servir de contador e ter seu valor incrementado a cada passo. b. O valor inicial corresponde ao valor de inicializao da varivel antes da primeira repetio. c. O valor final corresponde ao valor mximo que a varivel pode alcanar. d. O valor inicial, o valor final e o valor de incremento podem ser variveis ou constantes. e. Se o valor de incremento no for definido, assume-se o valor = 1. f. O valor de incremento no pode ser nulo. g. Pode ser atribudo um valor negativo ao valor de incremento, caso se deseje que o lao seja percorrido em ordem inversa. Nesse caso, o valor inicial e o valor final devem ser invertidos, tambm, para evitar erros na execuo. Ou seja, se o valor de incremento for negativo, o valor inicial deve ser maior que o valor final.

A estrutura funciona conforme os itens a seguir. I. II. III. declarada uma varivel de controle numrica do tipo inteiro (que ser o contador), antes da execuo da estrutura de repetio. So definidos um valor inicial e um valor final para essa varivel (que vai definir a quantidade de repeties). atribudo o valor inicial varivel.

IV. V. VI. VII.

O valor que est armazenado na varivel comparado com o valor final. Se o valor da varivel for menor ou igual ao valor final, as instrues contidas na estrutura so executadas. O valor da varivel incrementado de acordo com o que foi definido no comando passo. Isso se repete at que o valor armazenado na varivel seja maior que o valor final. Quando isso ocorre, a estrutura termina e o algoritmo segue aps o comando fimpara.

Vamos ver o exemplo da mdia, utilizando a estrutura de repetio com varivel de controle:

ALGORITMO PARA CALCULAR A MDIA ARITMTICA ENTRE DUAS NOTAS PARA 50 ALUNOS DE UMA SALA algoritmo "Calcula Mdia com Repetio" var nota1, nota2, media : real//declarao das variveis do algoritmo contador : inteiro//declarao da varivel de controle inicio para contador de 1 ate 50 passo 1 faca escreval ("Digite as notas do aluno ",contador,":") escreval ("Primeira nota:") leia (nota1) Esses escreval ("Segunda nota:") comandos so leia (nota2) executados em media <- (nota1+nota2)/2 loop escreval ("O aluno ",contador," teve mdia igual a: ",media) fimpara fimalgoritmo

Como na estrutura sequencial, declaramos as variveis para as notas e a mdia. Em seguida, declaramos uma varivel inteira, que ser o contador. Definimos, depois, os valores inicial e final (de 1 a 50, que a quantidade de alunos) e o valor de incremento (1, pois o lao percorrer um a um, os alunos). Enquanto o valor da varivel for menor ou igual a 50, o lao se repete: so solicitadas as notas e a mdia calculada e exibida para cada aluno. Quando exibida a mdia do ltimo aluno, a estrutura termina. Agora vamos praticar! Atividade 2 1. Execute o algoritmo da mdia no VisuAlg.

2. Escreva um algoritmo que calcule a soma dos primeiros 30 nmeros pares. Lembre-se de que, nesse momento, voc deve alterar o valor de incremento.

Exerccio resolvido 1 Uma escola est realizando matrculas para um curso aberto comunidade, com limite de 20 vagas. Assumindo que os alunos so cadastrados por computador, escreva um algoritmo que: I. II. III. IV. V. leia a idade e o sexo do aluno; informe que a turma est lotada, quando o nmero de inscritos atingir a quantidade de vagas; mostre a idade mdia dos candidatos; mostre a quantidade de mulheres inscritas; mostre os candidatos (homens e mulheres) maiores de idade.

Soluo: algoritmo "inscrio" var contador, idade:inteiro sexo:caracter idade_media:real Declarao das variveis qtd_mulheres, qtd_maiores:inteiro soma_idades:inteiro inicio qtd_mulheres <- 0 qtd_maiores <- 0 Atribuio de valores soma_idades <- 0 para contador de 1 ate 20 passo 1 faca //incio da estrutura de repetio escreval ("Digite a sua idade: ") leia (idade) Algoritmo solicita e l os dados (em loop) escreval ("Digite o sexo (M ou F): ") leia (sexo) se sexo = "F" entao Testa, para cada um dos alunos, se o sexo qtd_mulheres <feminino e, se for, incrementa (em um) a varivel qtd_mulheres + 1 qtd_mulheres (que corresponde quantidade de mulheres.) fimse se idade >=18 entao Testa, para cada um dos alunos, se maior de idade qtd_maiores <e, se for, incrementa (em um) a varivel qtd_maiores +1 qtd_maiores (que corresponde quantidade de maiores.) fimse

soma_idades <- soma_idades + idade //incrementa a idade (a cada valor digitado) fimpara //fim da estrutura de repetio idade_media <- soma_idades/20 //clculo da mdia de idade escreval ("A turma est lotada.") escreval ("A mdia de idade dos inscritos de: ",idade_media) escreval ("A quantidade de mulheres inscritas : ",qtd_mulheres) escreval ("A quantidade de alunos maiores de idade : ", qtd_maiores) fimalgoritmo

Exibio dos resultados

Agora, voc pode ver que, para atender s solicitaes do enunciado da questo, foi necessrio utilizar a estrutura de deciso dentro da repetio. Para saber a quantidade de mulheres, dentre os inscritos, tivemos que testar, um a um, os valores digitados para a varivel sexo. Feito isso, incrementamos o valor, no caso da condio (sexo feminino) ser verdadeira.

se sexo = "F" entao qtd_mulheres <- qtd_mulheres + 1 fimse

Para encontrar a quantidade de alunos maiores de idade, tivemos que seguir um procedimento igual ao anterior, com outra estrutura de deciso. se idade >= 18 entao qtd_maiores <- qtd_maiores + 1 fimse

Para encontrar a mdia de idade entre os alunos inscritos, tivemos que encontrar, primeiro, a soma de todas as idades digitadas. Essa soma deve ser realizada ainda dentro da estrutura de repetio, porque o clculo efetuado conforme as idades vo sendo digitadas. soma_idades <- soma_idades + idade

O clculo da mdia realizado j fora da estrutura de repetio, pois temos conhecimento da quantidade exata de repeties (quantidade de alunos que sero inscritos). idade_media <- soma_idades/20 A exibio dos resultados feita, tambm, fora da repetio, pois os resultados encontrados na execuo do algoritmo so exibidos apenas uma vez. Para o fim da nossa aula, bom que voc mesmo faa esse algoritmo no VisuAlg. Lembre-se de que os passos que efetuamos no exerccio resolvido servem para voc se guiar. A complexidade do estudo dos algoritmos est aumentando. importante, portanto, que voc exercite bastante os conhecimentos que est adquirindo nas aulas. Lembre-se de que no h como melhorar a sua habilidade de raciocnio lgico sem exercit-la. Bons estudos! Resumo Na aula de hoje, voc viu as estruturas de repetio. Viu tambm que tais estruturas executam comandos ou grupos de comandos em looping (repetidamente), enquanto (ou at que) uma condio especfica seja atendida. Voc aprendeu as classificaes das estruturas de repetio, que so: estruturas com teste condicional no incio, estruturas com teste condicional no final e estruturas com varivel de controle. Voc estudou com maiores detalhes as estruturas com varivel de controle, conhecendo sua sintaxe e semntica, atravs de exemplos e exerccios. Esperamos que voc tenha identificado as caractersticas dessa estrutura e seja capaz de construir algoritmos utilizando-a. Autoavaliao 1. Qual o objetivo das estruturas de repetio? 2. Como podemos classificar essas estruturas? 3. Qual a sintaxe da estrutura de repetio com varivel de controle? Explique cada um de seus comandos. 4. Escreva um algoritmo que leia as duas notas de cinco alunos de uma turma, calcule e mostre: a. A mdia aritmtica de cada aluno; b. a mensagem de aluno reprovado, caso a mdia seja menor que 4.0; c. a mensagem de aluno em recuperao, caso a mdia esteja entre 4.0 e 7.0; d. a mensagem de aluno aprovado, caso a mdia seja maior ou igual a 7.0; e. o total de alunos aprovados; f. o total de alunos reprovados; g. o total de alunos em recuperao; h. a mdia da turma. 5. Escreva um algoritmo que leia dois nmeros e calcule a mdia aritmtica de

todos os nmeros que estiverem entre os nmeros lidos, incluindo os nmeros lidos. 6. Escreva um algoritmo que leia dois nmeros e multiplique o valor da soma de todos os nmeros pares que estiverem entre os nmeros lidos por 3, incluindo os nmeros lidos. 7. Escreva um algoritmo que mostre os 10 primeiros nmeros da sequncia de fibonacci. Sabe-se que a sequncia de fibonacci iniciada com 1 e 1. Os nmeros seguintes so resultados da soma dos dois anteriores: 1, 1, 2, 3, 5, 8... e assim por diante. Aula 10 Estruturas de repetio enquanto... faa repita...at Na aula anterior, introduzimos os conceitos de estruturas de repetio. Voc viu que, algumas vezes, nos algoritmos, h a necessidade de executar comandos em looping, de acordo com uma condio especfica. Voc conheceu a sintaxe da estrutura de repetio com varivel de controle (o comando PARA) e construiu alguns algoritmos com essa estrutura. Nesta aula, encerraremos o estudo das estruturas de repetio, contemplando o comando ENQUANTO, que utilizado em repeties que testam a condio no incio da estrutura, e o comando REPITA, em que a condio testada no final da estrutura. Nesta aula, voc vai reconhecer a sintaxe e se tornar capaz de identificar quando utilizar esses comandos, a fim de construir algoritmos eficazes dentro das estruturas de repetio. Objetivos Ao final desta aula, voc ser capaz de:

Definir a sintaxe para o comando ENQUANTO em estruturas de repetio com teste condicional no incio. Definir a sintaxe para o comando REPITA em estruturas de repetio com teste condicional no final. Construir algoritmos completos utilizando essas estruturas.

Enquanto... faa Teste condicional no incio Na aula anterior, realizamos o clculo da mdia para 50 alunos de uma turma, utilizando a estrutura com varivel de controle, com os comandos PARA...FAA. Vamos ver esse mesmo algoritmo de uma forma diferente: ALGORITMO PARA CALCULAR A MDIA ARITMTICA ENTRE DUAS NOTAS PARA 50 ALUNOS DE UMA SALA algoritmo "Mdia com Enquanto" var

nota1, nota2, media : real //declarao das variveis do algoritmo contador : inteiro //declarao do contador inicio enquanto contador < 5 faca //incio da estrutura de repetio escreval ("Digite as notas do aluno ",contador,":") escreval ("Primeira nota:") leia (nota1) escreval ("Segunda nota:") leia (nota2) media <- (nota1+nota2)/2 escreval ("O aluno ",contador," teve mdia igual a: ",media) contador <- contador + 1 fimenquanto fimalgoritmo

Loop

Veja que o algoritmo acima, utilizando o comando ENQUANTO, faz a mesma coisa que o algoritmo que vimos na aula anterior, com os comandos PARA...FAA. No algoritmo da mdia, sabemos previamente a quantidade de repeties, que equivale ao nmero de alunos da turma. Por isso, esse algoritmo pode ser resolvido com qualquer uma das duas estruturas de repetio: o PARA ou o ENQUANTO. importante, porm, observar um detalhe. Voc sabe que o comando PARA define o valor de incremento do contador antes do incio da execuo. Essa definio no feita na sintaxe do comando ENQUANTO. Por isso, de extrema importncia que voc se lembre de incrementar o contador, antes de finalizar a estrutura. Veja que antes do comando fimenquanto, temos a seguinte expresso: Contador <- contador + 1 Voc declarou, no incio do algoritmo, a varivel contador, do tipo inteiro, mas no atribuiu a ela valor algum. Sabemos que, quando no atribumos valor a uma varivel do tipo inteiro, o valor default assumido 0. Portanto, o valor do contador, antes do incio da execuo da estrutura de repetio, igual a 0. Voc viu, tambm, na aula 9 (Estruturas de Repetio repetio com varivel de controle), que o valor de incremento no pode ser nulo e s pode ser negativo, se quisermos percorrer o lao na ordem inversa. Assumimos, dessa forma, que o valor de incremento positivo e igual a 1 (sabemos que quando no definimos o valor de incremento, assume-se esse valor). A cada repetio, o valor do contador deve ser incrementado em 1. isso que o algoritmo faz quando chega linha contador <- contador + 1. Veja, no Quadro 1, como ocorre esse incremento. Execues Incio Primeira execuo Segunda execuo Terceira execuo Quarta execuo Quinta execuo Valor do contador 0 contador = 0 contador = 1 contador = 2 contador = 3 contador = 4 Expresso de incremento Contador <- contador + 1 contador = 0 + 1 contador = 1 + 1 contador = 2 + 1 contador = 3 + 1 contador = 4 + 1

Fim da execuo

contador = 5

Contador atingiu valor limite

Quadro 1 - Incremento do contador ao longo das repeties Veja, no Quadro 1, que, a cada repetio, o valor da expresso de incremento (contador + 1) armazenado na varivel contador. Dessa forma, a cada repetio, essa varivel assume um novo valor. Ela incrementada. Observe, tambm, que, quando o contador atinge o valor igual a 5, a execuo encerrada, pois definimos como condio de parada da repetio que o contador fosse menor que 5. Outra diferena importante entre os comandos PARA e ENQUANTO que o comando ENQUANTO pode ser utilizado em situaes que no podem ser resolvidas com varivel de controle. So situaes em que no se sabe previamente a quantidade de repeties da estrutura. Veja:

algoritmo "enquanto sem incremento" var num:inteiro inicio num <- 1 enquanto num > 0 faca leia (num) escreval (num^2) fimenquanto escreval ("Voc digitou um valor negativo") fimalgoritmo O algoritmo acima solicita que o usurio digite um nmero e fornece o valor do quadrado do nmero digitado, enquanto esse nmero for positivo. No momento em que o usurio digitar um valor negativo, a estrutura encerra e aparece a mensagem de que o nmero digitado negativo. O comando ENQUANTO testa uma condio e, enquanto essa condio for verdadeira, as instrues da estrutura de repetio so executadas. No momento em que a condio deixar de ser verdadeira, a estrutura encerrar. Como no podemos prever qual ser o momento em que o usurio ir digitar um nmero negativo, no h como saber previamente a quantidade de repeties. O comando ENQUANTO utilizado em estruturas de repetio em que no sabemos previamente a quantidade de repeties do comando ou grupo de comandos da estrutura. Veja a sintaxe dessa estrutura: PSEUDOCDIGO FLUXOGRAMA

enquanto <condio> faca <instrues> fimenquanto

Ateno: se houver alguma situao em que seja possvel a condio ser sempre verdadeira, as instrues da estrutura executaro para sempre. o que chamamos de loop infinito. importante que voc tenha o cuidado de evitar situaes como essa. Quer ver um exemplo de algoritmo que resulta em loop infinito? Retorne ao algoritmo da mdia no incio desta aula e tente execut-lo no VisuAlg removendo a linha em que o contador incrementado (contador <- contador + 1). Veja o que acontece. Como o contador no est sendo incrementado, ter sempre o valor inicial (zero). Dessa forma, a condio (contador < 5) ser sempre verdadeira, causando, portanto, a situao de loop infinito.

Atividade 1 1. O que diferencia a estrutura de repetio com o comando PARA da estrutura que utiliza o comando ENQUANTO? 2. O que um loop infinito? 3. Escreva um algoritmo que receba uma quantidade indeterminada de nmeros positivos e diga quantos deles esto no intervalo de 0 a 25, quantos esto no intervalo de 26 a 50 e quantos so maiores que 50. O algoritmo deve parar quando o usurio digitar um nmero negativo. 4. Escreva um algoritmo que receba um nmero diversas vezes e mostre o seu inverso (1/n). O algoritmo encerra quando o valor digitado zero, exibindo uma mensagem de erro que diz que no se pode dividir por zero.

Repita...at Teste condicional no finaL Vamos ver, mais uma vez, o algoritmo da mdia:

algoritmo "media com repita...ate" var nota1, nota2, media : real //declarao das variveis do algoritmo contador : inteiro //declarao do contador inicio contador <- 1 //atribuio de valor ao contador repita //incio da estrutura de repetio escreval ("Digite as notas do aluno ",contador,":") escreval ("Primeira nota:") leia (nota1) escreval ("Segunda nota:") leia (nota2) media <- (nota1 + nota2)/2 escreval ("O aluno ",contador," teve mdia igual a: ",media) contador <- contador + 1 ate contador > 50 fimalgoritmo

Estrutura REPITA...ATE

Na estrutura REPITA...AT, a repetio continua enquanto a condio (contador > 50) for falsa. E cessa quando essa condio se tornar verdadeira. Veja que o problema da mdia pde ser resolvido com qualquer uma das estruturas de repetio, alterando-se somente a sintaxe. Apesar disso, nem sempre um problema, em algoritmos, poder ser solucionado com qualquer uma das estruturas. Sempre haver uma das estruturas que se enquadre melhor na soluo de determinado problema. Ao contrrio do ENQUANTO, o teste da condio verifica, na estrutura REPITA...AT, se a condio falsa. O looping termina quando a condio verdadeira. Alm disso, a estrutura REPITA...AT sempre executa, pelo menos uma vez, os comandos, pois o teste da condio realizado no final. Essa estrutura pode ser utilizada, tambm, em menus. Veja o exemplo abaixo:

algoritmo "menu sorvetes" var op:caracter inicio repita

escreval ("Escolha um sabor de sorvete:") escreval ("1- Morango") escreval ("2- Abacaxi") escreval ("3- Chocolate") escreval ("4- Caramelo") escreval ("5- Salada de Frutas") leia (op) ate (op = "1") ou (op = "2") ou (op = "3") ou (op = "4") ou (op = "5") escolha op caso "1" escreval ("Voc escolheu Morango.") caso "2" escreval ("Voc escolheu Abacaxi.") caso "3" escreval ("Voc escolheu Chocolate.") caso "4" escreval ("Voc escolheu Caramelo.") caso "5" escreval ("Voc escolheu Salada de Frutas.") fimescolha fimalgoritmo

Estrutura REPITA...ATE

Veja que, no algoritmo acima, as instrues vo repetir at que o usurio digite uma opo vlida. O comando REPITA, portanto, executa as instrues AT que a opo digitada seja vlida. Veja a sintaxe dessa estrutura:

PSEUDOCDIGO

FLUXOGRAMA

repita <instrues> ate <condio>

O comando REPITA executa as instrues at que a condio seja verdadeira. Ou seja, se a condio for falsa, o ciclo continua. Quando a condio verdadeira, a estrutura encerra.

Atividade 2 1. Escreva um algoritmo que receba vrios nmeros digitados pelo usurio, at que o usurio digite 0. Ao digitar 0, o algoritmo termina. 2. Escreva um algoritmo que solicite ao usurio que digite o seu login e a sua senha. Caso o login e a senha estejam errados, pedir para digitar novamente. Caso estejam corretos, escrever: Login efetuado com sucesso. O login deve ser o seu nome e a senha deve ser a palavra digital.

Bom, conclumos por aqui, mas ainda temos mais duas aulas. Na prxima aula, voc vai conhecer as estruturas de dados homogneas e aprender a construir algoritmos com vetores e matrizes. Faa a autoavaliao com ateno e veja se precisa parar e refletir mais um pouco sobre o que estudamos at aqui, pois daqui pra frente vamos abordar assuntos diferentes e estamos nos aproximando do final da nossa disciplina. Bons estudos e boa sorte! Resumo Nesta aula, voc viu os conceitos referentes s estruturas de repetio com teste da condio no incio (que utilizam o comando ENQUANTO) e com teste da condio no final (que utilizam o comando REPITA). Voc viu quando esses comandos so utilizados e conheceu a sintaxe e semntica de cada uma dessas estruturas. Estudou, tambm, a respeito do cuidado que devemos ter com loops infinitos, pois, caso a condio seja sempre verdadeira, h o risco do programa permanecer executando para sempre. Autoavaliao 1. Explique a sintaxe da estrutura ENQUANTO...FACA. 2. Escreva um algoritmo que receba vrios nmeros inteiros positivos e diga se cada nmero primo ou no. A estrutura encerra quando digitado um valor negativo ou nulo. Lembre-se: um nmero primo quando divisvel apenas por um e por ele mesmo. 3. Escreva um algoritmo que receba nmeros positivos e calcule a soma dos que so pares. A estrutura encerra quando o usurio digita um nmero negativo.

4. Escolha a alternativa correta em cada questo a seguir. Questo 1 O comando utilizado em estruturas de repetio com varivel de controle : a. ESCOLHA b. PARA c. ENQUANTO Questo 2 O comando ENQUANTO...FACA utilizado em repeties: a. Com teste no final b. Com loop infinito c. Com teste no incio Questo 3 A diferena entre a estrutura PARA e a estrutura ENQUANTO : a. Na estrutura PARA, conhecemos previamente o nmero de repeties, na estrutura ENQUANTO no conhecemos. b. A estrutura PARA com teste condicional no incio e a estrutura ENQUANTO sempre testa a condio no final. c. No so diferentes. Questo 4 Na estrutura ENQUANTO...FACA: a. Nunca utilizado um contador. b. utilizado um contador quando se conhece o nmero de repeties. Este contador deve ser incrementado sempre, antes de encerrar a estrutura. c. Sempre so gerados laos infinitos, por isso melhor no utilizar. Questo 5 Outra diferena entre a estrutura ENQUANTO...FACA e a estrutura PARA...FACA : a. No h diferenas. b. Uma testa a condio no incio e a outra testa a condio no final. c. Em uma delas, o incremento definido antes do incio da execuo. Na outra, essa definio realizada ao final da execuo.

5. Escreva um algoritmo que receba o preo e a quantidade de 20 diferentes produtos e mostre o valor total da compra. 6. Explique a sintaxe da estrutura REPITA...ATE. 7. Escreva, com a estrutura REPITA...ATE, a tabuada de um nmero digitado pelo usurio. 8. Em uma eleio presidencial, h trs candidatos, representados pelos cdigos 1, 2 e 3. O cdigo 4 representa voto nulo e o cdigo 5 representa voto em branco. Escreva um algoritmo que leia o voto do eleitor e calcule a quantidade de votos de cada candidato, bem como a quantidade de votos nulos e em branco e a quantidade total de votos. Ao digitar a opo 0, o eleitor sai

do programa e os valores so exibidos. Tambm interessante exibir o candidato vencedor ou, em caso de a quantidade de votos nulos ou em branco ser maior que a metade do total de votos, a mensagem de eleio anulada. 9. Escreva um algoritmo que apresente ao usurio as opes: (a) Saldo; (b) Depsito, (c) Saque e (x) Sair. O algoritmo deve repetir at que o usurio digite x. O valor inicial do saldo R$ 0,00. Se o usurio escolher a opo depsito, deve digitar o valor do depsito e o saldo incrementado. Caso o usurio escolha a opo saque, deve digitar o valor e exibir mensagem e saldo insuficiente (se no houver saldo) ou debitar o valor, alterando o saldo. Em ambas as opes, o novo saldo exibido. Aula 11 Estruturas de dados homogneas vetores e matrizes Nas aulas anteriores, estudamos as estruturas de controle. Voc viu que tais estruturas so utilizadas para definir o fluxo de execuo dos comandos nos algoritmos. Viu tambm as estruturas sequenciais, com comandos bsicos e ordem simples na execuo desses comandos; as estruturas de deciso, que estabelecem desvios na execuo dos comandos, de acordo com condies especficas; e as estruturas de repetio, em que determinados comandos so executados em lao. At agora, na execuo dos comandos com as estruturas de controle, utilizamos tipos de dados bsicos, com variveis simples: real, inteiro, literal, caractere e lgico. Nesta aula, voc ver que h situaes em que os tipos de dados bsicos no so suficientes para resolver os problemas que se apresentam. Em muitos momentos, precisaremos, para atingir a soluo de tais problemas, utilizar o que chamamos de estruturas de dados homogneas. Voc entender o conceito dessas estruturas e ver que, utilizandoas, podemos armazenar diversos dados de um mesmo tipo em uma nica varivel. Voc estudar a utilidade dessas estruturas e as classificaremos em vetores (unidimensionais) e matrizes (bidimensionais), contemplando a sintaxe e a construo de algoritmos utilizando as duas estruturas. Objetivos Ao final desta aula, voc ser capaz de:

Definir o conceito de estruturas de dados homogneas, classificando-as. Definir o conceito e a sintaxe da utilizao de vetores. Identificar quando conveniente utilizar vetores. Construir algoritmos completos utilizando vetores. Definir o conceito e a sintaxe da utilizao de matrizes. Identificar quando conveniente utilizar matrizes. Construir algoritmos completos utilizando matrizes.

Estruturas de dados homogneas Ao longo da nossa disciplina, voc viu que uma varivel um espao na memria que reservado para armazenar determinados tipos de dados (Aula 3 Tipos de dados). At agora, porm, ns trabalhamos apenas com os tipos de dados bsicos (reais,

inteiros, caracteres, literais e lgicos) e variveis simples para armazenar esses dados. No entanto, nem sempre os tipos de dados bsicos so suficientes para representar as estruturas de dados necessrias para resolver os problemas que se apresentam. Imagine, por exemplo, que voc quer escrever um programa que solicita ao usurio a entrada dos nomes de 50 alunos de uma turma de sua escola. Parece simples, no? E . Basta voc utilizar uma das estruturas de repetio que vimos nas aulas anteriores. Veja: algoritmo "50 nomes" var nome:literal contador:inteiro inicio escreval ("Digite os nomes dos alunos:") para contador de 1 ate 50 passo 1 faca escreval ("Aluno",contador,":") leia (nome) escreval ("Aluno",contador,": ",nome) fimpara fimalgoritmo O algoritmo acima solicita que o usurio digite os nomes e l um a um, conforme o usurio os digita. Nesse caso, precisamos apenas de uma varivel inteira que servir como contador e uma varivel do tipo literal para armazenar o nome que ser digitado. O nome digitado, armazenado na varivel, exibido ao usurio, e a varivel liberada para armazenar o prximo nome. Se voc solicitar ao programa que exiba o contedo da varivel nome, ver que somente o ltimo nome digitado ser exibido. Faa o teste. Adicione a seguinte linha aps o final da estrutura de repetio: escreva ("Nome:",nome). Execute no VisualG e observe a sada. Mas, se quisermos que todos os nomes digitados sejam exibidos em uma lista, imediatamente aps a digitao dos mesmos? Como fazer isso? Para que os nomes dos alunos do nosso exemplo sejam exibidos em uma lista, eles precisam, primeiro, ser acessados. E para ser acessados, necessrio que todos eles estejam armazenados nessa lista. Para esse fim, existem as estruturas de dados homogneas. Estruturas de dados homogneas so estruturas que permitem armazenar conjuntos de dados de um mesmo tipo (da o nome homogneas) em uma nica varivel. So tambm chamadas de variveis compostas homogneas ou variveis compostas indexadas.

As estruturas de dados homogneas so classificadas em dois tipos: a. os vetores (ou arrays), estruturas que armazenam os dados em uma nica linha e vrias colunas (dizemos que so unidimensionais); b. as matrizes, estruturas que armazenam os dados em forma de tabela, com vrias linhas e vrias colunas (so bidimensionais).

Atividade 1 1. Explique o conceito de estruturas de dados homogneas. 2. Para que so utilizadas tais estruturas? 3. Como so classificadas? Explique o conceito de cada uma.

Vetores Voltando ao nosso exemplo, como exibir os nomes dos alunos em uma lista, utilizando as estruturas de dados homogneas? Antes de resolver esse problema, vamos analisar o passo a passo dessa situao. Primeiro, devemos inserir no programa esses dados. Ou seja, devemos escrever, um a um, os nomes dos alunos, armazenando-os em uma lista. Em seguida, solicitamos que o programa exiba a lista dos alunos. Os dados armazenados so, ento, acessados e, em seguida, exibidos. Se tentssemos resolver esse problema com o que aprendemos at aqui, teramos que declarar 50 variveis literais para armazenar os 50 nomes e depois teramos que instruir o computador a ler, uma a uma, cada varivel. Algo similar ao trecho de programa abaixo: leia (nome1,nome2,nome3...nome50) escreva (nome1,nome2,nome3...nome50) No precisa dizer que a soluo acima seria invivel, no mesmo? Na realidade, a soluo ideal para o problema pode ser encontrada se utilizarmos uma varivel composta unidimensional, ou seja, um vetor. Declarao de um vetor Assim como as variveis simples, os vetores precisam ser declarados antes de serem utilizados. A declarao de um vetor, porm, um pouco diferente da declarao de uma varivel comum, pois se trata de uma varivel indexada. como se estivssemos declarando diversas variveis dentro de uma s, diferenciadas por um ndice. Essas variveis correspondem aos elementos do vetor (em nosso exemplo, os nomes dos alunos). J o ndice um valor numrico do tipo inteiro, que sempre comea em 1

e corresponde posio de cada elemento no vetor. Veja a Tabela 1.

Tabela 1 - Exemplo simples de um vetor 1 Maria 2 Joo 3 Ftima 4 Francisco 5 Fernanda

A Tabela 1 representa um vetor de 5 elementos. Os elementos so os nomes (Maria, Joo, Ftima, Francisco, Fernanda). Os nmeros de 1 a 5 representam os ndices, que so as posies de cada elemento no vetor. Por exemplo, o elemento Ftima ocupa a posio 3 do vetor. Ao declarar um vetor, o seu tamanho deve ser informado. O tamanho de um vetor a quantidade de dados que ser armazenada na varivel. Na Tabela 1, o tamanho do vetor 5. No nosso exemplo (dos nomes dos alunos), o tamanho do vetor 50, pois queremos armazenar os nomes de 50 alunos. Veja a sintaxe da declarao de um vetor: <identificador> : vetor [tamanho] de <tipo> Tamanho = [Vi..Vf], onde: Vi = valor inicial e Vf = valor final Nosso exemplo:

nomes : vetor [1..50] de literal No nosso exemplo, ao invs de declararmos diversas variveis (nomes1, nomes2...nomes50), estamos declarando diversos elementos (os nomes) em uma varivel. Atribuio em vetores Assim como as variveis comuns, os elementos de um vetor tambm podem ser inicializados, ou seja, ter seus valores atribudos no momento da declarao. Ao atribuir valores a um elemento do vetor, deve ser obedecida a seguinte sintaxe:

<identificador>[posio] <- <valor> Exemplos:

nomes[3] <- Joo Maria da Silva

i <- 5 nomes[i] <- Maria Joana de Souza Agora que voc j conheceu os conceitos e a sintaxe dos vetores, vamos resolver nosso problema. Ao digitar os nomes dos alunos, utilizamos uma estrutura de repetio. Fizemos isso, voc sabe, porque se trata de uma execuo em loop. Para exibir os dados, teremos que utilizar outra estrutura de repetio, pois a exibio tambm feita em loop. Ou seja, o vetor exibir os dados um aps o outro, at que todos sejam exibidos. Veja a soluo a seguir: algoritmo "Nomes dos Alunos" var nomes: vetor[1..50]de literal // declaramos, aqui, o vetor (veja o tamanho entre colchetes) contador:inteiro //declarao da varivel contador inicio escreval ("Digite os nomes dos alunos:") para contador de 1 ate 50 passo 1 faca //inicio da primeira estrutura de repetio escreval ("Aluno ",contador,":") leia (nomes[contador]) //os dados so armazenados um a um, no vetor fimpara //fim da primeira estrutura de repetio para contador de 1 ate 50 passo 1 faca //inicio da segunda estrutura de repetio escreval (nomes[contador]) //os dados so exibidos fimpara //fim da segunda estrutura de repetio fimalgoritmo

Perceba que h uma estrutura de repetio para armazenar os dados e outra para exibilos. Execute o algoritmo no VisualG.

Atividade 2 1. De que forma declarado um vetor? Explique sua sintaxe e exemplifique. 2. O que o tamanho de um vetor? Explique para que serve a indexao. 3. Nas aulas anteriores, vimos, exaustivamente, o exemplo do clculo da mdia. Aprendemos a criar um algoritmo que calcula a mdia aritmtica de um aluno, na aula de estruturas sequenciais; vimos como dizer se o aluno foi ou no aprovado, com as estruturas de deciso, e calculamos a mdia para vrios alunos, com as estruturas de repetio. Veja o algoritmo a seguir, que calcula e exibe a mdia de 50 alunos de uma

turma: algoritmo 50 Mdias var nota1: real nota2: real media: real contador:inteiro inicio escreval (Digite as notas dos alunos:) para contador de 1 ate 5 passo 1 faca escreval(Digite a primeira nota do aluno ,contador,:) leia (nota1) escreval(Digite a segunda nota do aluno ,contador,:) leia (nota2) media <- (nota1+nota2)/2 escreval (A mdia do aluno ,contador, : ,media) fimpara fimalgoritmo O algoritmo acima recebe, dentro do loop, duas notas e exibe a mdia de cada aluno. Isso feito, medida que o usurio digita as informaes. Ns queremos, agora, exibir essas informaes em uma lista, depois que todos os dados so inseridos. Como fazer isso? Resolva esse problema. O algoritmo deve solicitar que o usurio digite o nome e duas notas de cada aluno. Em seguida, o programa exibe os nomes e suas respectivas mdias em uma lista.

Ordenao de um vetor Ao escrever algoritmos com vetores, haver momentos em que voc sentir a necessidade de ordenar os seus elementos. Voc j deve ter visto ou utilizado algum programa de computador que tem funcionalidades que classificam palavras em ordem alfabtica ou nmeros em ordem crescente. A ordenao um tipo de funcionalidade bastante til e necessria a alguns programas de computador. E essa ordenao realizada por meio de comparaes entre os elementos do vetor. Se voc digita dois nmeros, por exemplo, e pede ao computador que os ordene, ser realizada uma comparao entre os dois, para ver quem o maior e quem o menor. Em seguida, o menor colocado na primeira posio e o maior na segunda posio (se a ordenao for crescente). Veja abaixo: 01 A=5 02 B=2 Posio na memria Elementos a ordenar A > B, entao

01 B=2

02 A=5

Posio na memria Elementos ordenados

Quando h uma quantidade maior de elementos a serem ordenados, h a necessidade de tcnicas especficas de ordenao. Vamos conhecer uma delas. Observe a tabela a seguir: 01 5 02 2 03 12 04 8 05 1

Os nmeros 01 a 05 na primeira linha da tabela representam as posies na memria (os ndices do vetor) de cada elemento. Na linha de baixo, esto os elementos, fora de ordem. Para ordenar os elementos, necessrio fazer a comparao entre todos eles, da seguinte maneira: primeiro, comparamos o nmero do ndice 01 com cada um dos outros. O menor colocado na posio 01. Depois, realizada a comparao do segundo elemento com os restantes e assim por diante. Porm, como cada elemento ocupa um espao na memria, precisamos reservar um espao auxiliar (uma varivel temporria) para armazenar um dos elementos da comparao, quando eles tiverem que trocar de posio. Veja: I Criamos uma varivel auxiliar e comparamos o nmero do primeiro ndice com todos os demais, at encontrar o menor, armazenando-o na primeira posio. (i) Comparamos o 5 com o 2. Como o 5 maior, trocamos os dois nmeros de posio. O 5 vai para a varivel auxiliar (ii) e o 2 vai para a primeira posio (iii). Depois, o 5 vem para a posio onde o 2 estava anteriormente (iv).

II - Como houve troca de posies entre os elementos, realizamos a comparao entre o primeiro elemento (que agora o 2) com os demais, at achar um menor.

III Ao encontrar um nmero menor (1), realizamos a troca de posies entre os dois, da mesma forma que a troca anterior, utilizando a varivel auxiliar.

IV J temos o nmero menor. Agora, fazemos as comparaes entre o nmero que est na segunda posio e os demais, at encontrar o segundo menor e trocarmos os dois de posio.

V Procedemos troca de posies.

VI - Com o primeiro e o segundo nmeros definid]os, fazemos as comparaes entre o terceiro nmero e os restantes, trocando sempre as posies, a fim de que os menores fiquem nas primeiras posies. Veja: Comparamos e trocamos o 12 com o 8

Comparamos e trocamos o 8 com o 5

Novamente trocamos o 12 com o 8. A ordenao est completa.

Consegue perceber o princpio desse tipo de ordenao? Vamos ver o funcionamento desse algoritmo em pseudocdigo: algoritmo "ordenao" var i:inteiro//contador1 j:inteiro//contador2 num: vetor[1..5]de inteiro//declarao do vetor que ser ordenado temp:inteiro inicio para i de 1 ate 5 faca escreval ("Numero?") leia (num[i]) fimpara para i de 1 ate 5 faca para j de 1 ate 5 faca //so duas estruturas de repetio, pois dois nmeros sero comparados repetidamente //solicita entrada dos nmeros

se num[i]<num[j] ento //compara dois nmeros temp <- num[j] // coloca o maior na varivel temporria num[j] <- num[i]//coloca o menor no lugar do maior num[i] <- temp//coloca o maior(que estava na varivel temporria) no lugar em que estava o menor fimse fimpara fimpara

para i de 1 ate 5 faca escreva (num[i]) fimpara fimalgoritmo

//Exibe os nmeros ordenados

Atividade 3 1. Para que serve a varivel temporria, no mtodo de ordenao de vetores? 2. Execute o algoritmo de ordenao que vimos no VisualG. 3. Faa a ordenao desse algoritmo em ordem decrescente.

Matrizes Voc viu, h pouco, que nem sempre os tipos de dados bsicos so suficientes para representar as estruturas de dados necessrias para resolver os problemas que se apresentam. Viu a necessidade de, em algumas situaes, exibir dados em listas. E, para atender a essa necessidade, conhecemos os vetores, como estruturas de dados unidimensionais, com variveis indexadas referenciadas por um nico ndice. Voc aprendeu que, armazenando os dados em um vetor e acessando-o, em seguida, podemos exibir suas informaes em uma lista. Porm, os vetores lidam com apenas uma dimenso. Ou seja, se fssemos representar o vetor atravs de uma tabela, essa s teria uma linha com vrias colunas, ou viceversa. Como podemos ver na tabela abaixo, que vimos h pouco no estudo sobre vetores. Veja: 1 Maria 2 Joo 3 Ftima 4 Francisco 5 Fernanda

Os elementos do vetor, na tabela, so os nomes dos alunos Maria, Joo, Ftima, Francisco e Fernanda. Dessa forma, os elementos e seus ndices so:

nomes[1] <-Maria nomes[2] <- Joo nomes[3] <- Ftima nomes[4] <- Francisco nomes[5] <- Fernanda

Agora, imagine que o professor de determinada disciplina passou um trabalho a ser feito em dupla e quer organizar os nomes das duplas. Veja a tabela abaixo: Grupos 1 2 3 Componente 1 Maria Ftima Fernanda Componente 2 Joo Francisco Jos

Os elementos dos grupos, segundo a tabela, so os seguintes:

Componentes [1,1] <- Maria (componente 1 do grupo 1) Componentes [2,1] <- Joo (componente 2 do grupo 1) Componentes [1,2] <- Ftima (componente 1 do grupo 2) Componentes [2,2] <- Francisco (componente 2 do grupo 2) Componentes [1,3] <- Fernanda (componente 1 do grupo 3) Componentes [2,3]<- Jos (componente 2 do grupo 3) Temos, portanto, 3 grupos, cada um com 2 componentes. Ftima, por exemplo, o componente 1 do grupo 2. Estamos tratando, portanto, de uma matriz. Uma matriz uma estrutura de dados homognea de duas (ou mais) dimenses. Uma matriz utiliza variveis indexadas de mais de um ndice. Mas, como fazemos isso em algoritmos? Primeiro, precisamos conhecer a sintaxe da declarao de uma matriz. Veja:

<identificador> : vetor [<tamanho1>, <tamanho2>] de <tipo> Tamanho1 = tamanho da linha da matriz Tamanho1 = tamanho da coluna da matriz Nosso exemplo:

componentes : vetor [1..3,1..2] de literal 1..3 = 3 linhas (3 grupos) 1..2 = 2 colunas (2 componentes por grupo)

Observe que a matriz, no VisuAlg, um vetor com duas dimenses, ou seja, com dois ndices. Dessa forma, sua declarao feita de forma semelhante declarao do vetor, com a nica diferena de que devemos informar o tamanho da segunda

dimenso. A dimenso 1, no caso, referente aos grupos (1..3) e a dimenso 2 referente aos nomes dos alunos de cada grupo (1..2). Vamos ver o algoritmo, abaixo: algoritmo "matriz grupos"//nome do algoritmo var componente : vetor[1..3,1..2]de literal //declarao da matriz cont, cont1 : inteiro //declarao dos contadores inicio //Estrutura para receber e armazenar os dados da matriz para cont de 1 ate 3 faca //repetio para os grupos para cont1 de 1 ate 2 faca //repetio para os componentes escreval("Digite o nome do componente ",cont1," do grupo ",cont,":") leia (componente[cont, cont1]) //recebe os dados fimpara fimpara //Estrutura para exibir os dados recebidos e armazenados para cont de 1 ate 3 faca escreval ("Grupo ",cont,":") //mostra o nome do grupo para cont1 de 1 ate 2 faca escreval (componente[cont, cont1]) //mostra os componentes fimpara fimpara fimalgoritmo

Observe que declaramos, alm do vetor, dois contadores. Fizemos isso, porque temos dois ndices (um para contar os grupos e outro para contar os componentes de cada grupo). Se tivssemos trs ndices, teramos que declarar trs contadores, e assim por diante. Voc sabe que, para percorrer os elementos do vetor, precisamos fazer isso ndice a ndice. Por isso, precisamos do contador e de uma estrutura de repetio para armazenar os dados e outra para exibi-los. Com as matrizes ocorre o mesmo. Porm, como temos dois ndices, utilizamos duas estruturas de repetio, uma dentro da outra, para receber os dados, e mais duas para exibi-los. Se tivssemos trs ndices, teramos que utilizar trs estruturas de repetio para cada uma dessas atividades. Atribuio em matrizes Assim como com os vetores, os elementos de uma matriz tambm podem ser inicializados, ou seja, ter seus valores atribudos no momento da declarao. Ao atribuir valores a um elemento da matriz, fazemos de modo similar aos vetores: <identificador>[posio] <- <valor> Exemplos:

componentes[2,3] <- Jos i <- 2 j <- 1 componentes[i,j] <- Joo

Atividade 4 1. De que forma declarada uma matriz? Explique sua sintaxe e exemplifique.

Vamos, agora, ver um exemplo prtico de aplicao de matrizes.

Exerccio resolvido 1 Escreva um algoritmo que armazene e depois mostre as notas de 10 alunos em 5 disciplinas, conforme exemplo na tabela abaixo: Disciplina Nota1 Nota2 Nota3 ... Nota10 1 N1D1 N2D1 N3D1 ... N10D1 2 N1D2 N2D2 N3D2 ... N10D2 3 N1D3 N2D3 N3D3 ... N10D3 4 N1D4 N2D4 N3D4 ... N10D4 5 N1D5 N2D5 N3D5 ... N10D5

Soluo Da mesma forma que nos vetores, temos que armazenar, ndice a ndice, e depois exibir os dados armazenados. Veja a seguir. //Nomeamos o algoritmo algoritmo "notas matriz" //declaramos as variveis Var //declarao da matriz(tamanho 10 para as 10 notas e 5 para as 5 disciplinas) notas:vetor[1..10, 1..5] de real //contadores de cada ndice (i - notas e j - disciplinas) i, j:inteiro //Incio do algoritmo inicio //estrutura que receber e armazenar os dados //lao que vai percorrer as 10 notas

para i de 1 ate 10 faca //lao que vai percorrer as 5 disciplinas para j de 1 ate 5 faca //solicita que o usurio entre com os dados escreval ("Digite a nota do aluno ",i," na disciplina ",j,":") //recebe as notas de cada aluno em cada disciplina leia (notas[i,j]) //fim do lao das disciplinas fimpara //fim do lao das notas fimpara //estrutura que exibir os dados //lao que vai percorrer as 10 notas para i de 1 ate 10 faca //lao que vai percorrer as 5 disciplinas para j de 1 ate 5 faca //exibio dos resultados escreval ("Aluno ",i," disciplina ",j,": nota ",notas[i,j]) fimpara fimpara fimalgoritmo Agora, depois do exerccio resolvido, vamos analis-lo na prxima atividade.

Atividade 5 1. Analise o algoritmo do exerccio resolvido e o implemente no VisuAlg. 2. Execute, tambm, o algoritmo dos grupos, que vimos no texto desta aula.

Resumo Nesta aula, voc conheceu os conceitos de variveis compostas homogneas. Voc viu que h situaes em que os tipos de dados bsicos e as variveis simples no so suficientes para encontrar a soluo de um dado problema. Voc viu, tambm, que, em situaes que precisamos exibir conjuntos de dados em lista, conveniente utilizar tais estruturas, que permitem armazenar diversos dados de um mesmo tipo em uma s varivel. Classificamos tais estruturas em unidimensionais (vetores) e bidimensionais (matrizes) e conhecemos a sintaxe de declarao de ambas, bem como a atribuio de valores aos seus elementos. Voc aprendeu, tambm, uma tcnica de ordenao de vetores, com a utilizao de uma varivel auxiliar. Por fim, vimos exemplos e fizemos exerccios prticos, com problemas que utilizam vetores e matrizes. Autoavaliao

1. Conceitue estruturas de dados homogneas. 2. Como podemos classificar as estruturas de dados homogneas? 3. O que um vetor? Qual a sintaxe da declarao de um vetor? E a sintaxe de atribuio de valores aos elementos de um vetor? 4. Qual a utilidade de um vetor? 5. Escreva um algoritmo que leia 10 nmeros inseridos pelo usurio, armazene-os em um vetor e, em seguida, exiba os pares e suas respectivas posies. 6. Escreva um algoritmo que leia 20 nmeros e os coloque em ordem decrescente. 7. Escreva um algoritmo que leia os nomes de 15 funcionrios de uma fbrica e os seus respectivos salrios e os armazene em dois vetores diferentes. Em seguida, exiba uma lista com o nome e o salrio de cada um. 8. O que uma matriz? Qual a sintaxe da declarao de uma matriz? E a sintaxe de atribuio de valores aos elementos de uma matriz? 9. Qual a utilidade de uma matriz? Cite exemplos de situaes em que poderamos empregar o uso de matrizes. 10. Escreva um algoritmo que leia os elementos (nmeros inteiros) de uma matriz de 5 linhas e 5 colunas e os exiba. 11. Multiplique os elementos da matriz que voc construiu no exerccio anterior por 10 e os exiba. 12. Escreva um algoritmo que armazene e mostre os nomes dos 11 jogadores titulares de 5 times de futebol. 13. Escreva um algoritmo que armazene valores inteiros em uma matriz 3 x 4 e calcule e mostre a mdia aritmtica dos valores digitados. Aula 12 Subalgoritmos: funes e procedimentos Mecanismos de passagem de parmetros Ao longo da nossa disciplina, voc conheceu as instrues primitivas, estruturas de controle e, na aula anterior, conheceu as estruturas de dados homogneas, que so os vetores e as matrizes. Voc sabe que existem problemas com diversos graus de complexidade e, com todos os conhecimentos que adquiriu at aqui, certo que voc j capaz de construir algoritmos que resolvam problemas de diversos tipos. Nesta aula, voc ver que, para reduzir a complexidade de um algoritmo, interessante sabermos utilizar o nosso raciocnio lgico para dividir um problema grande em diversos problemas menores. Dessa forma, a complexidade reduzida, favorecendo a compreenso. E nesse contexto que entram os subalgoritmos, que so trechos de programas que podem ser utilizados dentro de um programa maior, sempre que necessrio ou conveniente. Nesta aula, voc conhecer os conceitos acerca de subalgoritmos, classificando-os em funes e procedimentos. Voc ir conhecer tambm os conceitos, sintaxe e aplicaes das funes e procedimentos. Veremos como criar, declarar e em que parte do algoritmo eles devem ficar posicionados. Voc aprender, tambm, como fazer a chamada de funes e procedimentos dentro do algoritmo principal e os conceitos de escopo de variveis, definindo variveis globais e locais e a comunicao entre as funes e procedimentos e o algoritmo atravs dessas variveis. Outro tpico que ser abordado na aula de hoje ser o estudo dos mecanismos de passagem de parmetros. Voc estudar os tipos de parmetros e os mtodos de passagem de parmetros que podemos utilizar em funes e procedimentos.

Objetivos Ao final desta aula, voc ser capaz de: 1. 2. 3. 4. 5. 6. 7. 8. 9. Definir o conceito de subalgoritmos. Identificar quando conveniente utilizar subalgoritmos. Conhecer os elementos de um subalgoritmo e seus tipos. Conceituar e conhecer a sintaxe das funes. Aprender a criar e utilizar funes. Conceituar e conhecer a sintaxe dos procedimentos. Criar procedimentos e cham-los nos algoritmos. Identificar os tipos de parmetros. Definir os mecanismos de passagem de parmetros que podem ser utilizados em funes e procedimentos. 10. Criar funes e procedimentos com os mecanismos de passagem de parmetros estudados.

Subalgoritmos Com os conhecimentos que voc adquiriu at hoje, voc sabe que capaz de construir algoritmos que podem resolver problemas de diversos tipos. Alm da diversidade de tipos de problemas, nos algoritmos, poderemos nos deparar com diversas situaes diferentes dentro de um mesmo problema. E quanto maior essa diversidade, podemos dizer que maior a complexidade do algoritmo. Para reduzir essa complexidade, interessante utilizarmos a nossa habilidade de raciocnio lgico para decompor os problemas grandes e complexos em diversos problemas menores e mais simples. Dessa forma, fica mais fcil manter o foco em cada subproblema por vez, aumentando a compreenso. Em algoritmos, essa decomposio possvel quando utilizamos os subalgoritmos. Um subalgoritmo um trecho de programa que contm incio e fim, executa um determinado conjunto de instrues e possui um identificador, por meio do qual pode ser chamado em qualquer parte do algoritmo, como se fosse um comando. Imagine que um determinado algoritmo precisa realizar um mesmo conjunto de aes repetidas vezes ao longo de sua execuo. Ao invs de escrevermos esse conjunto de aes vrias vezes ao longo do algoritmo, criamos um subalgoritmo e o algoritmo principal o chama sempre que precisar dele. Por exemplo: ao preencher um formulrio com dados de diversas pessoas, o usurio digita, em dado momento, o ano de nascimento da pessoa e, automaticamente, preenchido o campo seguinte, com a idade da pessoa. Em um programa que no utiliza subalgoritmos, a expresso idade <- ano_atual ano_nascimento calculada cada vez que novos dados so inseridos. Se utilizarmos

um subalgoritmo que realize esse clculo, apenas chamamos o subalgoritmo no momento necessrio. Ao terminar a execuo do subalgoritmo chamado, o fluxo de execuo natural do algoritmo principal prossegue. Dessa forma, quando um algoritmo muito complexo, a estratgia dividi-lo em um algoritmo principal e diversos (tantos quantos forem necessrios) subalgoritmos. Se, ainda assim, algum nvel de complexidade for mantido, possvel os subalgoritmos chamarem outros subalgoritmos. A utilizao de subalgoritmos facilita o trabalho do programador, pois, alm de melhorar a compreenso e reduzir a complexidade, permite que se detectem e corrijam eventuais falhas com maior preciso e agilidade e favorece, tambm, a reutilizao de subalgoritmos que foram implementados em outros programas. Dessa forma, reduzimos, alm da complexidade, o tempo gasto para escrever o programa. Atividade 1 1. O que um subalgoritmo? Quando interessante utilizar subalgoritmos? 2. Quais as vantagens de se utilizar subalgoritmos?

Elementos de um subalgoritmo Os elementos de um subalgoritmo so o corpo e o cabealho. No corpo, so definidas as instrues, ou seja, as aes que o subalgoritmo vai executar cada vez que for chamado dentro do algoritmo principal. No cabealho, definimos o nome, os parmetros, as variveis locais e o tipo. Veja a descrio de cada um desses elementos a seguir. a. Nome o identificador pelo qual o subalgoritmo ser chamado no algoritmo principal. b. Parmetros so os dados que permitem as relaes entre o subalgoritmo e o algoritmo. Ou seja, so os dados que o subalgoritmo precisa receber para executar suas instrues e os dados que ele retorna quando termina de executar. Por exemplo, para realizar uma soma, os parmetros recebidos so os nmeros que sero somados. Ao efetuar a soma, retornamos o resultado dessa soma. c. Variveis locais so as variveis declaradas no subalgoritmo e que s podem ser utilizadas dentro dele. d. Tipo os subalgoritmos podem ser de dois tipos: funes ou procedimentos. A diferena entre ambos que uma funo retorna sempre a um nico valor. Um procedimento no retorna valores, mas os recebe e modifica.

Atividade 2 1. Quais os elementos de um subalgoritmo? 2. Quais os tipos de subalgoritmos? Qual a diferena entre os tipos? 3. Explique o que so variveis locais. E parmetros?

Escopo de variveis As variveis que criamos no incio de um algoritmo podem ser utilizadas em qualquer lugar dentro do algoritmo. Se desejarmos utilizar tais variveis dentro de um subalgoritmo, por exemplo, podemos fazer isso sem problemas. Essas variveis so as variveis globais. Ao criarmos um subalgoritmo, porm, criamos variveis especficas para utilizarmos em seu interior. Tais variveis so inicializadas no momento em que o subalgoritmo est sendo executado e so vlidas somente em seu interior. Elas no so visualizadas fora dos limites do subalgoritmo. So as variveis locais. A essa visibilidade das variveis (se ela local ou global), damos o nome de escopo de variveis. Trata-se da abrangncia de uma varivel, ou seja, em que limites do algoritmo ela visvel e pode ser utilizada. Veja, na Figura 1, como podemos ilustrar a hierarquia da visibilidade das variveis.

Figura 1 - Hierarquia no escopo de variveis. Fonte: Adaptado de Manzano (2005, p 186). Veja que as variveis A e B esto declaradas no algoritmo principal. Logo, elas so variveis globais que podem ser utilizadas em qualquer subalgoritmo do conjunto que vemos na Figura 1. Porm, declaramos a varivel A novamente, em outro contexto, no subalgoritmo 1. Essa nova varivel A, nesse caso, no a mesma que foi criada no algoritmo principal. Trata-se de uma varivel local do subalgoritmo 1 e que pode ser utilizada no subalgoritmo 1.1 (ou em qualquer subalgoritmo interno ao subalgoritmo 1). A varivel

X , tambm, local ao subalgoritmo 1 e pode ser utilizada no subalgoritmo 1.1. declarada, no subalgoritmo 2.1 outra varivel X, que local naquele subalgoritmo (ela no tem relao alguma com a varivel X do subalgoritmo 1). A varivel M local ao subalgoritmo 2 e pode ser utilizada no subalgoritmo 2.1. a varivel W local ao subalgoritmo 1.1 e somente neste subalgoritmo pode ser visualizada. Uma varivel local pode ter o mesmo nome de uma varivel global. Porm, uma vez declaradas em contextos diferentes, elas so distintas. Alm de melhorar o desempenho do algoritmo, essa diviso entre variveis locais e globais serve para definir os parmetros de um subalgoritmo. Ou seja, elas estabelecem a comunicao entre o subalgoritmo e o algoritmo principal, que o chamou. As variveis globais do algoritmo servem como dados de entrada para o subalgoritmo e as variveis locais do subalgoritmo armazenam os dados recebidos para, com eles, efetuar os clculos necessrios. No caso das funes, como veremos adiante, a varivel (local) de retorno (atravs do comando retorne) serve como dado de sada da funo para o algoritmo principal e uma varivel global recebe e armazena essa informao. Ao acessar essa varivel global, temos acesso ao valor de retorno da funo. A maneira com que tratamos as variveis dentro do algoritmo pode afetar de forma direta o desempenho do programa, pois uma varivel local liberada (um espao na memria liberado) assim que o subalgoritmo que a utiliza termina de executar. Dessa forma, se uma varivel vai ser utilizada somente no interior de um subalgoritmo, no h necessidade de declar-la como varivel global. Voc pode utilizar variveis globais nos subalgoritmos que voc criar. Porm, recomendvel que voc utilize variveis locais, pois isso permite que o subalgoritmo seja executado sem interferir em outros subalgoritmos que possam estar utilizando as mesmas variveis. Atividade 3 1. O que voc entende por escopo de variveis? 2. Defina varivel global e varivel local. 3. Uma varivel local pode ter o mesmo nome de uma varivel global? Explique por que.

Funes As funes, em algoritmos, seguem o mesmo princpio das funes matemticas que aprendemos na escola. Quando dizemos que f(x)=x+1, temos duas variveis (x e f(x)) e, com base no valor de uma delas, encontramos o valor da outra.

Voc viu, h pouco, que um subalgoritmo tem, como elementos, dentre outros, os parmetros, que so os dados que ele recebe para poder executar suas instrues (as variveis globais). Dessa forma, em uma funo soma, teramos como parmetros os nmeros a serem somados (no caso da funo matemtica acima, o x, que informado pelo usurio) e como valor de retorno o resultado da soma entre os nmeros (nesse mesmo caso, o f(x), que a varivel local onde fica armazenado o valor de retorno). Uma funo um subalgoritmo que chamado dentro do algoritmo atravs da citao de seu nome (identificador) e deve retornar um nico valor. As funes, assim como as variveis, devem ser declaradas antes de serem inicializadas. Essa declarao deve estar posicionada no espao aps a declarao das variveis e antes do incio da execuo do algoritmo. Assim:

Algoritmo <nome do algoritmo> Var <declarao de variveis do algoritmo> <declarao da funo> Inicio <corpo do algoritmo> fimalgoritmo A sintaxe da criao de uma funo a seguinte:

//cabealho, com o nome, os parmetros e o tipo de retorno Funo <identificador> (<lista de parmetros>:<tipo dos parmetros>): <tipo de retorno> //declarao das variveis da funo Var <declarao das variveis locais da funo> //inicio da execuo da funo Inicio <instrues> //valor a ser retornado no algoritmo, ao chamar a funo retorne <valor de retorno> fimfuncao Veja o algoritmo abaixo, que utiliza uma funo que soma dois nmeros:

algoritmo "Funao soma" var a,b, soma: inteiro //declarao das variveis globais

funcao fsoma(a1, b1: inteiro):inteiro //declarao da funo var resultado : inteiro //declarao de variveis locais Inicio resultado<-a1+b1 //instrues retorne resultado //valor de retorno fimfuncao inicio leia (a) leia (b) soma <- fsoma(a,b) //chamada da funo escreva ("soma: ", soma) fimalgoritmo Funo criada

Corpo do algoritmo principal

Observe que, aps a declarao das variveis globais do algoritmo (os nmeros a e b a serem somados e a varivel soma, para armazenar o resultado), criamos a funo. O nome da funo fsoma. Os parmetros so os nmeros inteiros que sero armazenados nas variveis a1 e b1(variveis locais de fsoma). O tipo de retorno da funo inteiro. Outra varivel local a varivel resultado, onde ser armazenado o resultado da soma entre a1 e b1. No algoritmo principal, so recebidos dois nmeros inteiros, que so armazenados nas variveis a e b. Chamamos, ento, em uma expresso de atribuio (nesse caso), a funo fsoma, que armazenar em a1 e b1 os valores de a e b, digitados, e retornar o valor encontrado na soma, que est armazenado na varivel resultado. Esse valor , ento, armazenado na varivel soma (por atribuio) e exibido, em seguida. Execute o algoritmo no VisuAlg. importante salientar alguns pontos, descritos a seguir. a. Os parmetros da funo so separados por vrgula (como na declarao de variveis), se forem do mesmo tipo. Se forem de tipos diferentes, devemos separ-los por ponto-e-vrgula (;). b. O tipo de retorno da funo, bem como todas as suas variveis locais, pode ser qualquer um entre os tipos de dados bsicos que conhecemos: inteiro, real, lgico, literal ou caractere. Porm, o VisuAlg no suporta variveis compostas (vetores e matrizes) como parmetros de subalgoritmos. c. O comando retorne utilizado para informar o valor de retorno da funo ao algoritmo, no momento em que a funo chamada. d. A funo chamada sempre em uma expresso, em que o valor armazenado na varivel de retorno da funo atribudo a uma varivel do algoritmo. e. Sempre que chamar a funo imprescindvel que os parmetros passados (no caso do nosso exemplo, os valores das variveis globais a e b) devem, obrigatoriamente, estar entre parntesis, na mesma ordem,

ser do mesmo tipo e em igual quantidade aos parmetros da funo (variveis locais a1 e b1).

Atividade 4 1. Determine o conceito de funo. Em que local do algoritmo a funo deve ser definida? Explique a sintaxe da criao de uma funo. 2. De que forma realizada a chamada de uma funo? 3. Qual a utilidade do comando retorne? 4. Experimente remover a declarao da varivel local resultado da funo que criamos em nosso exemplo e utilizar a varivel global soma no clculo da expresso de soma e no retorno. Execute. O algoritmo funcionou? Explique o motivo.

Procedimentos Um procedimento um subalgoritmo, assim como a funo. A principal diferena entre ambos que a funo retorna um valor, enquanto o procedimento no retorna, mas modifica os valores recebidos. Um procedimento um subalgoritmo que chamado dentro do algoritmo atravs da citao de seu nome (identificador) e deve alterar os valores dos parmetros recebidos. Voc viu, na aula anterior, que uma funo retorna um nico valor, enquanto um procedimento no retorna, mas modifica os valores. Existem, porm outras diferenas importantes entre os dois: Funes As funes retornam o seu valor de forma explcita, por meio do comando retorne. As chamadas s funes ocorrem sempre em expresses ou instrues de atribuio. Procedimentos Os procedimentos no retornam valor. No existe comando retorne. Os procedimentos so chamados em comandos isolados, com as instrues de entrada e sada de dados (leia e escreva), e nunca em expresses ou atribuies.

Os procedimentos devem ser criados e declarados na mesma posio que as funes: aps a declarao de variveis dos algoritmos e antes do incio da execuo do mesmo. Veja:

Algoritmo <nome do algoritmo> Var <declarao de variveis do algoritmo>

<declarao do procedimento> Inicio <corpo do algoritmo> fimalgoritmo A sintaxe da criao de um procedimento a seguinte:

//cabealho, com o nome e os parmetros procedimento <identificador> (var <lista de parmetros>:<tipo dos parmetros>) //inicio da execuo do procedimento Inicio <instrues> fimprocedimento Veja o algoritmo abaixo, que utiliza um procedimento que calcula a rea de um tringulo:

algoritmo "Procedimento triangulo" var altura, base, rea : real //declarao das variveis globais procedimento ptriangulo (var h,b,ar : real) //declarao do procedimento inicio ar <- (b*h)/2 //instrues fimprocedimento inicio escreval ("Digite o valor da base: ") leia (base) escreval ("Digite o valor da altura: ") leia (altura) ptriangulo(altura,base, area) //chamada ao procedimento escreval (area,"m") fimalgoritmo

Procedimento criado

Corpo do algoritmo principal

Veja que o procedimento criado aps a declarao das variveis globais do algoritmo. No momento da declarao do procedimento, seus parmetros (variveis locais) so informados entre parntesis, precedidos da palavra chave var. Isso ocorre porque os procedimentos, como vimos h pouco, modifica valores por meio dos parmetros, diferente das funes, que utilizam a instruo retorne. Sabemos que os parmetros permitem a comunicao entre o subalgoritmo e o algoritmo que o chama. Dessa forma, o procedimento recebe os valores atravs das variveis globais (no caso,

altura e base) e os armazena em suas variveis locais (h e b). Aps realizar o clculo da rea, o valor resultante passado, por meio da varivel local ar, e armazenado na varivel global area. Por isso, ao chamarmos o procedimento no algoritmo principal, devemos fornecer os parmetros (variveis globais do algoritmo), entre parntesis, na mesma ordem, quantidade e tipo que os parmetros (variveis locais) do procedimento.

Atividade 5 1. Explique, com suas palavras o que um procedimento. 2. Explique, com suas palavras, como se d a comunicao entre as variveis globais do algoritmo e as variveis locais do procedimento, na passagem de parmetros.

Passagem de parmetros Sabemos que, em funes e procedimentos, deve haver uma comunicao entre o subalgoritmo e o algoritmo que o chama, atravs das variveis globais do algoritmo e as variveis locais do subalgoritmo. A essa comunicao, damos o nome de passagem de parmetros. Os tipos de parmetros que utilizamos nesse processo so dois, veja-os a seguir. 1. Parmetros formais so aquelas variveis locais que declaramos entre parntesis, nos cabealhos dos subalgoritmos. So utilizados para realizar os clculos dentro do subalgoritmo. 2. Parmetros reais so os valores que substituem os parmetros formais no momento da chamada de um subalgoritmo. Por exemplo, veja o cabealho da funo fsoma, a seguir. Funcao fsoma (a1, b1 : inteiro) : inteiro As variveis a1 e b1 so os parmetros formais da funo. Veja, agora, o seguinte trecho do algoritmo que chama essa funo: leia (a) leia (b) soma <- fsoma (a,b) Os valores armazenados nas variveis globais a e b so os parmetros reais. Note que poderamos, simplesmente, chamar a funo, passando os valores diretamente: soma <- fsoma (3,5). Nesse caso, os nmeros 3 e 5 seriam os parmetros reais. No processo de passagem de parmetros, so passados dados de entrada do algoritmo para o subalgoritmo e dados de sada no sentido oposto. Veja esse processo ilustrado

na Figura 1.

Figura 2 Troca de informaes entre algoritmo e funo

Na Figura 2, podemos ver uma funo, no mdulo da esquerda, que calcula uma soma entre dois nmeros. No mdulo da direita, temos o corpo do algoritmo que chama essa funo. O algoritmo passa os dados de entrada (nmeros armazenados nas variveis a e b, que so os parmetros reais) para a funo, que os armazena em suas variveis locais a1 e b1 (parmetros formais). O clculo efetuado e o valor encontrado armazenado na varivel local resultado. Atravs do comando retorne, esse valor passado como dado de sada para o algoritmo (no momento da chamada da funo), que o armazena na varivel global soma para, ento, ser exibido. Em um procedimento, essa passagem de parmetros feita de uma forma um pouco diferente. Veja a Figura 3.

Figura 3 Troca de informaes entre algoritmo e procedimento No procedimento, a comunicao de sada no feita de forma explcita como na funo. Veja que, ao contrrio do que feito na funo, a palavra reservada var utilizada nos parmetros do procedimento. Veja, tambm, que, na chamada ao procedimento, todos os dados so passados como parmetros, ao passo que na funo, so passados apenas os dados de entrada (os nmeros armazenados em a e b). Por que ser que isso ocorre? Porque os parmetros, na funo da Figura 2, esto sendo passados por valor e, no procedimento da Figura 3, os parmetros esto sendo passados por referncia. Vamos compreender o que isso significa? Passagem de parmetros por valor Quando um parmetro passado por valor, no momento da chamada do subalgoritmo, o valor do parmetro real copiado para o parmetro formal. Dessa forma, no h alterao no valor do parmetro real, sejam quais forem os clculos realizados no subalgoritmo. Faa o teste. Experimente declarar uma varivel global do tipo inteiro, que ser o parmetro real. Atribua a ela um valor qualquer. E faa o algoritmo exibir esse valor. Em seguida, crie um procedimento com uma varivel local (parmetro formal) e passe o valor da varivel global para essa varivel local. Realize alguma operao sobre esse valor, de modo que ele seja alterado. Faa, ento, a chamada ao procedimento e exiba o valor da varivel criada. O valor foi alterado? Na passagem de parmetros por valor, so criadas as variveis ( reservado um espao na memria) locais como parmetros formais para armazenar uma cpia do valor dos parmetros reais.

Passagem de parmetros por referncia No mecanismo de passagem de parmetros por referncia, no h reserva de espao extra na memria para os parmetros formais. Nesse caso, no momento da chamada ao subalgoritmo, os parmetros reais e formais correspondentes compartilham o mesmo espao em memria. Desse modo, as modificaes feitas nos parmetros formais dos subalgoritmos afetam os parmetros reais. Para diferenciar a passagem de parmetros por valor da passagem por referncia, utilizamos, neste segundo mtodo, a palavra reservada var antes dos parmetros, no cabealho do subalgoritmo. o que voc viu na Figura 2. Faa o mesmo teste que voc fez na passagem de parmetros por valor, s que, dessa vez, passando os parmetros por referncia (utilizando var antes dos parmetros no cabealho do subalgoritmo). E agora? O valor foi alterado?

Atividade 6 1. Defina mecanismo de passagem de parmetros e explique, com suas palavras, os dois mtodos que estudamos nesta aula, lembrando de falar nos tipos de parmetros que so utilizados.

Bom, chegamos ao final da nossa disciplina. Ao longo de nossas aulas, voc aprendeu os conceitos bsicos sobre algoritmos e lgica de programao, conheceu as formas de representao de algoritmos, os tipos de dados e expresses utilizadas. Voc aprendeu a utilizar as instrues primitivas e a aplic-las nas diferentes estruturas de controle existentes: estrutura sequencial, estruturas de deciso e estruturas de repetio. Voc colocou em prtica os conhecimentos obtidos nas aulas, construindo diversos algoritmos, utilizando essas estruturas. Voc tambm aprendeu a utilizar as estruturas de dados homogneas (os vetores e as matrizes) e conheceu os subalgoritmos e os mecanismos de passagem de parmetros que eles utilizam. Terminamos a disciplina, mas esperamos que, para voc, isso seja apenas um comeo. Comeo de uma estimulante jornada para o conhecimento na programao de computadores. isso mesmo! Esperamos que voc no pare por aqui, pois esse um caminho muito promissor e, com o conhecimento que voc adquiriu at agora, pode fazer muito mais, com toda certeza! Desejamos uma boa sorte e muito sucesso! Leitura complementar Alm dos procedimentos e dos mecanismos de passagem de parmetros, voc aprendeu, nesta aula, a criar funes. No VisuAlg, porm, voc ver que existem funes predefinidas que podem facilitar o seu trabalho, ao criar algoritmos. O professor Bruno Tonet, da Universidade de Caxias do Sul, no Rio Grande do Sul, criou um documento de orientao sobre o VisuAlg e Introduo aos Algoritmos, que faz

parte das referncias de boa parte de nossas aulas. No documento, que voc pode encontrar neste link, voc encontrar, na pgina 30, uma tabela com as principais funes predefinidas do VisuAlg. Nesta tabela, voc encontrar duas colunas com o nome da funo e a descrio do que ela faz. Dessa forma, voc poder chamar essas funes nos seus algoritmos, sem precisar cri-las novamente. Vale a pena conferir! Resumo Nesta aula, voc viu que, quando um algoritmo complexo, podemos simplific-lo, decompondo-o em programas menores e mais simples, que so os subalgoritmos. Voc conheceu, em seguida, os elementos de um subalgoritmo e os itens que os compem, percebendo que existem dois tipos: as funes (que retornam um nico valor) e os procedimentos (que no retornam, mas modificam valores). Em seguida, voc estudou sobre escopo de variveis, definindo as variveis globais e locais, e discutimos como elas agem na comunicao entre o algoritmo principal e seus subalgoritmos. Depois, viu os conceitos de funes e procedimentos e conhecemos a sintaxe da criao e declarao de ambos e sua chamada dentro do algoritmo, definindo o seu posicionamento dentro do algoritmo. Ainda nesta aula, voc aprendeu os mecanismos de passagem de parmetros que podem ser utilizados pelas funes e procedimentos. Conheceu os parmetros reais e formais e viu como os parmetros podem ser passados por valor ou por referncia. Autoavaliao 1. Escreva um algoritmo e crie, nele, uma funo que receba um nmero e retorne a soma dos nmeros inteiros positivos e menores que o nmero digitado. Se o nmero digitado for negativo ou nulo, no chama a funo e mostra uma mensagem de erro. 2. Escreva um algoritmo que leia duas notas de um aluno e chame uma funo que calcula a mdia aritmtica desse aluno. 3. Escreva um algoritmo que receba um nmero inteiro e chame um procedimento que calcule o quadrado desse nmero. Crie esse procedimento. 4. Escreva um algoritmo que receba um nmero e mostre a raiz quadrada do mesmo. Use o que voc aprendeu sobre procedimentos para fazer o algoritmo. 5. Quais os tipos de parmetros que podemos utilizar nas funes e procedimentos? Que nome se d troca de informaes entre esses parmetros? 6. Quais os tipos de mecanismos de passagem de parmetros que utilizamos em subalgoritmos? Diferencie-os e crie subalgoritmos com exemplos de cada um deles. 7. Faa um algoritmo que leia trs nmeros e crie uma funo que calcule o quadrado desses nmeros e retorne o valor. Utilize passagem de parmetros por valor. 8. Faa o mesmo algoritmo do item anterior, agora passando os parmetros por referncia. 9. Faa um algoritmo que, atravs de um procedimento, mostre a potncia de um nmero qualquer, dados o nmero e o seu expoente. Utilize passagem de parmetros por referncia. 10. Faa uma funo que execute os mesmo comandos do item anterior. S que, dessa vez, utilize passagem de parmetros por valor.

11. Analise atentamente o algoritmo abaixo e, em seguida, responda s questes: algoritmo "exerccio" var num,num1,res : real funcao f1(a, b : real) : real var x : real inicio x <- b - 4*a retorne x fimfuncao inicio escreval ("Digite um nmero: ") leia (num) escreval ("Digite outro nmero: ") leia (num1) res <- f1 (num, num1) escreval (res) fimalgoritmo a. O parmetro x um parmetro do tipo______________________ b. As variveis a e b so variveis do tipo _________________ e parmetros do tipo_______________________ c. Os parmetros reais neste algoritmo so as variveis________ e ________, que so variveis do tipo__________________. d. A passagem de parmetro nesse algoritmo por______________________ e, nessa passagem, so copiados os valores de ____________ e _____________ para ______________ e _____________, respectivamente. e. Aps o clculo no subalgoritmo, o resultado passado de ______________ para _______________, atravs do comando ________________.

Das könnte Ihnen auch gefallen