Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Algoritmo e Programao
Sumrio
Introduo ................................ ................................ ................................ ................................ ................................ .. 4 1. 2. 3. 1. 2. 3. 4. 5. 6. 7. 1. 2. 3. 4. Alguns Conceitos Bsicos................................ ................................ ................................ ............................... 4 Software ................................ ................................ ................................ ................................ ......................... 5 O DESENVOLVIMENTO DE SISTEMAS DE INFORMAO E O PROGRAMADOR ................................ ...... 6 PSEUDO-CDIGO ................................ ................................ ................................ ................................ ......... 7 Portugus Estruturado ................................ ................................ ................................ ................................ .... 8 LINGUAGEM DE PROGRAMAO ................................ ................................ ................................ ............... 8 TIPOS DE LINGUAGENS DE PROGRAMAO ................................ ................................ ............................ 8 PROCESSO DE CRIAO E EXECUO ................................ ................................ ................................ ..... 8 ERROS NUM PROGRAMA ................................ ................................ ................................ .......................... 10 CRITRIOS DE QUALIDADE ................................ ................................ ................................ ....................... 10 IDENTIFICADORES, CONSTANTES, VARIVEIS E TIPOS BSICOS ................................ ........................ 11 DECLARAO DE VARIVEIS ................................ ................................ ................................ .................... 12 PALAVRAS RESERVADAS ................................ ................................ ................................ .......................... 12 OPERADORES ................................ ................................ ................................ ................................ ............ 13 3.1. 3.2. 3.3. 3.4. 3.5. 5. 6. OPERADOR DE ATRIBUIO ................................ ................................ ................................ ............. 13 OPERADORES ARITMTICOS: ................................ ................................ ................................ ........... 13 OPERADORES RELACIONAIS: ................................ ................................ ................................ ........... 13 OPERADORES LGICOS: ................................ ................................ ................................ ................... 14 PRIORIDADE DE OPERADORES: ................................ ................................ ................................ ....... 15
EXERCCIOS INTRODUTRIOS I ................................ ................................ ................................ ............ 15 COMANDOS DE ENTRADA E SADA ................................ ................................ ................................ .......... 16 6.1. 3.6. Comando de Entrada de Dados ................................ ................................ ................................ ............ 16 Comando de Sada de Dados ................................ ................................ ................................ ............... 16
7. 1. 2.
ESTRUTURA DE UM ALGORITMO EM PSEUDO -CDIGO E C ................................ ................................ 16 SEQUNCIA ................................ ................................ ................................ ................................ ................ 17 SELEO ................................ ................................ ................................ ................................ .................... 17 2.1. 2.2. 2.3. SELEO SIMPLES ................................ ................................ ................................ ............................. 18 SELEO COMPOSTA ................................ ................................ ................................ ........................ 18 ANINHAMENTO DE SELEES ................................ ................................ ................................ .......... 18 LAO ENQUANTO(WHILE) ................................ ................................ ................................ .................. 19 CONTROLADOS POR CONTADOR ................................ ................................ ................................ ..... 19 REPETIO COM TESTE NO FINAL ................................ ................................ ................................ ... 20 ESCAPE DO LAO Abandone (break)................................ ................................ ............................... 21 Sinalizador ('Flags') ................................ ................................ ................................ ............................... 21
3.
ESTRUTURAS DE REPETIO - LAOS(LOOPS) ................................ ................................ ..................... 19 3.1. 3.2. 3.7. 3.8. 3.9.
4. 5. 6. 7. 1.
EXERCCIOS INTRODUTRIOS II................................ ................................ ................................ ............ 21 REGRAS PRTICAS PARA A CONSTRUO DE ALGORITMOS LEGVEIS ................................ .............. 22 UMA REFLEXO ANTES DE RESOLVER OS PROBLEMAS ................................ ................................ ....... 23 EXERCCIOS COMPLEMENTARES - I ................................ ................................ ................................ ........ 23 VETORES E MATRIZES ................................ ................................ ................................ .............................. 25
2. 3. 4.
REPETIO COM VARIVEL DE CONTROLE PARA (for) ................................ ................................ ....... 25 SELEO DENTRE AS MLTIPLAS ALTERNATIVAS -CASO (CASE)................................ ......................... 26 VETORES ................................ ................................ ................................ ................................ .................... 27 4.1. 3.10. DECLARAO DE VETORES ................................ ................................ ................................ .............. 28 EXERCCIOS SOBRE VETORES ................................ ................................ ................................ ......... 30 Exerccios Resolvidos ................................ ................................ ................................ ........................... 33
5.
MODULARIZAO DE ALGORITMOS ................................ ................................ ................................ .................... 35 1. 2. 3. 4. 5. INTRODUO ................................ ................................ ................................ ................................ ............. 35 PROCEDIMENTOS ................................ ................................ ................................ ................................ ...... 35 FUNES ................................ ................................ ................................ ................................ .................... 36 Prottipos de Funes ................................ ................................ ................................ ................................ .. 39 Escopo de Variveis ................................ ................................ ................................ ................................ ..... 40 5.1. 3.11. 3.12. 6. 7. 8. 1. 2. Variveis locais ................................ ................................ ................................ ................................ ..... 40 Parmetros formais ................................ ................................ ................................ ............................... 41 Variveis globais ................................ ................................ ................................ ................................ ... 41
Passagem de parmetros por valor e passagem por referncia ................................ ................................ .... 42 FUNES RECURSIVAS ................................ ................................ ................................ ............................ 43 ESTRUTURAO DOS MDULOS DE UM ALGORITMO ................................ ................................ ........... 43 INTRODUO ................................ ................................ ................................ ................................ ............. 44 ALGORITMOS DE PESQUISA ................................ ................................ ................................ ..................... 44 2.1. 3.13. 3.14. PESQUISA SEQENCIAL SIMPLES ................................ ................................ ................................ .... 44 PESQUISA SEQENCIAL ORDENADA ................................ ................................ ............................... 45 PESQUISA BINRIA ................................ ................................ ................................ ............................. 46 MTODO DE SELEO DIRETA ................................ ................................ ................................ ......... 47 MTODO DE INSERO DIRETA ................................ ................................ ................................ ....... 48 MTODO DA BOLHA ................................ ................................ ................................ ........................... 48
3.
Introduo
Nesta apostila estudaremos Lgica de Programao e, para isso, importante ter uma viso geral do processo de desenvolvimento de programas (software), visto que o objetivo final ter um bom embasamento terico para a prtica da programao de computadores.
2. Software
O software de um computador o que determina o seu uso e os resultados que sero produzidos e apresentados. Em um computador digital existem diversos tipos diferentes de software com finalidades e complexidades diferentes. Normalmente, quanto mais relacionado e prximo ao hardware, o software mais difcil e complexo de ser desenvolvido e mantido pelo programador.A Figura abaixo procura ilustrar em camadas o que foi dito. Partindo-se do hardware que est nocentro e normalmente contm um conjunto de instrues operacionais programado diretamente nele (FIRMWARE). O firmware armazenado permanentemente num circuito integrado (chip) de memria do hardware, como uma ROM, PROM, EPROM ou ainda EEPROM e memria flash, no momento da fabricao do componente. Muitos aparelhos simples possuem firmware, entre eles podemos citar controle remoto, calculadora de mo, alguns perifricos do computador como disco rgido, teclado, modem e tambm aparelhos mais complexos como celulares, cmeras digitais, aparelhos de som, geladeiras, entre outros que possuem um firmware para a execuo de suas tarefas. O Sistema Operacional com seus diversos programas a primeira camada de software donosso computador. muito complexo desenvolver-se um sistema operacional como DOS, UNIX, LINUX, WINDOWS, MAC OS, ANDROID e outros que voc j deve ter ouvido falar. Externamente ao sistema operacional vamos encontrar os compiladores e interpretadores das linguagens de programao que, de certa forma, traduzem os programas aplicativos para a linguagem de mquina que o computador entende. Nesta segunda camada encontramos tambm os processadores ou editores de texto, os gerenciadores de bancos de dados (MySQL, Firebird, PostgreSQL, Oracle, MS Access, etc.), as planilhase muitos outros programas utilitrios (Antivrus, Navegadores WEB, Reprodutores de udio e vdeo, editores de imagens, et .). c Na camada mais externa encontramos os programas aplicativos que podem serdesenvolvidos utilizandose os recursos da camada anterior e nas linguagens de programao,utilizando as IDEs, os interpretadores ou os compiladores para poderem ser desenvolvidos executados. Para o desenvolvimento destes programas que se faz uso das tcnicas de construo de algoritmos, de forma a se garantir que os programas sero gerados com um mnimo de e e podero ser mantidos, sem rro dificuldade, por um programador, que no o tenha desenvolvido. Ao contrrio do que muitos pensam, um computador no faz nada sozinho. Ele uma mquina rpida, que resolve problemas bem definidos e repetitivos, mesmo complexos, mas somente se for bem programado. Ou seja: se temos LIXO na entrada (quer na forma de maus programas ou dados ruins), teremos LIXO na sada (nossos resultados).
Qual o papel do programador e do analista de sistemas no desenvolvimento de sistemas de informao? Vejamos o Ciclo de Vida de um sistema. Para desenvolvimento de qualquer sistema informatizado de boa qualidade h que se passar pelas seguintes fases: 1 Fase: Estudo de Viabilidade (Estudos Iniciais das necessidades de um sistema) 2 Fase: Anlise detalhada do sistema (Planejamento com o cliente) 3 Fase: Projeto preliminar do sistema (Planejamento com os analistas de sistemas) 4 Fase: Projeto detalhado do sistema (Algoritmos) 5 Fase: Codificao ou implementao (na linguagem escolhida) 6 Fase: Testes 7 Fase: Implementao, operao e manuteno As trs primeiras fases normalmente so de responsabilidade dos Analistas de Sistemas. Nas outras podem trabalhar indistintamente, dependendo da complexidade e da situao, programadores, analistas ou programadores e analistas. A construo dos algoritmos aparece ento na fase do projeto detalhado do sistema. Aps definidos e criados todos os algoritmos temos de codific-los na linguagem escolhida. Para essa tarefa o programador dever conhecer a mquina e o compilador a serem utilizados, e esse assunto ser coberto nos prximos mdulos. No desenvolvimento de um sistema, quanto mais tarde um erro detectado, mais dinheiro etempo se gasta para repar-lo. Assim, a responsabilidade do programador maior na criao dosalgoritmos do que na sua implementao, pois, quando bem projetados, no se perde muito tempo tendo que refaze-los reimplant-los e retest-los, assegurando assim um final feliz e no prazo previstopara o projeto. Entretanto, num projeto, o trabalho de desenvolvimento de algoritmos e programaspoder ter de ser todo refeito se houver problemas nas trsprimeiras fases, mostrando assim aimportncia do trabalho do Analista de Sistemas. Pode-se encontrar na literatura em informtica vrias formas de representao das etapas que compem o ciclo de vida de um sistema. Essas formas de representao podem variar tanto na quantidade de etapas quanto nas atividades a serem realizadas em cada fase. Como pode-se observar, nesse exemplo de ciclo de vida de um sistema (com sete fases) apresentado acima, os algoritmos fazem parte da quarta etapa do desenvolvimento de um programa. Na verdade, os algoritmos esto presentes no nosso dia-a-dia sem que saibamos, pois uma receita culinria, as instrues de uso de um equipamento ou as indicaes de um instrutor sobre como estacionar um carro, por exemplo, nada mais so do qu algoritmos. e
ALGORITMO
Um Algoritmo uma sequncia de instrues ordenadas de forma lgica para a resoluo de uma determinada tarefa ou problema. Algoritmo no computacional cujo objetivo a utilizao de um telefone pblico.
3. Introduzir o carto; 4. Teclar o nmero desejado; 5. Se der o sinal de chamar 5.1 Conversar; 5.2 Desligar; 5.3 Retirar o carto; 6. Seno 6.1 Repetir; Fim.
REPETIO
SELEO
Podemos definir como formas bsicas para definir uma soluo de qualquer problema as etapas de: SEQUNCIA SELEO REPETIO Claro que para criar um algoritmo computacional no ser to simples como esse apresentado. Na informtica, o algoritmo o "projeto do programa", ou seja, antes de se fazer um programa (software) na Linguagem de Programao desejada (Pascal, C, Delphi, Java, PHP, etc.) deve-se fazer o algoritmo do programa. J um programa, um algoritmo escrito numa forma compreensvel pelo computador (atravs de uma Linguagem de Programao), onde todas as aes a serem executadas devem ser especificadas nos mnimos detalhes e de acordo com as regras de sintaxe1 da linguagem escolhida. Um algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria um nico algoritmo. Um algoritmo um 'caminho' para a soluo de um problema e, em geral, existem muitos caminhos que levam a uma soluo satisfatria, ou seja, para resolver o mesmo problema pode-se obter vrios algoritmos diferentes. Assim podemos definir que um algoritmo precisa: 1. Ter incio e fim; 2. Ser descrito em termos de aes no ambguas e bem definidas; 3. Que as aes sigam uma sequncia ordenada.
1. PSEUDO-CDIGO
Os algoritmos so descritos em uma linguagem chamada pseudo-cdigo. 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. Utilizaremos em nosso curso o PORTUGOL para o estudo dos algoritmos e a Linguagem de Programao C para a criao dos programas. 7
2. Portugus Estruturado
O Portugus Estruturado uma forma especial de linguagem bem mais restrita que a Lngua Portuguesa e com significados bem definidos para todos os termos utilizados nas instrues (comandos). Essa linguagem tambm conhecida como Portugol (juno de Portugus com Algol, Pseudocdigo ou Pseudolinguagem. O Portugus Estruturado na verdade uma simplificao extrema da lngua portuguesa, limitada a pouqussimas palavras e estruturas que tm significado pr-definido, pois deve-se seguir um padro. Emprega uma linguagem intermediria entre a linguagem natural e uma linguagem de programao, para descrever os algoritmos. A sintaxe do Portugus Estruturado no precisa ser seguida to rigorosamente quanto a sin taxe de uma linguagem de programao, j que o algoritmo no ser executado como um programa. Embora o Portugus Estruturado seja uma linguagem bastante simplificada, ela possui todos os elementos bsicos e uma estrutura semelhante de uma linguagem de pr gramao de computadores. Portanto, resolver o problemas com portugus estruturado pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer, s no to rgida quanto a sua sintaxe, ou seja, o algoritmo no d eixa de funcionar porque esquecemos de colocar um ';' (ponto evrgula)por exemplo, j um programa no funcionaria. A Figura a seguir apresenta um exemplo de algoritmona forma de representao de portugus estruturado.
3. LINGUAGEM DE PROGRAMAO
Uma linguagem de programao uma notao formal para descrio de algoritmos que sero executados por um computador. Como todas as notaes formais, uma linguagem de programao tem dois componentes: Sintaxe e Semntica. A sintaxe consiste em um conjunto de regras formais, que especificam a composio de programas a partir de letras, dgitos, e outros smbolos. Por exemplo, regras de sintaxe podem especificar que cada parnteses aberto em uma expresso aritmtica deve corresponder a um parnteses fechado, e que dois comandos quaisquer devem ser separados por um ponto e vrgula. As regras de semntica especificam o significado de qualquer programa, sintaticamente vlido, escrito na linguagem.
y y
As Linguagens de Mquina so projetadas levando -se em conta os seguintes aspectos: Rapidez de execuo de programas; Custo de sua implementao; Flexibilidade com que permite a construo de programas de nvel mais alto. Por outro lado, lin guagens de programao de alto nvel so projetadas em funo de: Facilidade de construo de programas Confiabilidade dos programas O PROBLEMA : Como a linguagem de nvel mais alto pode ser implementada em um computador, cuja linguagem bastante diferente e de nvel mais baixo? SOLUO: Atravs da traduo de programas escritos em linguagens de alto nvel para alinguagem de baixo nvel do computador. Para isso existem trs tipos de programas tradutores: Montadores, Interpretadores e Compiladores ou simplesmente uma IDE. MONTADOR Efetua a traduo de linguagem de montagem (Assembly) para a linguagem demquina. 1. 2. 3. 4. Obtm prxima instruo do Assembly Traduz para as instrues correspondentes em linguagem de mquina Executa as instrues em linguagem de mquina Repete o passo 1 at o fim do programa
INTERPRETADOR Efetua a traduo de uma linguagem de alto nvel para linguagem demquina da seguinte forma: 1. 2. 3. 4. Obtm prxima instruo do cdigo-fonte em linguagem de alto nvel Traduz para as instrues correspondentes em linguagem de mquina Executa as instrues em linguagem de mquina Repete o passo 1 at o fim do programa
COMPILADOR Efetua a traduo de todo o cdigo-fonte em linguagem de alto nvel para as instrues correspondentes em linguagem de mquina, gerando o cdigo-objeto do programa. Em seguida necessrio o uso de outro programa (Link-Editor) que responsvel pela juno de diversos cdigos -objeto em um nico programa executvel. IDEs Facilitam a tcnica de RAD (de Rapid Application Development, ou "Desenvolvimento Rpido de Aplicativos"), que visa a maior produtividade dos desenvolvedores. As caractersticas e ferramentas mais comuns encontradas nos IDEs so: y y y y y Editor - edita o cdigo-fonte do programa escrito na(s) linguagem(ns) suportada(s) pela IDE; Compilador (compiler) - compila o cdigo-fonte do programa, editado em uma linguagem especfica e a transforma em linguagem de mquina; Linker - liga (linka) os vrios "pedaos" de cdigo-fonte, compilados em linguagem de mquina, em um programa executvel que pode ser executado em um computador ou outro dispositivo computacional. Depurador ( ebugger) - auxilia no processo de encontrar e corrigir defeitos no cdigo-fonte do programa, na tentativa de aprimorar a qualidade de software; Modelagem (modelling) - criao do modelo de classes, objetos, interfaces, associaes e interaes dos artefatos envolvidos no software com o objetivo de solucionar as necessidades -alvo do software final. Gerao de cdigo - caracterstica mais explorada em Ferramentas CASE, a gerao de cdigo tambm encontrada em IDEs, contudo com um escopo mais direcionado a templates de cdigo comumente
y y
utilizados para solucionar problemas rotineiros. Todavia, em conjunto com ferramentas de modelagem, a gerao pode gerar todo ou praticamente todo o cdigo-fonte do programa com base no modelo proposto, tornando muito mais rpido o processo de desenvolvimento e distribuio do software; Distribuio (deploy) - auxilia no processo de criao do instalador do software, ou outra fo rma de distribuio, seja discos ou via internet. Testes Automatizados (automated tests) - realiza testes no software de forma automatizada, com base em scripts ou programas de testes previamente especificados, gerando um relatrio, assim auxiliando na anlise do impacto das alteraes no cdigo-fonte. Ferramentas deste tipo mais comuns no mercado so chamadas robs de testes. Refatorao (refactoring) - consiste na melhoria constante do cdigo-fonte do software, seja na construo de cdigo mais otimizado, mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. A refatorao, em conjunto com os testes automatizados, uma poderosa ferramenta no processo de erradicao de "bugs", tendo em vista que os testes "garantem" o mesm o comportamento externo do software ou da caracterstica sendo reconstruda.
7. CRITRIOS DE QUALIDADE
Refere-se preciso das informaes manipuladas pelo programa, ou seja, os resultados gerados pelo processamento do programa devem estar corretos, caso contrrio o programa simplesmente no tem sentido. Clareza: Refere-se facilidade de leitura do programa. Se um programa for escrito com clareza, dever ser possvel a outro programador seguir a lgica do programa sem muito esforo, assim como o prprio a utor do programa entend-lo aps ter estado um longo perodo afastado dele. (Comentrios no cdigo) Simplicidade: A clareza e preciso de um programa so normalmente melhoradas tornando as coisas o mais simples possvel, consistentes com os objetivos do pr ograma. Muitas vezes torna-se necessrio sacrificar alguma eficincia de processamento, de forma a manter a estrutura do programa mais simples. Eficincia: Refere-se velocidade de processamento e a correta utilizao da memria. Um programa deve ter desempenho SUFICIENTE para atender as necessidades do problema e do usurio, bem como deve utilizar os recursos de memria de forma moderada, dentro das limitaes do problema. Modularizao: Durante a fase de projeto, a soluo do problema total vai sendo fatorada emsolues de subproblemas, o que permite, geralmente, dividir o problema de forma natural em mdulos com subfunes claramente delimitadas, que podem ser implementados separadamentepor diversos programadores de uma equipe, ou seja, a modularizao consiste noparticionamento do programa em mdulos menores bem identificveis e com funes especficas,de forma que o conjunto desses mdulos e a interao entre eles permite a resoluo doproblema de forma mais simples e clara. Generalidade: interessante que um programa seja to genrico quanto possvel de forma apermitir a reutilizao de seus componentes em outros projetos. METODOLOGIA DE SOLUO 1. 2. 3. 4. 5. 6. Entender o problema; Formular um esboo da soluo; Fazer uma primeira aproximao das variveis necessrias; Rever os passos originais, detalhando; Se o algoritmo estiver suficientemente detalhado, testar com um conjunto de dados significativos; Implementar numa linguagem de programao.
10
COMANDOS BSICOS
1. IDENTIFICADORES, BSICOS CONSTANTES, VARIVEIS E TIPOS
Identificadores: Representam os nomes escolhidos para rotular as variveis, procedimentos e funes, normalmente, obedecem as seguintes regras:
1. O primeiro caractere deve ser uma letra 2. Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto: {a,b,c,..., z,A,B,C,...Z,0,1,2,...,9,_} 3. Os nomes escolhidos devem explicitar seu contedo. EX: A, B1, BC3D,SOMA, CONTADOR ; Obs.: Um exemplo de identificador invlido seria 2AB ou qualquer outro iniciado por um dgito Constante (constant) Uma constante (Const), como sugere o nome, umidentificador que armazena um valor fixo e imutvel, durante a execuo de um algoritmoou programa. Podemos associ a uma posio de -lo memria (endereo) que tem umcontedo fixo. Este contedo poder ser um nmero (real ou inteiro), uma cadeia decaracteres (texto) ou um valor lgico (ser definido abaixo). Varivel (variable) Uma varivel (Var) um identificador que, como sugere onome, possui o contedo varivel durante a execuo de um algoritmo ou programa.Podemos associar uma varivel a uma posio da memria (endereo) e poderemosarmazenar (guardar) neste endereo qualquer valor do conjunto de valores de um tipobsico associado a ela. Uma varivel pode assumir vrios valores diferentes ao longo daexecuo do programa, mas, em um determinado momento, possui apenas um valor.Unidades bsicas de armazenamento das informaes a nvel de linguagens deprogramao. Os tipos de dados e variveis utilizados dependem da fina lidade dosalgoritmos, mas, podemos definir alguns, pelo fato de serem largamente utilizados eimplementados na maioria das linguagens: Esse tipo bsico poder ser: INTEIRO (int, short int ou long int): qualquer nmero inteiro, negativo, nulo ou positivo. Ex: -2, -1, 0... Operaes: soma(+), subtrao(-), multiplicao(*), diviso inteira(/), resto(%) e comparaes. REAL (float ou double): qualquer nmero real, negativo, nulo ou positivo. Ex: 2.5, 3.1 Operaes: soma(+), subtrao(-), multiplicao(*), diviso exata(/) e comparaes. CARACTER (char): qualquer conjunto de caracteres alfanumricos. Ex: A, B, "ABACATE" Operaes: comparaes TEXTO OU CADEIA DE CARACTERES (string):uma varivel deste tipo poder armazenaruma cadeia de caracteres de qualquer tamanho. Caso seja imprescindvel para o entendimentopode-se acrescentar, entre parnteses, a quantidade mxima de caracteres. (Exemplo: texto (10)). Obs.: Os textos devero ser representados sempre entre apstrofes para que no se confundamcom os valores numricos. Veja que o inteiro 5, diferente do texto 5. 11
LGICO (boolean):tipo especial de varivel que armazena apenas os valores V e F, onde Vrepresenta VERDADEIRO e F FALSO. Ex: e, ou, no Operaes: Verdadeiro ou Falso
2. DECLARAO DE VARIVEIS
Consiste na definio dos nomes e valores das constantes e dos nomes e tipos dasvariveis que sero utilizadas pelos algoritmos, previamente sua utilizao, incluindocomentrio, quando se fizerem necessrios. Na maioria das linguagens de programao, quando o computador est executando umprograma e encontra uma referncia a uma varivel ou a uma constante qualquer, se esta notiver sido previamente definida, ele no saber o que fazer com ela. Da mesma forma, umprogramador que estiver implementando um al oritmo, em alguma g linguagem de programao,ter o seu trabalho simplificado se todas as constantes e variveis referenciadas no algoritmotiverem sido previamente declaradas. As constantes so declaradas antes das variveis. Vejamosos formatos da declarao e alguns exemplos. O significado da declarao de variveis corresponde criao de locais na memria rotuladacom o nome da varivel (identificador) e marcada com o tipo de valores que ela pode conter. Paraque os programas manipulem valores, estes devem ser armazenados em variveis e para isso,devemos declar-las de acordo com a sintaxe:
identificador
Ex: Inteiro X1; obs.: X1 o nome de um local de memria que s pode conter valores do tipo inteiro real SOMA, MDIA; caractere frase, nome; inteiro X1; real A,B; lgico TEM;
3. PALAVRAS RESERVADAS
So palavras que tero uso especfico no nosso pseudo-cdigo e que no devero serusadas como identificadores, para no causar confuso na interpretao. Exemplo: Algoritmo, Programa, Bloco, Procedimento, Inteiro, Real, Texto, Const,Var, Tipo, Incio, Imprima, Se, Ento, Seno, Enquanto, Repita, Variando,Faa, Caso, At, Vetor, Matriz, Registro, Fim, Execute, Procedimento, Funo, etc.... O significado de cada um desses termos ser visto e entendido nos itens e captulos que seseguem. COMANDO SIMPLES uma instruo simples. leia(x); COMANDO COMPOSTO Um grupo de comandos simples que executam alguma tarefa. Incio leia(x); y = 2*x; fim.
12
4. OPERADORES
Na soluo da grande maioria dos problemas necessrio que as variveis tenham seus valores consultados ou alterados, para isto, devemos definir um conjunto de OPERADORES, sendo eles:
/ = Diviso TRUNCA(A) - A parte inteira de um nmero Fracionrio. / = Quociente da diviso de inteiros ARREDONDA(A) - Transforma por arredondamento, 5/2=2 um nmero fracionrio em inteiro. Obs. FUNES PRIMITIVAS: As funes mais comuns de matemtica so tambm definidas e vlidas no PORTUGOL. Exemplos: LOG (X), {d o logaritmo na base 10 de X} SEN (X), {d o seno de X} ABS (X), {d o valor absoluto de X} INT (X), {d a parte inteira de um real X} ARREDONDA (x), {arredonda um real para inteiro} RAIZ (X), {d a raiz quadrada de X} etc.
Exemplo: NUM = 3 NOME = DENISE NUM > 5 falso (0) {3 no maior que 5} NOME < DENIZ verdadeiro (1) {DENISE vem antes de DENIZ} 13
Note que a tabela acima, apresenta os operadores lgicos j ordenados de acordo com suas prioridades, ou seja, se na mesma expresso tivermos o operador ou e o operador no, por exemplo,primeiro devemos executar o no e depois o ou. De uma forma geral, os resultados possveis para os operadores lgicos podem ser vistos na tabela abaixo, conhecida como Tabela Verdade: A F F V V B F V F V AeB F F F V A ou B F V V V no A V V F F A xou B F V V F
Exemplos de testes utilizando operadores lgicos: Expresso Se chover e relampejar, eu no saio. Se chover ourelampejar, eu no saio. Se chover xourelampejar, eu no saio. Quando eu no saio? Somente quando chover e relampejar ao mesmo tempo (apenas 1 possibilidade). Somente quando chover, somente quandorelampejar ou quando chover e relampejar aomesmo tempo (3 possibilidades). Somente quando chover, ou somente quandorelampejar (2 possibilidades).
1.
Se (salario > 180) e (salrio < 800) Ento Escrever ('Salrio vlido para financiamento') Seno Escrever ('Salrio fora da faixa permitida para financiamento') FimSe. Se (idade < 18) ou (idade > 95) Ento Escrever ('Voc no pode fazer carteira de motorista') Seno Escrever ('Voc pode possuir carteira de motorista') FimSe Se (idade > = 18) e (idade < = 95) e (aprovado_exame = 'sim') Ento Escrever ('Sua carteira de motorista estar pronta em uma semana') Seno Escrever ('Voc no possui idade permitida ou no passou nos testes') FimSe. 14
2.
3.
5. EXERCCIOS INTRODUTRIOS I
1. O resultado da expresso 3 + 6 * 13 = X? 2. Sendo A,B,C e D variveis do tipo inteiro, cujos contedos so: A=3, B=4, C=13 e D=4. Quais os valores fornecidos por cada uma das expresses aritmticas abaixo? a) 100*(B/A)+C b) A%5 - D/2 c) trunca(0,3+5)*2 3. a) X+Y-Z; c) JOO+JOS/JOEL; 4. 5. d) (C+D)/C**2 e) B%(A+1) f) sinal(D -C) b)A+B/C**2; d) X+Y+B**2+R*3
Avalie a seguinte expresso aritmtica: 6+4/2*3. O resultado desta expresso 15; 12; 24? Qual o resultado das seguintes expresses a) 1 + 7 * 2 ** 2 - 1 = X b) 3 * (1 - 2) + 4 * 2 = X
6.
7.
Identifique as entradas e sadas das expresses abaixo. Escreva-as em forma computacional a) r=2y+3zb)
15
6.
E E
E S
reci o represent r troca e informaes e ocorrer entre o mundo da mquina e o nosso No l orit o mundo, para isso, devemos utili ar comandos de entrada e sada, sendo que, no nvel de al oritmo esses comandos representam apenas a entrada e a sada da informao, independe do dispositivo utili ado teclado, discos, impressora, monitor,... , mas, sabemos que nas linguagens de programao essa independncia no existe, ou seja, nas linguagens de programao temos comandos especficos para cada tipo de unidade de Entrada/Sada.
6. .
E
Para que possamos obter dados do meio exterior para uso do computador memria principal , estes tm de vir atravs dos dispositivos de entrada. a mesma forma, as informaes que so produzidas, tm de ser levadas ao meio externo um arquivo, uma impressora, uma tela etc. atravs de um dispositivo de sada. Para isso, utilizamos dois comandos assim definidos: omando Lei ( no c): l, do meio externo, a prxima informao disponvel para leitura e armazena na(s) varivel(eis) discriminada(s) aps o comando, entre parnteses. ais tarde aprenderemos como especificar a leitura de um dado que est armazenado em um arquivo e de que arquivo est sendo lido o d ado. i , i ,... ;
3.6.
m
5 32 4 32 76
Comando Im im ( i no c): Imprime (na tela ou na impressora) o contedo da(s) varivel(eis) especificada(s) aps o comando, entre parnteses. No ser preocupao nossa a formatao de relatrios, mas o comando permite a impresso de texto (entre), se for necessria para c lareza ou especificao do que est sendo impresso. Im
im
Imprima
7. ES
As estruturas de controle introduzidas nesta unidade facilitaro a expresso de algoritmos e permitiro que exemplos mais significativos sejam apresentados e propostos, visando o aperfeioamentodo desenvolvimento do processo de aprendizado da construo de algoritmos. escreveremos a seguir os comandos bsicos de controle do P o programa equivalente em linguagem C para uma mel or compreenso. P L
SH QPIH R
'
Lei
el
el
; ( identificador ) ;
expresso ,
PSE
"
D B 3@ 4A @98 4 32 EC C
!
V`Y WV U X
G
16
<comandos>; Fim. C #include <stdio.h> main () /* Um Primeiro Programa */ { printf ("Meu primeiro programa\n"); } Comentrio de cdigos: Quando fazemos um programa, uma boa ideia usar comentrios que ajudem a elucidar o funcionamento do mesmo. Os comentrios devem vir entre /* */ Ex: /* Um Primeiro Programa */ O compilador C desconsidera qualquer coisa que esteja comeando com /* e terminando */. DOCUMENTAO Alguns princpios bsicosdevero ser usados desde a criao do primeiro algoritmo: y y y Ao criar as constantes e variveis, utilizar nomes significativos e comentar, se necessrio for; Utilizar identao (trs espaos como sugesto), para mostrar a estrutura lgica e sequncia de comandos, quando usando o PORTUGOL e C. Utilizar parnteses para evitar ambiguidade nas expresses;
1. SEQUNCIA
Grupo de comandos que so executados um aps o outro. PORTUGOL Incio comando 1; comando 2; . . comando n; Fim. C #include <stdio.h> main () /* Um Primeiro Programa */ { printf ("Meu primeiro programa\n"); }
2. SELEO
Tambm chamada de estrutura de deciso ou de processamento condicional, a estrutura de seleo utilizada quando a execuo de um comando (ou uma sequncia de comandos) depende de um teste anterior (uma ou mais comparaes). A seleo pode ser simples ou composta. 17
2.1.
SELEO SIMPLES
Quando a execuo de um comando (ou de uma sequncia de comandos) depender de uma condio verdadeira, e no h comandos a executar se a condio for falsa. PORTUGOL Se <condio> Ento (comandos); Fim Se; C if (num==10) //Condio { printf ("O numero e igual a 10."); //Comando } Onde a CONDIO poder ser tambm uma expresso lgica. Exemplo1: leia um nmero inteiro e o imprima se ele for diferente de 0 (ZERO) Exemplo2: Se (a<5) Ento Imprima (o valor de a a); Fim Se;
2.2.
SELEO COMPOSTA
Quando se executa um comando (ou sequncia de comandos) se uma condio verdadeira, e se executa um outro comando (ou sequncia de comandos) se a condio falsa. PORTUGOL Se <condio> Ento (comandos); Seno (comandos); Fim Se; C if (num==10) // Condio { printf ("O numero e igual a 10."); // Comando } else { printf ("O numero e diferente de 10."); // Comando }
2.3.
ANINHAMENTO DE SELEES
A estrutura de Seleo permite o aninhamento, ou seja, o comando a ser executado dentro de uma seleo (por exemplo, no "Seno") pode ser outra seleo. Outro aninhamento poder ocorrer tambm com esta ltima seleo e assim por diante. Nos casos de vrios aninhamentos subsequentes, uma boa identao ser fundamental para o entendimento do algoritmo quando utilizando pseudo-cdigo. PORTUGOL Incio Se CONDIO_A Ento {V} comando1; Seno {F} Se CONDIO_B Ento comando2; Seno comando3; Fim Se; Fim se; Fim. 18
C if (num <= 10) { if (num == 10) printf ("O numero e igual a 10."); else printf (O numero e menor que 10); } else if (num <= 20) { printf ("O numero e maior que 10 e menor que 20."); }
Enquanto (Contador < Nmero_de_Funcionrios) Faa Leia (Nome); Contador = Contador+1; Fim Enquanto; Fim.
20
Numa estrutura Enquanto, os comandos so executados 0 ou mais vezes. Numa estrutura Repita, os comandos so executados pelo menos uma vez.
4. EXERCCIOS INTRODUTRIOS II
1) Quais valores sero impressos aps a execuo do seguinte trecho de algoritmo I=0; Enquanto I<20 Faa Imprima (I,I**2); I=I+1; Fim Enquanto; Imprima (I=,I); Imprima (UFA! CHEGUEI AQUI); /*CUIDADO*/ 2) Dado o algoritmo abaixo, que calcula o volume de uma esfera de raio R: Incio Real VOLUME, PI, R; 21
Constante PI = 3,1416; R=0; Enquanto R<= 6 Faa VOLUME=4/3*PI*(R**3); Imprima (R,VOLUME); R=R+2; Fim Enquanto; Fim. Completar os demais valores que sero impressos: R VOLUME DA ESFERA
10) Identifique o tipo de cada uma das constantes abaixo: a) 21 d) 0,21*10 b) "BOLA" e) falso c) "VERDADEIRO"
Exemplo: A=14,2;I=1;enquanto I<10 faa X=X+1;K=I*K;I=I+1; fim enquanto O mesmo exemplo com cada comando em uma linha A=14,2; I=1; Enquanto I<10 Faa X=X+1; K=I*K; I=I+1; Fim Enquanto; 10- Utilize parnteses para aumentar a legibilidade e prevenir-se contra erros. Com poucos parnteses A*B*C/(C*D*E) A**B**C A+B<C Com parnteses extras (A*B*C)/(C*D*E) (A**B)**C (A+B)<C
11- Toda vez que uma modificao for feita no algoritmo, os comentrios devem ser alterados.
7. EXERCCIOS COMPLEMENTARES - I
1. Faa um algoritmo que leia quatro idades e calcule a mdia das mesmas. 2. Altere o algoritmo de media de idade para ler tambm os nomes e ao final mostrar a mensage com os trs m nomes mais a mdia de suas idades. 3. Faa um algoritmo que faa a soma dos nmeros inteiros de 1 a 18. 4. Faa um programa que leia 4 nmeros inteiros e apresente: Mdia dos mpares Maior nmero par Diferena do maior menos o menor nmero 5. Faa um programa que leia o nome e a idade de 3 pessoas e apresente: Maior idade Nome da pessoa mais nova Mdia das idades 7. Faa um programa que leia a medida do lado de um quadrado e calcule e apresente a rea e o permetro desta figura. Obs: Permetro a soma de todos os lados de uma figura geomtrica. 8. Faa um programa que leia o raio de uma circunferncia e calcule e apresente sua a rea e permetro. 23
9. Faa um programa que leia o valor dos lados de um tringulo retngulo e calcule e apresente a sua rea. rea = (base*altura)/2
24
EM
ESTRUTURAS
DE
Antes de tratarmos das estruturas de dados homogneas, vejamos algumas novas estruturas de controle, que faremos uso quando trabalharmos com vetores e matrizes.
Nota: 1) Assim como no comando enquanto, se o valor inicial (i) j for superior ao limite ( ), os comandos C1, f C2,...,Cn no sero executados. 2) Toda vez que o fim para encontrado, a varivel de controle (i) incrementada pelo passo p e o teste (v<=l) feito. 3) O valor da varivel de controle torna-se indefinido assim que executado o comando para. Neste aspecto o comando para diferente do comando enquanto. Por exemplo, com o trecho de algoritmo seguinte: Para X de 1 at 10 Passo 1 Faa Imprima (X); Fim Para; Imprima (X); sero impressos dentro do comando para: 1,2,3,4,5,6,7,8,9,10 e fora do comando para ser impresso o valor 11. Quando o passo (p) for igual a 1, no ser necessrio escrever esta especificao no comando. No exemplo acima teramos: Para X de 1 at 10 Faa Imprima (X); Fim Para;
printf ("\t\tVoce escolheu Mamao.\n"); break; case '2': printf ("\t\tVoce escolheu Abacaxi.\n"); break; case '3': printf ("\t\tVoce escolheu Laranja.\n"); break; } } 1. Aps obter-se um valor verdadeiro para um dos casos, cessam os testes dos casos e o prximo comando a ser executado o que vem a seguir do Fim Conforme. Esta estrutura tambm pode ser utilizada testando-se as condies ao invs de valores, paradeterminar qual o comando a ser executado aps o teste de cada condio (Ver exemplo b). Emprogramao, uma aplicao sempre interessante desta estrutura no tratamento de Menus deOpes, quando para cada seleo feita pelo usurio do programa, haver uma sequncia deaes diferentes a ser executada. Outra aplicao na impresso de diferentes mensagens deerro. Exemplos: a) Incio /*trecho de algoritmo para tratamento de trs possveis erros conhecidos na execuo de um programa*/ Conforme Caso ERRO = 1 Imprima (MSG1); Caso ERRO = 2 Imprima (MSG2); Caso ERRO = 3 Imprima (MSG3); Seno Imprima (ERRO NO CONHECIDO); Fim Conforme; Fim. b) Incio /* trecho de algoritmo para impresso da situao de um aluno a partir da MDIA obtida ao fim do curso */ Conforme Caso MDIA > 7.0 Imprima (APROVADO COM DIPLOMA); Caso MDIA > = 5.0 Imprima (APROVADO COM CERTIFICADO); Seno Imprima (REPROVADO); Fim Conforme; Fim.
4. VETORES
Um vetor ou agregado homogneo, ou ainda varivel composta homognea, uma estrutura de dados que contm elementos de mesmo tipo, que podem ser referenciados como um todo. Ao declararmos um vetor, estamos reservando na memria principal do computador uma srie de clulas para uso da varivel daquele tipo. O nome do vetor aponta para a base das clulas e o seu incio d a posio relativa do elemento referenciado ao primeiro (base). Nem sempre os tipos bsicos (inteiro, real, caractere e lgico) so suficientes para exprimir estruturas de dados em algoritmos. Por exemplo consideremos um problema em que umprofessor com 5 alunos deseja imprimir a nota e a mdia de seus alunos. Nesse caso serianecessrio se considerar cinco variveis reais para contar as notas dos cinco alunos. Imagine queo nmero de alunos da turma seja 80. S a declarao destas variveistornaria impraticvel aredao do algoritmo. Da a necessidade de novos tipos serem criados. Um destes tipos, o vetor,ser estudado.
27
Os vetores podem ser unidimensionais ou multidimensionais (matrizes). Um vetorunidimensional, como uma lista de notas dos 50 alunos de uma turma, tem apenas um ndice. Seexistirem porm vrias turmas poderemos utilizar um vetor com dois ndices (o nmero da turma eo nmero do aluno da turma). Abordaremos este assunto ainda neste captulo.
4.1.
DECLARAO DE VETORES
tipo_da_varivel nome_da_varivel [Pi:Pf]; Pi - Posio Inicial do Vetor Pf - Posio Final do Vetor Quando o C v uma declarao como esta ele reserva um espao na memriasuficientemente grande para armazenar o nmero de clulas especificadas em tamanho. Porexemplo, se declararmos: float exemplo [20]; o C ir reservar 4x20=80 bytes. Estes bytes so reservados de maneira contgua. Nalinguagem C a numerao comea sempre em zero. Isto significa que, no exemplo acima, osdados sero indexados de 0 a 19. Para acess-los vamos escrever: exemplo[0] exemplo[1] . . exemplo[19] Mas ningum o impede de escrever: exemplo[30] exemplo[103] Por qu? Porque o C no verifica se o ndice que voc usou est dentro dos limites vlidos.Este um cuidado que vocdeve tomar. Se o programador no tiver ateno com os limites devalidade para os ndices ele corre o risco de ter variveis sobrescritas ou de ver o computadortravar. Bugs terrveis podem surgir. Vamos ver agora um exemplo de utilizao de vetores: Exemplo: Real Notas[1:80]; O nmero de elementos de um vetor dado por: Pf-Pi+1 Isto significa que as posies do vetor so identificadas a partir de Pi, com incrementos unitrios, at Pf: Pi Pi + 1 ----------Pf
Cada elemento de um vetor tratado como se fosse uma varivel simples. Para referncia a umelemento do vetor, utiliza-se o nome do vetor e a identificao do elemento (ndice) entrecolchetes. Por exemplo, se desejarmos atribuir o valor FMI ao elemento identificado pelo ndice6 do vetor anterior, teremos: NOME[4] FMI que produzir 2 3 FMI 4 5
Ex.: Algoritmo para ler as notas de 3 alunos e imprimir os nomes daqueles cujas notas foremmaior que a mdia. Algoritmo Notas {Sem Vetor} Incio Caracter Nome1, Nome2, Nome3; Real Nota1, Nota2, Nota3; Leia(Nome1, Nota1); Leia (Nome2, Nota2); Leia (Nome3, Nota3); Mdia = (Nota1+Nota2+Nota3)/3.0 ; Se Nota1 > Mdia Ento Imprima (Nome1); Fim Se; Se Nota2 > Mdia Ento Imprima (Nome2); Fim Se; Se Nota3 > Mdia Ento Imprima (Nome3); Algoritmo Notas {Com Vetor} Incio Caracter Nome[0:2] Real Nota[0:2]; Real Soma; Para I de 0 at 2 Faa Leia (Nome[I], Nota[I]); Fim Para; /*Clculo da Mdia*/ Soma = 0.0 ; Para I de 0 at 2 Faa Soma = Soma + Nota [I] ; Fim Para; Mdia = Soma/3.0; Para I de 0 at 2 Faa Se Nota[I] > Mdia Ento 28
1- Para inicializar um vetor com valores diferentes, utilizamos um comando construtor NOTA ={ 5.7, 9.5, 10.0, ..., 7.5}; que equivale a: NOTA [0] = 5.7, NOTA[2] =10.0;....etc. 1) Dado o vetor CRR de caracteres abaixo, CRR
!
0 1
O
2
T
3
R
4
E
5 6
C
7
Qual ser a sua configurao depois de executados os comandos: Para I de 0 at 3 passo 1 Faa AUX =CRR[I]; CRR[I]=CRR[6-I+1]; CRR[6-I+1] =AUX; Fim Para; 2) Dados dois vetores R[9] e S[19], escreva um algoritmo que: Leia os vetores R e S e Gere ovetor X correspondente unio dos vetores R e S. Incio Inteiro R[0:9],S[0:19],X[0:29]; Inteiro I; Leia (R, S); Para I de 0 at 9 Passo 1 Faa X[I] = R[I]; Fim Para Para I de 0 at 19 Passo 1 Faa X[I+10] = S[I]; Fim Para; Imprima (X); Fim. a) Gere o vetor Y com os elementos comuns de R e S Incio inteiro R[0:9], Y[0:9], S[0:19], I, J, K; leia (R,S); Y=0 para I de 0 at 9 faa K = 1; para J de 0 at 19 faa se R[I] == S[J] ento enquanto K<=I faa se Y[K] != R[I] ento se Y[K]==0 ento Y[K] =R[I]; fim se; seno abandone; fim se; K =K+1; fim enquanto; fim se; se Y[K]==R[I] ento abandone; fim se; fim para; fim para; imprima (Y); Fim.
29
3) Um armazm trabalha com 100 mercadorias diferentes identificadas pelos nmeros inteiros de 1 a 100. O dono do armazm anota a quantidade de cada mercadoria vendida durante o ms. Ele tem uma tabela que indica para cada mercadoria o preo de venda. Escreva o algoritmo para calcular o faturamento mensal de armazm, isto :
FATURAMENTO=
A tabela de preo e quantidade so fornecidas em dois conjuntos, sendo que um conjunto contm a quantidade vendida e o outro o preo de cada mercadoria. Soluo Incio /* calcula o faturamento*/ real QUANTIDADE[0:99], PREO[0:99] /*Tabela de Qtdes vendidas e Preo*/ real FATURAMENTO; inteiro I; /* indexador*/ FATURAMENTO = 0; leia (QUANTIDADE, PREO); para I de 0 at 99 faa FATURAMENTO = FATURAMENTO +QUANTIDA DE[I]*PREO[I]; fim para; imprima (FATURAMENTO); Fim.
30
5. MATRIZES
Definio: Conjunto de dados referenciados por um mesmo nome e que necessita de mais deum ndice para ter seus elementos individualizados. Quando temos mais de uma dimenso ento utilizamos as matrizes, que de diferente, nouso e na declarao, s tem estas dimenses a mais explcitas: A sintaxe a seguinte: <Tipo bsico> identificador [Pi1:Pf1, Pi2:Ps2,......, Pin:Pfn]; Esta especificao corresponde apenas criao do modelo, e, para efetivar a estrutura dedados dentro do algoritmo, necessria uma declarao dando um nome varivel que segue omodelo. Ex: Real MAT[1:3,1:4]; ou seja, MAT 1 1 2 3 O nmero de dimenses da matriz ser igual ao nmero de vrgulas ( , ) da declaraomais 1. O nmero de elementos igual ao produto do nmero de elementos de cadadimenso: (Pf1-Pi1+1)*(Pf2-Pi2+1)*...*(Pfn-Pin+1) Exerccios 1) Qual o nmero de elementos e dimenses das matrizes especificadas abaixo: a) real MAT1[0:2,1:5]; b) Caracter MAT2[1:3, 2:4, 3:4] Para referenciar um elemento da matriz so necessrios tantos ndices quantas so as dimensesda matriz. Numa matriz bidimensional (duas dimenses) o primeiro ndice indica a linha e osegundo, a coluna. No exemplo anterior, MAT1[1,3] se refere ao elemento da linha nmero 1(segunda linha no caso) e coluna nmero 3 (terceira coluna) MAT1 1 0 1 2 Para matrizes com trs dimenses, repete-se a estrutura bidimensional tantas vezes quantos soos elementos da terceira dimenso, numerando-as de acordo com os limites especificados nadeclarao de tipo. Exemplo1:O que ser impresso no algoritmo abaixo: Incio inteiro M1[1:3,1:2]; inteiro: I, J; M1[1,1] = 1; M1[1,2] = 2; M1[2,1] = 3; M1[2,2] = 4; M1[3,1] = 5; M1[3,2] = 6; Imprima(M1); 31 2 3 4 5 2 3 4
Para I de 1 at 2 Faa Para J de 1 at 3 Faa Imprima (M1[J,I]); Fim Para; Fim Para; Fim. Exemplo 2: Dada a matriz MAT abaixo 1 1 2 3 O E A 2 Q A * 3 * E * 4 I S S
Qual ser a configurao de MAT depois de executado o algoritmo: Incio Inteiro I, J; Caracter AUX; Caracter M1[1:4,1:4]; Leia (MAT); Para I de 1 at 4 Passo 1 Faa Para J de I+1 at 4 Passo 1 Faa AUX = MAT[I,J]; MAT[I,J] = MAT[J,I]; MAT[J,I] = AUX; Fim Para; Fim Para; AUX=MAT[1,1]; MAT[1,1]=MAT[4,4]; MAT[4,4]= AUX; AUX = MAT[2,2]; MAT[2,2] = MAT[3,3]; MAT[3,3] = AUX Fim. Notas: 1- Para percorrer a matriz linha por linha: Fixar a linha Variar a coluna Inteiro exemplo[1:3,0:4]; I =1; Enquanto I<=3 Faa J=0; Enquanto J<= 4 Faa exemplo[I,J] =I+J; J=J+1; Fim Enquanto; I=I+1; Fim Enquanto; 2- Para percorrer a matriz coluna por coluna Fixar a coluna Variar a linha Inteiro exemplo[1:3,0:4]; J =0; Enquanto J<=4 Faa I=1; 32
Enquanto I<= 3 Faa exemplo[I,J] =I+J; I=I+1; Fim Enquanto; J=J+1; Fim Enquanto; ou ento: Para j de 0 at 4 Passo 1 Faa Para I de 1 at 3 Passo 1 Faa exemplo[I,J] I+J; Fim Para; Fim Para; Como no caso de vetores, tambm para matrizes podemos ter comandos concisosparainicializao, leitura e impresso. Por exemplo, seja MAT definida por: Inteiro MAT[1:10,1:8]; O comando: Leia (MAT); equivalente ao seguinte trecho: Para i de 1 at 10 Passo 1 Faa Para j de 1 at 8 Passo 1 Faa leia (MAT[I,J]; Fim Para; Fim Para; Do mesmo modo, pode-se inicializar uma matriz com todos os seus elementos iguais a umdeterminado valor escrevendo MAT =0;
5.1.
Exerccios Resolvidos
1) Dada uma matriz MAT de 4 x 5 elementos, faa um algoritmo para somar os elementos de cadalinha gerando o vetor SOMALINHA. Em seguida, somar os elementos do vetor SOMALINHA navarivel TOTAL que deve ser impressa no final: Exemplo
1 1 8 1
2 3 5 -2
-1 4 1 3
2 2 3 4
3 0 2 5
7 10 19 11
TOTAL 47
Soluo: Incio Real MAT[1:4, 1:5]; Real SOMALINHA[1:4]; Real: TOTAL; Inteiro: I, J; SOMALINHA=0; TOTAL=0; 33
Leia (MAT); Para I de 1 at 4 Faa Para J de 1 at 5 Faa SOMALINHA[I]= SOMALINHA[I]+MAT[I,J]; Fim Para; TOTAL=TOTAL+SOMALINHA[I]; Fim Para; Imprima (TOTAL=, TOTAL); Fim. 2) Escreva um algoritmo que leia duas matrizes reais de dimenso 3 x 5, calcule e imprima asoma das matrizes. Incio Real A[1:3,1:5], B[1:3,1:5], C[1:3,1:5]; Inteiro: I, J; Leia (A,B); I=1; Enquanto I<=3 faa J=1 Enquanto J<=5 faa C[I,J] =A[I,J]+B[I,J]; J=J+1; Fim Enquanto; I=I+1; Fim Enquanto; Imprima ( C= ,C ); Fim. 3) Escreva um algoritmo para um programa que leia uma matriz quadrada 20 x 20 de elementosreais, divida cada elemento de uma linha da matriz pelo elemento da diagonal principal desta linhae imprima a matriz assim modificada. Obs. Elementos da diagonal principal; M[1,1], M[2,2], M[3,3], M[4,4] Incio real M[1:20,1:20]; Inteiro: I, J; Real: DIAGONAL; Leia (M); Para I de 1 at 20 Faa DIAGONAL =M[I,I]; Para J de 1 at 20 Faa M[I,J] =M[I,J]/DIAGONAL; Fim Para; Fim Para; Imprima (M=,M); Fim.
34
MODULARIZAO DE ALGORITMOS
1. INTRODUO
Vimos que os algoritmos estruturados so desenvolvidos levando-se em conta algumaspremissas bsicas: 1) Desenvolver o algoritmo em diferentes fases de detalhamento crescente, do geral ao particular,por refinamentos sucessivos (desenvolvimento "top-down" ou de cima para baixo). 2) Decompor o algoritmo em mdulos funcionais, organizados de preferncia em um sistemahierrquico. Esses mdulos trazem vantagens adicionais para testes, pois testa-se um mdulo (ouseja, uma parte do programa) de cada vez, independentemente; e para reutilizao de um mduloem outros algoritmos e programas, no futuro. Passaremos agora a formalizar a utilizao de mdulos nos nossos algoritmos e verificar asvantagensque os mesmos trazem para entendimento, construo, codificao, teste e reutilizaodos mesmos. A grande maioria das linguagens de programao que so utilizadas, tem estafacilidade, seja com o nome de Sub -rotinas, Subprogramas, Procedimentos, Funes, Mdulos,Blocos, etc., sempre possvel subdividir-se um programa de modo a facilitar o entendimento,permitir a reutilizao, evitando-se a repetio de blocos dos programas. No nosso pseudo cdigodefiniremos dois tipos de mdulos: Os procedimentos ("procedures") e as funes ("functions"). Os procedimentos e funes so normalmente definidos antes de seremutilizados(chamados) pelo programa principal. Em se tratando de algoritmos, entretanto,poderemos definir nossos procedimentos e funes em qualquer parte do algoritmo principal oudepois dele, adotando os formatos que se seguem e as normas de documentao.
2. PROCEDIMENTOS
Um procedimento uma seqncia de comandos precedida por uma seq uncia dedeclaraes que possui um identificador (nome do procedimento), uma lista de parmetrosopcional e pode realizar qualquer tipo de processamento que o programador ou analista deseje.As variveis, os tipos e as constantes declaradas dentro de um procedimento s so acessveisdentro dos comandos do procedimento. So chamadasvariveis locais. Em um Algoritmo, asvariveis, tipos e constantes declaradas logo aps o identificador do algoritmo, so acessveis evisveis dentro de qualquer procedimento que esteja sendo usado pelo algoritmo. So chamadasvariveis Globais. uma boa tcnica ao se construir um procedimento, no fazer uso no mesmo,de variveis globais e referenciar e utilizar apenas as variveis locais e os parmetros doprocedimento. Isso far com que cada procedimento, ao ser modificado, no afete outras partesdo Algoritmo, e da mesma forma as variveis globais podero ser modificadas sem que hajaefeitos colaterais nos procedimentos. Sintaxe de declarao Procedimento < nome do Procedimento> Incio <declaraes>; C1; C2; . Cn; Fim { nome do procedimento}. Exemplo: O que ser impresso no algoritmo abaixo? Incio Inteiro: X,Y,A,B,C,D; Procedimento troca Incio Inteiro: AUX,X AUX X X Y Y AUX Fim troca. A 5; B 3;
b
35
Imprima(A, B); X A; Y B; Troca; A X; B Y; Imprima(A, B); C 4; D 9; Imprima(C, D); X C; Y D; Troca; C X; D Y; Imprima(C, D); Fim. Os mdulos que estivemos utilizando na apostila, nos captulos anteriores, so procedimentossem parmetros, ou seja, que fazem uso de variveis globais e sua nica importante vantagem facilitar o entendimento e a soluo do algoritmo. Utilizando parmetros e no variveis globais dentro do procedimento, podemos, por assimdizer, isol do -lo meio exterior e obter vantagens adicionais na codificao, pois, uma vez queforam bem definidos os parmetros, um programador poder desenvolver seu procedimento semse preocupar com o algoritmo que o vai chamar. Poderemos tambm test-lo individualmente eisoladamente para verificar sua correo. Isto ser comprovado na disciplina LP. A isto sedenomina Encapsulamento. Uma lista de parmetros consiste em uma lista de variveis e seusrespectivos tipos. Procedimento < nome do Procedimento> (<lista de parmetros>) < especificao de parmetros> Incio <declarao de variveis locais> C1; C2; . . Cn; Fim. { nome do procedimento} Exemplo de Procedimento: Procedimento TROCAINTEIROS (Inteiro NUM1,inteiro NUM2) Incio Inteiro AUXNUM; AUXNUM = NUM1; NUM1 = NUM2; NUM2 = AUXNUM; Fim.
3. FUNES
Funes so as estruturas que permitem ao usurio separar seus programas em blocos. Seno as tivssemos, os programas teriam que ser curtos e de pequena complexidade. Parafazermos programas grandes e complexos temos de constru-los bloco a bloco. Uma funo um mdulo que tem por objetivo calcular e retornar ao algoritmo,procedimento ou funo "chamador" um valor. A chamada de uma funo para execuo feitaapenas citando o seu identificador no meio -se de uma expresso. Vide as funes previamenteexistentes no nosso pseudo -cdigo. Uma funo dita recursiva quando chama a ela prpria. Uma funo no C tem a seguinte forma geral: tipo_de_retorno nome_da_funo (declarao_de_parmetros) Incio 36
corpo_da_funo Fim. Em PORTUGOL utilizaremos a seguinte forma PORTUGOL Tipo-de-retorno<nome da funo>(<declarao dos parmetros>) Incio Corpo da Funo Fim. Onde: A lista de parmetros semelhante dos procedimentos Antes do nome da funo d o tipo do valor que a funo retorna ao algoritmo ouprocedimento chamador. O tipo-de-retorno o tipo de varivel que a funo vai retornar. O default o tipo inteiro(int), ou seja, uma funo para qual no declaramos o tipo de retorno considerada comoretornando um inteiro. A declarao de parmetros uma lista com a seguinte forma geral: tipo nome1, tipo nome2, ... , tipo nomeN Repare que o tipo deve ser especificado para cada uma das N variveis de entrada. nadeclarao de parmetros que informamos ao compilador quais sero as entradas da funo(assim como informamos a sada no tipo-de-retorno). O corpo da funo a sua alma. nele que as entradas so processad sadas sogeradas ou outras as, coisas so feitas. O Comando retorna (return) O comando return tem a seguinte forma geral: retorna valor_de_retorno; ou retorna; Digamos que uma funo est sendo executada. Quando se chega a uma declarao retorna (return) a funo encerrada imediatamente e, se o valor de retorno informado, afuno retorna este valor. importante lembrar que o valor de retorno fornecido tem que sercompatvel com o tipo de retorno declarado para a funo. Uma funo pode ter mais de uma declarao retorna (return). Isto se torna claro quandopensamos que a funo terminada quando o programa chega primeira declarao retorna( return). Abaixo esto dois exemplos de uso do retorna (return): Exemplo de funo: Inteiro VALORABSOLUTO (inteiro X) Incio Se X > = 0 Ento VALORABSOLUTO =X; Seno VALORABSOLUTO = (-X); Fim Se; Fim. Exerccio para casa: Escrever e executar em C o programinha acima - Algoritmo para calcular o quadrado de um nmero PORTUGOL Inteiro Square(inteiro a) Incio retorna (a*a); Fim. Algoritmo Principal Incio inteiro num; imprima ("Entre com um numero: "); 37
leia (num); num=Square(num); imprima ("O seu quadrado vale:", num); Fim. Em C #include <stdio.h> int Square (int a){ return (a*a); } int main (){ int num; printf ("Entre com um numero: "); scanf ("%d",&num); num=Square(num); printf ("\n\nO seu quadrado vale: %d\n",num); return 0; } - Algoritmo para verificar se um nmero a divisvel por 2. PORTUGOL inteiro EPar (inteiro a) incio se (a%2) ento /* Verifica se a e divisivel por dois */ return 0; /* Retorna 0 se nao for divisvel, a%1=1 */ seno return 1; /* Retorna 1 se for divisivel , a%0=0*/ fim se; fim. Algoritmo Principal Incio inteiro num; imprima ("Entre com numero: "); leia (num); se (EPar(num)) ento imprima ("O numero e par."); seno imprima ("O numero e impar."); fim se; Fim. Em C #include <stdio.h> int EPar (int a){ if (a%2) /* Verifica se a e divisivel por dois */ return 0; /* Retorna 0 se nao for divisivel */ else return 1; /* Retorna 1 se for divisivel */ } int main (){ int num; printf ("Entre com numero: "); scanf ("%d",&num); if (EPar(num)) printf ("\n\nO numero e par.\n"); else printf ("\n\nO numero e impar.\n"); return 0; } importante notar que, como as funes retornam valores, podemos aproveit-los parafazer atribuies, ou mesmo para que estes valores participem de expresses. Mas no podemosfazer: 38
func(a,b)=x; /* Errado! */
4. Prottipos de Funes
At agora, nos exemplos apresentados, escrevemos as funes antes de escrevermos afuno principal, main(). Isto , as funes esto fisicamente antes da funo principal main(). Isto foi feito por uma razo. Imagine-se na pele do compilador. Se voc fosse compilar a funomain(), onde so chamadas as funes, voc teria que saber com antecedncia quais so ostipos de retorno e quais so os parmetros das funes para que voc pudesse gerar o cdigocorretamente. Foi por isto que as funes foram colocadas antes da funo main(): quando ocompilador chegasse funo main() ele j teria compilado as funes e j saberia seusformatos. Mas, muitas vezes, no poderemos nos dar ao luxo de escrever nesta ordem. Muitasvezes teremos o nosso programa espalhado por vrios arquivos. Ou seja, estaremos chamandofune em s um arquivo que sero compiladas em outro arquivo. Como manter a coerncia? Asoluo so os prottipos de funes. Prottipos so nada mais, nada menos, que declaraes defunes. Isto , voc declara uma funo que ir usar. O compilador toma ento conhecimento doformato daquela funo antes de compil-la. O cdigo correto ser ento gerado. Um prottipotem o seguinte formato: tipo_de_retorno nome_da_funo (declarao_de_parmetros); onde o tipo-de-retorno, o nome-da-funo e a declarao-de-parmetros so os mesmosque voc pretende usar quando realmente escrever a funo. Repare que os prottipos tm umantida semelhana com as declaraes de variveis. Vamos implementar agora um dos exemplosda seo anterior com algumas altera es e com prottipos: PORTUGOL inteiro Square (inteiro a); Algoritmo Principal incio inteiro num; imprima ("Entre com um numero: "); leia (num); num=Square(num); imprima ("O seu quadrado vale:", num); retorna (0); fim. inteiro Square (inteiro a) incio retorna (a*a); fim. C #include <stdio.h> int Square (int a); int main (){ int num; printf ("Entre com um numero: "); scanf ("%f",&num); num=Square(num); printf ("\n\nO seu quadrado vale: %f\n",num); return 0; } int Square (int a){ return (a*a); } 39
Observe que a funo Square() est colocada depois do algoritmo principal, mas o seuprottipo est antes. Sem isto este programa no funcionaria corretamente. Usando prottipos voc pode construir funes que retornam quaisquer tipos de variveis bom ressaltar . que funes podem tambm retornar ponteiros sem qualquer problema. Osprottipos no s ajudam o compilador. Eles ajudam a voc tambm: usando prottipos, ocompilador evita erros, no deixando que o programador use funes com os parmetros erradose com o tipo de retorno errado, o que uma grande ajuda!
5. Escopo de Variveis
O escopo o conjunto de regras que determinam o uso e a validade de variveis nasdiversas partes do programa.
5.1.
Variveis locais
O primeiro tipo de variveis que veremos so as variveis locais. Estas so aquelas que stm validade dentro do bloco no qual so declaradas. Podemos declarar variveis dentro dequalquer bloco. S para lembrar: um bloco comea quando abrimos uma chave e termina quandofechamos a chave. At agoras tnhamos visto variveis locais para funes completas. Mas umcomando para(for) pode ter variveis locais e que no sero conhecidas fora dali. A declaraode variveis locais a primeira coisa que devemos colocar num bloco. A caracterstica que tornaas variveis locais to importantes justamente a de serem exclusivas do bloco. Podemos terquantos blocos quisermos com uma varivel local chamada x, por exemplo, e elas noapresentaro conflito entre elas. A palavra reservada do C auto serve para dizer que uma varivel local. Mas noprecisaremos us-la pois as variveis declaradas dentro de um bloco j so consideradas locais. Abaixo vemos um exemplo de variveis locais: PORTUGOL funcao1 (...) Incio inteiro abc,x; ... Fim. funcaq (...) Incio inteiro abc; ... Fim. inteiro principal () Incio inteiro a,x,y; para (...) { real a,b,c; ... } ... Fim. C func1 (...) { int abc,x; ... } func (...) { int abc; 40
... } int main () { int a,x,y; for (...) { float a,b,c; ... } ... } No programa acima temos trs funes. As variveis locais de cada uma delas no irointerferir com as variveis locais de outras funes. Assim, a varivel abc de func1() no temnada a ver (e pode ser tratada independentemente) com a varivel abc de func2(). A varivel x defunc1() tambm completamente independente da varivel x da funo principal main(). Asvariveis a, b e c so locais ao bloco para(for). Isto quer dizer que s so conhecidas dentrodeste bloco e so desconhecidas no resto da funo Principal main()). Quando usarmos avarivel ( a dentro do bloco para (for) estaremos usando a varivel a local ao para(for) e no avarivel a da funo main().
41
nico inconveniente que, quando usarmos a funo, teremos delembrar de colocar um&na frente das variveis que estivermos passando para a funo. Veja umexemplo: #include <stdio.h> void Swap (int *a,int *b); void main (void) { int num1,num2; num1=100; num2=200; Swap (&num1,&num2); printf ("\n\nEles agora valem %d %d\n",num1,num2); } void Swap (int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } No muito difcil. O que est acontecendo que passamos para a funo Swap oendereo das variveis num1 e num2. Estes endereos so copiados nos ponteiros a e b. Atravsdo operador * estamos acessando o contedo apontado pelos ponteiros e modificando-o. Mas,quem este contedo? Nada mais que os valores armazenados em num1 e num2, que, portanto,esto sendo modificados!
7. FUNES RECURSIVAS
Existem casos em que um procedimento ou funo chama a si prprio. Diz-se ento que oprocedimento ou funo recursivo. Por exemplo, o fatorial de um nmero n pode ser definidorecursivamente, ou seja:
inteiro fat(inteiro n) Incio Se n==0 Ento fat=1; Seno fat=n*fat(n-1); Fim Se; Fim. Por exemplo, o fatorial de 3 ser calculado a partir da chamada funo pelo comando x =fat(3) que retornar em fat o valor 6.
43
2. ALGORITMOS DE PESQUISA
Para fazermos qualquer pesquisa em vetor (ou matriz) precisamos de quatro parmetros: a) O vetor no qual realizaremos a pesquisa b) O nmero de elementos desse vetor que devem ser pesquisados. (Lembre que muitasvezes um vetor -se de 1000 elementos, s tem 700 carregados, e podemos evitar tratamento de 300elementos com "lixo"). c) O elemento procurado d) Um ndice que vai ser preenchido com a posio onde o elemento foi encontrado ou retornarcom 0 (zero) caso o elemento no exista. Como os algoritmos de pesquisa podero ser utilizados muitas vezes na soluo de diferentesproblemas, vamos defini-los como Procedimentos de um Algoritmo Principal hipottico, com osseguintes argumentos: Declaraes: Const MAXELEM = 10000 {Nmero mximo de elementos do vetor, apenas para limitar o tamanho dovetor} <Tipo bsico> Nome do vetor[1:MAXELEM] inteiro TOTELEM {Corresponde ao parmetro b) Total de elementos a ser pesquisado} <Tipo bsico> ELEMPROC {Corresponde ao Parmetro c) Elemento procurado} Inteiro POS {Corresponde ao Parmetro d) Posio em VET onde ELEMPROC foi encontrado, ou0 se no o foi}
2.1.
Na pesquisa seqencial simples, como o vetor a ser pesquisado no est ordenado peloelemento procurado, teremos de comparar um a um o ELEMPROC com cada elemento de VET.Portanto para um elemento inexistente teremos de fazer TOTELEM testes e para um elementoexistente faremos, na mdia, TOTELEM/2 testes. Procedimento PESQSEQ (<tipo bsico>VET); Incio Inteiro TOTELEM, POS, J; <Tipo bsico> ELEMPROC; 44
Leia(ELEMPROC); /*Executa a Pesquisa da primeira ocorrncia de ELEMPROC em VET eretorna em POS o ndice onde foi encontrada ou 0 se no existe*/ Enquanto (Pos==0) e (J<=TOTELEM) Faa Se VET[J]==ELEMPROC Ento POS = J; Seno J = J+1; Fim Se; Fim Enquanto; Fim. Se precisamos determinar todas as ocorrncias de um elemento em um vetor, o problema sesimplifica, pois teremos que, obrigatoriamente, varrer o vetor at o fim (Elimina-se do lao o testePOS = =0), mas teremos de guardar em um vetor todas as posies onde o elemento foiencontrado ou, o que mais usual, processaremos a ocorrncia dentro do procedimento (apsPOS = J). O trecho de procedimento abaixo exemplifica: Pesquisa Sequencial com Repetio Trata todas as ocorrncias de um elemento procurado no vetor Incio POS = 0; /*Indicar ao algoritmo chamador a no ocorrncia*/ J = 1; Enquanto J < = TOTELEM Faa Se VET[J] == ELEMPROC Ento POS = J; /*Imprime, Acumula, etc.*/ Fim Se; J = J + 1; Fim Enquanto; Fim.
45
Exerccio resolvido - Dado um vetor A de 128 elementos, verificar se existe um elemento igual a K(chave) no vetor. Se existir, imprimir a posio onde foi encontrada a chave; se no, imprimir chave K no encontrada . O vetor A e chave K so lidos de cartes. incio inteiro A[1:128] inteiro; inteiro I,K; lgico ACHOU; leia (K); leia (A); ACHOU = falso; para I de 1 at 128 passo 1 faa se A[I]==K ento imprima (K, Est na posio , I); ACHOU = verdadeiro; abandone; fim se; fim para ; se no ACHOU ento imprima (A CHAVE, K,NO EST NO VETOR); fim se; fim. Neste exemplo, a pesquisa a um elemento ficar mais eficiente se utilizarmos a pesquisa binria,desde que o vetor j esteja ordenado. Nesta pesquisa procuramos o elemento K dividindo o vetorem duas partes e testando em qual das duas ele deveria estar. Procedendo da mesma forma paraa parte provvel, e assim sucessivamente: K K k
Exerccio 1 do item 7.2.2 utilizando-se pesquisa binria. incio /*pesquisa binria*/ inteiro COMEO, /*indicador do primeiro elemento da parte do vetor aconsiderar*/ FIM, /*indicador do ltimo elemento da parte do vetor aconsiderar*/ MEIO, /*indicador do elemento do meio da parte do vetorConsiderada*/ K; /*elemento procurado*/ Inteiro A[1:128]; leia (A,K); COMEO =1; FIM=128; repita MEIO= (COMEO+FIM)/2; se K<A[MEIO] ento FIM=MEIO-1 seno COMEO=MEIO+1; fim se at A[MEIO]==K ou COMEO >FIM; se A[MEIO]!=K ento imprima ( No existe o elemento); seno imprima ( Est na posio: , MEIO); fim se fim.
3. ALGORITMOS DE ORDENAO
Como j foi dito, o propsito dos algoritmos de ordenao o de facilitar e acelerar abusca posterior de um elemento no vetor. Os algoritmos de ordenao so utilizadosnormalmente uma vez em cada execuo do programa, ou poucas vezes, se comparadoscom os de Pesquisa, por isso o uso de mtodos elementares e demorados no toproblemtico como nas pesquisas. Na nossa disciplina, veremos trs algoritmos paraclassificao interna de vetores, que tm tempo de execuo proporcional ao quadrado donmero de elementos a serem ordenados: y Ordenao por seleo (mtodo seleo direta) y Ordenao por insero (mtodo insero direta) y Ordenao por troca (mtodo da bolha) Para fazermos qualquer ordenao em vetor (ou matriz) precisaremos de dois parmetros: a) O vetor que ser ordenado; b) O nmero de elementos desse vetor que devem ser ordenados. (Novamente para evitartratamento de "lixo") Da mesma forma que os algoritmos de pesquisa, os algoritmos de ordenao podero serutilizados muitas vezes na soluo de diferentes problemas e tambm vamos defini-los comoum Procedimento do mesmo Algoritmo Principal, hipottico, com os seguintes argumentos: Declaraes Constante MAXELEM = 1000; /*Nmero mximo de elementos do vetor, apenas limitaro tamanho do vetor*/ <tipo bsico> VET[1: MAXELEM];/*Corresponde ao Parmetro a) o vetor a serordenado*/ Inteiro TOTLEM /*Corresponde ao Parmetro b)*/
Inteiro MIN, I, J; /*ndices*/ <Tipo Bsico> AUX; Para K de 1 at (TOTELEM - 1) Faa MIN K; Para J de (K + 1) at TOTELEM Faa Se VET[J] < VET [MIN] Ento MIN = J; Fim Se; Fim Para; AUX = VET[MIN]; VET[MIN] = VET[K]; VET[K] = AUX; Fim Para; Fim.
Fim Para; Fim Para; Fim. - Exerccio Resolvido 1) Classificar um vetor numrico VET de 6 elementos em ordem crescente: incio /*mtodo da bolha*/ inteiro VET[1:6] inteiro: AUX, /* auxiliar para troca de elementos*/ BOLHA, /* indicador de mais alto elemento fora de ordem*/ LSUP, /*indicador do tamanho do vetor a ser pesquisado, sendo o valor inicial igual a 6*/ J; /*indicador do elemento do vetor*/ leia (VET); LSUP = 6; enquanto LSUP>1 faa BOLHA = 0; para J de 1 at LSUP-1 faa se VET[J]>VET[J+1] ento /* troca elemento j com j+1*/ AUX = VET[J]; VET[J] = VET[J+1]; VET[J+1] = AUX; BOLHA = J; fim se; fim para LSUP = BOLHA; /*aponta para ltima posio trocada*/ fim enquanto; imprima (VET); fim.
49