Logica de Prog e Visualg

download Logica de Prog e Visualg

of 72

Transcript of Logica de Prog e Visualg

  • 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:

    : : vetor "[""]" de

    Na , os nomes das variveis esto separados por vrgulas. Na , os so separados por vrgulas, e tm a seguinte sintaxe:

    : ..

    Na verso atual do VisuAlg, tanto como devem ser inteiros. Alm disso, exige-se evidentemente que seja maior do que .

    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

  • 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 palavras-chave 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

  • Disciplina de Lgica de programao

    escreval( numpcarac(3+3) + a ) // ser escrito "62" na tela c

  • 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, Media-Aritmetica

    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 "

  • 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!" Al, mundo! Escreva 20 20 declare Nome : Caracter declare Idade : Numerico Nome

  • 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 Exemplo Resultado + Adio 3 + 2 5 - Subtrao 10 - 5 5 * Multiplicao 3 * 7 21 / Diviso 25 / 2 12.5 ^ Potenciao 5 ^ 2 25 \ Diviso Inteira 25 \ 2 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 Opera-se o que estiver nos parnteses mais internos

    ( 3 + 5 ) * ( 4 * 3) / 2 Operam-se os dois parnteses que restaram

    8 * 12 / So h * e / - , ento opera-se da esquerda para a

    Criado por Reinaldo 23-72

  • Disciplina de Lgica de programao

    2 direita 96 / 2

    48 Resultado final

    Um outro exemplo:

    6 * ( 9 + 3 * 2 ) / ( 2 * 4- 11 ) Operam-se as multiplicaes nos parnteses

    6 * ( 9 + 6 ) / ( 8 - 11 ) Operam-se os parnteses

    6 * 15 / -3 So h * e / - opera-se da esquerda para a direita

    90 / -3 Observe o sinal negativo antes do 3... -30 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 Comentrios 1) Declare A : Numerico Declarao da varivel A

  • 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

    deveremos ter idia dos tipos de dados que usaremos; 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.

    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

  • 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

  • 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

  • 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 "Programa que calcula a mdia aritmtica de dois valores." Escreva "Digite um valor : " Leia A Escreva "Digite outro valor : " Leia B Escreva "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

  • 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

  • Disciplina de Lgica de programao

    Escreva "Nmero de pessoas na mesa : " Leia NumPessoas

    ValorPorPessoa

  • 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:

    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

    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.

    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 dados Escreva "Digite o nome do piloto : " Leia Nome Escreva "Digite a distncia percorrida (em km) : " Leia Distancia Escreva "Digite o tempo gasto para percorr-la (em horas) : " Leia Tempo

    // Clculo da velocidade mdia VelMedia

  • 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 Resultado A Terra gira em torno do Sol Verdadeiro Zebras podem falar Falso 2 + 2 igual a 5 Falso 14 maior que 3 Verdadeiro Todo dia 1o. de Janeiro Segunda-Feira Falso "Raposa" vem antes de "Borboleta" na ordem alfabtica Falso

    A palavra "Jos" comea com a letra "J" 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 Smbolo Exemplos Resultado Igual a = 3 = 3 Verdadeiro 2+2 = 5 Falso Diferente de 140 410 Verdadeiro

    (10+5) (30/2) Falso (as duas expresses tm resultado 15) Menor que < 13 < 7 Falso 77 < 20 * 2 Falso Maior que > 0 > -1 Verdadeiro

    345 > ((3 +1)*100) Falso (345 no maior que 400...)

    Criado por Reinaldo 35-72

  • Disciplina de Lgica de programao

    Menor ou igual a = 20 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 Resultado x 40 Falso (y * 8)

  • Disciplina de Lgica de programao

    I

  • 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 ento seno

    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

  • 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

  • Disciplina de Lgica de programao

    5. 18 (K / 2) = ( I * 3) / ( J - 3 ) (K / 2) = (18 * 3) / ( 9 - 3 ) (K / 2) = 54 / 6 (K / 2) = 9 (18/ 2) = 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

  • 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 = 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

  • 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

  • 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 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 = 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... At... Conceito 0 3.9 Fraco 4 6.9 Regular 7 8.9 Bom 9 10 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=4) e (Media=7) e (Media=9) e (Media=0) e (Media=0) e (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

  • 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... At... Percentual

    R$ 0,00 R$ 1.500,00 2% R$ 1.500,01 R$ 3.000,00 3% R$ 3.000,01 R$ 6.000,00 5% R$ 6.000,01 Sem Limite 6%

    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

  • 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

  • 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:

    aleatorio [on]

    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 pr-estabelecida: os dados gerados sero sempre strings de 5 letras maisculas.

    aleatorio [, ]

    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 inclusive; caso contrrio, a faixa ser de a inclusive. Se for menor que , o VisuAlg os trocar para que a faixa fique correta. Importante: e devem ser constantes numricas, e no expresses.

    aleatorio off Desativa a gerao de valores aleatrios. A palavra-chave off obrigatria.

    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

    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.

    timer

    Ativa o timer estabelecendo seu tempo de atraso em milissegundos. O valor padro 500, que equivale a meio segundo. O argumento 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.

    timer off Desativa o timer.

    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

    Se a avaliao de 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 sada-padro 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 ou %

    Operador de mdulo (isto , resto da diviso inteira). Por exemplo, 8 MOD 3 = 2. Tem 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

    nao Operador unrio de negao. nao VERDADEIRO = FALSO, e nao FALSO = VERDADEIRO. Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT do Pascal.

    ou Operador que resulta VERDADEIRO quando um dos seus operandos lgicos for verdadeiro. Equivale ao OR do Pascal.

    e Operador que resulta VERDADEIRO somente se seus dois operandos lgicos forem verdadeiros. Equivale ao AND do Pascal.

    xou Operador que resulta VERDADEIRO se seus dois operandos lgicos forem diferentes, e FALSO se forem iguais. Equivale ao XOR do Pascal.

    Comandos de Sada de Dados

    escreva ()

    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 . 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 ().

    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

  • 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 "

    Se voc clicar em Cancelar ou teclar Esc durante a leitura de dados, o programa ser imediatamente interrompido.

    Comando de Desvio Condicional

    se entao fimse

    Ao encontrar este comando, o VisuAlg analisa a . Se o seu resultado for VERDADEIRO, todos os comandos da (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 entao senao fimse

    Nesta outra forma do comando, se o resultado da avaliao de for VERDADEIRO, todos os comandos da (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 (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 caso , , ..., caso , , ...,

    Criado por Reinaldo 62-72

  • Disciplina de Lgica de programao

    ... outrocaso 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