Escolar Documentos
Profissional Documentos
Cultura Documentos
LGICA DE PROGRAMAO
Governo Federal Ministro de Educao Fernando Haddad IFES Instituto Federal do Esprito Santo Diretor Geral Jadir Jos Pla Diretor de Ensino Dnio Rebello Arantes Coordenadora do CEAD Centro de Educao a Distncia Yvina Pavan Baldo Coordenadoras da UAB Universidade Aberta do Brasil Yvina Pavan Baldo Maria das Graas Zamborlini Designer Instrucional Jonathan Toczek Souza Curso Tcnico de Informtica Professor Especialista/Autor Rafael Vargas Mesquita dos Santos DIREITOS RESERVADOS CEFET-ES Centro Federal de Educao Tecnolgica do Esprito Santo Av. Vitria Jucutuquara Vitria ES - CEP - (27) 3331.2139 Crditos de autoria da editorao Capa: Leonardo Tavares Pereira Projeto grfico: Danielli Veiga Carneiro Iconografia: Moreno Cunha Editorao eletrnica: Rafael Vargas Mesquita dos Santos Reviso de texto: Ilioni Augusta da Costa Maria Madalena Covre da Silva COPYRIGHT proibida a reproduo, mesmo que parcial, por qualquer meio, sem autorizao escrita dos autores e do detentor dos direitos autorais.
Ol, Aluno(a)!
ICONOGRAFIA
Veja, abaixo, alguns smbolos utilizados neste material para gui-lo em seus estudos.
Fala do professor.
Atividades que devem ser elaboradas por voc, aps a leitura dos textos.
Sumrio
CAPTULO 1 - INTRODUO .......................................................................................................................... 9 1.1. 1.2. 1.3. 1.4. 1.5. 1.6. 2.1. 2.2. 2.3. 2.4. 3.1. SEQUNCIA LGICA ....................................................................................................................... 9 INSTRUES ..................................................................................................................................... 9 ALGORITMO .................................................................................................................................... 10 LINGUAGEM DE COMPUTADOR ................................................................................................. 12 LINGUAGEM DE PROGRAMAO .............................................................................................. 13 PROGRAMA ..................................................................................................................................... 13 PSEUDO CDIGO ............................................................................................................................ 15 DIRETRIZES PARA CONSTRUO DE ALGORITMOS ............................................................. 15 PARTES ............................................................................................................................................. 16 EXEMPLO DE ALGORITMO .......................................................................................................... 17 O QUE UM DIAGRAMA DE BLOCO?......................................................................................... 19
CAPTULO 3 - DIAGRAMA DE BLOCO ....................................................................................................... 19 CAPTULO 4 - VISUALG - ITENS FUNDAMENTAIS................................................................................. 23 4.1. CONSTANTES.................................................................................................................................. 23 4.1.1. Constantes Numricas ................................................................................................................... 24 4.1.2. Constantes Lgicas........................................................................................................................ 24 4.1.3. Constantes Literais ........................................................................................................................ 24 4.2. VARIVEIS ...................................................................................................................................... 25 4.2.1. Declarao de variveis ................................................................................................................ 26 4.3. EXPRESSES ARITMTICAS........................................................................................................ 27 4.3.1. Prioridade das Operaes............................................................................................................. 28 4.4. EXPRESSES RELACIONAIS ........................................................................................................ 28 4.5. EXPRESSES LGICAS ................................................................................................................. 30 CAPTULO 5 - VISUALG ITENS COMPLEMENTARES......................................................................... 35 5.1. 5.2. 5.3. 5.4. COMENTRIOS ............................................................................................................................... 35 FUNCES MATEMTICAS............................................................................................................ 36 COMANDOS DE ENTRADA E SADA ........................................................................................... 36 ATRIBUIO ................................................................................................................................... 37
CAPTULO 6 - ESTRUTURA DE DECISO E REPETIO ..................................................................... 43 6.1. COMANDOS DE DECISO ............................................................................................................. 43 6.1.1. se entao .......................................................................................................................................... 44 6.1.2. se ... entao ... senao........................................................................................................................ 45 6.1.3. escolha ... caso............................................................................................................................... 46 6.2. COMANDOS DE REPETIO ........................................................................................................ 49 6.2.1. enquanto x faca.............................................................................................................................. 50 6.2.2. repita ... ate x ................................................................................................................................. 51 6.2.3. para ... de ... ate ... faca ................................................................................................................. 52 CAPTULO 7 - ESTRUTURA DE DADOS HOMOGNEAS - VETOR ...................................................... 55 7.1. ESTRUTURAS DE DADOS.............................................................................................................. 55 7.2. VARIVEIS COMPOSTAS HOMOGNEAS ................................................................................. 59 7.3. VARIVEIS COMPOSTAS UNIDIMENSIONAIS VETORES.................................................... 60 7.3.1. Declarao de Vetores .................................................................................................................. 60 CAPTULO 8 - MODULARIZAO............................................................................................................... 63 8.1. 8.2. INTRODUO ................................................................................................................................. 63 PROCEDIMENTOS E FUNES .................................................................................................... 64
Funes..........................................................................................................................................64 Passagem de Parmetros por Valor e Passagem de Parmetros por Referncia .........................65 Procedimentos ...............................................................................................................................66 Uso de Funes e Procedimentos ..................................................................................................66
Ol! Meu nome Rafael Vargas Mesquita, responsvel pela disciplina de Lgica de Programao. Atuo como professor do IFES h trs anos. Sou graduado em Cincia da Computao (2001) e Mestre em Gesto da Qualidade de Software (2007), ambos pela UFLA. Minhas reas de interesse so: Qualidade de Software, Melhoria de Processo de Software, Medio de Software, Anlise e Projeto de Sistemas Orientados a Objetos. Nesta disciplina voc entender alguns conceitos importantes relacionados a Algoritmos. Os captulos 1, 2, 3 e 4 visam apresentar conceitos iniciais a respeito da disciplina. Nos captulos 5 e 6 vocs comecaro a desenvolver algoritmos simples em uma linguagem alto nvel. Os ltmos captulos, 7 e 8, so captulos nos quais vamos elaborar algoritmos mais complexos, na finalidade de aprofundarmos na lgica de programao. O objetivo deste material auxili-lo no estudo da disciplina de Lgica de Programao, por meio de dicas e sugestes que destacam os pontos mais importantes a serem estudados. Aqui voc encontrar conceitos com os quais trabalharemos ao longo de todo o Curso. importante esclarecer que, alm deste material, voc poder encontrar outros materiais, listas de exerccios, etc no FTP. Para acessar o FTP acesse: ftp.ci.cefetes.br Bons estudos, e sucesso! Prof. Rafael Vargas Mesquita
Lgica de Programao
Captulo 1 - INTRODUO
Prezado aluno, Comearemos o primeiro captulo com uma introduo sobre Algoritmos. Para entendermos Algoritmos, primeiramente precisaremos definir alguns conceitos fundamentais como: Linguagem de Computador, Linguagem de Programao, Programa, etc. Em geral, esta disciplina acumulativa, ou seja, a compreenso dos conceitos estudados em um captulo a base para o entendimento dos captulos posteriores. Bom estudo! A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para o desenvolvimento. Ento o que lgica? Lgica de Programao a tcnica de encadear pensamentos para atingir determinado objetivo.
1.1.
SEQUNCIA LGICA
Estes pensamentos podem ser descritos como uma seqncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa. Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um problema.
1.2.
INSTRUES
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo.
IFES Instituto Federal do Esprito Santo
Em Informtica, porm, instruo a informao que indica a um computador uma ao elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem seqencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas etc. evidente que essas instrues tm que ser executadas em uma ordem adequada no se podem descascar as batatas depois de frit-las. Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Instrues so um conjunto de regras ou normas definidas par a a realizao ou emprego de algo. Em Informtica, o que indica a um computador uma ao elementar a executar.
1.3.
ALGORITMO
Um Algoritmo formalmente uma seqncia finita de passos que levam a execuo de uma tarefa.
Podemos pensar em algoritmo como uma receita, uma seqncia de instrues para atender a uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Como exemplos de algoritmos podemos citar os algoritmos das operaes bsicas (adio, multiplicao, diviso e subtrao) de nmeros reais decimais. Outros exemplos seriam os manuais de aparelhos eletrnicos, como um videocassete, que explicam passo-a-passo como, por exemplo, gravar um evento. At mesmo as coisas mais simples, podem ser descritas por seqncias lgicas. Por exemplo:
10
Instituto Federal do Esprito Santo
Lgica de Programao
Chupar uma bala. Pegar a bala Retirar o papel. Chupar a bala. Jogar o papel no lixo.
Fritar Batatas Suponhamos a existncia de uma dispensa onde se encontram as batatas e que haja um cesto para se colocar estas batatas. Suponhamos ainda que o leo, a panela, a faca, o prato e o sal estejam em um armrio. Pegar cesto. Ir dispensa. Colocar as batatas no cesto. Trazer o cesto para prximo do fogo. Pegar a panela e o leo no armrio. Colocar o avental. Pegar a faca no armrio. Descascar as batatas que esto no cesto. Cortar as batatas em pedaos menores. Colocar o leo na panela. Colocar a panela com leo no fogo. Ligar o fogo. Aguardar at o leo esquentar. Colocar as batatas no leo. Aguardar fritar. Pegar prato no armrio. Retirar batatas da panela . Colocar as batatas no prato. Pegar o sal no armrio. Colocar sal na batata. Jogar cascas da batata no lixo. Vamos supor que a colocao do avental seja condicionada a cor da roupa da pessoa que frita as batatas. Se a cor da roupa for clara o avental e colocado seno o avental no colocado. Vejamos como fica o algoritmo: Pegar cesto. Ir dispensa. Colocar as batatas no cesto. Trazer o cesto para prximo do fogo.
IFES Instituto Federal do Esprito Santo
11
Curso Tcnico em Informtica Pegar a panela e o leo no armrio. Se roupa clara ento Colocar o avental. Pegar a faca no armrio. Descascar as batatas que esto no cesto. Cortar as batatas em pedaos menores. Colocar o leo na panela. Colocar a panela com leo no fogo. Ligar o fogo. Aguardar at o leo esquentar. Colocar as batatas no leo. Aguardar fritar. Pegar prato no armrio. Retirar batatas da panela. Colocar as batatas no prato. Pegar o sal no armrio. Colocar sal na batata. Jogar cascas da batata no lixo. Ns podemos tambm subdividir certas instrues. Por exemplo, a instruo: Descascar as batatas que esto no cesto. Pode ser mais bem detalhada na forma: Enquanto houver batatas no descascadas no cesto faa Descascar uma batata.
1.4.
LINGUAGEM DE COMPUTADOR
O computador possui uma linguagem prpria, formada por conjuntos especficos de zeros e uns ( Linguagem Binria ou de Mquina) para a qual todos os caracteres da linguagem humana so convertidos de modo que o computador possa entender os comandos que desejamos que ele execute. A Linguagem de Mquina a forma de se representar os dois estados (ligado/desligado) da corrente eltrica utilizados nos circuitos eletrnicos dos computadores. a nica linguagem inteligvel pelo computador.
12
Instituto Federal do Esprito Santo
Lgica de Programao
1.5.
LINGUAGEM DE PROGRAMAO
Como a Linguagem de Mquina de difcil compreenso e manipulao, foram desenvolvidas linguagens intermedirias entre a da mquina e a do homem; estas linguagens denominam-se Linguagens de Programao. A Linguagem de Programao um mtodo padronizado para expressar instrues para um computador.
Dizemos que quanto mais prxima da linguagem humana for a linguagem de programao ela de alto nvel, caso contrrio considerado baixo nvel. Os programas so geralmente, escritos em linguagem de programao e convertidos para linguagem de mquina atravs de programas especficos. Tais programas se dividem em duas categorias: Compiladores: convertem o programa escrito em uma linguagem de programao em linguagem de mquina uma nica vez, a partir da, toda vez que o programa executado ele executado j no formato binrio. Interpretadores: convertem o programa escrito em uma linguagem de programao em linguagem de mquina toda vez que ele for executado.
1.6.
PROGRAMA
Os Programas de Computadores nada mais so do que algoritmos escritos numa linguagem de programao (Visualg, Pascal, C, Cobol, Fortran, Visual Basic, Java, entre outras) e que so interpretados e executados por uma mquina, no caso um computador.
Notem que dada esta interpretao rigorosa, um programa , por natureza, muito especfico e rgido em relao aos algoritmos da vida real.
13
Curso Tcnico em Informtica Notar que: Toda linguagem de programao define um conjunto de instrues que ela consegue converter para linguagem de mquina. Logo se tivermos uma linguagem que entenda a instruo: Descascar todas as batatas. Ele ir executar tal instruo, entretanto normalmente as linguagens de programao no definem instrues to especficas, da necessrio transformar esta instruo em sub-instrues compreensveis pela linguagem escolhida e passvel de gerao de linguagem de computador. Vamos resumir o contedo visto neste captulo: Aprendemos conceitos importantes, como: Instrues, em informtica, o que indica a um computador uma ao elementar a executar. Algoritmo uma seqncia finita de passos que levam a execuo de uma tarefa. Linguagem de Mquina ou de Computador a nica linguagem inteligvel pelo computador. Linguagem de Programao um mtodo padronizado para expressar instrues para um computador. Programa algoritmos escritos numa linguagem de programao.
Atividades
1. Elabore um algoritmo para tomar banho. 2. Faa um algoritmo para trocar o pneu de um carro. 3. Faa um algoritmo para trocar uma lmpada. (Descreva em detalhes) 4. Escreva um algoritmo para descrever como voc faz para ir de sua casa at a escola.
14
Instituto Federal do Esprito Santo
Lgica de Programao
Prezado aluno, Agora que voc j tem uma viso geral de algoritmos, apresentaremos neste captulo como desenvolver alguns algoritmos simples. Os algorimos desenvolvidos nesta fase da disciplina so bem simples, todavia no menos importantes, pois a partir do entendimendo destes vocs tero uma maior facilidade na compreenso dos demais. Bom estudo!
2.1.
PSEUDO CDIGO
Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso posterior implementao em uma linguagem de programao, ou seja, quando formos programar em uma linguagem, por exemplo C, estaremos gerando cdigo em C. Por isso os algoritmos so independentes das linguagens de programao. Ao contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo. O algoritmo deve ser fcil de interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao.
2.2.
Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira simples e objetiva. Para isso utilizaremos algumas tcnicas: Usar somente um verbo por frase.
15
Curso Tcnico em Informtica Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica. Usar frases curtas e simples. Ser objetivo. Procurar usar palavras que no tenham sentido dbio.
2.3.
PARTES
No Captulo anterior vimos que ALGORITMO uma seqncia lgica de instrues que podem ser executadas. importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo, como por exemplo: COMO FAZER ARROZ DOCE ou ento CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs partes fundamentais (Figura 2-1).
Onde temos: ENTRADA: So os dados de entrada do algoritmo. Em algoritmos de alto nvel podem ser identificados por verbos como: Ler, Receber etc. PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final SADA: So os dados j processados. Em algoritmos de alto nvel podem ser identificados por verbos como: Retornar, Imprimir, Mostrar etc. A analogia com o homem pode ser observado na Figura 2-2.
16
Instituto Federal do Esprito Santo
Lgica de Programao
2.4.
EXEMPLO DE ALGORITMO
Imagine o seguinte problema: Calcular a mdia final de um aluno da 3 Srie. O aluno realizar quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = (P1 + P2 + P3 + P4) / 4 Para montar o algoritmo proposto, faremos trs perguntas:
a) Quais so os dados de entrada?
17
Algoritmo Receba a nota da prova1. Receba a nota de prova2. Receba a nota de prova3. Receba a nota da prova4. Some todas as notas e divida o resultado por 4. Mostre o resultado da diviso. Vamos resumir o contedo visto neste captulo: Aprendemos que os algoritmos podem ser descritos utilizando-se uma linguagem denominada Pseudo-Cdigo. Esta linguagem nos ajuda a entendermos os passos que um algoritmo possui. Compreendemos algumas regras bsicas que devem ser seguidas para construo de algoritmos, como: utilizar apenas um verbo por frase, etc. E, principalmente, passamos a entender que podemos dividir nosso algoritmo em trs partes: Entrada, Processamento e Sada.
Atividades
1. Identifique os dados de entrada, processamento e sada no algoritmo abaixo: Receba cdigo da pea. Receba valor da pea. Receba Quantidade de peas. Calcule o valor total da pea (Quantidade * Valor da pea). Mostre o cdigo da pea e seu valor total. 2. Faa um algoritmo para Calcular o estoque mdio de uma pea, sendo que:
ESTOQUEMDIO = (QUANTIDADE MNIMA + QUANTIDADE MXIMA) /2
18
Instituto Federal do Esprito Santo
Lgica de Programao
3.1.
O Diagrama de Blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento. Existem diversos smbolos em um diagrama de bloco. Na Figura 3-1 apresentaremos os principais:
Dentro do smbolo sempre ter algo escrito, pois somente os smbolos no nos dizem nada. Veja no exemplo a seguir:
IFES Instituto Federal do Esprito Santo
19
Curso Tcnico em Informtica Exemplos de Diagrama de Bloco (Figura 3-2): CHUPAR UMA BALA INCIO CALCULAR MDIA DE 4 NOTAS INCIO
PEGAR BALA
RECEBER N1
RETIRAR O PAPEL
RECEBER N2
CHUPAR A BALA
RECEBER N3
RECEBER N4
FIM
MDIA
FIM
20
Instituto Federal do Esprito Santo
Lgica de Programao
Vamos resumir o contedo visto neste captulo: Aprendemos a construir algoritmos graficamente, utilzando smbolos padres, os quais juntos constroem o que chamado de Diagrama de Blocos. Ser importante este entendimento, pois alguns algoritmos mais complexos, de captulos posteriores, sero melhor entendidos graficamente, ou seja, em Diagrama de Blocos.
Atividades
1. Construa um diagrama de blocos que: Leia a cotao do dlar. Leia um valor em dlares. Converta esse valor para Real. Mostre o resultado. 2. Desenvolva um diagrama que: Leia 4 (quatro) nmeros. Calcule o quadrado para cada um. Somem todos. Mostre o resultado. 3. Faa testes numricos para testar seu algoritmo. 4. Identifique nestes algoritmos o que entrada, processamento e sada.
21
22
Instituto Federal do Esprito Santo
Lgica de Programao
Prezado aluno, Para compreendermos melhor como elaborar algoritmos que possam ser executados em um computador precisamos escolher uma Linguagem de Programao. A partir desta escolha, poderemos ento escrever nossos algoritmos na Linguagem de Programao escolhida, fazendo com que estes algoritmos possam ser considerados Programas de Computador. Nesta disciplina a Linguagem de Programao escolhida foi o Visualg. Esta uma Linguagem bem prxima a nossa linguagem natural, e por isso ficar bem fcil de aprendermos a Lgica de Programao em si. A partir deste captulo os conceitos apresentados sero associados a Linguagem de Programao Visualg. Bom estudo!
4.1.
CONSTANTES
Uma Constante um determinado valor fixo que no se modificar ao longo do tempo, durante a execuo do programa.
Uma constante pode ser um nmero (como se conhece na Matemtica), um valor lgico ou uma seqncia de caracteres com algum significado para o problema em estudo. No contexto de Algoritmos escritos em Visualg uma constante pode ser classificada como sendo numrica (inteira ou real), lgica ou literal.
23
24
Instituto Federal do Esprito Santo
Lgica de Programao
4.2.
VARIVEIS
Na Matemtica, uma varivel a representao simblica dos elementos de certo conjunto. Na Informtica, uma Varivel um espao de memria em uma determinada posio, cujo contedo pode variar ao longo do tempo durante a execuo de um programa, mas a cada instante existe um nico valor. Toda varivel definida por um nome ou identificador. Um identificador uma seqncia de caracteres alfanumricos vlida na nomeao de variveis. Nos compiladores atuais uma seqncia validade de caracteres alfanumricos definida como: O primeiro caractere deve ser obrigatoriamente uma letra. Os caracteres seguintes devem ser letras ou dgitos, no sendo permitido o uso de caracteres especiais. No devemos utilizar acentos (, ^, ~). Isso porque as linguagens de programao classificam estes smbolos como caracteres especiais. Exemplos: Identificadores vlidos A NOTA X5 A33C423
25
Curso Tcnico em Informtica FITTKM nome_da_cidade Identificadores No Vlidos 5B (14)B5 B(B) XY 5(KM32) Considerando a linguagem Visualg importante entender que: o caractere underline (_) pode ser utilizado em identificadores. J o caractere fem (-) no deve ser utilizado.
Lgica de Programao
flag, teste, maior_de_18 : logico Observe que o nome dos tipos deve estar sem acentos. Exemplos: inteiro, real, literal e logico. No Visualg a palavra literal pode ser substituda por caractere, ambos representam o mesmo tipo.
4.3.
EXPRESSES ARITMTICAS
Expresso aritmtica aquela que utiliza operadores aritmticos e cujos operandos so constantes e/ou variveis do tipo numrico. So operadores aritmticos: Adio, Subtrao, Multiplicao, Diviso, Potenciao e Radiciao. A tabela abaixo mostra exemplos de utilizao de operadores na matemtica em comparao com a utilizao no Visualg. Para tal, considere A e B como sendo variveis numricas.
OPERADOR Adio Subtrao Multiplicao Diviso Potenciao Radiciao MATEMTICA (EXEMPLO) A+B AB AxB A/B AB
Y
27
4.4.
EXPRESSES RELACIONAIS
Expresses Relacionais so aquelas que utilizam operadores relacionais, cujos operandos em uma relao so do mesmo tipo e cujo resultado do tipo lgico. So operadores relacionais (Tabela 4-1):
DESCRIO IGUAL A DIFERENTE DE MAIOR QUE MENOR QUE MAIOR OU IGUAL A MENOR OU IGUAL A SMBOLO = <> > < >= <=
28
Instituto Federal do Esprito Santo
Lgica de Programao
Exemplo: Suponhamos duas variveis do tipo numrico: A = 50 B = 30 Ao fazermos comparaes entre elas teramos o seguinte soluo (Tabela 4-2):
EXPRESSO A=B A <> B A>B A<B A >= B A <= B RESULTADO FALSO VERDADEIRO VERDADEIRO FALSO VERDADEIRO FALSO Tabela 4-2: Soluo para A = 50 e B = 30
Fazendo uma pequena referncia aos diagramas de blocos o smbolo que indica os operadores relacionais (Figura 4-1):
Vejamos ento alguns exemplos de uso, na Figura 4-2 temos a comparao de duas variveis, na Figura 4-3 temos a comparao de uma varivel numrica com uma constante numrica e na Figura 4-4 temos a comparao de uma varivel (literal) com uma constante literal.
29
codigo = codant
Sim
No
Sim
No
Figura 4-3: Comparando uma varivel (numrica) com uma constante numrica
nome = Jos
Sim
No
Figura 4-4: Comparando uma varivel (literal) com uma constante literal
4.5.
EXPRESSES LGICAS
Expresses lgicas so aquelas que utilizam operadores lgicos e cujos operandos so expresses relacionais, pois seus resultados so do tipo lgico, constantes e/ou variveis do tipo lgico. Toda expresso lgica tem como resultado um valor lgico VERDADEIRO ou FALSO.
30
Instituto Federal do Esprito Santo
Lgica de Programao
E: Uma expresso lgica ( E ) verdadeira se todos os seus operandos possurem o valor VERDADEIRO. OU: Uma expresso lgica ( OU ) verdadeira se algum de seus operandos possuir o valor VERDADEIRO. NAO: Uma expresso lgica ( NO ) verdadeira se seu operando FALSO. A Tabela 4-4 ilustra o comportamento dos operadores lgicos:
1 VALOR VERDADEIRO VERDADEIRO FALSO FALSO VERDADEIRO VERDADEIRO FALSO FALSO VERDADEIRO FALSO OPERADOR E E E E OU OU OU OU NAO NAO 2 VALOR VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO FALSO RESULTADO VERDADEIRO FALSO FALSO FALSO VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO VERDADEIRO
31
Curso Tcnico em Informtica Exemplo: Suponha que temos 3 variveis A = 50, B = 80 e C = 10 Os resultados das expresses seriam conforme a Tabela 4-5:
EXPRESSES A=B A<>B A>B A<B A >= B A <= B E OU NAO E OU NAO B>C B=C B>C B<C RESULTADO FALSO VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO
Vamos resumir o contedo visto neste captulo: Neste captulo definimos: Constante: um determinado valor fixo que no se modificar ao longo do tempo, durante a execuo do programa. Varivel: um espao de memria em uma determinada posio, cujo contedo pode variar ao longo do tempo durante a execuo de um programa, mas a cada instante existe um nico valor. Vimos tambm que podemos realizar expresses com estas constantes e variveis. Os tipos de expresses so: Aritmticas, Relacionais e Lgicas.
32
Instituto Federal do Esprito Santo
Lgica de Programao
Atividades
1. Identifique o tipo das constantes utilizando a seguinte legenda: 1 Constante Numrica 2 Constante Lgica 3 Constante Literal a. ( b. ( c. ( d. ( e. ( f. ( g. ( ) 33 ) 33 ) Constante Lgica ) Constante Literal ) Constante Numrica ) 5878987.23 ) verdadeiro h.( ) falso i. ( ) verdadeiro j. ( ) falso k. ( ) 123KO l. ( ) 123verdadeiro123 m. ( ) 9999999 n. ( ) fim
2. Assinale X nos identificadores vlidos: a. ( ) VALOR b. ( ) 33 c. ( ) 33 d. ( ) X2 e. ( ) 2X f. ( ) x2 g. ( ) 2X h.( ) AHHHH i. ( ) AHHHH!!! j. ( ) SALARIO-LQUIDO k. ( ) NOTA*DO*ALUNO l. ( ) m{23} m. ( ) sacada256 n. ( ) 256sacada o. ( ) NOMEDAEMPRESA
3. Supondo que temos as variveis SALARIO, IR e SALLIQ e que os valores esto representados na tabela abaixo. Aplicando as expresses na tabela qual o resultado lgico obtido:
4. Sabendo que A = 3, B = 7 e C = 4, informe se as expresses abaixo so V (verdadeiro) ou F (falso). a. ( b.( c. ( d.( e. ( f. ( )(A+B)>C ) B >= ( A + 2 ) )C=(BA) ) ( B A ) <= C ) ( B + A ) <= C ) ( C+ A) > B h.( i. ( j. ( k.( l. ( ) (B^2 A^2 2 ) >= 49 ) ( C^(1/2) + B A/2 ) < 15 ) NAO ( C^2 = (A^2 + B) ) ) NAO ( C^2 < > (A^2 + B) ) ) NAO ( NAO ( NAO ( NAO ( A >B)))) 33
Curso Tcnico em Informtica g.( ) ( B^2 A^2 ) >= 39 5. Repita o exerccio anterior com A = 1, B = 2 e C = 16. a. ( b.( c. ( d.( e. ( f. ( g.( )(A+B)>C ) B >= ( A + 2 ) )C=(BA) ) ( B A ) <= C ) ( B + A ) <= C ) ( C+ A) > B ) ( B^2 A^2 ) >= 39 h.( i. ( j. ( k.( l. ( ) (B^2 A^2 2 ) >= 49 ) ( C^(1/2) + B A/2 ) < 15 ) NAO ( C^2 = (A^2 + B) ) ) NO ( C^2 < > (A^2 + B) ) ) NAO ( NAO ( NAO ( NAO ( A >B))))
34
Instituto Federal do Esprito Santo
Lgica de Programao
Caro aluno, At o presente momento abordamos conceitos fundamentais com relao a Linguagem de Programao Visualg. Vamos continuar aprofundando nossos conhecimentos sobre esta Linguagem de Programao neste captulo. Leia com ateno todas as novas informaes contidas neste captulo, pois comearemos a programar de verdade. Depois de entendermos estes conceitos vamos, de fato, utilizar a Ferramenta de Programao Visualg. Bom estudo!
5.1.
COMENTRIOS
Quando implementamos um algoritmo fundamental a preocupao com a clareza (facilidade de entendimento) do algoritmo. O comentrio uma observao que se coloca no cdigo de forma a possibilitar o entendimento do mesmo. No Visualg, os comentrios so representados por um texto aps //. No seguinte exemplo a declarao das variveis foi comentada de forma a explicar para que serve cada varivel: MATRICULA: inteiro // nmero da matricula do aluno NOTA: real // nota do aluno CODIGO: inteiro // cdigo do curso
35
5.2.
FUNCES MATEMTICAS
Alm dos operadores aritmticos normalmente utilizados, podemos usar funes disponibilizadas pela linguagem Visualg, que comumente esto presentes em muitas linguagens (Quadro 6):
NOME log ( X ) abs ( X ) int ( X ) X div Y X mod Y sen ( X ) cos ( X ) tan ( X ) RESULTADO Logaritmo na base 10 de X Valor Absoluto de X Parte inteira de um nmero fracionrio Quociente inteiro da diviso de X por Y Resto da diviso de X por Y Funo seno aplicada ao argumento X (em radianos) Funo co-seno aplicada ao argumento X (em radianos) Funo tangente aplicada ao argumento X (em radianos) Tabela 5-1: Funes do Visualg
Exemplos de Funes em Visualg: Sendo A, B, X variveis do tipo numrico, quais os resultados fornecidos por cada uma das seguintes funes, onde A = 10, B = 3 e X = 1.2. A div B = 10 div 3 = 3 A mod B = 10 mod 3 = 1 abs ( B A ) = abs ( 3 10 ) = abs ( -7 ) = 7 int ( 4 * X ) = int ( 4 * 1.2 ) = int ( 4.8 ) = 4
5.3.
Precisamos de alguns comandos para entrada/sada de dados nos algoritmos, para tanto utilizaremos os seguintes comandos: Entrada: leia (<Nome da Varivel>) Onde: leia: uma palavra-chave. ( ): Os parnteses delimitam o identificador da varivel 36
Instituto Federal do Esprito Santo
Lgica de Programao
<Nome da Varivel>: o nome da varivel na qual ser armazenado o valor proveniente do meio de entrada. importante ressaltar que as linguagens de programao normalmente utilizadas obrigam a leitura varivel a varivel. Sada: escreva (<Lista de variveis>) Onde: escreva: uma palavra chave. ( ): Os parnteses delimitam os identificadores das variveis <Lista de variveis>: so os nomes das variveis, separados por vrgula, das quais sero obtidos os valores a serem escritos. Voc ainda pode utilizar uma variao do comando escreva na Linguagem de Programao Visualg: escreval O comando escreval tem a mesma finalidade que o comando escreva, todavia aps mostrar o valor especificado na tela, o computador salta uma linha para separar as prximas exibies de valores na tela. Exemplos de Comandos de Entrada e Sada: leia (A) leia (NOME) escreva (A) escreva (NOME, SOBRENOME, TECEIRONOME)
5.4.
ATRIBUIO
O comando responsvel pela colocao de um valor em uma varivel o comando de atribuio. Tal comando pode ser apresentado da seguinte forma:
37
Curso Tcnico em Informtica Identificador Expresso Onde: Identificador: o nome da varivel qual est sendo atribudo o valor. : o smbolo de atribuio Expresso: pode ser uma expresso aritmtica, expresso lgica ou expresso literal de cuja avaliao obtido o valor a ser atribudo varivel. Exemplo de Atribuio: NOTA 5 MEDIA NOTA + 3
Vamos resumir o contedo visto neste captulo: Neste captulo aprendemos sobre alguns comandos da linguagem Visual muito importantes: Descrio No Visualg Comentrios // Comandos de Entrada leia Comandos de Sada escreva Atribuio
Atividades
1. Suponha as seguintes variveis: SOMA, NUMERO, CONT: real NOME, COR, DIA, MES, ANO: literal TESTE, CODIGO, TUDO: logico Determine que atribuies so vlidas e escreva nas que no so por que no so: a. NOME 5 b. SOMA NUMERO + 2 * CONT c. TESTE CODIGO ou CONT^2 < > SOMA 38
Instituto Federal do Esprito Santo
Lgica de Programao
d. TUDO SOMA e. COR Preto CONT^(1/2) f. CONT CONT + 1 g. NUMERO *abC* h. DIA SEGUNDA FEIRA i. MES AGOSTO j. ANO 2006 k. SOMA + 2 CONT^2 NUMERO^(1/2) l. CONT NOME >= CODIGO 2. Determine os valores obtidos por cada uma das expresses aritmticas a seguir: Para fazer este exerccio muito importante lembrar que: 2 ^ (1/2) = 2 2 2 ^ (1/3) = 3 2 Suponha as seguintes instrues antes das expresses aritmticas: P, Q, R: inteiro S: real P2 Q3 R 12 S 4.5 a. 100 * (Q div P) + R b. P * (R mod 5) - Q/2 c. abs ( S - R ) + 100 * (Q div P) + R - P * (R mod 5) - Q/2 d. ( R + P^2 ) ^ (1/2) + int( S ) e. ( int(S) mod (P + 1)) - Q * R f. 1 + ( ( P ^3 + 2 * R ) ^ ( 1/5 ) ) - int (S - 1) g. abs ( int ( abs ( S - R ) ) ) h. int (abs ( S - R ) ) i. 1 + (int(R+S) div (P)) * int(2 * P * Q - R) j. abs ( int ( abs ( R - S ) ) ) k. int ( abs ( R - S ) ) l. P + abs ( 2.9 + int ( 0.3 + S ) * 2 ) 3. Determine o que ser escrito pelo comando ESCREVA: A) Supondo que o comando leia ler informaes a partir do teclado e que as informaes digitadas sero as seguintes:
IFES Instituto Federal do Esprito Santo
39
INFORMATICA, 35 algoritmo "Cap05-3.a" var N, P: literal X, A: real inicio X <- 10 leia(N) leia(A) X <- X + A P <- N escreva(P, X) X <- X + A escreva(X) A <- X escreva(N, X, A) fimalgoritmo Utilize as tabelas abaixo para responder o exerccio 3.A: Variveis N P X A
Comando escreva 1 2 3 B) Supondo que o comando leia ler informaes a partir do teclado e que as informaes digitadas sero as seguintes: JOAO, SILVA, SILVA, 35, 47, 26, VERDADEIRO, FALSO, VERDADEIRO algoritmo "Cap05-3.b" var NOME, SOBRENOME, TERCEIRONOME: literal NUM1, NUM2, NUM3: inteiro FLAG1, FLAG2, FLAG3: logico inicio leia(NOME) leia(SOBRENOME) 40
Instituto Federal do Esprito Santo
Lgica de Programao
leia(TERCEIRONOME) leia(NUM1) leia(NUM2) leia(NUM3) leia(FLAG1) leia(FLAG2) leia(FLAG3) FLAG1 <- ( SOBRENOME = TERCEIRONOME ) FLAG2 <- ( NUM2 <= NUM1 + NUM3 ) FLAG3 <- (FLAG1 e FLAG2) ou FLAG3 NUM1 <- NUM2 + NUM1 - (NUM3 mod 3) NUM2 <- NUM1 + (NUM3 div 3) NUM3 <- 10 TERCEIRONOME <- NOME NOME <- SOBRENOME FLAG3 <- ( NOME = TERCEIRONOME ) escreva(NOME, SOBRENOME, TERCEIRONOME) escreva(NUM1, NUM2, NUM3) escreva(FLAG1, FLAG2, FLAG3) fimalgoritmo Utilize as tabelas abaixo para responder o exerccio 3.B: Variveis TERCEIRONOME
SOBRENOME
FLAG1
FLAG2
FLAG3
NOME
NUM1
NUM2
NUM3
41
Para facilitar o entendimento dos algoritmos descritos na apostila, daqui para frente, iremos colorir os cdigos de acordo com o padro de cores da ferramenta Visualg. Cada cor tem um significado especfico: Elementos Palavras Especiais Palavras-Chave Comentrios Constantes Tipo de Dados Texto em Geral Cores Azul Azul Escuro Verde Vermelho Vermelho Escuro Preto Exemplo algoritmo leia // Teste 1 , Teste inteiro nome
Obs.: Palavras Especiais e Palavras-Chave (ou Palavras Reservadas) so palavras com uma finalidade especfica dentro da linguagem de programao utilizada (no nosso caso, Visualg), as quais no podem ser utilizadas como identificadores de variveis.
42
Instituto Federal do Esprito Santo
Lgica de Programao
Prezado programador (agora j posso te chamar assim), Fizemos nossos primeiros programas utilizando a Linguagem de Programao Visualg. Neste captulo sero abordados os importantssimos conceitos de Comandos de Deciso e Comandos de Repetio. A partir de agora voc vai entender que nem todas as linhas de cdigo de nosso programas precisam ser executadas pelo computador. Ou seja, vai aprender que por meio de Comandos de Desiso voc pode criar diferentes possibilidades de execuo de um determinado programa. Alm disso, por meio de Comandos de Repetio, compreender que um certo trecho do cdigo de um programa pode ser executado repetidamente um certo nmero de vezes. Bom estudo!
6.1.
COMANDOS DE DECISO
Os comandos de deciso ou desvio fazem parte das tcnicas de programao que conduzem a estruturas de programas que no so totalmente seqenciais. Com as instrues de SALTO ou DESVIO pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decises lgicas tomadas em funo dos dados ou resultados anteriores. As principais estruturas de deciso so: se entao se entao senao escolha caso
43
6.1.1. se entao
A estrutura de deciso se normalmente vem acompanhada de um comando, ou seja, se determinada condio for satisfeita pelo comando Se ento execute determinado comando. Imagine um algoritmo que determinado aluno somente estar aprovado se sua mdia for maior ou igual a 5.0, veja no exemplo de algoritmo como ficaria. se (media >= 5.0) entao escreva(Aluno Aprovado) fimse O comando de deciso caracterizado por: se (expresso lgica) entao comandos fimse Onde: Expresso lgica tem como resultado um valor lgico VERDADEIRO ou FALSO. Comandos so linhas de cdigo no algoritmo. Em diagrama de blocos ficaria conforme Figura 6-1:
Sim
Aluno Aprovado No
Fim
Vejamos outro exemplo com um algoritmo completo: O algoritmo a seguir escreve uma mensagem caso o terceiro nmero lido seja maior que a soma dos outros dois nmeros lidos.
44
Instituto Federal do Esprito Santo
Lgica de Programao
algoritmo Exemplo se entao var NUM1, NUM2, NUM3: real inicio leia(NUM1) leia(NUM2) leia(NUM3) se (NUM1 + NUM2 < NUM3) entao escreva (O terceiro nmero que a soma dos outros dois) fimse fimalgoritmo
maior
45
Curso Tcnico em Informtica No exemplo acima est sendo executada uma condio que, se for verdadeira, executa o comando APROVADO, caso contrrio executa o segundo comando REPROVADO. Podemos tambm dentro de uma mesma condio testar outras condies. Conforme Figura 6-3.
Neste caso poderamos utilizar o seguinte trecho de algoritmo para representar o diagrama de blocos acima: se media >= 5.0 entao se media >= 7.0 escreva(Aluno Aprovado) senao escreva(Aluno Necessita Fazer Outra Avaliao) fimse senao escreva(Aluno Reprovado) fimse
Lgica de Programao
contedo. Compara-se, ento, o resultado obtido no teste com os valores fornecidos em cada clusula Caso. No exemplo do diagrama de blocos da Figura 6-4, recebido uma varivel Op e testado seu contedo, caso uma das condies seja satisfeita, atribudo para a varivel Titulo a String Opo X, caso contrrio atribudo a string Opo Errada.
Neste caso poderamos utilizar o seguinte trecho de algoritmo para representar o diagrama de blocos anteriormente mostrado:
IFES Instituto Federal do Esprito Santo
47
algoritmo titulo ; leia op escolha op caso 1 titulo opo 1 caso 2 titulo opo 2 caso 3 titulo opo 3 caso 4 titulo opo 4 caso 5 titulo opo 5 outro caso titulo opo errada fimescolha escreva titulo fimalgoritmo
Atividades
1. Crie um algoritmo que receba pelo teclado o nome de um Funcionrio e seu salrio bruto. Se o salrio for acima de R$ 1.000,00 calcule 11% de desconto de INSS, do contrrio calcule 9%. Ao final exiba o nome do funcionrio, salrio bruto e salrio com o desconto de INSS. 2. Crie um algoritmo que receba pelo teclado o nome de um aluno e trs notas, ao final dever ser exibido o nome do aluno, sua mdia e resultado (se for acima de 6, o aluno estar aprovado do contrrio reprovado). 3. Usando o algoritmo do item 2, altere o resultado para: Mdia <=3, reprovado, Mdia < 6, recuperao e Mdia >=6, aprovado. 4. Crie um algoritmo que dada tabela a seguir calcula o valor de desconto a ser concedido para um determinado cliente de acordo com o valor da compra. O algoritmo dever receber pelo teclado, o nome do cliente e valor total da compra.
Valor a compra At R$ 1.000,00 Entre R$ 1.000,00 a R$ 5.000,00 Acima de R$ 5.000,00 % de desconto 5 10 15
48
Instituto Federal do Esprito Santo
Lgica de Programao
5. Crie um algoritmo que calcule o valor a ser pago de acordo com a quantidade de m de um tecido no valor de R$ 25,00. Se a quantidade de metros for acima de 10 m, o valor do m passa a ser R$ 23,00. Ao final o algoritmo dever exibir a quantidade de m, o valor pago pelo m e o valor a ser pago. 6. Usando a linguagem Visualg, desenvolva um programa que leia dois nmeros inteiros e a operao que o usurio deseja realizar. O usurio poder escolher entre as operaes: somar, subtrair, multiplicar ou dividir. Ao final o programa dever exibir o resultado da operao. Utilize o comando escolhacaso. Explicando: Exibiremos, para o usurio, as operaes disponveis e solicitaremos os dois nmeros e opo, assim: Digite 1 para somar. Digite 2 para subtrair. Digite 3 para multiplicar. Digite 4 para dividir. Primeiro nmero: (leia o nmero 1) Segundo nmero: (leia o nmero 2 Digite a opo: (leia a opo) Assumindo que o usurio digitou os nmeros 20 e 40 e a opo 1, o resultado exibido ser 60. Obs.: Se o usurio digitar um valor invlido para opo deve ser exibido uma mensagem: "Opo Invlida!"
6.2.
COMANDOS DE REPETIO
A estrutura de repetio permite que uma sequncia de comandos seja executada repetidamente at que uma determinada condio de interrupo seja satisfeita. Trabalharemos com modelos de comandos de repetio: enquanto x faca repita ... ate x para ... de ... ate ... faca
49
Se ...
Sim
Processar
No
Cont.
j=0
j <= 100
Sim
j=j+1
No
Cont.
50
Instituto Federal do Esprito Santo
Lgica de Programao
algoritmo Exemplo enquanto x faca var j: inteiro inicio j <- 0 enquanto j <= 100 faca j <- j + 1 fimenquanto fimalgoritmo
51
algoritmo "Exemplo repita ... ate x" var j: inteiro inicio j <- 0 repita j <- j + 1 ate j > 100 fimalgoritmo
Lgica de Programao
. . Com o uso de para ... de ... ate ... faca algoritmo "Ex. para...de...ate...faca" var j: inteiro inicio para j de 0 ate 100 faca fimpara fimalgoritmo Caso voc queira utilizar o comando para ... de ... ate ... faca com um incremento diferente de 1 (um), por exemplo dois (dois), voc deve fazer da seguinte forma: para j de 1 ate 100 passo 2 faca fimpara Onde: passo o comando que deve ser utilizado para indicar que a varivel j deve ser atualizada de com um incremento diferente de 1 (um). 2 (dois) o nmero colocado depois do comando passo na finalidade de especificar que o incremento para a varivel j deve ser de dois em dois. Vamos resumir o contedo visto neste captulo: Neste captulo aprendemos sobre dois tipos importantssimos de comandos que nos ajudaro e muito a programar: Comandos de Deciso: se entao se entao senao escolha caso Comandos de Repetio: enquanto x faca repita ... ate x para ... de ... ate ... faca
53
Atividades
7. Elabore um algoritmo que gera e escreve os nmeros mpares dos nmeros lidos entre 100 e 200. 8. Construa um algoritmo que leia 500 valores inteiros e positivos e: Encontre o maior valor Encontre o menor valor Calcule a mdia dos nmeros lidos
54
Instituto Federal do Esprito Santo
Lgica de Programao
Ol Aluno, Vamos aprender sobre Vetores. Em muitos casos Vetores so alternativas interessantes para se resolver alguns problemas. Alm de Vetores existem muitas outras estruturas de armazenamentos de dados, como por exemplo, matrizes, listas, filas, etc. Todavia como o foco de nossa disciplina tem cunho introdutrio, vamos trabalhar apenas com Vetores. de suma importncia entendermos bem a programao com Vetores, pois isso facilitar muito nosso aprendizado quanto as outras possibilidades de armazenamento de dados. Bom estudo!
7.1.
ESTRUTURAS DE DADOS
J sabemos que variveis correspondem a posies de memria, s quais o programador tem acesso, atravs de algum algoritmo, visando atingir resultados desejados. Uma varivel passa a existir a partir de sua declarao, quando, ento, lhe associado um nome ou identificador que a identificao da posio de memria que a varivel representa. Analisaremos no exemplo, a seguir, a necessidade de se utilizar estruturas de dados: Exemplo: Vamos supor que seja requisitado um algoritmo para calcular a mdia das notas de 5 alunos. Nesse contexto o algoritmo ficaria assim:
55
Curso Tcnico em Informtica algoritmo "Calculando Mdia de 5 Notas" var //Declarando as variveis I: inteiro NOTA, SOMA, MEDIA: real inicio //Inicializando SOMA SOMA <- 0 //Aplicando o comando de repetio para I de 1 ate 5 faca escreva("Digite a nota:") leia(NOTA) //Acumulando a NOTA lida SOMA <- SOMA + NOTA fimpara //Calculando a mdia MEDIA <- SOMA / 5 //Escrevendo a mdia calculada escreva ("A mdia :", MEDIA) fimalgoritmo Suponhamos agora que desejado saber quantos alunos tiveram nota acima da mdia. fcil ver que, para saber o nmero de alunos com nota acima da mdia necessrio saber a mdia e as notas de cada um dos alunos. Da existem duas abordagens possveis: Abordagem 1: Fazer dois algoritmos: um que l as notas e calcula a mdia e outro que leria a mdia e novamente todas as notas para que as comparaes pudessem ser feitas. Abordagem 2: Fazer um nico algoritmo e armazenar cada uma das notas numa varivel, calcular a mdia dessas notas e finalmente calcular a quantidade de alunos com nota superior a mdia.
56
Instituto Federal do Esprito Santo
Lgica de Programao
Abordagem 1 (Abordagem de dois algoritmos): O primeiro algoritmo j estaria implementado, o algoritmo do calculo da mdia, o segundo algoritmo ficaria da seguinte forma: algoritmo "Abordagem 1" var I, QUANTIDADE: inteiro MEDIA, NOTA: real inicio //Leitura da mdia das notas escreva("Digite a mdia:") leia(MEDIA) //Repetio para cada aluno para I de 1 ate 5 faca escreva("Digite a nota:") leia(NOTA) //Se aluno tem nota superior a mdia se (NOTA > MEDIA) entao //Incremente a Quantidade QUANTIDADE <- QUANTIDADE + 1 fimse fimpara escreva ("Quantidade: ", QUANTIDADE) fimalgoritmo Abordagem 2 (Abordagem de um algoritmo): Este algoritmo realiza o armazenamento das notas em variveis: algoritmo "Abordagem 2" var //Declarando as variveis MEDIA: real NOTA1, NOTA2, NOTA3, NOTA4, NOTA5: real QUANTIDADE: inteiro inicio //Inicializando a Quantidade QUANTIDADE <- 0 //Lendo as notas escreva("Digite a nota 1:") leia(NOTA1) escreva("Digite a nota 2:") leia(NOTA2) escreva("Digite a nota 3:") leia(NOTA3) escreva("Digite a nota 4:") leia(NOTA4) escreva("Digite a nota 5:")
IFES Instituto Federal do Esprito Santo
57
Curso Tcnico em Informtica leia(NOTA5) //Calculando a mdia MEDIA <- (NOTA1+NOTA2+NOTA3+NOTA4+NOTA5)/5 //Escrevendo a mdia calculada escreva("Mdia: ", MEDIA) se NOTA1 > MEDIA entao QUANTIDADE <- QUANTIDADE + 1 fimse se NOTA2 > MEDIA entao QUANTIDADE <- QUANTIDADE + 1 fimse se NOTA3 > MEDIA entao QUANTIDADE <- QUANTIDADE + 1 fimse se NOTA4 > MEDIA entao QUANTIDADE <- QUANTIDADE + 1 fimse se NOTA5 > MEDIA entao QUANTIDADE <- QUANTIDADE + 1 fimse escreva("Quantidade: ", QUANTIDADE) fimalgoritmo
Note que nenhuma das solues completamente adequada, pois: Abordagem 1: implica na releitura das notas dos alunos. Supondo que essas notas fossem informadas via teclado, isso seria bastante desagradvel para quem utiliza esse algoritmo. Abordagem 2: no trs problemas para o usurio, mas implica em termos uma quantidade possivelmente grande de variveis que representam o mesmo tipo de informao, imaginemos que no fossem 5 alunos e sim 5000, a elaborao desse algoritmo seria impraticvel. nesse contexto que as estruturas de dados so apresentadas, especificamente variveis compostas homogneas (vetor).
58
Instituto Federal do Esprito Santo
Lgica de Programao
7.2.
Variveis compostas homogneas correspondem a posies de memria, identificadas por um mesmo identificador, individualizadas por ndices e cujo contedo do mesmo tipo. No exemplo do calculo da quantidade de alunos com nota acima da mdia, podemos representar o conjunto das 5 notas dos alunos por uma varivel do tipo composta homognea, chamemos essa varivel de NOTA. Tal varivel homognea porque todos os seus elementos so do tipo real e composta porque um conjunto de espaos de memria e no apenas um. A referncia ao n-simo elemento do conjunto ser indicado pela notao NOTA[n], onde n um nmero inteiro ou uma varivel numrica contendo um valor inteiro. Exemplo 1: Suponhamos que a varivel NOTA contivesse os seguintes valores:
NOTA[3] estaria referenciando o terceiro elemento do conjunto cujo contedo 30. Exemplo 2: Voltemos ao exemplo do clculo da quantidade de alunos com nota acima da mdia, mas suponhamos que sejam 250 alunos. O algoritmo ento ficaria da seguinte forma ( No sero apresentadas as declaraes de variveis ): algoritmo "Utilizando Vetor" var //Declarando as variveis SOMA, MEDIA: real QUANTIDADE, I: inteiro NOTA: vetor[1..250] de real inicio //Inicializando SOMA e QUANTIDADE SOMA <- 0 QUANTIDADE <- 0 // Aplicando o comando de repetio para I de 1 ate 250 faca escreva("Digite a nota:") leia ( NOTA[I] ) //Acumulando a NOTA lida SOMA <- SOMA + NOTA[I]
IFES Instituto Federal do Esprito Santo
59
Curso Tcnico em Informtica fimpara //Calculando a mdia MEDIA <- SOMA / 250 para I de 1 ate 250 faca se NOTA[I] > MEDIA entao //Acumulando a Quantidade QUANTIDADE <- QUANTIDADE + 1 fimse fimpara escreva ("Quantidade: ", QUANTIDADE) fimalgoritmo
60
Instituto Federal do Esprito Santo
Lgica de Programao
nomes
associados
li: o limite inferior do intervalo de variao dos ndices. ls: o limite superior do intervalo de variao dos ndices. t: tipo dos componentes do vetor ( inteiro, real, literal, logico ). As regras de declarao de identificadores das variveis compostas ( vetores por exemplo ) so as mesmas das variveis simples.
Exemplo 1: NOTA: vetor [ 1 .. 10 ] de real Exemplo 2: Ser mostrado novamente o exemplo do clculo da quantidade de alunos com nota acima da mdia, tambm supondo 250 alunos. algoritmo "Utilizando Vetor" var //Declarando as variveis SOMA, MEDIA: real QUANTIDADE, I: inteiro NOTA: vetor[1..250] de real inicio //Inicializando SOMA e QUANTIDADE SOMA <- 0 QUANTIDADE <- 0 // Aplicando o comando de repetio para I de 1 ate 250 faca escreva("Digite a nota:") leia ( NOTA[I] ) //Acumulando a NOTA lida SOMA <- SOMA + NOTA[I] fimpara //Calculando a mdia MEDIA <- SOMA / 250 para I de 1 ate 250 faca se NOTA[I] > MEDIA entao 61
Curso Tcnico em Informtica //Acumulando a Quantidade QUANTIDADE <- QUANTIDADE + 1 fimse fimpara escreva ("Quantidade: ", QUANTIDADE) fimalgoritmo
Atividades
1. Faa um algoritmo, que leia 200 nmeros e verifique quantos deles so iguais a 30. Se existirem escrever as posies onde eles esto armazenados. 2. Faa um algoritmo, que leia n nmeros ( n < 200) e verifique quantos deles so iguais a um nmero k. Se existirem escrever as posies onde eles esto armazenados. 3. Implemente um algoritmo que leia 200 nmeros, esse algoritmo deve escrever quantos deles so maiores que um nmero ki e menores que um nmero kj, ao mesmo tempo. ( ki e kj tambm lidos ). 4. O Instituto de Cincias Exatas da UFMG deseja saber se existem alunos cursando, simultaneamente, as disciplinas Programao de Computadores e Clculo Numrico. Existem disponveis na unidade de entrada os nmeros de matrcula dos alunos de Programao de Computadores (no mximo 150 alunos) e de Clculo Numrico (no mximo 220 alunos). Cada conjunto dos nmeros de matrcula dos alunos de uma disciplina tem a matrcula fictcia 9999 no final. Formular um algoritmo que imprima o nmero de matrcula dos alunos que esto cursando estas disciplinas simultaneamente. Trata-se, ento, da verificao da ocorrncia de um elemento de um conjunto em um outro conjunto. Assim, aps a leitura dos dados, poderiam estar montadas as seguintes variveis compostas unidimensionais PC e CN contendo, respectivamente, os nmeros de matrcula dos alunos que esto cursando: Programao de Computadores e Clculo Numrico.
62
Instituto Federal do Esprito Santo
Lgica de Programao
Captulo 8 - MODULARIZAO
Prezado Aluno, A medida em que estamos avanando nos conceitos de Lgica de Programao somos preparados para resoluo de problemas cada vez mais complexos. No geral, problemas complexos exigem algoritmos complexos, mas sempre possvel dividir um problema grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples. Neste captulo aprenderemos a tcnica de programao Dividir para Conquistar, isto , partindo da diviso de um problema complexo em vrios subprogramas, ao conquistar o objetivo em cada um dos subprogramas, o programador estar caminhando rumo a Soluo Total do problema original. Atravs deste mtodo, desaparece o problema complicado e aparece vrios subprogramas descomplicados, tornando assim a soluo mais simples, direta e objetiva. Sucesso a todos! E vamos aos estudos!
8.1.
INTRODUO
No fim da dcada de 60, um conjunto de problemas no desenvolvimento de programas levou os pases desenvolvidos a chamada crise do software. Isso ocorreu devido a uma ausncia de metodologia no desenvolvimento dos softwares, para tanto foi criada a programao estruturada afim de organizar e diminuir os custos de desenvolvimento de softwares. Uma das principais armas da programao estruturada no desenvolvimento de softwares a modularizao, pois permite um maior reaproveitamento de funcionalidades, diminuindo assim os tempos e custos de desenvolvimento A modularizao a tcnica de subdividir um algoritmo em mdulos menores que podem ser reaproveitados em outros algoritmos. 63
8.2.
PROCEDIMENTOS E FUNES
Os procedimentos e funes possuem trs objetivos bsicos: a) Reaproveitamento de cdigo: se uma certa seqncia de comandos usada em vrios locais. b) Dividir o algoritmo em partes logicamente coerentes: gerar sub-algoritmos. c) Aumentar a legibilidade do algoritmo
8.2.1. Funes
Uma funo um trecho de cdigo que pode ser utilizado em vrios algoritmos e que retorna um valor. Isso fundamental para manutenabilidade dos algoritmos, uma vez que, dessa forma, se for necessrio fazer uma manuteno em um procedimento, essa manuteno automaticamente ser aplicada a todos os algoritmos que a utilizam. Declarao de Funes Uma funo deve ser declarada da seguinte forma:
funcao <nome da funo> ( <declarao parmetros> ) : < tipo do retorno> var < declarao de variveis locais > inicio < implementao da funcao > fimfuncao
de
Exemplo:
funcao menor_numero(numero1,numero2:real): real inicio se numero1 > numero2 entao retorne numero2 senao retorne numero1 fimse fimfuncao
64
Instituto Federal do Esprito Santo
Lgica de Programao
Passagem por Referncia: a declarao de parmetros de forma que os parmetros podero ter seus valores alterados aps a execuo do procedimento ou funo. Um parmetro por referncia precedido pela palavra VAR. Passagem por Valor funcao menor_numero(numero1,numero2:real): real inicio se numero1 > numero2 entao retorne numero2 senao retorne numero1 fimse fimfuncao
Passagem por Referncia funcao menor_numero(numero1, numero2: real; var menor:real): inteiro inicio se numero1 > numero2 entao menor <- numero2 retorne 1 senao se numero1 < numero2 entao menor <- numero1 retorne 1 senao //Indica que os nmeros so iguais menor <- 0 retorne -1 fimse fimse fimfuncao 65
8.2.3. Procedimentos
Um procedimento uma funo que no retorna valores. Declarao de Procedimentos Um procedimento deve ser declarado na seguinte forma: procedimento <nome do procedimento>(<declarao de parmetros>) var < declarao de variveis locais > inicio < implementao do procedimento > fimprocedimento
Exemplo: procedimento menor_numero ( numero1, numero2: real ; var menor: real ) inicio se numero1 > numero2 entao menor <- numero2 senao menor <- numero1 fimse fimprocedimento
algoritmo Uso de Funes e Procedimentos var ... inicio ... <nome da funo> ( <lista de parmetros> ) ... 66
Instituto Federal do Esprito Santo
Lgica de Programao
fimalgoritmo Exemplo: O seguinte algoritmo determina o menor de 3 nmeros algoritmo Exemplo Uso de Funes var n1, n2, n3, menor: real inicio escreva(Digite o primeiro nmero: ) leia( n1 ) escreva(Digite o segundo nmero: ) leia( n2 ) escreva(Digite o terceiro nmero: ) leia( n3 )
menor <- menor_numero(n1, menor_numero(n2, n3))
escreva(O menor nmero :, menor) fimalgoritmo importante ressaltar que, por uma limitao da linguagem Visualg, varaveis do tipo vetor no podem ser passadas por parmetro para funes ou procedimentos. Todavia isso possvel, e muito comum, em outras linguagens de programao, como por exemplo: C, Java, etc.
Atividades
1. Escreva uma funo que calcule a distncia entre dois pontos, sabendo que a distncia entre dois pontos dada pela expresso: DISTANCIA = ( ( X2 X1 ) ^ 2 + ( Y2 Y1 ) ^ 2 ) ^ ( 1 / 2 ) Onde: O primeiro ponto dado por ( X1, Y1 ) e o segundo ponto dado por ( X2, Y2 ) 2. Sabendo-se que um tringulo formado por trs pontos: A = ( X1, Y1 ) B = ( X2, Y2 ) C = ( X3, Y3 )
IFES Instituto Federal do Esprito Santo
67
E que o permetro de um tringulo a soma das distncias dos lados do tringulo. Podendo ser escrito da seguinte forma: Permetro = DISTANCIA AB + DISTANCIA AC + DISTANCIA BC Faa um algoritmo que calcule o permetro de um tringulo. 3. Faa uma funo que dados dois valores (X, Y) retorne X ^ Y, entretanto no permitido usar o operador de potncia. ( ^ ). Sugesto: Use o operador de multiplicao. 4. Faa uma funo que dados dois valores ( X, Y ) retorne X * Y, entretanto no permitido usar o operador de multiplicao. ( * ). Sugesto: Use o operador de soma. 5. Refaa a funo do exerccio 3) utilizando a funo de multiplicao do exerccio 4). 6. Faa uma funo para o operador de raiz ( X ^ ( 1 / Y ) ) 7. Implemente um algoritmo de calculadora que faa as operaes de: Adio Subtrao Multiplicao ( usando a funo do exerccio 4 ) Diviso Potenciao ( usando a funo do exerccio 5 ) Radiciao ( usando a funo do exerccio 6 )
68
Instituto Federal do Esprito Santo