You are on page 1of 72

CEET

Apostila organizada, a partir dos textos originais disponibilizados pelo prof. Cludio Morgado de Souza, no site Hhttp://www.apoioinformatica.inf.br/H Pelo professor

Disciplina de Lgica de programao

Editor e Interpretador de Pseudocdigos

Objetivos
Apresentao do VisuaAlg pelo prof. Cludio Morgado de Souza.
A idia de escrever este programa nasceu a partir de uma necessidade: uma ferramenta que permitisse aos alunos iniciantes em programao o exerccio dos seus conhecimentos num ambiente prximo da realidade. Em minha experincia como professor desta disciplina, tenho notado que a abstrao de "rodar o chins", ou seja, de executar um programa apenas no papel, um grande obstculo (quase intransponvel para alguns) no aprendizado das tcnicas de elaborao de algoritmos. Por outro lado, submeter um iniciante aos rigores de uma linguagem de programao como Pascal ou ao esoterismo do C tambm me parecia exagerado. O ideal seria uma linguagem mais simples, parecida com o "Portugol", de grande popularidade nos meios acadmicos e presente nos livros mais utilizados; com ela, os princpios bsicos da programao estruturada poderiam ser ensinados sem que a curva de aprendizagem fosse ngreme. Alm disso, esta ferramenta deveria tambm ser capaz de simular o que acontece na tela do computador com o uso dos famosos comandos "leia" e "escreva", bem como possibilitar a verificao dos valores das variveis, o acompanhamento passo a passo da execuo de um algoritmo (pelo seu grande valor didtico), e at mesmo suportar um modo simples de depurao. Aliado a tudo isto, deveria estar um editor de texto com recursos razoveis (tais como abrir e salvar arquivos) e que dispusesse de todos os principais recursos de um ambiente grfico. O VisuAlg para mim a concretizao desta idia. Espero que, colocando-o em domnio pblico (numa verso freeware), possa ajudar professores e alunos de programao, e tambm ser ajudado por eles atravs de sugestes e crticas que visem sempre a sua melhoria. A idia bsica manter o VisuAlg simples: deve ser como as rodinhas de apoio que uma criana usa ao aprender a andar de bicicleta, e que so retiradas quando deixam de ser necessrias. Isto no quer dizer que o VisuAlg no possa ou deva ser melhorado: conto com a colaborao de todos que vierem a utiliz-lo.

Instalao e Requerimentos de Hardware


O VisuAlg um programa simples, que no depende de DLLs, OCXs ou outros componentes. Sua instalao no copia arquivos para nenhuma outra pasta a no ser aquela em que for instalado, e exige cerca de 1 MB de espao em disco. Pode ser executado sob Windows 95 ou posterior, e tem melhor aparncia com resoluo de vdeo de 800x600 ou maior.

Conhea o VisuAlg
A Tela Principal do VisuAlg O menu do programa A linguagem de programao do VisuAlg Referncias da linguagem do VisuAlg Auto-digitao e sugesto de digitao

Criado por Reinaldo

2-72

Disciplina de Lgica de programao

A Tela Principal do VisuAlg


A tela do VisuAlg compe-se da barra de tarefas, do editor de textos (que toma toda a sua metade superior), do quadro de variveis (no lado esquerdo da metade inferior), do simulador de sada (no correspondente lado direito) e da barra de status. Quando o programa carregado, j apresenta no editor um "esqueleto" de pseudocdigo, com a inteno de poupar trabalho ao usurio e de mostrar o formato bsico que deve ser seguido. Explicaremos a seguir cada componente da interface do VisuAlg.

A Barra de Tarefas
Contm os comandos mais utilizados no VisuAlg (estes comandos tambm podem ser acessados pelo menu ou por atalhos no teclado).

Criado por Reinaldo

3-72

Disciplina de Lgica de programao

Abrir (Ctrl-A): Abre um arquivo anteriormente gravado, substituindo o texto presente no editor. Se este tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja sobreposto. Novo (Ctrl-N): Cria um novo "esqueleto" de pseudocdigo, substituindo o texto presente no editor. Se este tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja sobreposto. Salvar (Ctrl-S): Grava imediatamente o texto presente no editor. Na primeira vez que um novo texto gravado, o VisuAlg pede seu nome e localizao. Imprimir: Imprime imediatamente na impressora padro o texto presente no editor. Para configurar a impresso, use o comando Imprimir do menu Arquivo (acessvel tambm pelo atalho Ctrl-P). Cortar (Ctrl-X): Apaga texto selecionado, armazenando-o em uma rea de transferncia. Copiar (Ctrl-C): Copia o texto selecionado para a rea de transferncia. Colar (Ctrl-V): Copia texto da rea de transferncia para o local em que est o cursor. Gravar bloco de texto: Permite a gravao em arquivo de um texto selecionado no editor. A extenso sugerida para o nome do arquivo .inc. Inserir bloco de texto: Permite a insero do contedo de um arquivo. A extenso sugerida para o nome do arquivo .inc. Desfazer (Ctrl-Z): Desfaz ltimo comando efetuado. Refazer (Shift-Ctrl-Z): Refaz ltimo comando desfeito. Localizar (Ctrl-L): Localiza no texto presente no editor determinada palavra especificada. Substituir (Ctrl-U): Localiza no texto presente no editor determinada palavra especificada, substituindo-a por outra. Corrigir Indentao (Ctrl-G): Corrige automaticamente a indentao (ou tabulao) do pseudocdigo, tabulando cada comando interno com espaos esquerda. Numerar linhas: Ativa ou desativa a exibio dos nmeros das linhas na rea esquerda do editor. A linha e a coluna do editor em que o cursor est em um determinado momento tambm so mostradas na barra de status (parte inferior da tela). Por motivos tcnicos, esta opo automaticamente desativada durante a execuo do pseudocdigo, mas volta a ser ativada logo em seguida. Mostrar variveis modificadas: Ativa ou desativa a exibio da varivel que est sendo modificada. Como o nmero de variveis pode ser grande, muitas podem estar fora da janela de visualizao; quando esta caracterstica est ativada, o VisuAlg rola a grade de exibio de modo que cada varivel fique visvel no momento em est sendo modificada. Este recurso especialmente til quando se executa um pseudocdigo passo a passo. Por questes de desempenho, a configurao padro desta caracterstica desativada, quando o pseudocdigo est sendo executado automaticamente. No entanto, basta clicar este boto para execut-lo automaticamente com a exibio ativada. No final da execuo, a configurao volta a ser desativada. Restaurar tela inicial: Retorna a diviso da tela ao formato inicial, caso voc tenha mudado o tamanho da rea do editor de texto, quadro de variveis ou simulador de sada.

Criado por Reinaldo

4-72

Disciplina de Lgica de programao

Executar (F9): Inicia (ou continua) a execuo automtica do pseudocdigo. Executar com timer (Shift-F9):: Insere um atraso (que pode ser especificado no intervalo ao lado) antes da execuo de cada linha. Tambm reala em fundo azul o comando que est sendo executado, da mesma forma que na execuo passo a passo. Intervalo do timer: Atraso em cada linha, para quando se deseja executar o pseudocdigo com timer. Passo (F8): Inicia (ou continua) a execuo linha por linha do pseudocdigo, dando ao usurio a oportunidade de acompanhar o fluxo de execuo, os valores das variveis e a pilha de ativao dos subprogramas. Parar (Ctrl-F2): Termina imediatamente a execuo do pseudocdigo. Evidentemente, este boto fica desabilitado quando o pseudocdigo no est sendo executado. Liga/desliga breakpoint (F5): Insere/remove um ponto de parada na linha em que esteja o cursor. Estes pontos de parada so teis para a depurao e acompanhamento da execuo dos pseudocdigos, pois permitem a verificao dos valores das variveis e da pilha de ativao de subprogramas. Desmarcar todos os breakpoints (Ctrl-F5): Desativa todos os breakpoints que estejam ativados naquele momento. Executar em modo DOS: Com esta opo ativada, tanto a entrada como a sada-padro passa a ser uma janela que imita o DOS, simulando a execuo de um programa neste ambiente. Gerar valores aleatrios: Ativa a gerao de valores aleatrios que substituem a digitao de dados. A faixa padro de valores gerados de 0 a 100 inclusive, mas pode ser modificada (basta alterar intervalo ao lado). Para a gerao de dados do tipo caractere, no h uma faixa pr-estabelecida: os dados gerados sero sempre strings de 5 letras maisculas. Intervalo dos valores aleatrios: Faixa de valores que sero gerados automaticamente, quando esta opo estiver ativada. Perfil (F7): Aps a execuo de um pseudocdigo, exibe o nmero de vezes que cada umas das suas linhas foi executada. til para a anlise de eficincia (por exemplo, nos mtodos de ordenao). Mostrar pilha de ativao (Ctrl-F3): Exibe a pilha de subprogramas ativados num dado momento. Convm utilizar este comando em conjunto com breakpoints ou com a execuo passo a passo. Ajuda (F1): Possibilita acesso s pginas de ajuda e s informaes sobre o VisuAlg.

Quadro de Variveis
formado por uma grade na qual so mostrados o escopo de cada varivel (se for do programa principal, ser global; se for local, ser apresentado o nome do subprograma onde foi declarada), seus nomes (tambm com os ndices, nos casos em que sejam vetores), seu tipo ("I" para inteiro, "R" para real, "C" para caractere e "L" para lgico) e o seu valor corrente. A verso atual do VisuAlg permite a visualizao de at 500 variveis (contando individualmente cada elemento dos vetores).

A Barra de Status
Situada na parte inferior da tela, esta barra contm dois painis: o primeiro mostra a linha e a coluna onde o cursor est, e o segundo mostra a palavra Modificado no caso em que o

Criado por Reinaldo

5-72

Disciplina de Lgica de programao

pseudocdigo tenha sido alterado desde que foi carregado ou salvo pela ltima vez. Nesta barra, h ainda um terceiro painel disponvel, que ainda no tem um uso especfico na atual verso.

Criado por Reinaldo

6-72

Disciplina de Lgica de programao

Menu do VisuAlg
Este menu compe-se de 7 partes: Arquivo: Possui os comandos para se abrir, salvar e imprimir algoritmos: Novo: Cria um novo "esqueleto" de pseudocdigo, substituindo o texto existente no editor. Se este texto anterior tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja sobreposto. Abrir: Abre o texto de um pseudocdigo anteriormente gravado, substituindo o texto existente no editor. Se este tiver sido modificado, o VisuAlg pedir sua confirmao para salv-lo antes que seja sobreposto. Salvar: Salva imediatamente o texto presente no editor. Caso seja a primeira vez que um novo texto gravado, o VisuAlg pedir o nome do arquivo e sua localizao. Salvar como: Permite salvar o texto presente no editor exibindo antes uma janela na qual se pode escolher o nome do arquivo e sua localizao. Enviar por email: Permite o envio por email do texto presente no editor. Imprimir: Permite a impresso do algoritmo corrente, mostrando antes a janela de configurao de impresso (o correspondente boto da barra de tarefas imprime imediatamente o texto do pseudocdigo na impressora padro). Sair: Abandona o VisuAlg. Alm destes comandos, h ainda a lista dos 5 ltimos algoritmos utilizados, que podem ser abertos diretamente ao se escolher o seu nome. Editar: Alm dos conhecidos comandos de um editor de texto (copiar, cortar, colar, desfazer, refazer, selecionar tudo, localizar, localizar de novo, substituir), h tambm as seguintes opes: Corrigir indentao: Corrige automaticamente a indentao do pseudocdigo, tabulando cada comando interno com espaos esquerda. Gravar bloco de texto: Permite a gravao em arquivo de um texto selecionado no editor. A extenso sugerida para o nome do arquivo .inc. Inserir bloco de texto: Permite a insero do contedo de um arquivo. A extenso sugerida para o nome do arquivo .inc. Exibir: Possui os comandos para ativar/desativar as seguintes caractersticas: Nmero de linhas: Ativa/desativa a exibio da numerao das linhas na rea esquerda do editor. A numerao corrente da posio do cursor tambm mostrada na primeira parte da barra de status, situada na parte inferior da tela. Por motivos tcnicas, a numerao desativada durante a execuo do pseudocdigo, voltando situao anterior logo em seguida. Variveis modificadas: Ativa/desativa a exibio da varivel que est sendo modificada. Como o nmero de variveis pode ser grande, muitas podem estar fora da janela de visualizao; quando esta caracterstica est ativada, o VisuAlg rola a grade de exibio de modo que cada varivel fique visvel no momento em est sendo modificada. Este recurso especialmente til quando se executa um pseudocdigo passo a passo. Por questes de desempenho, a configurao padro desta caracterstica desativada, quando o pseudocdigo est sendo executado automaticamente. No entanto, basta clicar este boto para execut-lo automaticamente com a exibio ativada. No final da execuo, a configurao volta a ser desativada. Pseudocdigo: Contm os comandos relativos execuo do algoritmo:

Criado por Reinaldo

7-72

Disciplina de Lgica de programao

Executar: Inicia (ou continua) a execuo automtica do pseudocdigo. Passo a passo: Inicia (ou continua) a execuo linha por linha do pseudocdigo, dando ao usurio a oportunidade de acompanhar o fluxo de execuo, os valores das variveis e a pilha de ativao dos subprogramas. Executar com timer: Insere um atraso (que pode ser especificado) antes da execuo de cada linha. Tambm reala em fundo azul o comando que est sendo executado, da mesma forma que na execuo passo a passo. Parar: Termina imediatamente a execuo do pseudocdigo. Evidentemente, este item fica desabilitado quando o pseudocdigo no est sendo executado. Liga/desliga breakpoint: Insere/remove um ponto de parada na linha em que esteja o cursor. Estes pontos de parada so teis para a depurao e acompanhamento da execuo dos pseudocdigos, pois permitem a verificao dos valores das variveis e da pilha de ativao de subprogramas. Desmarcar todos os breakpoints: Desativa todos os breakpoints que estejam ativados naquele momento. Executar em modo DOS: Com esta opo ativada, tanto a entrada como a sada-padro passa a ser uma janela que imita o DOS, simulando a execuo de um programa neste ambiente. Gerar valores aleatrios: Ativa a gerao de valores aleatrios que substituem a digitao de dados. A faixa padro de valores gerados de 0 a 100 inclusive, mas pode ser modificada. Para a gerao de dados do tipo caractere, no h uma faixa pr-estabelecida: os dados gerados sero sempre strings de 5 letras maisculas. Perfil: Aps a execuo de um pseudocdigo, exibe o nmero de vezes que cada umas das suas linhas foi executada. til para a anlise de eficincia (por exemplo, nos mtodos de ordenao). Pilha de ativao: Exibe a pilha de subprogramas ativados num dado momento. Convm utilizar este comando em conjunto com breakpoints ou com a execuo passo a passo. Linguagens: Permite a traduo automtico do pseudocdigo presente no editor para outras linguagens de programao. Atualmente, apenas a traduo para Pascal est implementada, mas ainda em fase de testes. Ferramentas: Neste menu, possvel configurar algumas opes do VisuAlg: cores e tipos de letras na exibio do pseudocdigo, nmero de espaos para indentao automtica, etc. Ajuda: Entre outras coisas, possibilita acesso s pginas de ajuda e s informaes sobre o VisuAlg.

Criado por Reinaldo

8-72

Disciplina de Lgica de programao

A Linguagem de Programao do VisuAlg (1)


Introduo
A linguagem que o VisuAlg interpreta bem simples: uma verso portuguesa dos pseudocdigos largamente utilizados nos livros de introduo programao, conhecida como "Portugol". Tomei a liberdade de acrescentar-lhe alguns comandos novos, com o intuito de criar facilidades especficas para o ensino de tcnicas de elaborao de algoritmos. Inicialmente, pensava em criar uma sintaxe muito simples e "liberal", para que o usurio se preocupasse apenas com a lgica da resoluo dos problemas e no com as palavras-chave, pontos e vrgulas, etc. No entanto, cheguei depois concluso de que alguma formalidade seria no s necessria como til, para criar um sentido de disciplina na elaborao do "cdigo-fonte". A linguagem do VisuAlg permite apenas um comando por linha: desse modo, no h necessidade de tokens separadores de estruturas, como o ponto e vrgula em Pascal. Tambm no existe o conceito de blocos de comandos (que correspondem ao begin e end do Pascal e ao { e } do C), nem comandos de desvio incondicional como o goto. Na verso atual do VisuAlg, com exceo das rotinas de entrada e sada, no h nenhum subprograma embutido, tal como Inc(), Sqr(), Ord(), Chr(), Pos(), Copy() ou outro. Importante: para facilitar a digitao e evitar confuses, todas as palavras-chave do VisuAlg foram implementadas sem acentos, cedilha, etc. Portanto, o tipo de dados lgico definido como logico, o comando se..ento..seno definido como se..entao..senao, e assim por diante. O VisuAlg tambm no distingue maisculas e minsculas no reconhecimento de palavras-chave e nomes de variveis.

Formato Bsico do Pseudocdigo e Incluso de Comentrios


O formato bsico do nosso pseudocdigo o seguinte: algoritmo "semnome" // Funo : // Autor : // Data : // Seo de Declaraes inicio // Seo de Comandos fimalgoritmo A primeira linha composta pela palavra-chave algoritmo seguida do seu nome delimitado por aspas duplas. Este nome ser usado como ttulo nas janelas de leitura de dados (nas futuras verses do VisuAlg, talvez utilizemos este dado de outras formas). A seo que se segue a de declarao de variveis, que termina com a linha que contm a palavra-chave inicio. Deste ponto em diante est a seo de comandos, que continua at a linha em que se encontre a palavra-chave fimalgoritmo. Esta ltima linha marca o final do pseudocdigo: todo texto existente a partir dela ignorado pelo interpretador. O VisuAlg permite a incluso de comentrios: qualquer texto precedido de "//" ignorado, at se atingir o final da sua linha. Por este motivo, os comentrios no se estendem por mais de

Criado por Reinaldo

9-72

Disciplina de Lgica de programao

uma linha: quando se deseja escrever comentrios mais longos, que ocupem vrias linhas, cada uma delas dever comear por "//".

Tipos de Dados
O VisuAlg prev quatro tipos de dados: inteiro, real, cadeia de caracteres e lgico (ou booleano). As palavras-chave que os definem so as seguintes (observe que elas no tm acentuao): inteiro: define variveis numricas do tipo inteiro, ou seja, sem casas decimais. real: define variveis numricas do tipo real, ou seja, com casas decimais. caractere: define variveis do tipo string, ou seja, cadeia de caracteres. logico: define variveis do tipo booleano, ou seja, com valor VERDADEIRO ou FALSO.

O VisuAlg permite tambm a declarao de variveis estruturadas atravs da palavra-chave vetor, como ser explicado a seguir.

Nomes de Variveis e sua Declarao


Os nomes das variveis devem comear por uma letra e depois conter letras, nmeros ou underline, at um limite de 30 caracteres. As variveis podem ser simples ou estruturadas (na verso atual, os vetores podem ser de uma ou duas dimenses). No pode haver duas variveis com o mesmo nome, com a natural exceo dos elementos de um mesmo vetor. A seo de declarao de variveis comea com a palavra-chave var, e continua com as seguintes sintaxes: <lista-de-variveis> : <tipo-de-dado> <lista-de-variveis> : vetor "["<lista-de-intervalos>"]" de <tipo-dedado> Na <lista-de-variveis>, os nomes das variveis esto separados por vrgulas. Na <lista-de-intervalos>, os <intervalo> so separados por vrgulas, e tm a seguinte sintaxe: <intervalo>: <valor-inicial> .. <valor-final> Na verso atual do VisuAlg, tanto <valor-inicial> como <valor-final> devem ser inteiros. Alm disso, exige-se evidentemente que <valor-final> seja maior do que <valor-inicial>. Exemplos: var a: inteiro Valor1, Valor2: real vet: vetor [1..10] de real matriz: vetor [0..4,8..10] de inteiro nome_do_aluno: caractere sinalizador: logico Note que no h a necessidade de ponto e vrgula aps cada declarao: basta pular linha. A declarao de vetores anloga linguagem Pascal: a varivel vet acima tem 10 elementos, com os ndices de [1] a [10], enquanto matriz corresponde a 15 elementos com ndices [0,8],

Criado por Reinaldo

10-72

Disciplina de Lgica de programao

[0,9], [0,10], [1,8], [1,9], [1,10], ... at [4,10]. O nmero total de variveis suportado pelo VisuAlg 500 (cada elemento de um vetor contado individualmente).

Constantes e Comando de Atribuio


O VisuAlg tem trs tipos de constantes: Numricos: so valores numricos escritos na forma usual das linguagens de programao. Podem ser inteiros ou reais. Neste ltimo caso, o separador de decimais o ponto e no a vrgula, independente da configurao regional do computador onde o VisuAlg est sendo executado. O VisuAlg tambm no suporta separadores de milhares. Caracteres: qualquer cadeia de caracteres delimitada por aspas duplas ("). Lgicos: admite os valores VERDADEIRO ou FALSO.

A atribuio de valores a variveis feita com o operador <-. Do seu lado esquerdo fica a varivel qual est sendo atribudo o valor, e sua direita pode-se colocar qualquer expresso (constantes, variveis, expresses numricas), desde que seu resultado tenha tipo igual ao da varivel. Alguns exemplos de atribuies, usando as variveis declaradas acima: a <- 3 Valor1 <- 1.5 Valor2 <- Valor1 + a vet[1] <- vet[1] + (a * 3) matriz[3,9] <- a/4 - 5 nome_do_aluno <- "Jos da Silva" sinalizador <- FALSO

Criado por Reinaldo

11-72

Disciplina de Lgica de programao

Referncias da Linguagem de Programao do VisuAlg


Nesta pgina esto todas as palavras-chave da linguagem de programao do VisuAlg. Em cada uma delas, h um link para sua correspondente seo dentro das pginas de ajuda. aleatorio algoritmo arquivo asc ate carac caracpnum caractere caso compr copia cronometro debug e eco enquanto entao escolha escreva escreval faca falso fimalgoritmo fimenquanto fimescolha fimfuncao fimpara fimprocedimento fimrepita fimse funcao inicio int inteiro interrompa leia limpatela logico maiusc minusc mod nao numpcarac ou outrocaso para passo pausa pos real procedimento repita retorne se senao timer var vetor verdadeiro xou

Criado por Reinaldo

12-72

Disciplina de Lgica de programao

Auto-digitao e Sugesto de Digitao


Auto-digitao
O VisuAlg tem uma caracterstica para a criao de pseudocdigos que pode aumentar a rapidez da digitao e tambm diminuir a possibilidade de erros: a auto-digitao. Para utilizar esta caracterstica, basta escrever uma abreviatura da palavra-chave ou do comando a ser diigtado e teclar Ctrl-Espao. O VisuAlg completa ento o comando automaticamente, colocando o cursor no ponto adequado para se continuar a digitao (nos exemplos abaixo, este ponto indicado atravs de um *). Eis a lista de abreviaturas com os respectivos comandos: ! - (Ponto de exclamao) Cria um modelo de pseudocdigo. algoritmo "semnome" * inicio fimalgoritmo # - Cria um cabealho de programa. // // // // Algoritmo : * Funo : Autor : Data :

ale, aof, aon - Inserem os comandos aleatorio, aleatorio off ou aleatorio on, respectivamente. alg - Insere a linha algoritmo e pede a digitao do seu nome. algoritmo "*" arq - Insere o comando arquivo e pede a digitao do seu nome. arquivo "*" cof, con - Inserem os comandos cronometro off ou cronometro on, respectivamente. dcc - Insere uma declarao de variveis caracteres. var * : caractere

dcl - Insere uma declarao de variveis lgicas. var * : logico

dcr - Insere uma declarao de variveis reais. var * : real deb - Insere o comando debug.

Criado por Reinaldo

13-72

Disciplina de Lgica de programao

eof, eon - Inserem os comandos eco off ou eco on, respectivamente. esc - Insere o comando escreva. escl - Insere o comando escolha (sem a clusula outrocaso). escolha * caso fimescolha esco - Insere o comando escolha (com a clusula outrocaso). escolha * caso outrocaso fimescolha enq - Insere o comando enquanto. enquanto * faca fimenquanto fal - Insere a linha fimalgoritmo. ini - Insere a linha inicio. int - Insere o comando interrompa. lep - Insere o comando leia. leia (*) par - Insere o comando para. para * de 1 ate faca fimpara parp - Insere o comando para com passo. para * de ate passo faca fimpara rep - Insere o comando repita. repita * ate repf - Insere o comando repita com fimrepita. repita * fimrepita see - Insere o comando se sem a alternativa senao.

Criado por Reinaldo

14-72

Disciplina de Lgica de programao

se * entao fimse ses - Insere o comando se completo. se * entao senao fimse tim - Insere os comandos timer on e timer off. timer on * timer off tof, ton - Inserem os comandos timer on ou timer off, respectivamente.

Sugesto de Digitao
A sugesto de digitao disponibilizada atravs das teclas Ctrl-J. Basta comear a digitao de uma palavra e teclar Ctrl-J para que o VisuAlg mostre uma lista com sugestes de palavraschave que completam o que foi digitado. Para escolher, necessrio dar um duplo-clique sobre a opo desejada, ou ento selecion-la com as setas e teclar Enter. Se o usurio continua escrevendo depois que o VisuAlg apresentou a lista de sugestes, o programa continuar procurando palavras que ainda complementem o que foi digitado. Ao se teclar Esc ou clicar "fora da lista", ela desaparece.

Criado por Reinaldo

15-72

Disciplina de Lgica de programao

As Funes do Visualg Verso 2.0


Toda linguagem de programao j vem com um grupo de funes que facilitam a vida do programador. Estas funes realizam os clculos aritmticos, trigonomtricos e de manipulao e converso de dados mais comuns; assim, o programador no tem que reinventar a roda a cada programa que faz. A este grupo de funes d-se s vezes o nome de biblioteca. Como usar uma funo? Em termos simples, uma funo pode ser usada em qualquer lugar onde uma varivel tambm pode, a no ser, naturalmente, no "lado esquerdo da seta" em um comando de atribuio - uma funo produz (diz-se no linguajar dos programadores retorna) um valor, e no o recebe.

Funes numricas, algbricas e trigonomtricas.


Abs( expresso) - Retorna o valor absoluto de uma expresso do tipo inteiro ou real. Equivale a | expresso | na lgebra. ArcCos( expresso) - Retorna o ngulo (em radianos) cujo co-seno representado por expresso. ArcSen( expresso) - Retorna o ngulo (em radianos) cujo seno representado por expresso. ArcTan( expresso) - Retorna o ngulo (em radianos) cuja tangente representada por expresso. Cos( expresso) - Retorna o co-seno do ngulo (em radianos) representado por expresso. CoTan( expresso) - Retorna a co-tangente do ngulo (em radianos) representado por expresso. Exp( base, expoente) - Retorna o valor de base elevado a expoente, sendo ambos expresses do tipo real. GraupRad( expresso) - Retorna o valor em radianos correspondente ao valor em graus representado por expresso. Int( expresso) - Retorna a parte inteira do valor representado por expresso. Log( expresso) - Retorna o logaritmo na base 10 do valor representado por expresso. LogN( expresso) - Retorna o logaritmo neperiano (base e) do valor representado por expresso. Pi - Retorna o valor 3.141592. Quad( expresso) - Retorna quadrado do valor representado por expresso. RadpGrau( expresso) - Retorna o valor em graus correspondente ao valor em radianos representado por expresso. RaizQ( expresso) - Retorna a raiz quadrada do valor representado por expresso. Rand - Retorna um nmero real gerado aleatoriamente, maior ou igual a zero e menor que um. RandI( limite) - Retorna um nmero inteiro gerado aleatoriamente, maior ou igual a zero e menor que limite. Sen( expresso) - Retorna o seno do ngulo (em radianos) representado por expresso. Tan( expresso) - Retorna a tangente do ngulo (em radianos) representado por expresso. Os valores que esto entre parnteses, representados pelas palavras como expresso, base e expoente, so os parmetros, ou como dizem alguns autores, os argumentos que passamos para a funo para que realize seus clculos e retorne um outro, que usaremos no programa. Algumas funes, como Pi e Rand, no precisam de parmetros, mas a maioria tem um ou mais. O valor dos parmetros naturalmente altera o valor retornado pela funo. A seguir temos alguns exemplos que ilustram o uso destas funes. algoritmo "exemplo_funcoes"

Criado por Reinaldo

16-72

Disciplina de Lgica de programao

var a, b, c : real inicio a <- 2 b <- 9 escreval( b - a ) // ser escrito 7 na tela escreval( abs( a - b ) ) // tambm ser escrito 7 na tela c <- raizq( b ) // c recebe 3, a raiz quadrada de b, que 9 // A frmula da rea do crculo pi (3.1416) vezes raio ao quadrado... escreval("A rea do circulo com raio " , c , " " , pi * quad(c) ) // Um pouco de trigonometria... escreval("Um ngulo de 90 graus tem " , grauprad(90) , " radianos" ) escreval( exp(a,b) ) // escreve 2 elevado 9, que 512 // escreve 1, que a parte inteira de 1.8, resultado de 9/(3+2) escreval( int( b / ( a + c ) ) ) fimalgoritmo

Funes para manipulao de cadeias de caracteres (strings)


Asc (s : caracter) : Retorna um inteiro com o cdigo ASCII do primeiro caracter da expresso. Carac (c : inteiro) : Retorna o caracter cujo cdigo ASCII corresponde expresso. Caracpnum (c : caracter) : Retorna o inteiro ou real representado pela expresso. Corresponde a StrToInt() ou StrToFloat() do Delphi, Val() do Basic ou Clipper, etc. Compr (c : caracter) : Retorna um inteiro contendo o comprimento (quantidade de caracteres) da expresso. Copia (c : caracter ; p, n : inteiro) : Retorna um valor do tipo caracter contendo uma cpia parcial da expresso, a partir do caracter p, contendo n caracteres. Os caracteres so numerados da esquerda para a direita, comeando de 1. Corresponde a Copy() do Delphi, Mid$() do Basic ou Substr() do Clipper. Maiusc (c : caracter) : Retorna um valor caracter contendo a expresso em maisculas. Minusc (c : caracter) : Retorna um valor caracter contendo a expresso em minsculas. Numpcarac (n : inteiro ou real) : Retorna um valor caracter contendo a representao de n como uma cadeia de caracteres. Corresponde a IntToStr() ou FloatToStr() do Delphi, Str() do Basic ou Clipper. Pos (subc, c : caracter) : Retorna um inteiro que indica a posio em que a cadeia subc se encontra em c, ou zero se subc no estiver contida em c. Corresponde funcionalmente a Pos() do Delphi, Instr() do Basic ou At() do Clipper, embora a ordem dos parmetros possa ser diferente em algumas destas linguagens. A seguir temos alguns exemplos que ilustram o uso destas funes. algoritmo "exemplo_funcoes2" var a, b, c : caracter inicio

a <- "2" b <- "9" escreval( b + a ) // ser escrito "92" na tela escreval( caracpnum(b) + caracpnum(a) ) // ser escrito 11 na tela

Criado por Reinaldo

17-72

Disciplina de Lgica de programao

escreval( numpcarac(3+3) + a ) // ser escrito "62" na tela c <- "Brasil" escreval(maiusc(c)) // ser escrito "BRASIL" na tela escreval(compr(c)) // ser escrito 6 na tela b <- "O melhor do Brasil" escreval(pos(c,b)) // ser escrito 13 na tela escreval(asc(c)) // ser escrito 66 na tela - cdigo ASCII de "B" a <- carac(65) + carac(66) + carac(67) escreval(a) // ser escrito "ABC" na tela fimalgoritmo

Criado por Reinaldo

18-72

Disciplina de Lgica de programao

Curso de Algoritmos
Lio 1 - Introduo
Todo mundo que tem contato com computadores sabe que eles precisam ser programados para executar tarefas. Um programa um conjunto de milhares de instrues que indicam ao computador, passo a passo, o que ele tem que fazer. Estes programas so construdos com ferramentas chamadas "linguagens de programao". Estas linguagens contm os comandos que fazem o computador escrever algo na tela, realizar clculos aritmticos, receber uma entrada de dados via teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lgica e contribuir, cada um, para a tarefa em questo. A lgica da programao, ento, o ponto principal na criao de aplicaes para os computadores, e na verdade, ela independe da linguagem de programao utilizada. Provavelmente voc j viu uma receita de bolo. Nela esto colocados os ingredientes necessrios e nas quantidades corretas; tambm na receita encontramos o modo de preparao, dizendo o que deve ser misturado com o que, em que ordem, o tempo em que o bolo ficar no forno, etc. A este conjunto de instrues poderamos dar o nome de "algoritmo para a confeco de um bolo". A palavra algoritmo significa "conjunto de regras e instrues, que devem ser seguidas na ordem especificada, para resolver um problema especfico". Este termo est ligado s cincias da computao, mas na realidade pode ser aplicado a qualquer problema cuja soluo possa ser decomposta em um grupo de instrues. A nica diferena no caso que, em relao ao computador, os comandos tm que ser precisos, e cada um deve conter uma tarefa, apenas. Um computador no entenderia a instruo "bata a massa at atingir a consistncia desejada..." Provavelmente teramos que dizer "ligue a batedeira; bata a massa durante 5 minutos; delisgue a batedeira", ou coisa parecida. O termo "processamento de dados" muitas vezes utilizado em conjunto com computadores, pois isto o que eles fazem: processar dados. Da podemos extrair os dois componentes bsicos de um algoritmo (de agora em diante, esta palavra ser sempre utilizada no contexto da informtica): dados e cdigo. Dados so os valores (nmeros, nomes, etc.) de que precisamos para resolver o problema, e cdigo so os comandos que usaremos para manipular e "processar" os dados. A partir de agora estudaremos estes dois componentes Os dados existem nas mais variadas formas, tanto no mundo real quanto nos computadores, mas para este curso usaremos trs tipos, que sero suficientes embora no representem toda a gama possvel. Estes tipos so:

Dados Numricos - so quantidades como o peso de uma pessoa, o nmero de alunos em uma sala de aula, o preo de uma mercadoria, uma temperatura, etc. Nos algoritmos so representados como na escrita corrente, com a exceo de que se usa o ponto e no a vrgula para se separar a parte decimal, e no se separam as casas de milhares, milhes, etc. Exemplos: 1.23 -3 45657 0.66 -897.06 etc. Nos nossos exemplos daremos a todas as variveis que armazenam valores numricos o tipo numerico (assim mesmo, sem acento).

Criado por Reinaldo

19-72

Disciplina de Lgica de programao

Dados Literais - so letras, nomes, sinais de pontuao, etc. Outros nomes comuns para este tipo de dados so caracteres e strings (por causa do ingls). Nos algoritmos so representados por letras, nmeros, espaos e sinais entre aspas. Exemplos: "Rio de Janeiro" "Computador" "A" "?" "Fora!" "1234" Nos nossos exemplos daremos a todas as variveis que armazenam valores literais o tipo caracter.

Dados Lgicos - podem assumir apenas dois valores: Falso ou Verdadeiro. Tambm so chamados de dados booleanos. Vamos estudar com mais profundidade este tipo frente no curso. Ele importante porque d a "inteligncia" ao computador, mas neste momento podemos ficar s com esta pequena explicao.

Nos nossos exemplos daremos a todas as variveis que armazenam valores lgicos o tipo logico (assim mesmo, sem acento). E como os dados esto representados nos algoritmos? De duas maneiras: como constantes, ou seja, o dado escrito como ele , como nos exemplos acima, e armazenados em variveis. Variveis so locais de armazenamento temporrio para os dados. um conceito parecido com os famosos x, y e z que usamos na lgebra. Elas tm trs caractersticas: Nome: como nos referimos s variveis. Os nomes geralmente descrevem a funo das variveis no programa; por exemplo, se voc tem um programa para calcular a mdia aritmtica de dois valores, teria as variveis PrimeiroValor, SegundoValor, e Media; j em um outro, poderia ter a varivel Salario, para armazenar o salrio de um funcionrio, etc.

Regras para a formao de nomes de variveis


Toda linguagem de programao tem regras para a formao de nomes de variveis, e ns tambm teremos: neste curso, os nomes de variveis devero comear com uma letra, e depois podero ter qualquer combinao de letras, nmeros e sublinhado ("_"). No pode haver espaos no interior dos nomes, e no haver diferenciao entre maisculas e minsculas (ou seja, os nomes "Salario", "SALARIO", e "salario" se referem mesma varivel. Exemplos: Nomes Vlidos: Valor1, Valor2, Nota_do_Aluno, Salario Nomes Invlidos: 1Valor, 2Valor, _Salario, Nota.do.Aluno, MediaAritmetica

Tipo: indica o tipo de dado que aquela varivel armazena. Assim, uma varivel pode ser do tipo numrico, literal ou lgico. Quando se define uma varivel para uso no programa (os programadores dizem "declarar uma varivel"), temos que indicar ao computador no s o seu nome, mas tambm o tipo de dados que ela vai armazenar. Contedo: o valor armazenado na varivel em determinado momento. Podemos fazer duas coisas com o contedo de uma varivel: examin-lo, ou seja "ver o que ela contm, para usar ou no", e modific-lo. Quando criamos uma varivel em um programa, ela est "vazia", ou seja, seu contedo indeterminado. Para que ela tenha utilidade, devemos dar-lhe valores que tenham a ver com o problema em questo (os programadores usam a expresso "atribuir valores a ela").

Na prxima lio estudaremos os comandos bsicos para a construo de algoritmos.

Criado por Reinaldo

20-72

Disciplina de Lgica de programao

Lio 2 - Comandos Bsicos


O primeiro passo para a construo de um algoritmo a declarao das variveis que sero usadas nele. Quase todas as linguagens de programao exigem a declarao das variveis de um programa. Em algumas isto facultativo, mas sempre uma boa tcnica declarar variveis, por vrios motivos. Em um algoritmo isto no necessrio, pois na realidade o algoritmo no uma linguagem de programao. Entretanto, para melhorar o entendimento do algoritmo e tambm para treinar as tcnicas corretas, vamos assumir que a declarao de variveis "obrigatria".

Declarando Variveis
Para declarar uma varivel, colocamos, no incio do algoritmo, a palavra chave declare e seu nome, seguido por dois pontos e seu tipo: declare Salario : Numerico declare Nome : Literal declare AlunoAusente : Logico Se tivermos mais de uma varivel do mesmo tipo, podemos colocar todas, separadas por vrgulas, na mesma declarao: declare Peso, Altura, Idade : Numerico Como todas (ou quase todas) as linguagens de programao tm seus comandos e sintaxe baseados no Ingls, vamos eliminar nos comandos e variveis de nossos exemplos os acentos, til, cedilha, etc. Os dados do tipo literal ou mensagens para o usurio, no entanto, sero escritos corretamente.

Colocando Valores nas Variveis


Quando declaramos uma varivel, criamos uma rea de armazenamento para os dados, mas ela ainda est "sem valor". Para que ela seja til, deve ter valores colocados por ns ou pelo usurio, atravs de digitao. Quando o prprio programa coloca dados nas variveis faz o que se chama "atribuio de valores". Isto feito pelo operador "<-" (uma seta apontando para a esquerda). Por exemplo: Peso <- 78 Este comando atribui varivel Peso o valor 78. O valor que ela tinha anteriormente "apagado", e no pode ser recuperado mais. Nome <- "Joo da Silva" Este comando atribui variavel Nome o valor "Joo da Silva". importante lembrar que s se podem atribuir a uma varivel valores do mesmo tipo da varivel. Nos exemplos acima, a varivel Salrio do tipo numrico; ento, o seguinte comando seria invlido: Salrio <- "Insuficiente"

Criado por Reinaldo

21-72

Disciplina de Lgica de programao

Uma varivel, como o prprio nome est dizendo, pode ter seu contedo (seu valor) mudado quantas vezes for necessrio durante um programa.

Exibindo o Valor de uma Varivel


Um programa que faa o seu processamento e no tenha como mostrar seus resultados intil. Portanto, em algum ponto deve haver a exibio de valores, e todas as as linguagens de programao tm comandos para este fim. Nos algoritmos usamos o comando Escreva para isto. A sintaxe deste comando, isto , o modo correto de ele ser usado, a seguinte: Escreva Expresso1, Expresso2, etc... Expresso1, Expresso2, etc. so valores de qualquer tipo, separados por vrgula. Estes valores podem ser constantes ou variveis. Caso a expresso seja uma varivel, ser exibido o seu valor. Veja os exemplos a seguir: Comandos Resultado (o que aparecer na tela do computador) Escreva "Al, mundo!" Escreva 20 Al, mundo! 20

declare Nome : Caracter declare Idade : Numerico Nome <- "Jos" Idade <- 40 Escreva Nome Escreva "O meu nome ", Nome Escreva "Tenho ",Idade," anos" Jos O meu nome Jos Tenho 40 anos

Obtendo Dados para o Programa


Nem todos os dados que um programa manipula so gerados por ele. Um programa de caixa automtico, por exemplo, tem que obter do usurio o nmero da conta, a senha, a opo de servio desejada, etc. Assim, deve haver um meio para que sejam digitados (ou fornecidos de outra maneira) dados para uso do programa. Mais uma vez, todas as linguagens de programao permitem isto, e nos algoritmos usamos o comando Leia. A sintaxe deste comando : Leia <Nome_De_Varivel> Substitua <Nome_De_Varive> pel o nome da varivel onde sero armazenados os dados digitados. Veja este exemplo: Leia Nome Leia Peso Supondo que o usurio digitou "Paulo", teclou ENTER, digitou 80 e teclou ENTER novamente, o valor "Paulo" foi atribudo automaticamente varivel Nome, e o valor 80 varivel Peso.

Criado por Reinaldo

22-72

Disciplina de Lgica de programao

Lio 3 - Expresses Aritmticas


Grande parte do processamento em qualquer programa numrica. As linguagens de programao trabalham com a aritmtica mais ou menos do mesmo jeito que ns, na escola (veja bem, mais ou menos...) Os componentes bsicos das expresses aritmticas so: constantes, variveis e operadores. Os dois primeiros j conhecemos; operadores so os "sinais" que usamos nas contas:

Operador + * / ^ \

Operao Adio Subtrao Multiplicao Diviso Potenciao Diviso Inteira

Exemplo 3+2 10 - 5 3*7 25 / 2 5^2 25 \ 2

Resultado 5 5 21 12.5 25 12

Note que no se usa o "X" para indicar a multiplicao, nem a barra horizontal de frao para indicar a diviso... Voc deve ter notado que h dois operadores para diviso. O segundo ( \ ) o da diviso inteira, ou seja, a que no tem parte decimal, mesmo que o dividendo no seja mltiplo do divisor. Vrias liguagens de programao tm estes dois operadores. Por outro lado em algumas linguagens de programao, o operador de potenciao ** (dois asteriscos juntos). Nos nossos exemplos e exerccios sempre usaremos os operadores descritos acima. Da mesma maneira que estudamos na escola, algumas operaes tm prioridade sobre as outras. A potenciao tem a maior prioridade entre todos estes operadores. Multiplicao e diviso devem ser operadas antes da adio e subtrao. Assim, na expresso 3 + 2 * 5 primeiro operamos o 2*5, e somamos o resultado com 3 para obter 13. Para mudar a ordem das operaes, usamos parnteses: como na aritmtica da escola, o que estiver entre parnteses ser operado primeiro. Por exemplo: ( 3 + 2 ) * 5 primeiro operamos o 3 + 2, porque est entre parnteses, e depois o resultado desta operao ser multiplicado com 5 para obter 25. Quando na expresso s houver operaes com a mesma prioridade, a avaliao feita normalmente da esquerda para a direita. Nas linguagens de programao e nos algoritmos no se usam colchetes e chaves para sucessivos agrupamentos de operaes, e sim mais parnteses. Vamos ver um exemplo mais complexo. Qual o valor de: ( 3 + 5 ) * ( 4 * ( 10 -7 ) ) / 2 ( 3 + 5 ) * ( 4 * 3 ) / 2 8 * 12 / Opera-se o que estiver nos parnteses mais internos Operam-se os dois parnteses que restaram So h * e / - , ento opera-se da esquerda para a

Criado por Reinaldo

23-72

Disciplina de Lgica de programao

2 96 / 2 48 Um outro exemplo: 6 * ( 9 + 3 * 2 ) / ( 2 * - 11 6 * ( 9 + 6 ) / ( 8 - 11 6 * 15 / 3 90 / -3 -30 4 ) ) -

direita Resultado final

Operam-se as multiplicaes nos parnteses Operam-se os parnteses So h * e / - opera-se da esquerda para a direita Observe o sinal negativo antes do 3... Resultado final

At agora s vimos expresses com constantes. Na maioria das vezes, porm, haver expresses que combinaro variveis e constantes. Quando houver uma varivel em uma expresso, o clculo deve ser feito usando-se o valor da varivel naquele momento. Como exemplo, veja os algoritmos a seguir: Comandos Declare A : Numerico A <- 3 Escreva A * 5 2) Declare A, B : Numerico A <- 10 B <- A * 3 Escreva B <- 40 Escreva 3) B - A + 1 B - A + 1 O valor de B 30 ( 10*3) Ser exibido o valor 21 ( 30 - 10 + 1 ) Novo valor para B Agora ser exibido o valor 31 (40 - 10 + 1), pois o valor de B mudou O valor de A 6 Agora o valor de A passa a ser 7 (6, o valor anterior, mais 1) Ser exibido o valor 49 ( 7 * 7 ) Comentrios Declarao da varivel Atribuio de valor Ser exibido o valor 15, pois A=3, logo 3*5 = 15

1)

Declare A : Numerico A <- 3 * 2 A <- A + 1 Escreva A * A

4)

Declare X : Numrico Escreva "Digite um nmero :" Leia X Escreva X * 2

Obtenha um nmero qualquer do usurio Ser exibido o dobro do nmero digitado (qualquer que ele seja)

Pelos exemplos acima, voc deve ter notado que podemos usar uma expresso no comando Escreva. Ela calculada, e o seu resultado exibido. Com os conhecimentos adquiridos at agora, podemos comear a construir nossos prprios algoritmos.

Criado por Reinaldo

24-72

Disciplina de Lgica de programao

Lio 4 - Construindo os Primeiros Algoritmos


Basicamente a construo de um algoritmo se resume s seguintes etapas:

1. Entendimento do problema; 2. Definio dos dados que sero necessrios para resolv-lo (as entradas); a j 3. Obteno destes dados; alguns vm do "exterior" do programa, e outros so calculados
no prprio algoritmo; 4. Processamento em si; 5. Exibio dos resultados. deveremos ter idia dos tipos de dados que usaremos;

A primeira fase a mais difcil de se "pegar", pois depende um pouco da experincia do programador. Entretanto, mesmo nesta fase h tcnicas que podem ser aprendidas, e modelos que podem ser aplicados. Programao arte, cincia e tcnica, tudo ao mesmo tempo...

Problema 1 - Clculo de Mdia Aritmtica


Enunciado
Faa um programa que leia dois valores numricos, e calcule e exiba a sua mdia aritmtica.

Etapa 1
Simples, hein? Dos tempos de escola lembramos que a mdia aritmtica de dois valores calculada como (a+b)/2, e sendo assim a primeira etapa j est pronta.

Etapa 2
Os dados necessrios sero os dois valores, que colocaremos em duas variveis A e B, do tipo numrico, e uma terceira varivel, que chamaremos Mdia, que armazenar a mdia aritmtica calculada.

Etapa 3
A obteno dos dados neste programa simples e direta. Basta pedir ao usurio que digite os valores.

Etapa 4
O processamento aqui o clculo da mdia, usando o mtodo citado acima, na etapa 1. O resultado do clculo ser armazenado na varivel Mdia.

Etapa 5
Basta exibir o contedo da varivel Mdia.

Soluo
Declare A,B,Media : Numerico

Criado por Reinaldo

25-72

Disciplina de Lgica de programao

Escreva "Programa que calcula a mdia aritmtica de dois valores." Escreva "Digite um valor : " Leia A Escreva "Digite outro valor : " Leia B Media <- (A+B)/2 Escreva "A mdia dos dois valores : ", Media

Comentrios
Voc deve ter notado que colocamos na tela instrues para o usurio usando o comando Escreva. Esta uma boa tcnica de programao, mesmo hoje em dia, com o ambiente do Windows, etc. Da mesma forma, ao imprimir o resultado, no mostramos simplesmente a mdia, mas explicamos ao usurio o que aquele valor significa.

Exerccio 1
Reescreva o programa-soluo do Problema 1, mas sem usar a varivel Media. Lembre-se que o comando Escreva aceita imprimir o resultado de uma expresso... Resposta

Exerccio 2
Faa um programa que leia trs valores numricos, e calcule e exiba a sua mdia aritmtica. Complicou? Resposta

Criado por Reinaldo

26-72

Disciplina de Lgica de programao

Lio 5 - Mais Algoritmos Bsicos


Problema 2 - Clculo Simples de Velocidade Mdia
Enunciado
Faa um programa que leia o nome de um piloto, uma distncia percorrida em km e o tempo que o piloto levou para percorr-la (em horas). O programa deve calcular a velocidade mdia em km/h, e exibir a seguinte frase: A velocidade mdia de XX foi YY km/h. Onde XX o nome do piloto, e YY sua velocidade mdia.

Etapas 1 e 2
Das aulas de Fsica sabemos que a velocidade mdia dada pela distncia percorrida dividida pelo tempo gasto para percorr-la (v=s/t), certo? Ento temos dois valores numricos (distncia e tempo), e um literal (o nome do piloto).

Etapa 3
A obteno dos dados neste programa simples e direta. Basta pedir ao usurio que digite os valores.

Etapas 4 e 5
Usaremos as mesmas tcnicas utilizadas no Problema 1.

Soluo
Declare Nome : Caracter Declare Distancia,Tempo,VelMedia : Numerico Escreva "Programa que calcula a velocidade mdia de um piloto." Escreva "Digite o nome do piloto : " Leia Nome Escreva "Digite a distncia percorrida (em km) : " Leia Distncia Escreva "Digite o tempo gasto para percorr-la (em horas) : " Leia Tempo VelMdia <- Distncia/Tempo Escreva "A velocidade mdia de ",Nome," foi ", VelMdia

Problema 3 - Clculo de Velocidade Mdia (mais complexo)

Enunciado
Em um rally foram percorridos dois trechos. Faa um programa que leia o nome de um piloto, a quilometragem de cada um dos trechos em km, e depois o tempo total para percorr-los, em horas. Calcule e imprima a velocidade mdia geral do piloto.

Comentrios

Criado por Reinaldo

27-72

Disciplina de Lgica de programao

Como sabemos, a frnula para se calcular a velocidade mdia v=s/t, mas no nosso caso o "s", que significa espao percorrido, o somatrio dos dois trechos do rally. Assim, usando como base o programa anterior, podemos resolver facilmente este problema, e no analisaremos todas as 5 etapas. Declare Nome : Caracter Declare DistTrecho1, DistTrecho2, Tempo,VelMedia : Numerico Escreva "Programa que calcula a velocidade mdia de um piloto." Escreva "Digite o nome do piloto : " Leia Nome Escreva "Digite a distncia percorrida no trecho 1(em km) : " Leia DistTrecho1 Escreva "Digite a distncia percorrida no trecho 2(em km) : " Leia DistTrecho2 Escreva "Digite o tempo gasto para percorr-las (em horas) : " Leia Tempo VelMdia <- (DistTrecho1+DistTrecho2)/Tempo Escreva "A velocidade mdia de ",Nome," foi ", VelMedia

Exerccio 3
Realizarei uma viagem de vrios dias em meu automvel, e gostaria de saber a quilometragem mdia por litro de gasolina. Para isto, anotarei a quilometragem no velocmetro ao sair de viagem, e depois ao chegar; tambm vou somar toda a gasolina que comprar para o carro. Voc poderia fazer um programa que me desse, com estes dados, quantos km fiz, em mdia, por litro de gasolina? Resposta

Exerccio 4
Em uma pizzaria, cada tulipa de chopp custa R$0,80 e uma pizza mista grande custa R$10,00 mais R$1,50 por tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai pizzaria e pede uma determinada quantidade de "chopps" e uma pizza grande com uma determinada quantidade de coberturas. Faa um programa que calcule a conta e, sabendo quantas pessoas esto mesa, quanto que cada um deve pagar (no esquea os 10% do garon)... Resposta

Criado por Reinaldo

28-72

Disciplina de Lgica de programao

RESPOSTAS Lio 4 e 5
Lembre-se que a resposta a um exerccio apenas uma das solues possveis. Fique vontade para criar suas prprias solues e compar-las com as do curso.

Resposta do Exerccio 1
Enunciado: Reescreva o programa-soluo do Problema 1, mas sem usar a varivel Mdia. Declare A,B : Numerico Escreva Escreva Leia A Escreva Leia B Escreva "Programa que calcula a mdia aritmtica de dois valores." "Digite um valor : " "Digite outro valor : " "A mdia dos dois valores : ", (A+B)/2

Resposta do Exerccio 2
Enunciado: Faa um programa que leia trs valores numricos, e calcule e exiba a sua mdia aritmtica. Declare A,B,C, Media : Numerico Escreva "Programa que calcula a mdia aritmtica de trs valores." Escreva "Digite o primeiro valor : " Leia A Escreva "Digite o segundo valor : " Leia B Escreva "Digite o terceiro valor : " Leia B Media <- (A+B+C)/3 Escreva "A mdia dos trs valores : ", Media

Resposta do Exerccio 3
Enunciado: Realizarei uma viagem de vrios dias em meu automvel, e gostaria de saber a quilometragem mdia por litro de gasolina. Para isto, anotarei a quilometragem no velocmetro ao sair de viagem, e depois ao chegar; tambm vou somar toda a gasolina que comprar para o carro. Voc poderia fazer um programa que me desse, com estes dados, quantos km fiz, em mdia, por litro de gasolina? Comentrios: Nosso amigo quer saber a quilometragem mdia por litro de gasolina, ou seja, km/litro. Esta simples frmula j d a "dica" para a soluo do problema, pois basta saber quantos quilmetros ele rodou e quantos litros de gasolina colocou no carro, e dividir o primeiro pelo segundo (km/litro, isto que estamos procurando). O problema que ele no vai dizer quantos quilmetros rodou, mas a quilometragem de seu velocmetro ao sair de viagem e ao chegar. Para sabermos o quanto ele viajou basta... Isso mesmo, subtrair o primeiro do segundo. Veja a nossa soluo a seguir: Declare KmInicial, KmFinal, Gasolina, Rendimento : Numerico

Criado por Reinaldo

29-72

Disciplina de Lgica de programao

Escreva "Programa que calcula Km rodados por litro de gasolina." Escreva "Digite a quilometragem inicial : " Leia KmInicial Escreva "Digite a quilometragem final : " Leia KmFinal Escreva "Digite quantos litros de gasolina comprou : " Leia Gasolina Rendimento <- (KmFinal-KmInicial)/Gasolina Escreva "O rendimento mdio foi de ", Rendimento, " km por litro." Foi mais ou menos assim que voc fez?

Resposta do Exerccio 4
Enunciado: Em uma pizzaria, cada tulipa de chopp custa R$0,80 e uma pizza mista grande custa R$10,00 mais R$1,50 por tipo de cobertura pedida (queijo, presunto, banana, etc.). Uma turma vai pizzaria e pede uma determinada quantidade de "chopps" e uma pizza grande com uma determinada quantidade de coberturas. Faca um programa que calcula e conta e, sabendo quantas pessoas esto mesa, quanto que cada um deve pagar (no esquea os 10% do garon)... Comentrios: Primeiramente vamos resolver este problema da maneira mais simples e explicada, criando variveis para armazenar todos os valores intermedirios de nossos clculos.

1. O preo da pizza calculado somando-se o preo-base (R$10,00) ao produto do

nmero de coberturas vezes R$1,50, que o preo de cada uma. Note a maneira pela qual estes valores so representados no programa. O preo-base 10, e o preo de cada cobertura 1.5.

2. Depois vem o clculo o preo do chopp, obtido pela multiplicao de R$0,80 (0.8 no
programa) pelo nmero de tulipas consumidas. 3. Somando estes dois, temos o primeiro subtotal. Com base nele calculamos a gorjeta de 10%. Dez por cento, como se sabe, o mesmo que 10/100, ou seja, 1 dcimo . Dividindo o subtotal por 10 obtemos a gorjeta, e da o total, que o subtotal mais a gorjeta. 4. O ltimo passo calcular o quanto cada pessoa deve pagar, que a diviso do total pelo nmero de pessoas.

Declare NumCoberturas,NumTulipas,NumPessoas : Numerico Declare PrecoPizza,PrecoChopp,SubTotal,Gorjeta,Total,ValorPorPessoa : Numerico Escreva "Programa que calcula a conta em uma pizzaria." Escreva "Quantidade de coberturas na pizza : " Leia NumCoberturas PrecoPizza <- 10 + (NumCoberturas * 1.5) Escreva "Quantidade de tulipas de chopp : " Leia NumTulipas PrecoChopp <- 0.8 * NumTulipas SubTotal <- PrecoPizza + PrecoChopp Gorjeta <- SubTotal / 10 Total <- SubTotal + Gorjeta

Criado por Reinaldo

30-72

Disciplina de Lgica de programao

Escreva "Nmero de pessoas na mesa : " Leia NumPessoas ValorPorPessoa <- Total / NumPessoas Escreva "O valor por pessoa ", ValorPorPessoa Refinamento 1 : Podemos tambm resolver este problema de modo mais direto, evitando alguns passos intermedirios, como por exemplo, o clculo da gorjeta, e do subtotal. A matemtica bsica nos ensina que x + (x/10) o mesmo que x * 1.1; podemos aproveitar esta propriedade para melhorar nosso algoritmo. Declare NumCoberturas,NumTulipas,NumPessoas : Numerico Declare PrecoPizza,PrecoChopp,Total,ValorPorPessoa : Numerico Escreva "Programa que calcula a conta em uma pizzaria." Escreva "Quantidade de coberturas na pizza : " Leia NumCoberturas PrecoPizza <- 10 + (NumCoberturas * 1.5) Escreva "Quantidade de tulipas de chopp : " Leia NumTulipas PrecoChopp <- 0.8 * NumTulipas Total <- (PrecoPizza + PrecoChopp) * 1.1 Escreva "Nmero de pessoas na mesa : " Leia NumPessoas ValorPorPessoa <- Total / NumPessoas Escreva "O valor por pessoa ", ValorPorPessoa Refinamento 2 : Vamos eliminar agora a varivel Total. Preste ateno no uso dos parnteses para que o clculo se faa de modo correto. Declare NumCoberturas,NumTulipas,NumPessoas : Numerico Declare PrecoPizza,PrecoChopp,ValorPorPessoa : Numerico Escreva "Programa que calcula a conta em uma pizzaria." Escreva "Quantidade de coberturas na pizza : " Leia NumCoberturas PrecoPizza <- 10 + (NumCoberturas * 1.5) Escreva "Quantidade de tulipas de chopp : " Leia NumTulipas PrecoChopp <- 0.8 * NumTulipas Escreva "Nmero de pessoas na mesa : " Leia NumPessoas ValorPorPessoa <- ((PrecoPizza + PrecoChopp) * 1.1) / NumPessoas Escreva "O valor por pessoa ", ValorPorPessoa

Criado por Reinaldo

31-72

Disciplina de Lgica de programao

Mais refinamentos: Na verdade, as nicas variveis essenciais para o algoritmo so NumCoberturas, NumTulipas, NumPessoas. Poderamos ir eliminando todas as outras at que o valor por pessoa fosse calculado de uma s vez, mas isto tornaria o programa de difcil entendimento. Muitas vezes interessante o uso de variveis intermedirias para que se produza um algoritmo de compreenso mais fcil. Caso voc esteja interessado nesta verso super-refinada, a vai (se no entend-la agora, no se preocupe; mais tarde voc poder voltar aqui e analis-la com mais calma...): Declare NumCoberturas,NumTulipas,NumPessoas : Numerico Escreva "Programa que calcula a conta em uma pizzaria." Escreva "Quantidade de coberturas na pizza : " Leia NumCoberturas Escreva "Quantidade de tulipas de chopp : " Leia NumTulipas Escreva "Nmero de pessoas na mesa : " Leia NumPessoas Escreva "O valor por pessoa " Escreva (((10+(NumCoberturas*1.5))+(0.8*NumTulipas))*1.1)/NumPessoas A ltima expresso ficou bem complicada, no ?

Criado por Reinaldo

32-72

Disciplina de Lgica de programao

Lio 6 - Comentrios e Mais Algoritmos


Toda linguagem de programao permite que se insiram no programa textos que no tm nada a ver com a execuo do algoritmo, mas servem para explicar a quem examin-lo como ele funciona, identificar o autor e data do programa, etc. A estes textos chamamos comentrios. Geralmente os comentrios so precedidos de um ou dois caracteres ou uma palavra-chave da linguagem, e vo at o fim da linha em que esto, ou podem se estender por vrias linhas at que outro grupo de caracteres aparea indicando o fim do comentrio. Por curiosidade, mostramos abaixo alguns exemplos (os caracteres que delimitam os comentrios estaro em negrito): Em BASIC (QuickBasic, Visual Basic ou outras verses ) ' Isto um comentrio - at o fim desta linha REM Isto tambm ... Em Pascal (Turbo Pascal, Delphi ou outros ) { Isto um comentrio pode se estender por vrias linhas } (* Outro tipo de comentrio em vrias linhas Em DBase ou Clipper * Comentrio && Comentrio // Comentrio /* Comentrio de vrias linhas */ Em linguagem C // Comentrio at o fim da linha /* Comentrio pode se estender por vrias linhas */

*)

Mesmo no sendo uma linguagem de programao, os algoritmos podem e devem ser entremeados por comentrios, de preferncia seguindo uma das regras acima, para que os comentrios fiquem destacados e no se confundam com o "cdigo" do algoritmo em si. Os programadores usam comentrios por vrias razes, como j vimos acima:

explicando o porque de terem sido feitas, quem as pediu, etc. 3. Explicar (at para si mesmos, daqui a algum tempo...) o funcionamento de certos trechos do algoritmo, que podem ser muito complexos. Isto muito til se mais de um programador cuidar do programa; assim, todos ficam sabendo o que fazem as vrias partes, no importa quem as tenha criado. 4. Identificar trechos crticos no algoritmo, alertando para os efeitos que alteraes naquele ponto podem ter em outras partes do programa. 5. Justificar porque certas tcnicas foram utilizadas em certos pontos do programa, etc.

1. Identificar o autor e a data da criao de um programa. 2. Documentar as alteraes feitas no programa com o decorrer do tempo, as vezes at

Para nossos propsitos, usaremos o mesmo esquema de comentrios da linguagem C. A seguir temos a repetio da resposta do Problema 2, comentada (os trechos entre /* e */, e entre //

Criado por Reinaldo

33-72

Disciplina de Lgica de programao

e o fim da linha no fazem parte do programa em si, so apenas comentrios de documentao e explicao) : /* Curso de Algoritmos - Problema 2 Programa que calcula a velocidade mdia de um piloto Autor: C. M. Souza Data : 02/09/1999 */ // Declarao das Variveis Declare Nome : Caracter Declare Distancia,Tempo,VelMedia : Numerico // Apresentao do programa Escreva "Programa que calcula a velocidade mdia de um piloto." // Obteno dos Escreva "Digite Leia Nome Escreva "Digite Leia Distancia Escreva "Digite Leia Tempo dados o nome do piloto : " a distncia percorrida (em km) : " o tempo gasto para percorr-la (em horas) : "

// Clculo da velocidade mdia VelMedia <- Distncia/Tempo // Exibio dos resultados Escreva "A velocidade mdia de ",Nome," foi ", VelMedia

Exerccio 5 Uma financeira calcula o dbito atual de uma conta atrasada da seguinte maneira: 10% de multa sobre o valor original pelo atraso, independente do tempo, e 0.33% de juros ao dia, por cada dia que ultrapassar 30 dias de atraso. Ela precisa de um programa que calcule o valor atual a pagar de acordo com estas regras, e o divida pelo nmero de parcelas que combinou com o devedor para o pagamento. Faa um programa que receba os seguintes dados: valor original do dbito, dias de atraso alm de 30 dias (caso o atraso seja menor que 30 dias, o usurio digitar 0), e o nmero de parcelas para o pagamento.

O programa dever calcular e exibir o valor de cada parcela. Resposta

Criado por Reinaldo

34-72

Disciplina de Lgica de programao

Lio 7 - Colocando mais Inteligncia nos Programas


At agora temos criado programas que so apenas uma sequncia de comandos sem possibilidade de escolha, ou seja no existe neles nada do tipo "se tal coisa acontecer, faa isto, seno faa aquilo". Esta possibilidade de escolha que d "inteligncia" aos programas de computador; afinal, ns humanos estamos fazendo escolhas e pesando possibilidades o tempo todo... Todas as linguagens de programao tm comandos que permitem estes desvios da sequncia normal dos comandos de um programa baseados na avaliao de uma condio. Por isso, estes comandos so s vezes chamados de comandos condicionais, ou ainda desvios condicionais. Para entendermos como estes comandos funcionam, primeiro temos que saber o que avaliar uma condio. Na Lio 1, quando falamos de tipos de dados, nos referimos ao tipo Lgico, que poderia ter apenas um de dois valores: Falso ou Verdadeiro. Estes valores se originam da anlise de uma expresso para se chegar seguinte concluso: ela verdadeira ou falsa. Vejamos os exemplos abaixo: Expresso A Terra gira em torno do Sol Zebras podem falar 2 + 2 igual a 5 14 maior que 3 Todo dia 1o. de Janeiro Segunda-Feira "Raposa" vem antes de "Borboleta" na ordem alfabtica A palavra "Jos" comea com a letra "J" Resultado Verdadeiro Falso Falso Verdadeiro Falso Falso Verdadeiro

Devemos ter em mente, ento, que uma expresso lgica pode conter qualquer tipo de dados, pois o que nos interessa saber que, ao analis-la, concluiremos se falsa ou verdadeira. Num primeiro momento, estaremos interessados em expresses lgicas contendo apenas valores numricos, mas depois vamos analisar condies com outros tipos de dados. Para trabalharmos com nmeros, precisamos conhecer os operadores que nos permitem compar-los. Ns os chamamos operadores relacionais (o nome no importante, e sim saber como us-los). Eles so:

Nome Igual a Diferente de

Smbolo Exemplos = 3=3 2+2 = 5 <> 140 <> 410 (10+5) <> (30/2) < > 13 < 7 77 < 20 * 2 0 > -1 345 > ((3 +1)*100)

Resultado Verdadeiro Falso Verdadeiro Falso (as duas expresses tm resultado 15) Falso Falso Verdadeiro Falso (345 no maior que 400...)

Menor que Maior que

Criado por Reinaldo

35-72

Disciplina de Lgica de programao

Menor ou igual a <=

Maior ou igual a

>=

20 19 21 21 19 20

<=20 <= 20 <= 20 >= 20 >= 20 >= 20

Verdadeiro Verdadeiro Falso Verdadeiro Falso Verdadeiro

Pelos exemplos acima, voc deve ter notado que quando qualquer um dos "lados" da expresso (tecnicamente dizemos "quando qualquer um dos operandos") for uma expresso aritmtica e no um simples nmero, ns a calculamos primeiro para depois fazer as comparaes. Como a prioridade dos operadores relacionais maior que a dos operadores aritmticos, temos que colocar a expresso numrica entre parnteses. Nestas expresses podem aparecer variveis, tambm, como nestes exemplos (para verificar, substitua os valores de x e y nas expresses, calcule-as e compare-as) :

Comandos e Expresses x <- 33 y <- 4 x = 33 (x+1) <> 90 (y * 2) = 10 (x/3) >= 11 (y + x) > 40 (y * 8) <= x

Resultado

Verdadeiro Verdadeiro Falso Verdadeiro Falso Verdadeiro

Exerccio 6
Dadas as variveis A, B, C e D, numricas, e os seguintes comandos de atribuio: A B C D <<<<10 15 8 20

Avalie as expresses abaixo e descubra se so falsas ou verdadeiras.

1. 2. 3. 4. 5.

A = (D / 2) (B * 2) = (A + D) B >= A (A * ( C + 2 )) <> (D * 5) (A + B + C + D) >= 43

Resposta Exerccio 7 Calcule o valor de K nas expresses lgicas abaixo de modo que sempre retornem Verdadeiro como resultado (leve em considerao o valor das outras variveis, I e J, atribudos da seguinte maneira):

Criado por Reinaldo

36-72

Disciplina de Lgica de programao

I <- 18 J <- I / 2

1. 2. 3. 4. 5.

(9 + K) = 17 K = (I + J) (3 * K) = I (K + J) = (I + 10) (K / 2) = (I * 3) / ( J - 3 )

Resposta Exerccio 8 Calcule o maior valor possvel para K nas expresses lgicas abaixo de modo que sempre retornem Verdadeiro como resultado (leve em considerao o valor das outras variveis, I e J, atribudos da seguinte maneira): I <- 25 J <- I - 13

1. 2. 3. 4.

K <= (I - J) K < (I - J) (K * I) <= ((J + 8) * 4) (K * I) <= I

Resposta

Criado por Reinaldo

37-72

Disciplina de Lgica de programao

Lio 8 - Ensinando o Computador a Decidir


Depois de aprendermos o que so expresses lgicas, iremos ver agora como coloc-las em nossos programas. Todas as linguagens de programao tm um ou mais comandos que permitem a um programa tomar caminhos diferentes baseado na avaliao de uma expresso lgica. Esses comandos recebem o nome genrico de comandos de deciso, e ns podemos us-los tambm em nossos algoritmos. Na vida real tomamos decises a todo momento baseados em uma situao existente. Em programao chamamos esta situao de condio, e as alternativas possveis de aes. Por exemplo: "Se tiver R$10,00 sobrando irei ao cinema hoje noite, mas se no tiver ficarei vendo TV em casa". Qual a condio nesta frase? Fcil, "tiver R$10,00 sobrando". Ela uma expresso lgica, pois a pergunta "Tenho R$10,00 sobrando?" pode (tem que) ser respondida com "Sim" ou "No". Lembre-se, ento: em um algoritmo, toda condio tem que ser uma expresso lgica. Quais so as aes possveis? Fcil, mais uma vez; "irei ao cinema" e "ficarei vendo TV em casa". A primeira s ser realizada se a resposta pergunta "Tenho dinheiro suficiente?" for "Sim", enquanto que a segunda ser realizada caso a resposta seja "No". Ento, em um algoritmo, as aes so um ou mais comandos que sero realizados, alguns caso a avaliao da condio resulte em Verdadeiro, outros caso ela resulta em Falso. Vamos colocar agora a frase do pargrafo anterior em outra forma, mais parecida com o que um programa de computador: Se "tiver R$10,00 sobrando" ento "irei ao cinema" seno "ficarei vendo TV em casa". Veja que grifamos trs palavras: Se ento seno. Elas so muito importantes na estrutura dos comandos de deciso. Como prximo passo, vamos generalizar a estrutura que criamos acima: Se <condio> ento <aes (uma ou mais) a serem realizadas se a condio for verdadeira> seno <aes (uma ou mais) a serem realizadas se a condio for falsa> Para terminar a nossa comparao, devemos lembrar que os comandos do algoritmo so sempre imperativos, e que o computador s lida com quantidades definidas (ou seja, ele no sabe o que "ter R$10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter a seguinte forma: Se Dinheiro >= 10 ento Ir ao Cinema seno Ver TV em Casa Entendeu a transformao? "Dinheiro" faz o papel de uma varivel que contm o que eu tenho sobrando no momento, e se valor maior ou igual a 10, ento "tenho R$10,00 sobrando". Por falar nisso, fique sabendo que a tcnica (ou arte) de se transformar perguntas do dia-a-dia em quantidades definidas que possam ser colocadas em um programa a chave de se fazer algoritmos. No se preocupe, no entanto: algo fcil e que pode ser aprendido e desenvolvido. Bom, agora j podemos fazer um programa que ajude nosso amigo...

Criado por Reinaldo

38-72

Disciplina de Lgica de programao

Problema 4 - O que fao esta noite? Enunciado Faa um programa que pea ao usurio a quantia em dinheiro que tem sobrando e sugira, caso ele tenha 10 ou mais reais, que v ao cinema, e se no tiver, fique em casa vendo TV. Declare Dinheiro: Numerico Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." senao Escreva "Fique em casa vendo TV." fim se Escreva "Obrigado e volte sempre." Em relao ao que vimos at agora, apenas uma novidade: a expresso fim se ao final do comando de deciso. Ela delimita o comando, isto , mostra onde as aes da parte seno do comando terminam. Imagine o comando sem ela; ficaria assim: // Exemplo de um trecho de programa INCORRETO Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." senao Escreva "Fique em casa vendo TV." Escreva "Obrigado e volte sempre." Neste caso, o computador no saberia se o comando Escreva "Obrigado e volte sempre." faria ou no parte do comando de deciso (a indentao, ou seja, o fato de algumas linhas estarem mais distantes da margem esquerda que as outras, no quer dizer nada para o computador; fazemos isto apenas - e esta uma dica importante para voc - para que o algoritmo fique mais fcil de ler). Assim o fim se fundamental, e todas as linguagens de programao tm algo que cumpra esta funo. Quer saber como este algoritmo funciona? Clique aqui.

Criado por Reinaldo

39-72

Disciplina de Lgica de programao

RESPOSTA LIO DA LIO 5 A LIO 8


Lembre-se que a resposta a um exerccio apenas uma das solues possveis. Fique vontade para criar suas prprias solues e compar-las com as do curso. Resposta do Exerccio 5 Enunciado:Uma financeira calcula o dbito atual de uma conta atrasada da seguinte maneira: 10% de multa sobre o valor original pelo atraso, independente do tempo, e 0.33% de juros ao dia, por cada dia que ultrapassar 30 dias de atraso. Ela precisa de um programa que calcule o valor atual a pagar de acordo com estas regras, e o divida pelo nmero de parcelas que combinou com o devedor para o pagamento. Faa um programa que receba os seguintes dados: valor original do dbito, dias de atraso alm de 30 dias (caso o atraso seja menor que 30 dias, o usurio digitar 0), e o nmero de parcelas para o pagamento.

O programa dever calcular e exibir o valor de cada parcela.

/* Curso de Algoritmos - Exerccio 5 Programa para calcular prestaes de dbito em atraso Autor: C. M. Souza Data : 11/09/1999 */ // Declarao das Variveis Declare ValorOriginal,DiasdeAtraso,ValorAtual,NumParcelas : Numerico // Apresentacao do Programa Escreva "Programa para calcular prestaes de dbito em atraso" // Leitura dos dados necessarios para o calculo Escreva "Qual o valor original do dbito ? " Leia ValorOriginal // Instruindo o usuario para o fornecimento correto dos dados... Escreva "Quantos dias de atraso alm de 30 dias ?" Escreva "(Digite 0 se o atraso for menor ou igual a 30 dias.)" Leia DiasDeAtraso // Calculo do valor atual // Observacoes: // 1 - Multiplicar um valor por 1.1 o mesmo que acrescentar 10%; o calculo da multa. // 2 - 0.33% 0.0033 (lembre-se que POR CENTO siginifica DIVIDIR POR CEM) ValorAtual <- (ValorOriginal * 1.1) + (ValorOriginal * 0.0033 * DiasDeAtraso) Escreva "O valor atual do dbito ", ValorAtual Escreva "Em quantas parcelas ser feito o pagamento?" Leia NumParcelas

Criado por Reinaldo

40-72

Disciplina de Lgica de programao

Escreva "O dbito ser pago em ", NumParcelas, " parcela(s) de R$", ValorAtual/NumParcelas Resposta do Exerccio 6 Enunciado:Dadas as variveis A, B, C e D, numricas, e os seguintes comandos de atribuio: A B C D <<<<10 15 8 20

Avalie as expresses abaixo e descubra se so falsas ou verdadeiras.

1. 2. 3. 4. 5.

A = D / 2 B B A A * 2 = A + D >= A * ( C + 2 ) <> D * 5 + B + C + D >= 43

Resposta: 1) Verdadeiro; 2) Verdadeiro; 3) Verdadeiro; 4) Falso; 5) Verdadeiro

Resposta do Exerccio 7
Enunciado:Calcule o valor de K nas expresses lgicas abaixo de modo que sempre retornem Verdadeiro como resultado (leve em considerao o valor das outras variveis, I e J, atribudos da seguinte maneira): I <- 18 J <- I / 2

1. 2. 3. 4. 5.

9 + K = 17 K = I + J 3 * K = I K + J = I + 10 (K / 2) = (I * 3) / ( J - 3 )

Resposta:

1. 8
9 + K = 17 9 + 8 = 17

2. 27
K = I + J 27 = 18 + 9

3. 6
3 * K = I 3 * 6 = 18

4. 1
K + J = I + 10 1 + 18 = 9 + 10

Criado por Reinaldo

41-72

Disciplina de Lgica de programao

5. 18
(K / (K / (K / (K / (18/ 2) 2) 2) 2) 2) = = = = = ( I * 3) / ( J - 3 ) (18 * 3) / ( 9 - 3 ) 54 / 6 9 9

Resposta do Exerccio 8 Enunciado:Calcule o maior valor possvel para K nas expresses lgicas abaixo de modo que sempre retornem Verdadeiro como resultado (leve em considerao o valor das outras variveis, I e J, atribudos da seguinte maneira): I <- 25 J <- I - 13

1. 12
K <= I - J 12 <= 25 - 13 (12 o maior valor possvel, porque se K valer 13 por exemplo, teremos 13 <= 12, o que retornaria Falso)

2. 11
K < I - J 11 < 25 - 13 (11 o maior valor possvel, porque se K valer 12 por exemplo, teremos 12 < 12, o que retornaria Falso)

3. 3
K * I <= (J + 8) * 4 K * 25 <= (12 + 8) * 4 K * 25 <= 20 * 4 K * 25 <= 80 3 * 25 <= 80 (se K valer 3, K * 35 75, que ainda menor ou igual a que 80; se K valer 4, K * 25 100, o que nos d 100 <= 80 como Falso)

4. 1
K * I <= I 1 * I <= I Como Funciona o Algoritmo do Problema 4 Vamos seguir o algoritmo do Problema 4 passo a passo, como se fssemos o computador. A linha em vermelho indica o comando que est sendo realizado a cada momento. A declarao da varivel Dinheiro no realmente um comando a ser executado, portanto j comearemos como o primeiro comando Escreva. Ele vai colocar o ttulo do programa na tela do computador. Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." Senao Escreva "Fique em casa vendo TV." Fim se Escreva "Obrigado e volte sempre."

Criado por Reinaldo

42-72

Disciplina de Lgica de programao

Logo depois o segundo comando Escreva vai colocar a outra mensagem na tela (para orientar o usurio). Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." Senao Escreva "Fique em casa vendo TV." Fim se Escreva "Obrigado e volte sempre." Depois, o comando Leia vai esperar que o usurio fornea um valor e tecle Enter. Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." Senao Escreva "Fique em casa vendo TV." Fim se Escreva "Obrigado e volte sempre." Vamor supor que o valor digitado seja 20. No comando Se...Ento o programa vai testar se o valor armazenado na varivel Dinheiro maior ou igual a 10. Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." Senao Escreva "Fique em casa vendo TV." Fim se Escreva "Obrigado e volte sempre." Sabemos que o valor da varivel Dinheiro 20. Logo a avaliao da condio Dinheiro >= 10 tem o mesmo resultado que 20 >= 10, isto , Verdadeiro. Assim, a parte antes do Seno ser executada. A mensagem "V ao cinema hoje noite" ser colocada na tela do computador Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." Senao Escreva "Fique em casa vendo TV." Fim se Escreva "Obrigado e volte sempre." Agora o program pula a parte do Seno, pois ela s seria executada caso o resultado de Dinheiro >= 10 fosse Falso, e se dirige ao primeiro comando aps o Fim se (da a importncia desta parte do comando) e imprime a mensagem "Obrigado e volte sempre". Logo depois, o programa termina.

Criado por Reinaldo

43-72

Disciplina de Lgica de programao

Escreva "Servio Informatizado de Sugestes" Escreva "Quanto dinheiro voc tem sobrando?" Leia Dinheiro Se Dinheiro >= 10 entao Escreva "V ao cinema hoje noite." Senao Escreva "Fique em casa vendo TV." Fim se Escreva "Obrigado e volte sempre." Refaa agora o processo, usando os valores 10 e depois 8 para a varivel Dinheiro. Veja como o programa se comporta, e que comandos foram executados.

Criado por Reinaldo

44-72

Disciplina de Lgica de programao

Lio 9 - Mais Algoritmos com Decises


Problema 5 - Posso Entrar na Boate? Enunciado Faa um programa que pea o ano de nascimento de uma pessoa, e diga, se for maior de idade, que pode entrar na boate, e se no for, no pode. Declare AnoNascimento, Idade: Numerico Escreva "Checagem de Idade da Boate Noites Cariocas" Escreva "Em que ano voc nasceu?" Leia AnoNascimento Idade <- 2002 - AnoNascimento Se Idade >= 18 entao Escreva "Voc pode entrar na boate." senao Escreva "Infelizmente, voc no pode entrar." fim se Neste algoritmo criamos uma varivel "rascunho", que chamamos Idade, para conter o resultado do clculo da idade da pessoa (que o ano atual menos o ano em que a pessoa nasceu - Nota: este algoritmo foi escrito em Janeiro de 2002). Como voc j deve ter notado, ela dispensvel. Veja o algoritmo abaixo. Declare AnoNascimento: Numerico Escreva "Checagem de Idade da Boate Noites Cariocas" Escreva "Em que ano voc nasceu?" Leia AnoNascimento Se (2002 - AnoNascimento) >= 18 entao Escreva "Voc pode entrar na boate." senao Escreva "Infelizmente, voc no pode entrar." fim se A partir de 2003, este algoritmo no vai mais funcionar corretamente. Portanto, vamos melhor-lo de modo a que possa funcionar em qualquer ano. Declare AnoAtual, AnoNascimento: Numerico Escreva "Checagem de Idade da Boate Noites Cariocas" Escreva "Qual o ano atual?" Leia AnoAtual Escreva "Em que ano voc nasceu?" Leia AnoNascimento Se (AnoAtual - AnoNascimento) >= 18 entao Escreva "Voc pode entrar na boate." senao Escreva "Infelizmente, voc no pode entrar." fim se Exerccio 9

Criado por Reinaldo

45-72

Disciplina de Lgica de programao

Faa um programa que receba o valor do salrio de uma pessoa e o valor de um financiamento pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salrio da pessoa, o programa dever escrevar "Financiamento Concedido"; seno, escrever "Financiamento Negado". Independente de conceder ou no o financiamento, o programa escrever depois a frase "Obrigado por nos consultar." Resposta Exerccio 10 Em uma escola, o aluno faz duas provas por perodo, com as notas variando de 0 a 10. Caso a mdia aritmtica das duas notas seja 5 ou mais, ele passa de ano; seno, ele reprovado. Faa um programa que receba as duas notas de um aluno e escreva se ele passou ou no de ano. Resposta Exerccio 11 Dois carros percorreram diferentes distncias em diferentes tempos. Sabendo que a velocidade mdia a razo entre a distncia percorrida e o tempo levado para percorr-la, faa um programa que leias as distncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior velocidade mdia. Resposta Exerccio 12 Faa um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova, e seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual). Resposta

Criado por Reinaldo

46-72

Disciplina de Lgica de programao

RESPOSTAS AT O EXERCCIO 12
Lembre-se que a resposta a um exerccio apenas uma das solues possveis. Fique vontade para criar suas prprias solues e compar-las com as do curso. Resposta do Exerccio 9 Enunciado: Faa um programa que receba o valor do salrio de uma pessoa e o valor de um financiamento pretendido. Caso o financiamento seja menor ou igual a 5 vezes o salrio da pessoa, o programa dever escrevar "Financiamento Concedido"; seno, escrever "Financiamento Negado". Independente de conceder ou no o financiamento, o programa escrever depois a frase "Obrigado por nos consultar." // Declarao das Variveis Declare Salario,Financiamento : Numerico // Apresentacao do Programa Escreva "Programa para Aprovao de Financiamento" // Leitura dos dados necessarios para o calculo Escreva "Qual o valor do seu salrio?" Leia Salario Escreva "Qual o valor do financiamento pretendido?" Leia Financiamento // Realizando os clculos Se Financiamento <= (Salario * 5) entao Escreva "Financiamento Concedido" Senao Escreva "Financiamento Negado" Fimse // Concedendo ou no o financiamento, agradece... Escreva "Obrigado por nos consultar" Resposta do Exerccio 10 Enunciado:Em uma escola, o aluno faz duas provas por perodo, com as notas variando de 0 a 10. Caso a mdia aritmtica das duas notas seja 5 ou mais, ele passa de ano; seno, ele reprovado. Faa um programa que receba as duas notas de um aluno e escreva se ele passou ou no de ano. Declare Nota1, Nota2, Media : Numerico Escreva "Digite a Nota 1:" Leia Nota1 Escreva "Digite a Nota 2:" Leia Nota2 Media <- (Nota1 + Nota2) /2 Se Media >=5 entao Escreva "Aluno aprovado" Senao Escreva "Aluno reprovado" Fimse Refinamento: Podemos fazer os mesmos clculos sem utilizar a varivel Media. Preste ateno no uso dos parnteses.

Criado por Reinaldo

47-72

Disciplina de Lgica de programao

Declare Nota1, Nota2 : Numerico Escreva "Digite a Nota 1:" Leia Nota1 Escreva "Digite a Nota 2:" Leia Nota2 Se ((Nota1 + Nota2) /2) >=5 entao Escreva "Aluno aprovado" Senao Escreva "Aluno reprovado" Fimse Resposta do Exerccio 11 Enunciado:Dois carros percorreram diferentes distncias em diferentes tempos. Sabendo que a velocidade mdia a razo entre a distncia percorrida e o tempo levado para percorr-la, faa um programa que leias as distncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior velocidade mdia. // Distncia percorrida, tempo gasto e velocidade media de cada carro Declare Distancia1, Distancia2, Tempo1, Tempo2, VelMed1, VelMed2 : Numerico // Leitura dos dados Escreva "Distncia percorrida pelo Carro 1:" Leia Distancia1 Escreva "Tempo gasto pelo Carro 1:" Leia Tempo1 Escreva "Distncia percorrida pelo Carro 2:" Leia Distancia2 Escreva "Tempo gasto pelo Carro 2:" Leia Tempo2 // Clculo e exibio das velocidades mdias VelMed1 <- Distancia1 / Tempo1 VelMed2 <- Distancia2 / Tempo2 Escreva "Velocidade mdia do Carro 1:", VelMed1 Escreva "Velocidade mdia do Carro 2:", VelMed2 // Resultado Se VelMed1 > VelMed2 entao Escreva "O Carro 1 teve maior velocidade mdia." Senao Escreva "O Carro 2 teve maior velocidade mdia." Fimse Voc deve estar se perguntando: "E se os dois carros tiverem a mesma velocidade mdia?" Neste caso, nosso programa vai dar uma informao errada, dizendo que o Carro 2 foi mais rpido! Voc consegue ver por qu? Resposta do Exerccio 12 Enunciado: Faa um programa que leia o nome e idade de duas pessoas e imprima o nome da pessoa mais nova, e seu ano de nascimento (o programa deve funcionar corretamente para qualquer que seja o ano atual).

Criado por Reinaldo

48-72

Disciplina de Lgica de programao

(Bom, todas as linguagens de programao tm comandos que permitem ao programa obter a data do relgio do computador, mas como nosso algoritmo no realmente feito em uma destas linguagens, teremos que pedir ao usurio para fornecer o ano em que estamos e fazer nossos clculos a partir deste valor.) // Ano Atual, Idades e Nomes das duas pessoas Declare AnoAtual, Idade1, Idade2 : Numerico Declare Nome1, Nome2 : Numerico // Leitura dos dados Escreva "Qual o ano atual ?" Leia AnoAtual Escreva "Nome da 1a Pessoa :" Leia Nome1 Escreva "Idade da 1a Pessoa :" Leia Idade1 Escreva "Nome da 2a Pessoa :" Leia Nome2 Escreva "Idade da 2a Pessoa :" Leia Idade2 // Resultado Se Idade1 < Idade2 entao Escreva "A pessoa mais jovem : ", Nome1, "Ela nasceu em ", AnoAtual - Idade1 Senao Escreva "A pessoa mais jovem : ", Nome2, "Ela nasceu em ", AnoAtual - Idade2 Fimse Assim como no problema anterior, voc deve estar se perguntando: "E se as duas pessoas tiverem a mesma idade?" Neste caso, nosso programa vai dar uma informao errada, do mesmo modo que no problema acima...

Criado por Reinaldo

49-72

Disciplina de Lgica de programao

Lio 10 - Refinando Nossas Decises


Nem sempre as respostas aos testes feitos nos programas so simples como "Sim" "No", "Falso" ou "Verdadeiro". Quando perguntamos por exemplo se A igual a B, claro que a resposta "Sim"ou "No"; s vezes, no entanto, estamos interessados em saber a relao entre duas quantidades, isto , queremos saber por exemplo se A maior que B, se B maior que A, ou se os dois valores so iguais. Neste caso, um teste apenas no suficiente, pois temos trs possibilidades e ele vai eliminar apenas uma delas, sendo necessrio um outro teste para verificar entre as duas restantes qual a possibilidade correta. Vejamos estes exemplos: Problema 6 - Qual o Carro mais Rpido? Enunciado Dois carros percorreram diferentes distncias em diferentes tempos. Sabendo que a velocidade mdia a razo entre a distncia percorrida e o tempo levado para percorr-la, faa um programa que leias as distncias que cada carro percorreu e o tempo que cada um levou, e indique o carro que teve maior velocidade mdia. Este problema a verso final (e correta) do exerccio 11. // Distncia percorrida, tempo gasto e velocidade media de cada carro Declare Distancia1, Distancia2, Tempo1, Tempo2, VelMed1, VelMed2 : Numerico // Leitura dos dados Escreva "Distncia percorrida pelo Carro 1:" Leia Distancia1 Escreva "Tempo gasto pelo Carro 1:" Leia Tempo1 Escreva "Distncia percorrida pelo Carro 2:" Leia Distancia2 Escreva "Tempo gasto pelo Carro 2:" Leia Tempo2 // Clculo e exibio das velocidades mdias VelMed1 <- Distancia1 / Tempo1 VelMed2 <- Distancia2 / Tempo2 Escreva "Velocidade mdia do Carro 1:", VelMed1 Escreva "Velocidade mdia do Carro 2:", VelMed2 // Resultado (Note que h dois testes) Se VelMed1 > VelMed2 entao Escreva "O Carro 1 teve maior velocidade mdia." Senao // Eliminamos a primeira possibilidade (de o carro 1 ser mais rpido) // Agora vamos ver entre as duas restantes Se VelMed2 > VelMed1 entao Escreva "O Carro 2 teve maior velocidade mdia." Senao // Eliminamos tambm a segunda possibilidade (de o carro 2 ser mais rpido) // Ento, so resta a terceira (os dois carros tiveram a mesma velocidade mdia) Escreva "Os dois carros tiveram a mesma velocidade mdia."

Criado por Reinaldo

50-72

Disciplina de Lgica de programao

Fimse Fimse Neste problema estamos vendo tambm como se coloca uma estrutura de teste (se...ento...senao...fimse) dentro de outra. A indentao no obrigatria, mas note como ela facilita o entendimento do algoritmo. Problema 7 - Passei de Ano? Enunciado Em uma escola, um aluno passa direto se obtiver mdia final maior que ou igual a 7. Se a mdia for inferior a 4, ele est reprovado direto, sem direito a prova final. Em outro caso, ele vai final, e a nota que ele precisa para passar o que falta mdia final para completar 10. Faa um programa que receba as duas notas parciais, calcule a mdia final e informe ao aluno sua situao, inclusive informando a ele quanto precisa tirar na final, se este for o seu caso. Este problema uma variao (um pouco mais complicada...) do exerccio 10. Declare Nota1, Nota2, Media : Numerico // Leitura dos dados Escreva "Digite a Nota 1:" Leia Nota1 Escreva "Digite a Nota 2:" Leia Nota2 // Clculo Media <- (Nota1 + Nota2) /2 // Exibio dos resultados Escreva "Sua mdia final :", Media // Vamos eliminar a primeira possibilidade Se Media >= 7 entao Escreva "Aluno aprovado" Senao // Ele pode ter sido reprovado ou ficado em final // Primeiro, eliminamos a possibilidade de ele ter sido reprovado direto Se Media < 4 entao Escreva "Aluno reprovado" Senao // Ento, ficou em final... Escreva "Voc est na final, e precisa de ", 10 - Media Fimse Fimse

Criado por Reinaldo

51-72

Disciplina de Lgica de programao

Lio 11 - Trabalhando com Tabelas (1)


Uma das aplicaes mais comuns em programao a pesquisa de um valor em uma tabela, quer para saber se um dado est ou no em uma lista de valores, ou para saber em que faixa de uma tabela um valor se enquadra, entre outras. Neste exemplo vamos analisar este segundo caso. Problema 8 - Qual o Conceito do Aluno? Enunciado Em uma escola o conceito de um aluno dado baseado em sua mdia final, de acordo com a seguinte tabela: Nota de... 0 4 7 9 At... 3.9 6.9 8.9 10 Conceito Fraco Regular Bom Excelente

Faa um programa que receba a mdia final de um aluno e imprima o conceito correspondente. De acordo com o que vimos na resoluo dos problemas da lio anterior, um teste apenas ou dois no vo resolver nosso problema. De uma forma geral, se temos n possibilidades, temos que ter n-1 testes para cobrir todas as respostas possveis. Vamos fazer uma primeira abordagem para resolver este problema, e depois vamos refin-la. Declare Media : Numerico Escreva "Qual a mdia do aluno?" Leia Media Se (Media >=0) e (Media<=3.9) entao Escreva "Conceito : Fraco" Senao Se (Media >=4) e (Media<=6.9) entao Escreva "Conceito : Regular" Senao Se (Media >=7) e (Media<=8.9) entao Escreva "Conceito : Bom" Senao Se (Media >=9) e (Media<=10) entao Escreva "Conceito : Excelente" Fimse Fimse Fimse Fimse Refinamento 1: Analisando a tabela, vemos que as notas variam de 0 a 10, o que significa que os testes (Media>=0) e (Media<=10) so desnecessrios pois sempre vo resultar em "Verdadeiro", e no colaboram para a resoluo do problema. Por outro lado, se uma nota no passa pelo teste (Media>=0) e (Media <=3.9), claro que ela maior ou igual a 4, e o teste (Media >=4) tambm desnecessrio. Do mesmo modo, ento, os testes (Media>=7) e (Media>=9) tambm so dispensveis nos pontos onde se encontram no algoritmo. Sendo assim, chegamos a uma segunda verso do programa, bem mais simplificada.

Criado por Reinaldo

52-72

Disciplina de Lgica de programao

Declare Media : Numerico Escreva "Qual a mdia do aluno?" Leia Media Se Media <= 3.9 entao Escreva "Conceito : Fraco" Senao Se Media <= 6.9 entao Escreva "Conceito : Regular" Senao Se Media <= 8.9 entao Escreva "Conceito : Bom" Senao Escreva "Conceito : Excelente" Fimse Fimse Fimse Note que temos 4 possibilidades de conceitos e realizamos 3 testes, eliminando uma possibilidade de cada vez. Note tambm que no usamos os valores da coluna "Nota de.." para nenhum teste, apenas os valores da coluna "At...". Mesmo assim, o ltimo valor (10) no foi usado, pois se enquadrou no ltimo senao, isto , se um aluno no Fraco, Regular ou Bom s pode ser Excelente. Refinamento 2: Note que a expresso "Conceito :" aparece quatro vezes no algoritmo. Podemos melhor-lo se guardarmos o conceito do aluno em uma varivel para us-la uma vez s no fim do programa. Declare Media : Numerico Declare Conceito : Caracter Escreva "Qual a mdia do aluno?" Leia Media Se Media <= 3.9 entao Conceito <- "Fraco" Senao Se Media <= 6.9 entao Conceito <- "Regular" Senao Se Media <= 8.9 entao Conceito <- "Bom" Senao Conceito <- "Excelente" Fimse Fimse Fimse Escreva "Conceito do Aluno : ", Conceito Em um programa simples como este a utilidade desta tcnica no fica evidente, mas no prximo problema voc poder ver como ela melhora o entendimento e otimiza o algoritmo.

Criado por Reinaldo

53-72

Disciplina de Lgica de programao

Lio 12 - Trabalhando com Tabelas (2)


Problema 9 - Quanto Ganhar o Vendedor? Enunciado Em uma empresa o salrio final de um vendedor composto de um valor fixo mais um percentual sobre suas vendas, de acordo com a seguinte tabela: Vendas de... R$ 0,00

At... R$ 1.500,00

Percentual 2% 3% 5% 6%

R$ 1.500,01 R$ 3.000,00 R$ 3.000,01 R$ 6.000,00 R$ 6.000,01 Sem Limite

Alm disso, ele descontado em R$ 5,00 por cada dia de falta ao servio. Faa um programa que receba o valor da parte fixa do salrio, o total de vendas no perodo e o nmero de faltas de um vendedor e imprima o o seu salrio final. Declare Fixo, Vendas, Faltas, Percentual, Comissao, Desconto, Salario : Numerico Escreva "Qual o valor fixo?" Leia Fixo Escreva "Qual o total de vendas?" Leia Vendas Escreva "Qual o nmero de faltas?" Leia Faltas // Primeiro, vamos achar o percentual para o clculo das comisses Se Vendas <= 1500 entao Percentual <- 2 Senao Se Vendas <= 3000 entao Percentual <- 3 Senao Se Vendas <= 6000 entao Percentual <- 5 Senao Percentual <- 6 Fimse Fimse Fimse // Agora calculamos o valor da comisso varivel (observe a diviso por 100 - o percentual...) Comissao <- Vendas * Percentual / 100 // Ento calculamos o desconto por faltas (R$5,00 por falta) Desconto <- Faltas * 5 // E descobrimos o salario final... Salario <- Fixo + Comissao - Desconto Escreva "O salrio final do vendedor :", Salario

Criado por Reinaldo

54-72

Disciplina de Lgica de programao

Refinamento: Vamos eliminar todas as variveis "desnecessrias" e escrever um algoritmo mais "enxuto". Note que sempre que fazemos isso, o programa se torna mais difcil de analisar, principalmente para um principiante; portanto se no conseguir entender o que foi feito no se preocupe, pois a soluo acima est 100% correta. Quando estiver mais confiante volte aqui e analise esta outra soluo. Por outro lado, lembre-se que na maioria dos casos a legibilidade uma caracterstica to importante dos programas quanto a eficincia ou economia de memria. Declare Fixo, Vendas, Faltas, Percentual : Numerico Escreva "Qual o valor fixo?" Leia Fixo Escreva "Qual o total de vendas?" Leia Vendas Escreva "Qual o nmero de faltas?" Leia Faltas // Primeiro, vamos achar o percentual para o clculo das comisses Se Vendas <= 1500 entao Percentual <- 2 Senao Se Vendas <= 3000 entao Percentual <- 3 Senao Se Vendas <= 6000 entao Percentual <- 5 Senao Percentual <- 6 Fimse Fimse Fimse Escreva "O salrio final do vendedor :", Fixo + (Vendas * Percentual / 100) - (Faltas * 5) Exerccio 13 Faa um programa que calcule o imposto de renda a ser descontado de um funcionrio de acordo com a seguinte tabela: Salrio de... R$ 0,00 At... R$ 1.000,00 Percentual 0% 15% 25% 27%

R$ 1.000,01 R$ 2.500,00 R$ 2.500,01 R$ 5.000,00 R$ 5.000,01 Sem Limite

O programa dever receber o valor do salrio, calcular o imposto devido e imprimir: 1 - o salrio bruto; 2 - o percentual encontrado para o desconto; 3 - o valor do imposto e ser descontado e 4 - o salrio lquido (o valor efetivamente recebido). Resposta Exerccio 14

Criado por Reinaldo

55-72

Disciplina de Lgica de programao

Usando a mesma tabela do exerccio anterior, faa um programa que calcule o salrio de um funcionrio baseado em seu salrio-dia. O programa receber o salrio-dia e o nmero de dias que o funcionrio faltou ao servio (considera-se o ms completo como tendo 30 dias). O funcionrio tem direito ainda a um adicional de 6% de produtividade sobre o salrio bruto (depois do desconto das faltas). O valor do imposto ser calculado sobre o salrio + adicional. Resposta

Criado por Reinaldo

56-72

Disciplina de Lgica de programao

A Linguagem de Programao do VisuAlg (5)


O VisuAlg implementa algumas extenses s linguagens "tradicionais" de programao, com o intuito principal de ajudar o seu uso como ferramenta de ensino. Elas so mostradas a seguir. Comando Aleatrio Muitas vezes a digitao de dados para o teste de um programa torna-se uma tarefa entediante. Com o uso do comando aleatorio do VisuAlg, sempre que um comando leia for encontrado, a digitao de valores numricos e/ou caracteres substituda por uma gerao aleatria. Este comando no afeta a leitura de variveis lgicas: com certeza, uma coisa pouco usual em programao... Este comando tem as seguintes sintaxes: Ativa a gerao de valores aleatrios que substituem a digitao de dados. A palavra-chave on opcional. A faixa padro de valores gerados de 0 a 100 inclusive. Para a gerao de dados do tipo caractere, no h uma faixa prestabelecida: os dados gerados sero sempre strings de 5 letras maisculas. Ativa a gerao de dados numricos aleatrios estabelecendo uma faixa de valores mnimos e mximos. Se apenas < valor1> for fornecido, a faixa ser de 0 a <valor1> inclusive; caso contrrio, a faixa ser de <valor1> a <valor2> inclusive. Se <valor2> for menor que <valor1>, o VisuAlg os trocar para que a faixa fique correta. Importante: <valor1> e <valor2> devem ser constantes numricas, e no expresses. Desativa a gerao de valores aleatrios. A palavra-chave off obrigatria.

aleatorio [on]

aleatorio <valor1 > [, <valor2 > ]

aleatorio off

Comando Arquivo Muitas vezes necessrio repetir os testes de um programa com uma srie igual de dados. Para casos como este, o VisuAlg permite o armazenamento de dados em um arquivo-texto, obtendo deles os dados ao executar os comandos leia. Esta caracterstica funciona da seguinte maneira: 1) Se no existir o arquivo com nome especificado, o VisuAlg far uma leitura de dados atravs da digitao, armazenando os dados lidos neste arquivo, na ordem em que forem fornecidos. 2) Se o arquivo existir, o VisuAlg obter os dados deste arquivo at chegar ao seu fim. Da em diante, far as leituras de dados atravs da digitao. 3) Somente um comando arquivo pode ser empregado em cada pseudocdigo, e ele dever estar na seo de declaraes (dependendo do "sucesso" desta caracterstica, em futuras verses ela poder ser melhorada...).

Criado por Reinaldo

57-72

Disciplina de Lgica de programao

4) Caso no seja fornecido um caminho, o VisuAlg ir procurar este arquivo na pasta de trabalho corrente (geralmente, a pasta onde o programa VISUALG.EXE est). Este comando no prev uma extenso padro; portanto, a especificao do nome do arquivo deve ser completa, inclusive com sua extenso (por exemplo, .txt, .dat, etc.). A sintaxe do comando : arquivo <nome-de-arquivo> <nome-de-arquivo> uma constante caractere (entre aspas duplas). Veja o exemplo a seguir: algoritmo "lendo do arquivo" arquivo "teste.txt" var x,y: inteiro inicio para x de 1 ate 5 faca leia (y) fimpara fimalgoritmo Comando Timer Embora o VisuAlg seja um interpretador de pseudocdigo, seu desempenho muito bom: o tempo gasto para interpretar cada linha digitada apenas uma frao de segundo. Entretanto, por motivos educacionais, pode ser conveniente exibir o fluxo de execuo do pseudocdigo comando por comando, em "cmera lenta". O comando timer serve para este propsito: insere um atraso (que pode ser especificado) antes da execuo de cada linha. Alm disso, reala em fundo azul o comando que est sendo executado, da mesma forma que na execuo passo a passo. Sua sintaxe a seguinte: timer on Ativa o timer. Ativa o timer estabelecendo seu tempo de atraso em milissegundos. O valor padro 500, que equivale a meio segundo. O argumento <tempo-de-atraso> deve ser uma constante inteira com valor entre 0 e 10000. Valores menores que 0 so corrigidos para 0, e maiores que 10000 para 10000. Desativa o timer.

timer <tempo-deatraso>

timer off

Ao longo do pseudocdigo, pode haver vrios comandos timer. Todos eles devem estar na seo de comandos. Uma vez ativado, o atraso na execuo dos comandos ser mantido at se chegar ao final do pseudocdigo ou at ser encontrado um comando timer off. Comandos de Depurao Nenhum ambiente de desenvolvimento est completo se no houver a possibilidade de se inserir pontos de interrupo (breakpoints) no pseudocdigo para fins de depurao. VisuAlg implementa dois comandos que auxiliam a depurao ou anlise de um pseudocdigo: o comando pausa e o comando debug. Comando Pausa Sua sintaxe simplesmente: pausa

Criado por Reinaldo

58-72

Disciplina de Lgica de programao

Este comando insere uma interrupo incondicional no pseudocdigo. Quando ele encontrado, o VisuAlg pra a execuo do pseudocdigo e espera alguma ao do programador. Neste momento, possvel: analisar os valores das variveis ou das sadas produzidas at o momento; executar o pseudocdigo passo a passo (com F8); prosseguir sua execuo normalmente (com F9); ou simplesmente termin-lo (com Ctrl-F2). Com exceo da alterao do texto do pseudocdigo, todas as funes do VisuAlg esto disponveis. Comando Debug Sua sintaxe : debug <expresso-lgica> Se a avaliao de <expresso-lgica> resultar em valor VERDADEIRO, a execuo do pseudocdigo ser interrompida como no comando pausa. Dessa forma, possvel a insero de um breakpoint condicional no pseudocdigo. Comando Eco Sua sintaxe : eco on | off Este comando ativa (eco on) ou desativa (eco off) a impresso dos dados de entrada na sada-padro do VisuAlg, ou seja, na rea direita da parte inferior da tela. Esta caracterstica pode ser til quando houver uma grande quantidade de dados de entrada, e se deseja apenas analisar a sada produzida. Convm utiliz-la tambm quando os dados de entrada provm de um arquivo j conhecido. Comando Cronmetro Sua sintaxe : cronometro on | off Este comando ativa (cronometro on) ou desativa (cronometro off) o cronmetro interno do VisuAlg. Quando o comando cronometro on encontrado, o VisuAlg imprime na sadapadro a informao "Cronmetro iniciado.", e comea a contar o tempo em milissegundos. Quando o comando cronometro off encontrado, o VisuAlg imprime na sada-padro a informao "Cronmetro terminado. Tempo decorrido: xx segundo(s) e xx ms". Este comando til na anlise de desempenho de algoritmos (ordenao, busca, etc.). Comando Limpatela Sua sintaxe limpatela Este comando simplesmente limpa a tela DOS do Visualg (a simulao da tela do computador). Ele no afeta a "tela" que existe na parte inferior direita da janela principal do Visualg.

Criado por Reinaldo

59-72

Disciplina de Lgica de programao

Operadores Aritmticos Operadores unrios, isto , so aplicados a um nico operando. So os operadores aritmticos de maior precedncia. Exemplos: -3, +x. Enquanto o operador unrio inverte o sinal do seu operando, o operador + no altera o valor em nada o seu valor. Operador de diviso inteira. Por exemplo, 5 \ 2 = 2. Tem a mesma precedncia do operador de diviso tradicional.

+,-

Operadores aritmticos tradicionais de adio, subtrao, multiplicao e diviso. Por +,conveno, * e / tm precedncia sobre + e -. Para modificar a ordem de avaliao ,*,/ das operaes, necessrio usar parnteses como em qualquer expresso aritmtica. MOD Operador de mdulo (isto , resto da diviso inteira). Por exemplo, 8 MOD 3 = 2. Tem ou % a mesma precedncia do operador de diviso tradicional. ^ Operador de potenciao. Por exemplo, 5 ^ 2 = 25. Tem a maior precedncia entre os operadores aritmticos binrios (aqueles que tm dois operandos).

Operadores de Caracteres Operador de concatenao de strings (isto , cadeias de caracteres), quando usado com dois valores (variveis ou constantes) do tipo "caractere". Por exemplo: "Rio " + " de Janeiro" = "Rio de Janeiro".

Operadores Relacionais =, <, >, <=, >=, <> Respectivamente: igual, menor que, maior que, menor ou igual a, maior ou igual a, diferente de. So utilizados em expresses lgicas para se testar a relao entre dois valores do mesmo tipo. Exemplos: 3 = 3 ( 3 igual a 3?) resulta em VERDADEIRO ; "A" > "B" ("A" est depois de "B" na ordem alfabtica?) resulta em FALSO.

Importante: No VisuAlg, as comparaes entre strings no diferenciam as letras maisculas das minsculas. Assim, "ABC" igual a "abc". Valores lgicos obedecem seguinte ordem: FALSO < VERDADEIRO. Operadores Lgicos Operador unrio de negao. nao VERDADEIRO = FALSO, e nao FALSO = VERDADEIRO. Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT do Pascal. Operador que resulta VERDADEIRO quando um dos seus operandos lgicos for verdadeiro. Equivale ao OR do Pascal. Operador que resulta VERDADEIRO somente se seus dois operandos lgicos forem verdadeiros. Equivale ao AND do Pascal. Operador que resulta VERDADEIRO se seus dois operandos lgicos forem diferentes, e FALSO se forem iguais. Equivale ao XOR do Pascal.

nao

ou e xou

Comandos de Sada de Dados escreva (<lista-de-expresses>)

Criado por Reinaldo

60-72

Disciplina de Lgica de programao

Escreve no dispositivo de sada padro (isto , na rea direita da metade inferior da tela do VisuAlg) o contedo de cada uma das expresses que compem <lista-de-expresses>. As expresses dentro desta lista devem estar separadas por vrgulas; depois de serem avaliadas, seus resultados so impressos na ordem indicada. equivalente ao comando write do Pascal. De modo semelhante a Pascal, possvel especificar o nmero de espaos no qual se deseja escrever um determinado valor. Por exemplo, o comando escreva(x:5) escreve o valor da varivel x em 5 espaos, alinhado-o direita. Para variveis reais, pode-se tambm especificar o nmero de casas fracionrias que sero exibidas. Por exemplo, considerando y como uma varivel real, o comando escreva(y:6:2)escreve seu valor em 6 espaos colocando 2 casas decimais. escreval (<lista-de-expresses>). Idem ao anterior, com a nica diferena que pula uma linha em seguida. equivalente ao writeln do Pascal. Exemplos: algoritmo "exemplo" var x: real y: inteiro a: caractere l: logico inicio x <- 2.5 y <- 6 a <- "teste" l <- VERDADEIRO escreval ("x", x:4:1, y+3:4) // Escreve: x 2.5 9 escreval (a, "ok") // Escreve: testeok (e depois pula linha) escreval (a, " ok") // Escreve: teste ok (e depois pula linha) escreval (a + " ok") // Escreve: teste ok (e depois pula linha) escreva (l) // Escreve: VERDADEIRO fimalgoritmo Note que o VisuAlg separa expresses do tipo numrico e lgico com um espao esquerda, mas no as expresses do tipo caractere, para que assim possa haver a concatenao. Quando se deseja separar expresses do tipo caractere, necessrio acrescentar espaos nos locais adequados. Comando de Entrada de Dados leia (<lista-de-variveis>) Recebe valores digitados pelos usurio, atribuindo-os s variveis cujos nomes esto em <lista-de-variveis> ( respeitada a ordem especificada nesta lista). anlogo ao comando read do Pascal. Veja no exemplo abaixo o resultado: algoritmo "exemplo 1" var x: inteiro; inicio leia (x)

Criado por Reinaldo

61-72

Disciplina de Lgica de programao

escreva (x) fimalgoritmo O comando de leitura acima ir exibir uma janela como a que se v ao lado, com a mensagem padro: "Entre com o valor de <nome-de-varivel>"

Se voc clicar em Cancelar ou teclar Esc durante a leitura de dados, o programa ser imediatamente interrompido. Comando de Desvio Condicional se <expresso-lgica> entao <seqncia-de-comandos> fimse Ao encontrar este comando, o VisuAlg analisa a <expresso-lgica>. Se o seu resultado for VERDADEIRO, todos os comandos da <seqncia-de-comandos> (entre esta linha e a linha com fimse) so executados. Se o resultado for FALSO, estes comandos so desprezados e a execuo do algoritmo continua a partir da primeira linha depois do fimse. se <expresso-lgica> entao <seqncia-de-comandos-1> senao <seqncia-de-comandos-2> fimse Nesta outra forma do comando, se o resultado da avaliao de <expresso-lgica> for VERDADEIRO, todos os comandos da <seqncia-de-comandos-1> (entre esta linha e a linha com senao) so executados, e a execuo continua depois a partir da primeira linha depois do fimse. Se o resultado for FALSO, estes comandos so desprezados e o algoritmo continua a ser executado a partir da primeira linha depois do senao, executando todos os comandos da <seqncia-de-comandos-2> (at a linha com fimse). Estes comandos equivalem ao if...then e if...then...else do Pascal. Note que no h necessidade de delimitadores de bloco (como begin e end), pois as seqncias de comandos j esto delimitadas pelas palavras-chave senao e fimse. O VisuAlg permite o aninhamento desses comandos de desvio condicional. Comando de Seleo Mltipla O VisuAlg implementa (com certas variaes) o comando case do Pascal. A sintaxe a seguinte: escolha <expresso-de-seleo> caso <exp11>, <exp12>, ..., <exp1n> <seqncia-de-comandos-1> caso <exp21>, <exp22>, ..., <exp2n>

Criado por Reinaldo

62-72

Disciplina de Lgica de programao

<seqncia-de-comandos-2> ... outrocaso <seqncia-de-comandos-extra> fimescolha Veja o exemplo a seguir, que ilustra bem o que faz este comando: algoritmo "Times" var time: caractere inicio escreva ("Entre com o nome de um time de futebol: ") leia (time) escolha time caso "Flamengo", "Fluminense", "Vasco", "Botafogo" escreval (" um time carioca.") caso "So Paulo", "Palmeiras", "Santos", "Cornthians" escreval (" um time paulista.") outrocaso escreval (" de outro estado.") fimescolha fimalgoritmo Comandos de Repetio O VisuAlg implementa as trs estruturas de repetio usuais nas linguagens de programao: o lao contado para...ate...faca (similar ao for...to...do do Pascal), e os laos condicionados enquanto...faca (similar ao while...do) e repita...ate (similar ao repeat...until). A sintaxe destes comandos explicada a seguir. Para ... faa Esta estrutura repete uma seqncia de comandos um determinado nmero de vezes. para <varivel> de <valor-inicial> ate <valor-limite> [passo <incremento>] faca <seqncia-de-comandos> fimpara a varivel contadora que controla o nmero de repeties do lao. Na verso atual, deve ser necessariamente uma varivel do tipo inteiro, como todas as expresses deste comando. uma expresso que especifica o valor de inicializao da varivel contadora antes da primeira repetio do lao. uma expresso que especifica o valor mximo que a varivel contadora pode alcanar. opcional. Quando presente, precedida pela palavra passo, uma expresso que especifica o incremento que ser acrescentado varivel contadora em cada repetio do lao. Quando esta opo no utilizada, o valor padro de <incremento> 1. Vale a pena ter em conta que tambm possvel especificar valores negativos para <incremento>. Por outro lado, se a avaliao da expresso <incremento > resultar em valor nulo, a execuo do algoritmo ser interrompida, com a impresso de uma mensagem de erro. Indica o fim da seqncia de comandos a serem repetidos. Cada vez que o programa chega neste ponto, acrescentado varivel contadora

<varivel >

<valor-inicial> <valor-limite >

<incremento >

fimpara

Criado por Reinaldo

63-72

Disciplina de Lgica de programao

o valor de <incremento >, e comparado a <valor-limite >. Se for menor ou igual (ou maior ou igual, quando <incremento > for negativo), a seqncia de comandos ser executada mais uma vez; caso contrrio, a execuo prosseguir a partir do primeiro comando que esteja aps o fimpara. <valor-inicial >, <valor-limite > e <incremento > so avaliados uma nica vez antes da execuo da primeira repetio, e no se alteram durante a execuo do lao, mesmo que variveis eventualmente presentes nessas expresses tenham seus valores alterados. No exemplo a seguir, os nmeros de 1 a 10 so exibidos em ordem crescente. algoritmo "Nmeros de 1 a 10" var j: inteiro inicio para j de 1 ate 10 faca escreva (j:3) fimpara fimalgoritmo Importante: Se, logo no incio da primeira repetio, <valor-inicial > for maior que <valor-limite > (ou menor, quando <incremento> for negativo), o lao no ser executado nenhuma vez. O exemplo a seguir no imprime nada. algoritmo "Numeros de 10 a 1 (no funciona)" var j: inteiro inicio para j de 10 ate 1 faca escreva (j:3) fimpara fimalgoritmo Este outro exempo, no entanto, funcionar por causa do passo -1: algoritmo "Numeros de 10 a 1 (este funciona)" var j: inteiro inicio para j de 10 ate 1 passo -1 faca escreva (j:3) fimpara fimalgoritmo Enquanto ... faa Esta estrutura repete uma seqncia de comandos enquanto uma determinada condio (especificada atravs de uma expresso lgica) for satisfeita. enquanto <expresso-lgica> faca <seqncia-de-comandos> fimenquanto Esta expresso que avaliada antes de cada repetio do lao. <expresso-lgica> Quando seu resultado for VERDADEIRO, <seqncia-decomandos> executada. fimenquanto Indica o fim da <seqncia-de-comandos> que ser repetida.

Criado por Reinaldo

64-72

Disciplina de Lgica de programao

Cada vez que a execuo atinge este ponto, volta-se ao incio do lao para que <expresso-lgica> seja avaliada novamente. Se o resultado desta avaliao for VERDADEIRO, a <seqnciade-comandos> ser executada mais uma vez; caso contrrio, a execuo prosseguir a partir do primeiro comando aps fimenquanto. O mesmo exemplo anterior pode ser resolvido com esta estrutura de repetio: algoritmo "Nmeros de 1 a 10 (com enquanto...faca)" var j: inteiro inicio j <- 1 enquanto j <= 10 faca escreva (j:3) j <- j + 1 fimenquanto fimalgoritmo Importante: Como o lao enquanto...faca testa sua condio de parada antes de executar sua seqncia de comandos, esta seqncia poder ser executada zero ou mais vezes. Repita ... at Esta estrutrura repete uma seqncia de comandos at que uma determinada condio (especificada atravs de uma expresso lgica) seja satisfeita. repita <seqncia-de-comandos> ate <expresso-lgica> repita Indica o incio do lao. Indica o fim da <seqncia-de-comandos> a serem repetidos. Cada vez que o programa chega neste ponto, <expresso-lgica> avaliada: se seu resultado for FALSO, os comandos presentes entre esta linha e a linha repita so executados; caso contrrio, a execuo prosseguir a partir do primeiro comando aps esta linha.

ate <expressolgica>

Considerando ainda o mesmo exemplo: algoritmo "Nmeros de 1 a 10 (com repita)" var j: inteiro inicio j <- 1 repita escreva (j:3) j <- j + 1 ate j > 10 fimalgoritmo Importante: Como o lao repita...ate testa sua condio de parada depois de executar sua seqncia de comandos, esta seqncia poder ser executada uma ou mais vezes. Comando Interrompa

Criado por Reinaldo

65-72

Disciplina de Lgica de programao

As trs estruturas de repetio acima permitem o uso do comando interrompa, que causa uma sada imediata do lao. Embora esta tcnica esteja de certa forma em desacordo com os princpios da programao estruturada, o comando interrompa foi includo no VisuAlg por ser encontrado na literatura de introduo programao e mesmo em linguagens como o Object Pascal (Delphi/Kylix), Clipper, VB, etc. Seu uso exemplificado a seguir: algoritmo "Nmeros de 1 a 10 (com interrompa)" var x: inteiro inicio x <- 0 repita x <- x + 1 escreva (x:3) se x = 10 entao interrompa fimse ate falso fimalgoritmo O VisuAlg permite ainda uma forma alternativa do comando repita...ate, com a seguinte sintaxe: algoritmo "Nmeros de 1 a 10 (com interrompa) II" var x: inteiro inicio x <- 0 repita x <- x + 1 escreva (x:3) se x = 10 entao interrompa fimse fimrepita fimalgoritmo Com esta sintaxe alternativa, o uso do interrompa obrigatrio, pois a nica maneira de se sair do lao repita...fimrepita; caso contrrio, este lao seria executado indeterminadamente.

A Linguagem de Programao do VisuAlg (4)


Subprograma um programa que auxilia o programa principal atravs da realizao de uma determinada subtarefa. Tambm costuma receber os nomes de sub-rotina, procedimento, mtodo ou mdulo. Os subprogramas so chamados dentro do corpo do programa principal como se fossem comandos. Aps seu trmino, a execuo continua a partir do ponto onde foi chamado. importante compreender que a chamada de um subprograma simplesmente gera um desvio provisrio no fluxo de execuo. H um caso particular de subprograma que recebe o nome de funo. Uma funo, alm de executar uma determinada tarefa, retorna um valor para quem a chamou, que o resultado da sua execuo. Por este motivo, a chamada de uma funo aparece no corpo do programa principal como uma expresso, e no como um comando. Cada subprograma, alm de ter acesso s variveis do programa que o chamou (so as variveis globais), pode ter suas prprias variveis (so as variveis locais), que existem apenas durante sua chamada.

Criado por Reinaldo

66-72

Disciplina de Lgica de programao

Ao se chamar um subprograma, tambm possvel passar-lhe determinadas informaes que recebem o nome de parmetros (so valores que, na linha de chamada, ficam entre os parnteses e que esto separados por vrgulas). A quantidade dos parmetros, sua seqncia e respectivos tipos no podem mudar: devem estar de acordo com o que foi especificado na sua correspondente declarao. Para se criar subprogramas, preciso descrev-los aps a declarao das variveis e antes do corpo do programa principal. O VisuAlg possibilita declarao e chamada de subprogramas nos moldes da linguagem Pascal, ou seja, procedimentos e funes com passagem de parmetros por valor ou referncia. Isso ser explicado a seguir. Procedimentos Em VisuAlg, procedimento um subprograma que no retorna nenhum valor (corresponde ao procedure do Pascal). Sua declarao, que deve estar entre o final da declarao de variveis e a linha inicio do programa principal, segue a sintaxe abaixo: procedimento <nome-de-procedimento> [(<seqncia-de-declaraes-deparmetros>)] // Seo de Declaraes Internas inicio // Seo de Comandos fimprocedimento O <nome-de-procedimento> obedece as mesmas regras de nomenclatura das variveis. Por outro lado, a <seqncia-de-declaraes-de-parmetros> uma seqncia de [var] <seqncia-de-parmetros>: <tipo-de-dado> separadas por ponto e vrgula. A presena (opcional) da palavra-chave var indica passagem de parmetros por referncia; caso contrrio, a passagem ser por valor. Por sua vez, <seqncia-de-parmetros> uma seqncia de nomes de parmetros (tambm obedecem a mesma regra de nomenclatura de variveis) separados por vrgulas. De modo anlogo ao programa principal, a seo de declarao internas comea com a palavra-chave var, e continua com a seguinte sintaxe: <lista-de-variveis> : <tipo-de-dado> Nos prximos exemplos, atravs de um subprograma soma, ser calculada a soma entre os valores 4 e 9 (ou seja, ser obtido o resultado 13) que o programa principal imprimir em seguida. No primeiro caso, um procedimento sem parmetros utiliza uma varivel local aux para armazenar provisoriamente o resultado deste clculo (evidentemente, esta varivel desnecessria, mas est a apenas para ilustrar o exemplo), antes de atribu-lo varivel global res: procedimento soma var aux: inteiro inicio // n, m e res so variveis globais aux <- n + m res <- aux fimprocedimento No programa principal deve haver os seguintes comandos: n <- 4

Criado por Reinaldo

67-72

Disciplina de Lgica de programao

m <- -9 soma escreva(res) A mesma tarefa poderia ser executada atravs de um procedimento com parmetros, como descrito abaixo: procedimento soma (x,y: inteiro) inicio // res varivel global res <- x + y fimprocedimento No programa principal deve haver os seguintes comandos: n <- 4 m <- -9 soma(n,m) escreva(res) A passagem de parmetros do exemplo acima chama-se passagem por valor. Neste caso, o subprograma simplesmente recebe um valor que utiliza durante sua execuo. Durante essa execuo, os parmetros passados por valor so anlogos s suas variveis locais, mas com uma nica diferena: receberam um valor inicial no momento em que o subprograma foi chamado. Funes Em VisuAlg, funo um subprograma que retorna um valor (corresponde ao function do Pascal). De modo anlogo aos procedimentos, sua declarao deve estar entre o final da declarao de variveis e a linha inicio do programa principal, e segue a sintaxe abaixo: funcao <nome-de-funo> [(<seqncia-de-declaraes-de-parmetros>)]: <tipo-de-dado> // Seo de Declaraes Internas inicio // Seo de Comandos fimfuncao O <nome-de-funo> obedece as mesmas regras de nomenclatura das variveis. Por outro lado, a <seqncia-de-declaraes-de-parmetros> uma seqncia de [var] <seqncia-de-parmetros>: <tipo-de-dado> separadas por ponto e vrgula. A presena (opcional) da palavra-chave var indica passagem de parmetros por referncia; caso contrrio, a passagem ser por valor. Por sua vez, <seqncia-de-parmetros> uma seqncia de nomes de parmetros (tambm obedecem a mesma regra de nomenclatura de variveis) separados por vrgulas. O valor retornado pela funo ser do tipo especificado na sua declarao (logo aps os dois pontos). Em alguma parte da funo (de modo geral, no seu final), este valor deve ser retornado atravs do comando retorne. De modo anlogo ao programa principal, a seo de declarao internas comea com a palavra-chave var, e continua com a seguinte sintaxe: <lista-de-variveis> : <tipo-de-dado>

Criado por Reinaldo

68-72

Disciplina de Lgica de programao

Voltando ao exemplo anterior, no qual calculamos e imprimimos a soma entre os valores 4 e 9, vamos mostrar como isso poderia ser feito atravs de uma funo sem parmetros. Ela tambm utiliza uma varivel local aux para armazenar provisoriamente o resultado deste clculo, antes de atribu-lo varivel global res: funcao soma: inteiro var aux: inteiro inicio // n, m e res so variveis globais aux <- n + m retorne aux fimfuncao No programa principal deve haver os seguintes comandos: n <- 4 m <- -9 res <- soma escreva(res) Se realizssemos essa mesma tarefa com uma funo com parmetros passados por valor, poderia ser do seguinte modo: funcao soma (x,y: inteiro): inteiro inicio retorne x + y fimfuncao No programa principal deve haver os seguintes comandos: n <- 4 m <- -9 res <- soma(n,m) escreva(res) Passagem de Parmetros por Referncia H ainda uma outra forma de passagem de parmetros para subprogramas: a passagem por referncia. Neste caso, o subprograma no recebe apenas um valor, mas sim o endereo de uma varivel global. Portanto, qualquer modificao que for realizada no contedo deste parmetro afetar tambm a varivel global que est associada a ele. Durante a execuo do subprograma, os parmetros passados por referncia so anlogos s variveis globais. No VisuAlg, de forma anloga a Pascal, essa passagem feita atravs da palavra var na declarao do parmetro. Voltando ao exemplo da soma, o procedimento abaixo realiza a mesma tarefa utilizando passagem de parmetros por referncia: procedimento soma (x,y: inteiro; var result: inteiro) inicio result <- x + y fimprocedimento No programa principal deve haver os seguintes comandos: n <- 4 m <- -9 soma(n,m,res) escreva(res) Recurso e Aninhamento

Criado por Reinaldo

69-72

Disciplina de Lgica de programao

A atual verso do VisuAlg permite recurso, isto , a possibilidade de que um subprograma possa chamar a si mesmo. A funo do exemplo abaixo calcula recursivamente o fatorial do nmero inteiro que recebe como parmetro: funcao fatorial (v: inteiro): inteiro inicio se v <= 2 entao retorne v senao retorne v * fatorial(v-1) fimse fimfuncao Em Pascal, permitido o aninhamento de subprogramas, isto , cada subprograma tambm pode ter seus prprios subprogramas. No entanto, esta caracterstica dificulta a elaborao dos compiladores e, na prtica, no muito importante. Por este motivo, ela no permitida na maioria das linguagens de programao (como C, por exemplo), e o VisuAlg no a implementa.

Criado por Reinaldo

70-72

Disciplina de Lgica de programao

Sumrio

Objetivos........................................................................................................................... 2 Apresentao do VisuaAlg pelo prof. Cludio Morgado de Souza.................................. 2 Instalao e Requerimentos de Hardware ................................................................ 2 Conhea o VisuAlg................................................................................................... 2 A Tela Principal do VisuAlg ............................................................................................ 3 A Barra de Tarefas.................................................................................................... 3 Quadro de Variveis ................................................................................................. 5 A Barra de Status...................................................................................................... 5 Menu do VisuAlg ............................................................................................................. 7 A Linguagem de Programao do VisuAlg (1) ................................................................ 9 Introduo..................................................................................................................... 9 Formato Bsico do Pseudocdigo e Incluso de Comentrios..................................... 9 Tipos de Dados ........................................................................................................... 10 Nomes de Variveis e sua Declarao........................................................................ 10 Constantes e Comando de Atribuio ........................................................................ 11 Referncias da Linguagem de Programao do VisuAlg............................................... 12 Auto-digitao e Sugesto de Digitao......................................................................... 13 Auto-digitao ............................................................................................................ 13 Sugesto de Digitao ............................................................................................ 15 As Funes do Visualg Verso 2.0................................................................................. 16 Funes numricas, algbricas e trigonomtricas. ..................................................... 16 Funes para manipulao de cadeias de caracteres (strings).................................... 17 Curso de Algoritmos....................................................................................................... 19 Lio 1 - Introduo ................................................................................................... 19 Regras para a formao de nomes de variveis...................................................... 20 Lio 2 - Comandos Bsicos ...................................................................................... 21 Declarando Variveis ............................................................................................. 21 Colocando Valores nas Variveis........................................................................... 21 Exibindo o Valor de uma Varivel ......................................................................... 22 Obtendo Dados para o Programa............................................................................ 22 Lio 3 - Expresses Aritmticas ............................................................................... 23 Lio 4 - Construindo os Primeiros Algoritmos......................................................... 25 Problema 1 - Clculo de Mdia Aritmtica ............................................................ 25 Lio 5 - Mais Algoritmos Bsicos ............................................................................ 27 Problema 2 - Clculo Simples de Velocidade Mdia ............................................. 27 Problema 3 - Clculo de Velocidade Mdia (mais complexo)........................ 27 RESPOSTAS Lio 4 e 5 ........................................................................................ 29 Lio 6 - Comentrios e Mais Algoritmos ................................................................. 33 Exerccio 5 ............................................................................................................. 34 Lio 7 - Colocando mais Inteligncia nos Programas .............................................. 35 Exerccio 7 ............................................................................................................. 36 Exerccio 8 ............................................................................................................. 37 Lio 8 - Ensinando o Computador a Decidir ............................................................ 38

Criado por Reinaldo

71-72

Disciplina de Lgica de programao

RESPOSTA LIO DA LIO 5 A LIO 8........................................................ 40 Resposta do Exerccio 5 ....................................................................................... 40 Resposta do Exerccio 6 ....................................................................................... 41 Resposta do Exerccio 8 ....................................................................................... 42 Como Funciona o Algoritmo do Problema 4..................................................... 42 Lio 9 - Mais Algoritmos com Decises .................................................................. 45 Exerccio 9 ............................................................................................................. 45 Exerccio 10 ........................................................................................................... 46 Exerccio 11 ........................................................................................................... 46 Exerccio 12 ........................................................................................................... 46 RESPOSTAS AT O EXERCCIO 12 ...................................................................... 47 Resposta do Exerccio 9 ....................................................................................... 47 Resposta do Exerccio 10 ..................................................................................... 47 Resposta do Exerccio 11 ..................................................................................... 48 Resposta do Exerccio 12 ..................................................................................... 48 Lio 10 - Refinando Nossas Decises ...................................................................... 50 Lio 11 - Trabalhando com Tabelas (1).................................................................... 52 Lio 12 - Trabalhando com Tabelas (2).................................................................... 54 Exerccio 13 ........................................................................................................... 55 Exerccio 14 ........................................................................................................... 55 A Linguagem de Programao do VisuAlg (5) .............................................................. 57

Criado por Reinaldo

72-72

You might also like