Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
OURICURI - PE
SUMRIO
1.0 INTRODUO A LGICA.......................................................................................3 1.1 Lgica Aplicada Tecnologia da Informao (Informtica)................................4 2.0 INTRODUO AO ALGORITMO............................................................................6 2.1 Classificao de Algortimo.................................................................................6 2.2 Exemplos de Algortimo......................................................................................9 2.4 Tipos de Dados.................................................................................................12 2.5 Operadores.......................................................................................................12 2.5.1 Operadores Relacionais............................................................................12 2.5.2 Operadores Lgicos..................................................................................13 2.5.2.1 Operador Lgico no..........................................................................13 2.5.2.2 Operador Lgico ou............................................................................14 2.5.2.3 Operador Lgico e..............................................................................14 2.5.2.4 Operador Lgico xou..........................................................................15 2.5.3 Operadores Aritmticos.............................................................................15 2.5.5 Operadores de String................................................................................16 2.5.6 Operadores de Atribuio..........................................................................16 3.0 FORMAS DE REPRESENTAO DE ALGORTMOS.........................................17 3.1 Diagrama de Chaplin........................................................................................17 3.1 Fluxograma.......................................................................................................17 3.2 Portugus Estruturado (Portugol ou Pseudocdigo)........................................20 4.0 QUALIDADE DO ALGORITIMO:...........................................................................22 5.0 ESTRUTURAS DE ALGORITMO:........................................................................24 5.1 Declarao de Variveis / Constantes..............................................................24 5.2 Comandos de Sada de Dados.........................................................................25 5.3 Comandos de Entrada (Leitura) de Dados.......................................................26 5.4 Estrutura Sequencial (Incondicional)................................................................26 5.5 Estrutura Condicional........................................................................................33 5.6 Estrutura Seleo Mltipla................................................................................47 5.7 Estrutura de Repetio - Laos........................................................................53 5.7.1 Estrutura de Repetio Pr-testada "enquanto...faca"...........................54 5.7.2 Estrutura de Repetio Prs-testada "repita...ate".................................59
3 de 65
4 de 65 Argumento um conjunto de uma ou mais sentenas declarativas, tambm conhecidas como proposies, ou ainda, premissas, acompanhadas de uma outra frase declarativa conhecida como concluso. Argumentos so classificados em dedutivos e indutivos. Os dedutivos afirmam que a verdade de uma concluso uma consequncia lgica das premissas que a antecedem. Por exemplo: 1. 2. 3. Mamferos, so animais que mamam; A cabra mama; Portanto, a cabra um mamfero.
J os indutivos afirmam que a verdade da concluso apenas apoiada pelas premissas, neste caso se torna preciso conhecer os fatos para se poder fazer a comparao. 1. No ano passado no choveu em janeiro e o ano foi de seca; 2. Neste ano choveu em janeiro; 3. Logo, neste ano no haver seca. Toda e qualquer premissa, assim como toda concluso, pode assumir apenas o valor verdadeiro ou falso e jamais poder assumir ou possuir valores ambguos. Sendo assim, as frases que apresentam um argumento so referidas como sendo verdadeiras ou falsas. Devemos programar nossas Mentes! Programar no um tarefa difcil! Computador uma rplica da Mente; Com uma autoprogramao; Aprendizado (Cores, smbolos, sons...); Processo de aprendizado autoprogramao;
O que ser mais complexo nosso crebro ou um simples computador? Lembrem-se a inteligencia do computador, somos ns que fazemos (programamos).
5 de 65 observao da lgica o programador (desenvolvedor) constri seus algortimos, que posteriormente viraro um software. Sendo estes, programas de computador, capazes de apresentar as mais diversas solues, nas mais variadas reas do conhecimento humano (contabilidade, administrao, engenharia, educao...). Usaremos para a soluo dos algortimos, a Lgica Formal, tambm chamada de Lgica Simblica que se preocupa basicamente com a estrutura do raciocnio. E lida com a relao entre conceitos e fornece um meio de compor provas de declaraes. Os conceitos so rigorosamente definidos, e as sentenas so transformadas em notaes simblicas precisas, compactas e no ambguas, esta tambm nos permite trabalhar com variveis, permitindo assim, a utilizao do mesmo raciocnio para a soluo de vrios problemas. Exemplos: 1. 2. 3. Mamferos, so animais que mamam; A cabra mama; Portanto, a cabra um mamfero. e
Baseados na lgica formal podemos substituir as palavras Mamferos cabra, por X e Y. 1. 2. 3. X, so animais que mamam; A Y mama; Portanto, Y um X.
Posteriormente falaremos sobre variveis, e seu uso. Na logica aplicada a T.I., o resultado das sentenas ser sempre, V ou F (Verdadeiro ou Falso), ela a tcnica de desenvolver algoritmos (sequncias lgicas) para atingir determinados objetivos dentro de certas regras baseadas na Lgica Matemtica, estes algortimos sero adaptados para uma Linguagem de Programao utilizada pelo programador para construir seu software.
6 de 65
7 de 65 Classificao por implementao: Pode-se classificar algoritmos pela maneira pelo qual foram implementados. Recursivo ou iterativo - um algoritmo recursivo possui a caracterstica de invocar a si mesmo repetidamente at que certa condio seja satisfeita e ele terminado, que um mtodo comum em programao funcional. Algoritmos iterativo usam estruturas de repetio tais como laos, ou ainda estruturas de dados adicionais tais como pilhas, para resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e vice versa, mas que pode ter mais ou menos complexidade em sua construo. Lgico - um algoritmo pode ser visto como uma deduo lgica controlada. O componente lgico expressa os axiomas usados na computao e o componente de controle determina a maneira como a deduo aplicada aos axiomas. Tal conceito base para a programao lgica. Serial ou paralelo - algoritmos so geralmente assumidos por serem executados instruo instruo individualmente, como uma lista de execuo, o que constitui um algoritmo serial. Tal conceito base para a programao imperativa. Por outro lado existem algoritmos executados paralelamente, que levam em conta arquiteturas de computadores com mais de um processador para executar mais de uma instruo ao mesmo tempo. Tais algoritmos dividem os problemas em subproblemas e o delegam a quantos processadores estiverem disponveis, agrupando no final o resultado dos subproblemas em um resultado final ao algoritmo. Tal conceito base para a programao paralela. Classificao por paradigma: Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como: Diviso e conquista - algoritmos de diviso e conquista reduzem repetidamente o problema em subproblemas, geralmente de forma recursiva, at que o subproblema pequeno o suficiente para ser resolvido. Um exemplo prtico o algoritmo de ordenao merge sort.
8 de 65 Programao dinmica - pode-se utilizar a programao dinmica para evitar o reclculo de soluo j resolvidas anteriormente. Algoritmo ganancioso - um algoritmo ganancioso similar programao dinmica, mas difere na medida que as solues dos subproblemas no precisam ser conhecidas a cada passo, uma escolha gananciosa pode ser feita a cada momento com o que at ento parece ser mais adequado. Programao linear Reduo - a reduo resolve o problema ao transform-lo em outro problema. chamado tambm transformao e conquista. Busca e enumerao - vrios problemas podem ser modelados atravs de grafos. Um algoritmo de explorao de grafo pode ser usado para caminhar pela estrutura e retornam informaes teis para a resoluo do problema. Esta categoria inclui algoritmos de busca e backtracking. Paradigma heurstico e probabilstico - algoritmos probabilsticos realizam escolhas aleatoriamente. Algoritmos genticos tentar encontrar a soluo atravs de ciclos de mutaes evolucionrias entre geraes de passos, tendendo para a soluo exata do problema. Algoritmos heursticos encontram uma soluo aproximada para o problema. Classificao por campo de estudo: Cada campo da cincia possui seus prprios problemas e respectivos algoritmos adequados para resolv-los. Exemplos clssicos so algoritmos de busca, de ordenao, de anlise numrica, de teoria de grafos, de manipulao de cadeias de texto, de geometria computacional, de anlise combinatria, de aprendizagem de mquina, de criptografia, de compresso de dados e de interpretao de texto. Classificao por complexidade: Alguns algoritmos so executados em tempo linear, de acordo com a entrada, enquanto outros so executados em tempo exponencial ou at mesmo nunca terminam de serem executados. Alguns problemas possuem mltiplos algoritmos enquanto outros no possuem algoritmos para resoluo.
9 de 65
Obs.: deve-se mover um nico anel por vez e um anel de dimetro maior nunca pode repousar sobre algum outro de dimetro menor. Soluo: Algoritmo para resolver o problema das Torres de Hanoi. Incio 1. Mover o anel P da haste A para a haste C. 2. Mover o anel M da haste A para a haste B. 3. Mover o anel P da haste C para a haste B. 4. Mover o anel G da haste A para a haste C. 5. Mover o anel P da haste B para a haste A. 6. Mover o anel M da haste B para a haste C. 7. Mover o anel P da haste A para a haste C. Fim Um homem precisa atravessar um rio com um barco que possui capacidade de carregar apenas ele mesmo e mais uma das trs cargas que so: um lobo, um bode e um mao de alfafas. Observe as leis naturais: o lobo carnvoro e o bode herbvoro. O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas? Soluo: Algoritmo para resolver o problema das Travessia.
10 de 65 Incio 1) O Homem leva o bode da margem 1 para a margem 2. 2) O Homem navega da margem 2 para a margem 1. 3) O Homem leva o lobo da margem 1 para a margem 2. 4) O Homem leva o bode da margem 2 para a margem 1. 5) O Homem leva a alfafa da margem 1 para a margem 2. 6) O homem navega da margem 2 para a margem 1. 7) O Homem leva o bode da margem 1 para a margem 2. Fim No nosso dia a dia, muitas vezes tratamos algortimos sem nem perceber, observe a seguinte situao: Um cozinheiro precisa fazer um sanduche de queijo, s que ele passa pelos seguintes dilemas: o queijo est fatiado ou o queijo est sem Fatiar. Soluo 1: Algoritmo para resolver o problema de se fazer o sanduche com o queijo estando fatiado. Incio 1) Pegar a faca; 2) Pegar o po; 3) Cortar o po; 4) Colocar a faca na mesa; 5) Pegar a fatia de queijo; 6) Abrir o po; 7) Colocar a fatia de queijo no po. Fim Soluo 2: Algoritmo para resolver o problema de se fazer o sanduche com o queijo no estando fatiado. Incio 1) Pegar a faca; 2) Pegar o po; 3) Cortar o po; 4) Colocar o po na mesa; 5) Pegar o queijo;
11 de 65 6) Cortar uma fatia de queijo; 7) Colocar a faca na mesa; 8) Pegar e abrir o po; 9) Colocar a fatia de queijo no po. Fim Soluo 3: Algoritmo para prevendo os dois problemas anteriores. Incio 1) Pegar a faca; 2) Pegar o po; 3) Cortar o po; 4) Se o queijo estiver fatiado ento 5) Passos de 4 a 6 da soluo 1 6) Seno 7) Passos de 4 a 8 da soluo 2 8) Colocar a fatia de queijo no po. Fim
12 de 65 No pode haver duas variveis com o mesmo nome, com a natural exceo dos elementos de um mesmo vetor.
2.5 Operadores
So os smbolos usados para o trabalho com variveis e constantes. H basicamente cinco grupos de operadores: relacionais; lgicos; aritmticos; de strings; de atribuio. 2.5.1 Operadores Relacionais
13 de 65 So utilizados em expresses lgicas para se testar a relao entre dois valores do mesmo tipo, so eles: = < > igual; menor que; maior que;
<= menor ou igual a; >= maior ou igual a; <> diferente de P.S.: Retornam Verdadeiro ou Falso, como resposta. Exemplos: 3=4 ---> FALSO 3<4 ---> VERDADEIRO 3>4 ---> FALSO 3 <= 4 ---> VERDADEIRO 3 >= 4 ---> FALSO 3 <> 4 ---> VERDADEIRO A = A ---> VERDADEIRO C = D ---> FALSO A = a ----> VERDADEIRO
case sensitive, como Java, considerado FALSO) 2.5.2 Operadores Lgicos So utilizados em expresses lgicas para se testar a relao entre dois valores lgicos(booleanos). nao; ou; e; xou;
P.S.: Retornam Verdadeiro ou Falso, como resposta. 2.5.2.1 Operador Lgico no Operador unrio de negao. nao VERDADEIRO = FALSO, nao FALSO = VERDADEIRO. Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT do Pascal ou ! Do Java.
14 de 65
2.5.2.2 Operador Lgico ou Operador que resulta VERDADEIRO quando um dos seus operandos lgicos for verdadeiro. Equivale ao OR do Pascal ou || do Java. Observe a tabela abaixo:
Exemplos: A = verdadeiro , B = falso e C = falso A ou nao B nao(A ou B) A ou B C ou B nao A ou B ---> ---> ---> ---> ---> VERDADEIRO FALSO VERDADEIRO FALSO FALSO
2.5.2.3 Operador Lgico e Operador que resulta VERDADEIRO quando todos os seus operandos lgicos forem verdadeiros. Possui precedncia sobre ou e xou. Equivale ao AND do Pascal ou && do Java. Observe a tabela abaixo: Valor 01 Verdadeiro Falso Verdadeiro Falso Valor 02 Verdadeiro Verdadeiro Falso Falso Resultado Verdadeiro FALSO FALSO Falso
Exemplos:
15 de 65 A = verdadeiro , B = falso e C = falso A e ( B ou A) (A e B ) ou nao (B e C) (A e B ) ou (B e C) (A e B) e (A ou B) nao(A ou B) e nao(B e C) 2.5.2.4 Operador Lgico xou Operador que resulta VERDADEIRO se seus dois operandos lgicos forem diferentes, e FALSO se forem iguais. Equivale ao XOR do Pascal. Observe a tabela abaixo: ---> ---> ---> ---> ---> VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO
Exemplos: A = verdadeiro , B = falso e C = falso A e ( B xou A) (A xou B ) e nao (B e C) (A e B ) xou (B ou C) (A e B) xou (A e B) nao(A xou B) xou nao(B e C) 2.5.3 Operadores Aritmticos So os que recebem nmeros e retornam nmeros, aps terem efetuado alguma operao aritmtica. So eles: 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. ---> ---> ---> ---> ---> VERDADEIRO VERDADEIRO FALSO FALSO VERDADEIRO
+,-
16 de 65 \ 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. 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).
+,-,*,/
MOD ou % ^
2.5.5 Operadores de String Operador de concatenao de strings (isto , cadeias de caracteres), quando usado com dois valores (variveis ou constantes) do tipo "caractere". Por exemplo: "Ouri" + "curi" = "Ouricuri" .
2.5.6 Operadores de Atribuio Os operadores de atribuio servem basicamente para atribuirmos valores a variveis e constantes. Operador de atribuio usado com todos os tipos de dados. Por exemplo: A <- 2, isto quer dizer que o valor de A 2; B <- A + 3, significa q B cinco (2+3 = 5)
<-
17 de 65
instrues
condio V F
instrues condio
condio instrues
3.1 Fluxograma
Uma das tcnicas usadas para definir os passos da soluo dos algoritmos a fluxogramao, que consiste em escrev-los utilizando algumas figuras geomtricas interligadas entre si. Estas figuras seguem padres baseados na Norma ISO 5807 1985. A utilizao de smbolos com significados prprios no requer papel especfico e tem a vantagem de ser muito fcil de entender, pois ao visualizar j se entende o que aquela instruo deseja executar, sua desvantagem obrigar o
18 de 65 programador a saber o significado de cada smbolo existente para este fim. Veja os smbolos abaixo: Terminal Utilizado na representao de inicio ou fim do algoritmo.
Processamento
Entrada manual
Exibio
Utilizado na representao de uma estrutura de deciso Deciso (seleo ou condicional), bem nas Estrutura de Repetio: REPITA-AT e ENQUANTO - FAA. Este smbolo representa a definio de um grupo de operaes Preparao estabelecidas como uma sub-rotina de processamento. Utilizado na representao de uma estrutura de Repetio: PARA AT - FAA Conector - Este smbolo representa a entrada ou sada em outra parte do fluxograma. Conector de Pginas Utilizado para interligar partes do fluxogramas em distintas. Seta de orientao de Fluxo
Incio
Lgica de Programao
Fim
Exemplo 2: Algoritmo para receber dois nmeros, via teclado e verificar se so iguais:
20 de 65
21 de 65 Algoritmo para receber dois nmeros, via teclado e verificar se so iguais: algoritmo "Verifica nmeros iguais" var A, B: inteiro inicio leia (A,B) se(A = B) entao escreva (iguais) senao escreva (diferentes) fimse fimalgoritmo
22 de 65
23 de 65
A figura acima representa um algoritmo que no utiliza indentao.
Nomenclatura de Variveis / Constantes, como demonstrado no item 2.3. Comentrios: so informaes que voc inclui no seu algortimo para documentar o que est fazendo. Exemplo:
algoritmo "Verifica se nmeros so iguais" var A, B: inteiro inicio escreva ("Digite o primeiro Nmero: ") leia (A) escreva ("Digite o segundo Nmero: ") leia (B) //teste se A e B so iguais se(A = B) entao escreva (A, " e", B ," so iguais") senao escreva (A, " e", B ," so diferentes") fimse fimalgoritmo
Exemplo de comentrio
Modularizao: um conceito onde o sistema ou software divido em partes distintas. Compe o ferramental necessrio para um programa mais legvel com uma melhor manuteno e melhor desempenho por meio da programao estruturada, falaremos mais sobre modularizao alguns captulos a frente.
24 de 65
OBS: Utiliza-se como padro colocar nome da constante simblica em letra maiscula. Variveis, uma varivel identifica um espao na memria do computador, reservado para armazenar valores de um determinado tipo. Uma varivel definida da seguinte forma: < nomeDaVariavel > : < tipo > < listaDeVariaveis > : < tipo >
25 de 65 ... var PI : numerico a: inteiro Valor1, Valor2: real nomeDoAluno: caractere sinalizador: logico
Resultado na mquina:
26 de 65
Resultado na mquina:
Diagrama de Chaplin:
Inicio Escreva Jean Carlos Inicio
27 de 65 Fluxograma:
Inicio
Jean Carlos
Fim
Resultado na mquina:
Diagrama de Chaplin:
Inicio Escreva Digite um nmero Leia(numero) Escreva O nmero digitado foi:, numero Fim
28 de 65 Fluxograma:
Inicio
Digite um nmero:
numero
Fim
Resultado na mquina:
Exemplo 03: algoritmo, onde se solicite ao usurio o seu nome e sua idade, e posteriormente seja exibido na tela a seguinte mensagem: <nome digitado> tem <idade digitada> anos de idade. Informaes sobre como gerar o resultado: O usurio digitou Joo e depois 20. O resultado ser:
fimalgoritmo
Diagrama de Chaplin:
Inicio
Leia(nome)
Leia(idade)
Fim
30 de 65 Fluxograma:
Inicio
nome
idade
Fim
Resultado na mquina:
Exemplo 04: algoritmo, onde se solicite ao aluno o seu nome e sua nota 01, sua nota 02, e posteriormente seja exibido na tela a seguinte mensagem:
31 de 65 <nome digitado>, sua mdia : <valor da mdia>. Informaes sobre como gerar o resultado: O usurio digitou Joo, e depois 6 e 7. O resultado ser: Joo , sua mdia : 6.5 Pseudocdigo:
algoritmo Ler o nome, duas notas e exibir exibir a mdia var nota1, nota2, media: real nome : caracter inicio escreva(Digite seu nome: ) leia(nome) escreva(Digite a primeira nota: ) leia(nota1) escreva(Digite a segunda nota: ) leia(nota2) media <- (nota1 + nota2)/2 escreva(nome, sua mdia : , media) fimalgoritmo
Diagrama de Chaplin:
Inicio Escreva Digite seu nome: Leia(nome) Escreva Digite a primeira nota: Leia(nota1) Escreva Digite a segunda nota: Leia(nota2) media <- (nota1 + nota2)/2 Escreva nome, sua mdia : , media Fim
32 de 65 Fluxograma:
Inicio
nome
nota1
nota2
Fim
Resultado na mquina:
33 de 65
Fluxograma:
35 de 65 Diagrama de Chaplin:
Resultado na mquina:
36 de 65 Fluxograma:
Diagrama de Chaplin:
37 de 65 Resultado na mquina:
Exemplo 03: Algoritmo que solicite dois nmeros e informe qual o maior: Pseudocdigo:
algoritmo Verifica qual o maior var num1, num2: inteiro Inicio escreva(Digite o primeiro nmero ) leia(num1) escreva(Digite o segundo nmero ) leia(num2) se num1 > num2 entao escreva(O nmero, num1, maior que , num2) senao se num1 < num2 entao escreva(O nmero, num2, maior que , num1) senao escreva(O nmero, num1, igual ao , num2) fimse fimse fimalgoritmo
Resultado na mquina:
38 de 65
Exemplo 04: Faa um algoritmo, onde se solicite ao aluno o seu nome e sua nota 01, sua nota 02, e posteriormente seja exibido na tela as seguintes mensagens: Quando o aluno atingir nota superior ou igual a 6,00: <nome digitado>, sua mdia : <valor da mdia>, voc est aprovado. Caso contrrio: <nome digitado>, sua mdia : <valor da mdia>, voc est reprovado. Pseudocdigo:
algoritmo Calcula mdia e verifica aprovao var nota1, nota2, media: real nome: caracter Inicio escreva(Digite seu nome) leia(nome) escreva(Digite a primeira nota) leia(nota1) escreva(Digite a segunda nota) leia(nota2) media <- (nota1 + nota2) / 2 se media >= 6 entao
39 de 65 Resultado na mquina:
Exemplo 05: Fazer um algoritmo que receba dois nmeros e um operador (+, -, / e *), e de acordo com o operador digitado, efetue a operao correta e exiba o resultado. Caso a operao escolhida seja diviso, verificar se o segundo nmero igual a 0, e sendo, informar que a diviso no possvel. Pseudocdigo:
algoritmo "Calculadora" // Seo de Declaraes var n1, n2: inteiro sinal:caracter inicio escreval("Digite um nmero") leia(n1) escreval("Digite a operao (+, -, * ou / )") leia(sinal) escreval("Digite um nmero") leia(n2) se(sinal = "+") entao escreva("O resultado : ", n1 + n2) senao se(sinal = "-") entao escreva("O resultado : ", n1 - n2) senao se(sinal = "*") entao
40 de 65
escreva("O resultado : ", n1 * n2) senao se(sinal = "/") entao se (n2 = 0) entao escreva("Diviso por zero no permitido") senao escreva("O resultado : ", n1 / n2) fimse senao escreva(sinal, ", no um operador vlido") fimse fimse fimse fimse fimalgoritmo
Resultado na mquina:
41 de 65 Exemplo 06: Fazer um algoritmo que receba o tipo de figura: q, r, t (quadrado, retngulo e tringulo respectivamente). Para q solicitar um lado, r e t dois lados. Calcular e exibir sua rea e valores digitados. Caso se digite tipos diferentes informar. rea do quadrado = L ; rea do quadrado = L1 * L2 rea do tringulo = (L1 * L2) / 2 Pseudocdigo:
algoritmo "Calcula rea de polgonos" // Seo de Declaraes var L1, L2 : inteiro poligono : caracter area : real inicio escreval("Digite um Poligono:") escreval("Q - Quadrado") escreval("R - Retngulo") escreval("T - Tringulo") leia(poligono) se(poligono = "Q") entao escreval("Digite o lado do Quadrado") leia(L1) se(L1 > 0) entao area <- L1 ^ 2 escreva("A rea do Quadrado :", area) senao escreva("O valor do Lado no pode ser menor ou igual a 0") fimse senao se(poligono = "R") entao escreval("Digite o lado 1 do Retngulo") leia(L1) escreval("Digite o lado 2 do Retngulo") leia(L2) se(L1 <= 0) e (L1 <= 0)entao escreva("O valor do Lado no pode ser menor ou igual a 0") senao area <- L1 * L2 escreva("A rea do Retngulo :", area) fimse senao se(poligono = "T") entao escreval("Digite o lado 1 do Tringulo") leia(L1) escreval("Digite o lado 2 do Tringulo") leia(L2) se(L1 <= 0) e (L1 <= 0)entao escreva("O valor do Lado no pode ser menor ou igual a 0")
42 de 65
senao area <- L1 * L2/2 escreva("A rea do Tringulo :", area) fimse senao escreva(poligono, ", no um poligono vlido!!!!") fimse fimse fimse fimalgoritmo
Resultado na mquina:
Exemplo 07: Fazer um algoritmo que receba o tipo de associao de resistores: S ou P (Srie ou Paralelo), e trs valores de resistncias. Caso se digite tipos
43 de 65 diferentes de associao, informar! Se o valor da resistncia for zero informar que este valor invlido. Srie => RT = R1 + R2 + R3 Paralelo => 1/RT = 1/R1 + 1/R2 + 1/R3 ou (R1 * R2) / (R1 +R2) de dois em dois. Pseudocdigo:
Algoritmo "Calcula Resistncia" var acao: caracter RT, R1, R2, R3 : Real inicio escreval("Digite a associao:") escreval("S - Srie") escreval("P - Paralelo") leia(acao) se acao = "S" entao escreva("Digite o valor de R1 ") leia(R1) escreva("Digite o valor de R2 ") leia(R2) escreva("Digite o valor de R3 ") leia(R3) se (R1 <= 0) ou (R2 <= 0) ou (R3 <= 0) entao escreva("Impossvel calcular") senao escreva("O valor da Resistncia : ", R1 + R2 + R3) fimse senao se acao = "P" entao escreva("Digite o valor de R1 ") leia(R1) escreva("Digite o valor de R2 ") leia(R2) escreva("Digite o valor de R3 ") leia(R3) se (R1 <= 0) ou (R2 <= 0) ou (R3 <= 0) entao escreva("Impossvel calcular") senao RT <- (R1 * R2) / R1 + R2 RT <- (RT * R3) / RT + R3 escreva("O valor da Resistncia : ", RT) fimse senao escreva(acao, " um valor invlido") fimse fimse fimalgoritmo
44 de 65 Resultado na mquina:
Exemplo 08: Fazer um algoritmo que calcule os valores de corrente (i), tenso (u) e resistncia (r), de acordo com as frmulas abaixo: u = i * r; i = u / r ; r = u / i Se algum valor digitado for zero informar q invlido.
45 de 65
Pseudocdigo:
Algoritmo "Clculo de P, U, R, I" var acao: caracter U,I,R,P : Real inicio escreval("Indique o que voc pretende calcular:") escreval("P - Potncia") escreval("U - Tenso") escreval("I - Corrente") escreval("R - Resistncia") leia(acao) se acao = "P" entao escreva("Digite o valor de U - Tenso: ") leia(U) escreva("Digite o valor de I - Corrente: ") leia(I) se (U > 0) e (I > 0) entao P <- U * I escreva("O valor de P, : ",P,"W") senao escreva("Impossvel calcular") fimse senao se acao = "I" entao escreva("Digite o valor de U - Tenso: ") leia(U) escreva("Digite o valor de R - Resistncia: ") leia(R) se (U > 0) e (R > 0) entao I <- U / R escreva("O valor de I, : ",I,"A") senao escreva("Impossvel calcular") fimse senao se acao = "U" entao escreva("Digite o valor de R - resistncia: ") leia(R) escreva("Digite o valor de I - Corrente: ") leia(I) U <- R * I escreva("O valor de U, : ",U,"V") senao se acao = "R" entao escreva("Digite o valor de U - Tenso: ") leia(U) escreva("Digite o valor de I - Corrente: ") leia(I) se (U > 0) e (I > 0) entao R <- U / I escreva("O valor de R, : ",R,"ohm") senao escreva("Impossvel calcular") fimse senao
46 de 65
escreva(acao, ", um valor invlido!!") fimse fimse fimse fimse fimalgoritmo
Resultado na mquina:
Exemplo 09: Faa um algoritmo que receba um nmero e verifique se ele impar. Sendo verificar se mltiplo de 9, e quando for informar ao usurio com a seguinte mensagem: <Nmero digitado> impar e mltiplo de 9. quando for apenas impar exibir a mensagem: <Nmero digitado> impar e , mas no mltiplo de 9. caso contrrio, apresentar a seguinte informao: <Nmero digitado> no impar:
47 de 65
Pseudocdigo:
algoritmo "Verifica se impar e mltiplo 9" // Data : 2/5/2011 // Seo de Declaraes var num, res, eDivi9 : inteiro inicio escreva("Digite um nmero: ") leia(num) res <- num mod 2 eDivi9 <- num mod 9 se (res <> 0) e (eDivi9 = 0) entao escreva(num, ", impar e mltiplo de 9") senao se (res <> 0) e (num mod 9 <> 0) entao escreva(num, ", impar, mas no mltiplo de 9") senao escreva(num, ", Nao impar") fimse fimse fimalgoritmo
Resultado na mquina:
48 de 65 O VisuAlg implementa (com certas variaes) o comando case do Pascal ou switch case do Java. A sintaxe a seguinte: Estrutura: escolha <expresso-de-seleo> caso <exp11>, <exp12>, ..., <exp1n> <sequncia-de-comandos-1> caso <exp21>, <exp22>, ..., <exp2n> <sequncia-de-comandos-2> ... outrocaso <sequncia-de-comandos-extra> fimescolha Quando o resultado da avaliao de <expresso-de-seleo> for igual ao valor de <exp11> ou <exp12> ou <exp1n> (caso <exp11>, <exp12>, ..., <exp1n>), todos os comandos da <sequncia-de-comandos-1> so executados, caso contrrio, sero testados os valores para <exp21> ou <exp22> ou <exp2n> (caso <exp21>, <exp22>, ..., <exp2n>) e neste caso, todos os comandos da <sequnciade-comandos-2> so executados, e assim por diante. Se ocorrer de nenhum dos valores testados nas linhas com a palavra-chave caso, ocorrer a execuo do que for previso com a palavra-chave outrocaso, ou seja, todos os comandos da <sequncia-de-comandos-extra> so executados. Exemplo 01: Algoritmo para selecionar um dia da semana: Pseudocdigo:
Algoritmo "Dias da semana" var dia: inteiro inicio escreval("Digite um nmero de 1 a 7") leia(dia) escolha dia caso 1 escreva("Domingo") caso 2 escreva("Segunda-feira") caso 3 escreva("Tera-feira") caso 4
49 de 65
escreva("Quarta-feira") caso 5 escreva("Quinta-feira") caso 6 escreva("Sexta-feira") caso 7 escreva("Sbado") outrocaso escreva(dia, " um valor invlido") fimescolha fimalgoritmo
Fluxograma:
50 de 65 Resultado na mquina:
Exemplo 02: Algoritmo que solicita ao usurio a quantidade e o cdigo de um produto e depois seja exibido qual produto, quantidade de produtos informada e o valor total da compra: Veja a tabela abaixo: Cdigo 1 2 3 4 5 Feijo Arroz Macarro Picanha Leite Produto Preo R$2,30 R$4,21 R$1,10 R$9,66 R$2,15
Pseudocdigo:
Algoritmo "Localiza produtos" var codigo: inteiro quantidade, valorTotal: real inicio escreval("Digite o cdigo do produto:") leia(codigo)
51 de 65
escolha codigo caso 1 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 2.30 escreva("Voc comprou", quantidade, "Kg de Feijo e vai pagar, R$",valorTotal) fimse caso 2 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 4.21 escreva("Voc comprou", quantidade, "Kg de Arroz e vai pagar, R$",valorTotal) fimse caso 3 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 1.10 escreva("Voc comprou", quantidade, "Kg de Macarro e vai pagar, R$",valorTotal) fimse caso 4 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 9.66 escreva("Voc comprou", quantidade, "Kg de Picanha e vai pagar, R$",valorTotal) fimse caso 5 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 2.15 escreva("Voc comprou", quantidade, "L de Leite e vai pagar, R$",valorTotal) fimse outrocaso escreva(codigo, " um valor invlido") fimescolha fimalgoritmo
52 de 65 Resultado na mquina:
Exemplo 03: Algoritmo para exibir quantidade de dias de um determinado ms: Pseudocdigo:
Algoritmo "Dias / Ms" var mes: inteiro inicio escreval("Digite um Ms de 1 a 12") leia(mes) escolha mes caso 1, 3, 5, 7, 8, 10, 12 escreva("O Ms",mes, ", possui 31 mess") caso 2 escreva("O Ms",mes, ", possui 28 mess") caso 4, 6, 9, 11 escreva("O Ms",mes, ", possui 30 mess") outrocaso escreva(mes, " um valor invlido") fimescolha fimalgoritmo
Resultado na mquina:
53 de 65
54 de 65
enquanto <expresso-lgica> faca <sequncia-de-comandos> fimenquanto Neste tipo de lao, a <expresso-lgica> (condio de parada) primeiramente verificada, e se for verdadeira a <sequncia-de-comandos> executada. No final da execuo da <sequncia-de-comandos>, atingir o comando fimenquanto, volta-se ao incio do lao onde a condio de parada <expressolgica> novamente testada, dando prosseguimento a repetio do lao at a <expresso-lgica>, retornar falso. Exemplo 01: Algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros a partir do digitado at 50: Pseudocdigo:
algoritmo "sequencia de nmeros at 50" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num:inteiro inicio escreva("Digite um numero: ") leia(num) enquanto num <= 50 faca escreva(num) num <- num + 1 fimenquanto fimalgoritmo
55 de 65 Fluxograma:
Diagrama de Chaplin:
56 de 65 Resultado na mquina:
Exemplo 02: Elabore um algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros de 1 at ele: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1 enquanto aux <= num faca escreva(aux) aux<-aux+1 fimenquanto fimalgoritmo
Resultado na mquina:
57 de 65 Exemplo 03: Elabore um algoritmo que a partir do exemplo 2 exiba tambm a soma dos nmeros gerados: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado + Soma" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,soma,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1 soma<-0 enquanto aux<=num faca escreval(aux) soma<-soma+aux aux<-aux+1 fimenquanto escreva("A soma e: ",soma) fimalgoritmo
Resultado na mquina:
Exemplo 04: Elabore um algoritmo que solicite o nome do usurio ou a letra s para sair, e enquanto no se desejar sair, solicitar tambm o telefone: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var
58 de 65
nome, telefone: caracter inicio escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) fimenquanto fimalgoritmo
Resultado na mquina:
Exemplo 05: Elabore um algoritmo que a partir do exemplo 4 exiba tambm a quantidade de usurios cadastrados: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao e conta usurios" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var nome, telefone: caracter cont: inteiro inicio cont <- 0 escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) cont <- cont + 1 fimenquanto escreva("Total de usurios cadastrados: ", cont) fimalgoritmo
59 de 65
Resultado na mquina:
60 de 65 Exemplo 01: Algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros a partir do digitado at 50: Pseudocdigo:
algoritmo "sequencia de nmeros at 50" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num:inteiro inicio escreva("Digite um numero: ") leia(num) repita escreva(num) num <- num + 1 ate num > 50 fimalgoritmo
Se o usurio digitar um nmero maior que 50 ele ser exibido pelo menos uma vez! Corrigvel com a estrutura se, no utilizada para simplificar o algoritmo
Observe que utilizando a estrutura enquanto, o teste era efetuado ao contrrio: num <= 50, e no, num > 50
Fluxograma:
61 de 65
Diagrama de Chaplin:
Resultado na mquina:
Exemplo 02: Elabore um algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros de 1 at ele: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1
62 de 65
enquanto aux <= num faca escreva(aux) aux<-aux+1 fimenquanto fimalgoritmo
Resultado na mquina:
Exemplo 03: Elabore um algoritmo que a partir do exemplo 2 exiba tambm a soma dos nmeros gerados: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado + Soma" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,soma,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1 soma<-0 enquanto aux<=num faca escreval(aux) soma<-soma+aux aux<-aux+1 fimenquanto escreva("A soma e: ",soma) fimalgoritmo
63 de 65 Resultado na mquina:
Exemplo 04: Elabore um algoritmo que solicite o nome do usurio ou a letra s para sair, e enquanto no se desejar sair, solicitar tambm o telefone: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var nome, telefone: caracter inicio escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) fimenquanto fimalgoritmo
Resultado na mquina:
Exemplo 05:
64 de 65 Elabore um algoritmo que a partir do exemplo 4 exiba tambm a quantidade de usurios cadastrados: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao e conta usurios" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var nome, telefone: caracter cont: inteiro inicio cont <- 0 escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) cont <- cont + 1 fimenquanto escreva("Total de usurios cadastrados: ", cont) fimalgoritmo
Resultado na mquina:
65 de 65
BIBLIOGRAFIA
FORBELLONE, Andre Luiz Vilar; EBERSPACHER, Henri Frederico. Lgica de programao: a construo de algoritmos e estruturas de dados. 3. ed. So Paulo: Makron Books; Pearson Education do Brasil, 2006. ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi. Fundamentos da Programao de Computadores: Algortimos, Pascal, C++ e Java. 2. ed. So Paulo: Pearson Education do Brasil, 2010. PUGA, Sandra; RISSETTI Gerson. Lgica de Programao e Estruturas de Dados: com Aplicaes em Java. 2. ed. So Paulo: Pearson Education do Brasil, 2010. ZIVIANI, Nivio. Projeto de Algoritmos: com Implementaes em Java e C ++. 2. ed. So Paulo: Thomson; Cengage Learning, 2007. FREITAS, Maria Ester; DANTAS, Marcelo. Algoritmos e Lgica de Programao. 2. ed. So Paulo: Cengage Learning, 2011. WIKIBOOKS (2010). Introduo Programao. Acessado em: 02/ 02/ 2011, em: http://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa %C3%A7%C3%A3o/Defini%C3%A7%C3%B5es_sobre_L %C3%B3gica_de_Programa%C3%A7%C3%A3o#T.C3.A9rmino_do_algoritmo WIKIPROG(2010). Algoritmo (Indentao). Acessado em: 02/ 02/ 2011,em: http://pt.wikipedia.org/wiki/Indentao