P. 1
Apostila de Algoritmo e Programação Portugol

Apostila de Algoritmo e Programação Portugol

|Views: 8.902|Likes:

More info:

Published by: Daniel Pereira Ribeiro on May 25, 2011
Direitos Autorais:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

07/15/2013

pdf

text

original

Sections

  • Introdução
  • 1. Alguns Conceitos Básicos
  • 2. Software
  • 3. O DESENVOLVIMENTO DE SISTEMAS DE INFORMAÇÃO E O
  • ALGORITMO
  • 1. PSEUDO-CÓDIGO
  • 2. Português Estruturado
  • 3. LINGUAGEM DE PROGRAMAÇÃO
  • 4. TIPOS DE LINGUAGENS DE PROGRAMAÇÃO
  • 5. PROCESSO DE CRIAÇÃO E EXECUÇÃO
  • 6. ERROS NUM PROGRAMA
  • 7. CRITÉRIOS DE QUALIDADE
  • COMANDOS BÁSICOS
  • 1. IDENTIFICADORES, CONSTANTES, VARIÁVEIS E TIPOS BÁSICOS
  • 2. DECLARAÇÃO DE VARIÁVEIS
  • 3. PALAVRAS RESERVADAS
  • 4. OPERADORES
  • 3.1. OPERADOR DE ATRIBUIÇÃO
  • 3.2. OPERADORES ARITMÉTICOS:
  • 3.3. OPERADORES RELACIONAIS:
  • 3.4. OPERADORES LÓGICOS:
  • 3.5. PRIORIDADE DE OPERADORES:
  • 5. EXERCÍCIOS INTRODUTÓRIOS ± I
  • ESTRUTURAS BÁSICAS DE CONTROLE
  • 1. SEQUÊNCIA
  • 2. SELEÇÃO
  • 2.1. SELEÇÃO SIMPLES
  • 2.2. SELEÇÃO COMPOSTA
  • 2.3. ANINHAMENTO DE SELEÇÕES
  • 3. ESTRUTURAS DE REPETIÇÃO - LAÇOS(LOOPS)
  • 3.1. LAÇO ENQUANTO(WHILE)
  • 3.2. CONTROLADOS POR CONTADOR
  • 3.7. REPETIÇÃO COM TESTE NO FINAL
  • 3.8. ESCAPE DO LAÇO ± Abandone (break)
  • 3.9. Sinalizador ('Flags')
  • 4. EXERCÍCIOS INTRODUTÓRIOS ± II
  • 5. REGRAS PRÁTICAS PARA A CONSTRUÇÃO DE ALGORITMOS
  • 6. UMA REFLEXÃO ANTES DE RESOLVER OS PROBLEMAS
  • 7. EXERCÍCIOS COMPLEMENTARES - I
  • ALGORÍTMOS BASEADOS EM ESTRUTURAS DE DADOS HOMOGÊNEAS:
  • 1. VETORES E MATRIZES
  • 2. REPETIÇÃO COM VARIÁVEL DE CONTROLE ± PARA (for)
  • 3. SELEÇÃO DENTRE AS MÚLTIPLAS ALTERNATIVAS-CASO (CASE)
  • 4. VETORES
  • 4.1. DECLARAÇÃO DE VETORES
  • 3.10. EXERCÍCIOS SOBRE VETORES
  • 5. MATRIZES
  • 5.1. Exercícios Resolvidos
  • MODULARIZAÇÃO DE ALGORITMOS
  • 1. INTRODUÇÃO
  • 2. PROCEDIMENTOS
  • 3. FUNÇÕES
  • 4. Protótipos de Funções
  • 5. Escopo de Variáveis
  • 5.1. Variáveis locais
  • 3.11. Parâmetros formais
  • 3.12. Variáveis globais
  • 6. Passagem de parâmetros por valor e passagem por referência
  • 7. FUNÇÕES RECURSIVAS
  • 8. ESTRUTURAÇÃO DOS MÓDULOS DE UM ALGORITMO
  • ALGORITMOS DE PESQUISA E ORDENAÇÃO
  • 2. ALGORITMOS DE PESQUISA
  • 2.1. PESQUISA SEQÜENCIAL SIMPLES
  • 3.13. PESQUISA SEQÜENCIAL ORDENADA
  • 3.14. PESQUISA BINÁRIA
  • 3. ALGORITMOS DE ORDENAÇÃO
  • 3.1. MÉTODO DE SELEÇÃO DIRETA
  • 3.2. MÉTODO DE INSERÇÃO DIRETA
  • 3.3. MÉTODO DA BOLHA

Curso técnico em Informática Soeducar - PEP

Algoritmo e Programação

Alterada por: Daniel Pereira Ribeiro

Sumário
Introdução ................................ ................................ ................................ ................................ ................................ .. 4 1. 2. 3. 1. 2. 3. 4. 5. 6. 7. 1. 2. 3. 4. Alguns Conceitos Básicos................................ ................................ ................................ ............................... 4 Software ................................ ................................ ................................ ................................ ......................... 5 O DESENVOLVIMENTO DE SISTEMAS DE INFORMAÇÃO E O PROGRAMADOR ................................ ...... 6 PSEUDO-CÓDIGO ................................ ................................ ................................ ................................ ......... 7 Português Estruturado ................................ ................................ ................................ ................................ .... 8 LINGUAGEM DE PROGRAMAÇÃO ................................ ................................ ................................ ............... 8 TIPOS DE LINGUAGENS DE PROGRAMAÇÃO ................................ ................................ ............................ 8 PROCESSO DE CRIAÇÃO E EXECUÇÃO ................................ ................................ ................................ ..... 8 ERROS NUM PROGRAMA ................................ ................................ ................................ .......................... 10 CRITÉRIOS DE QUALIDADE ................................ ................................ ................................ ....................... 10 IDENTIFICADORES, CONSTANTES, VARIÁVEIS E TIPOS BÁSICOS ................................ ........................ 11 DECLARAÇÃO DE VARIÁVEIS ................................ ................................ ................................ .................... 12 PALAVRAS RESERVADAS ................................ ................................ ................................ .......................... 12 OPERADORES ................................ ................................ ................................ ................................ ............ 13 3.1. 3.2. 3.3. 3.4. 3.5. 5. 6. OPERADOR DE ATRIBUIÇÃO ................................ ................................ ................................ ............. 13 OPERADORES ARITMÉTICOS: ................................ ................................ ................................ ........... 13 OPERADORES RELACIONAIS: ................................ ................................ ................................ ........... 13 OPERADORES LÓGICOS: ................................ ................................ ................................ ................... 14 PRIORIDADE DE OPERADORES: ................................ ................................ ................................ ....... 15

ALGORITMO ................................ ................................ ................................ ................................ ............................. 7

COMANDOS BÁSICOS ................................ ................................ ................................ ................................ ........... 11

EXERCÍCIOS INTRODUTÓRIOS ± I ................................ ................................ ................................ ............ 15 COMANDOS DE ENTRADA E SAÍDA ................................ ................................ ................................ .......... 16 6.1. 3.6. Comando de Entrada de Dados ................................ ................................ ................................ ............ 16 Comando de Saída de Dados ................................ ................................ ................................ ............... 16

7. 1. 2.

ESTRUTURA DE UM ALGORITMO EM PSEUDO -CÓDIGO E µC¶ ................................ ................................ 16 SEQUÊNCIA ................................ ................................ ................................ ................................ ................ 17 SELEÇÃO ................................ ................................ ................................ ................................ .................... 17 2.1. 2.2. 2.3. SELEÇÃO SIMPLES ................................ ................................ ................................ ............................. 18 SELEÇÃO COMPOSTA ................................ ................................ ................................ ........................ 18 ANINHAMENTO DE SELEÇÕES ................................ ................................ ................................ .......... 18 LAÇO ENQUANTO(WHILE) ................................ ................................ ................................ .................. 19 CONTROLADOS POR CONTADOR ................................ ................................ ................................ ..... 19 REPETIÇÃO COM TESTE NO FINAL ................................ ................................ ................................ ... 20 ESCAPE DO LAÇO ± Abandone (break)................................ ................................ ............................... 21 Sinalizador ('Flags') ................................ ................................ ................................ ............................... 21

ESTRUTURAS BÁSICAS DE CONTROLE ................................ ................................ ................................ ............... 17

3.

ESTRUTURAS DE REPETIÇÃO - LAÇOS(LOOPS) ................................ ................................ ..................... 19 3.1. 3.2. 3.7. 3.8. 3.9.

4. 5. 6. 7. 1.

EXERCÍCIOS INTRODUTÓRIOS ± II................................ ................................ ................................ ............ 21 REGRAS PRÁTICAS PARA A CONSTRUÇÃO DE ALGORITMOS LEGÍVEIS ................................ .............. 22 UMA REFLEXÃO ANTES DE RESOLVER OS PROBLEMAS ................................ ................................ ....... 23 EXERCÍCIOS COMPLEMENTARES - I ................................ ................................ ................................ ........ 23 VETORES E MATRIZES ................................ ................................ ................................ .............................. 25

ALGORÍTMOS BASEADOS EM ESTRUTURAS DE DADOS HOMOGÊNEAS: ................................ ........................ 25

2. 3. 4.

REPETIÇÃO COM VARIÁVEL DE CONTROLE ± PARA (for) ................................ ................................ ....... 25 SELEÇÃO DENTRE AS MÚLTIPLAS ALTERNATIVAS -CASO (CASE)................................ ......................... 26 VETORES ................................ ................................ ................................ ................................ .................... 27 4.1. 3.10. DECLARAÇÃO DE VETORES ................................ ................................ ................................ .............. 28 EXERCÍCIOS SOBRE VETORES ................................ ................................ ................................ ......... 30 Exercícios Resolvidos ................................ ................................ ................................ ........................... 33

5.

MATRIZES ................................ ................................ ................................ ................................ ................... 31 5.1.

MODULARIZAÇÃO DE ALGORITMOS ................................ ................................ ................................ .................... 35 1. 2. 3. 4. 5. INTRODUÇÃO ................................ ................................ ................................ ................................ ............. 35 PROCEDIMENTOS ................................ ................................ ................................ ................................ ...... 35 FUNÇÕES ................................ ................................ ................................ ................................ .................... 36 Protótipos de Funções ................................ ................................ ................................ ................................ .. 39 Escopo de Variáveis ................................ ................................ ................................ ................................ ..... 40 5.1. 3.11. 3.12. 6. 7. 8. 1. 2. Variáveis locais ................................ ................................ ................................ ................................ ..... 40 Parâmetros formais ................................ ................................ ................................ ............................... 41 Variáveis globais ................................ ................................ ................................ ................................ ... 41

Passagem de parâmetros por valor e passagem por referência ................................ ................................ .... 42 FUNÇÕES RECURSIVAS ................................ ................................ ................................ ............................ 43 ESTRUTURAÇÃO DOS MÓDULOS DE UM ALGORITMO ................................ ................................ ........... 43 INTRODUÇÃO ................................ ................................ ................................ ................................ ............. 44 ALGORITMOS DE PESQUISA ................................ ................................ ................................ ..................... 44 2.1. 3.13. 3.14. PESQUISA SEQÜENCIAL SIMPLES ................................ ................................ ................................ .... 44 PESQUISA SEQÜENCIAL ORDENADA ................................ ................................ ............................... 45 PESQUISA BINÁRIA ................................ ................................ ................................ ............................. 46 MÉTODO DE SELEÇÃO DIRETA ................................ ................................ ................................ ......... 47 MÉTODO DE INSERÇÃO DIRETA ................................ ................................ ................................ ....... 48 MÉTODO DA BOLHA ................................ ................................ ................................ ........................... 48

ALGORITMOS DE PESQUISA E ORDENAÇÃO ................................ ................................ ................................ ...... 44

3.

ALGORITMOS DE ORDENAÇÃO................................ ................................ ................................ ................. 47 3.1. 3.2. 3.3.

Introdução
Nesta apostila estudaremos Lógica de Programação e, para isso, é importante ter uma visão geral do processo de desenvolvimento de programas (software), visto que o objetivo final é ter um bom embasamento teórico para a prática da programação de computadores.

1. Alguns Conceitos Básicos
Dados ± São elementos brutos que podem ser processados por um computador para se obter alguma conclusão ou resultado, ou seja, uma informação. Computador ± Máquina (Hardware) muito rápida que pode processar dados, realizando cálculos e operações repetitivas, se dotados de programação adequada (software ou firmware), e que fornece resultados corretos e precisos. Informação±É o resultado do processamento dos dados pelo computador. Uma informação pode ser considerada como um dado para outro processamento e, por isso, muitas v ezes é referenciada como dado de saída. Hardware±É um termo de origem americana que engloba todo o equipamento, principal e periférico, de um computador. O termo é utilizado também para equipamentos sem software. O hardware normalmente é fixo e difícil de ser modificado. Software±É outro termo de origem americana que engloba programas, documentação, proce ssamento de dados, utilizados em um computador para resolução de determinado problema. O software, ao contrário do hardware, é maleável e por isso mais facilmente modificável pelo programador, para adaptação a novos dados, novos requisitos do problema a ser resolvido, ou novo hardware onde vai funcionar (ser executado). Programa de computador ±Sequência de instruções não ambígua e finita em uma linguagem de programação especifica que, quando executada, resolve um problema determinado. Linguagem de máquina ±É a linguagem binária (composta de zeros e uns) utilizada pelos computadores, para representar dados, programas e informações. É tediosa, difícil de compreender e fácil de gerar erros na programação. Linguagens baixo nível ±Linguagem de programação que compreende as características da arquitetura do computador. Assim, utiliza somente instruções do processador, para isso é necessário conhecer os registradores da máquina. Nesse sentido, as linguagens de baixo nível estão diretamente relacionadas com a arquitetura do computador. Um exemplo é a linguagem Assembly que trabalha diretamente com os registradores do processador, manipulando dados. Linguagens alto nível ±Englobam todas as linguagens de programação que utilizam compiladores ou interpretadores. Possuem instruções mais poderosas que as linguagens de baixo nível facilitando ainda mais o , trabalho do programador. Ex. Pascal, Delphi, C, C#, Java, PHP, etc. Linguagens não procedurais de alto nível ±São linguagens utilizadas para sistemas de gerenciamento de banco de dados, planilhas, e outros aplicativos que utilizam comandos ainda mais poderosos que as linguagens de alto nível e, por isso, são ainda mais fáceis de programar. Ex. SQL, DBASE, Oracle PL/SQL, XML, etc. Compilador ± É um programa utilizado para traduzir os programas escritos pelo programador nas linguagens de alto nível (programa fonte) para linguagem de máquina (programa executável), para que possa ser executado pelo computador. Interpretador ±É um programa que traduz os programas escritos pelo programador para linguagem de máquina no momento da execução (não existindo assim o programa executável). IDE ± (Ambiente de Desenvolvimento Integrado) É um programa que reuni algumas ferramentas para o desenvolvimento e software como, editor de texto, compilador, depurador, entre outro, facilitando o trabalho do programador.
4

entre eles podemos citar controle remoto. os interpretadores ou os compiladores para poderem ser desenvolvidos executados. geladeiras.1 ± As Camadas de software em um computador. como uma ROM. o software é mais difícil e complexo de ser desenvolvido e mantido pelo programador. c Na camada mais externa encontramos os programas aplicativos que podem serdesenvolvidos utilizandose os recursos da camada anterior e nas linguagens de programação. Para o desenvolvimento destes programas é que se faz uso das técnicas de construção de algoritmos. Firebird. O firmware é armazenado permanentemente num circuito integrado (chip) de memória do hardware. um computador não faz nada sozinho. que não o tenha desenvolvido. O Sistema Operacional com seus diversos programas é a primeira camada de software donosso computador.). Ele é uma máquina rápida. PROM. WINDOWS. Normalmente. MAC OS. Figura 1. et . editores de imagens. Em um computador digital existem diversos tipos diferentes de software com finalidades e complexidades diferentes. calculadora de mão. Partindo-se do hardware que está nocentro e normalmente contém um conjunto de instruções operacionais programado diretamente nele (FIRMWARE). Externamente ao sistema operacional vamos encontrar os compiladores e interpretadores das linguagens de programação que.utilizando as IDEs. Software O software de um computador é o que determina o seu uso e os resultados que serão produzidos e apresentados. aparelhos de som. traduzem os programas aplicativos para a linguagem de máquina que o computador entende. UNIX. os gerenciadores de bancos de dados (MySQL. Navegadores WEB. MS Access. ANDROID e outros que você já deve ter ouvido falar. Nesta segunda camada encontramos também os processadores ou editores de texto. no momento da fabricação do componente.). de forma a se garantir que os programas serão gerados com um mínimo de e e poderão ser mantidos. etc. as planilhase muitos outros programas utilitários (Antivírus. É muito complexo desenvolver-se um sistema operacional como DOS. alguns periféricos do computador como disco rígido. entre outros que possuem um firmware para a execução de suas tarefas. mas somente se for bem programado. câmeras digitais. LINUX. que resolve problemas bem definidos e repetitivos. por um programador. teremos LIXO na saída (nossos resultados). 5 . teclado.2.A Figura abaixo procura ilustrar em camadas o que foi dito. modem e também aparelhos mais complexos como celulares. PostgreSQL. EPROM ou ainda EEPROM e memória flash. Ao contrário do que muitos pensam. Muitos aparelhos simples possuem firmware. Ou seja: se temos LIXO na entrada (quer na forma de maus programas ou dados ruins). mesmo complexos. sem rro dificuldade. Oracle. de certa forma. Reprodutores de áudio e vídeo. quanto mais relacionado e próximo ao hardware.

operação e manutenção As três primeiras fases normalmente são de responsabilidade dos Analistas de Sistemas. programadores. Na verdade. Aumento da facilidade na coleta e armazenamento de dados e na rapidez de recuperação e manuseio. Como pode-se observar. a responsabilidade do programador é maior na criação dosalgoritmos do que na sua implementação. pois uma receita culinária. Para essa tarefa o programador deverá conhecer a máquina e o compilador a serem utilizados. Após definidos e criados todos os algoritmos temos de codificá-los na linguagem escolhida. Redução do número de erros produzidos em operações de coleta. 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: Análise 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: Codificação ou implementação (na linguagem escolhida) 6ª Fase: Testes 7ª Fase: Implementação. Assim. entre outros. e 6 . o trabalho de desenvolvimento de algoritmos e programaspoderá ter de ser todo refeito se houver problemas nas trêsprimeiras fases. Nas outras podem trabalhar indistintamente. e esse assunto será coberto nos próximos módulos. A construção dos algoritmos aparece então na fase do projeto detalhado do sistema. dependendo da complexidade e da situação. Aumento de facilidade e flexibilidade na geração de relatórios. não se perde muito tempo tendo que refaze-los reimplantá-los e retestá-los. assegurando assim um final feliz e no prazo previstopara o projeto. por exemplo. os algoritmos fazem parte da quarta etapa do desenvolvimento de um programa. mostrando assim aimportância do trabalho do Analista de Sistemas. as instruções de uso de um equipamento ou as indicações de um instrutor sobre como estacionar um carro. pois. mais dinheiro etempo se gasta para repará-lo. O DESENVOLVIMENTO DE SISTEMAS DE INFORMAÇÃO E O PROGRAMADOR Um sistema de informação pode ser definido como um sistema baseado em computador que auxilia. Entretanto. analistas ou programadores e analistas. quando bem projetados. arquivamento e recuperação de dados e de informações. num projeto. Essas formas de representação podem variar tanto na quantidade de etapas quanto nas atividades a serem realizadas em cada fase. nada mais são do qu algoritmos. os algoritmos estão presentes no nosso dia-a-dia sem que saibamos. automatiza e aperfeiçoa o funcionamento de qualquer atividade através da(o): y y y Redução da participação do homem em atividades rotineiras e repetitivas. Pode-se encontrar na literatura em informática várias formas de representação das etapas que compõem o ciclo de vida de um sistema. nesse exemplo de ciclo de vida de um sistema (com sete fases) apresentado acima. Qual o papel do programador e do analista de sistemas no desenvolvimento de sistemas de informação? Vejamos o Ciclo de Vida de um sistema. quanto mais tarde um erro é detectado.3. No desenvolvimento de um sistema.

em geral. antes de se fazer um programa (software) na Linguagem de Programação desejada (Pascal. Início 1. Assim podemos definir que um algoritmo precisa: 1. C. ou seja. Ser descrito em termos de ações não ambíguas e bem definidas. O algoritmo deve ser fácil de interpretar e fácil de codificar. Utilizaremos em nosso curso o PORTUGOL para o estudo dos algoritmos e a Linguagem de Programação µC¶ para a criação dos programas. Senão 6. Java. 2. Tirar o fone do gancho. Este nome é uma alusão à posterior implementação em uma linguagem de programação. PHP.) deve-se fazer o algoritmo do programa. Um algoritmo é um 'caminho' para a solução de um problema e. para resolver o mesmo problema pode-se obter vários algoritmos diferentes. Ouvir o sinal de linha. se assim fosse. 6. cada problema teria um único algoritmo. Teclar o número desejado. estaremos gerando código em µC¶. ele deve ser o intermediário entre a linguagem falada e a linguagem de programação. 5. Ao contrário de uma linguagem de programação não existe um formalismo rígido de como deve ser escrito o algoritmo. Um algoritmo não é a solução de um problema. Introduzir o cartão. Na informática. 1.ALGORITMO Um Algoritmo é uma sequência de instruções ordenadas de forma lógica para a resolução de uma determinada tarefa ou problema. ou seja. é um algoritmo escrito numa forma compreensível pelo computador (através de uma Linguagem de Programação). PSEUDO-CÓDIGO Os algoritmos são descritos em uma linguagem chamada pseudo-código. Ter início e fim. Ou seja.1 Repetir.2 Desligar. 7 . Já um programa. 5. onde todas as ações a serem executadas devem ser especificadas nos mínimos detalhes e de acordo com as regras de sintaxe1 da linguagem escolhida. Algoritmo não computacional cujo objetivo é a utilização de um telefone público. REPETIÇÃO SELEÇÃO Podemos definir como formas básicas para definir uma solução de qualquer problema as etapas de: SEQUÊNCIA SELEÇÃO REPETIÇÃO Claro que para criar um algoritmo computacional não será tão simples como esse apresentado. quando formos programar em uma linguagem. Por isso os algoritmos são independentes das linguagens de programação. S E Q U Ê N C I A 3. por exemplo. 5.3 Retirar o cartão. 4. Fim. µC¶. Que as ações sigam uma sequência ordenada. 3. ou seja. etc. pois. existem muitos caminhos que levam a uma solução satisfatória. Se der o sinal de chamar 5. 2.1 Conversar. Delphi. o algoritmo é o "projeto do programa".

os computadores. Por exemplo. para descrever os algoritmos. C. O Português Estruturado na verdade é uma simplificação extrema da língua portuguesa.1: Exemplo de Português Estruturado 3. e outros símbolos. A sintaxe do Português Estruturado não precisa ser seguida tão rigorosamente quanto a sin taxe de uma linguagem de programação. Java Uso Comercial: Cobol. o algoritmo não d eixa de funcionar porque esquecemos de colocar um '. já um programa não funcionaria. Ex. PROCESSO DE CRIAÇÃO E EXECUÇÃO Embora seja teoricamente possível a construção de computadores especiais. sintaticamente válido. Português Estruturado O Português Estruturado é uma forma especial de linguagem bem mais restrita que a Língua Portuguesa e com significados bem definidos para todos os termos utilizados nas instruções (comandos). Figura 2. TIPOS DE LINGUAGENS DE PROGRAMAÇÃO Existem diversas linguagens de programação. uma linguagem de programação tem dois componentes: Sintaxe e Semântica. Basic. que especificam a composição de programas a partir de letras.2. e que dois comandos quaisquer devem ser separados por um ponto e vírgula. Delphi. A Figura a seguir apresenta um exemplo de algoritmona forma de representação de português estruturado. regras de sintaxe podem especificar que cada parênteses aberto em uma expressão aritmética deve corresponder a um parênteses fechado. escrito na linguagem. As regras de semântica especificam o ³significado´ de qualquer programa. cada uma com suas características específicas e com níveis de complexidade e objetivos diferentes como já vimos anteriormente: Linguagem de Máquina Linguagens de Baixo Nível Linguagens de Alto Nível Única compreendida pelo computador. Essa linguagem também é conhecida como Portugol (junção de Português com Algol. limitada a pouquíssimas palavras e estruturas que têm significado pré-definido. ela possui todos os elementos básicos e uma estrutura semelhante à de uma linguagem de pr gramação de computadores. capazes de executar programas escritos em uma linguagem de programação qualquer. já que o algoritmo não será executado como um programa.' (ponto evírgula)por exemplo. Embora o Português Estruturado seja uma linguagem bastante simplificada.: Uso Científico: Fortran Propósito Geral: Pascal. Pseudocódigo ou Pseudolinguagem. Ex. 4. dígitos. A sintaxe consiste em um conjunto de regras formais. Como todas as notações formais. pois deve-se seguir um padrão.: Assembly Utiliza instruções próximas da linguagem humana de forma a facilitar o raciocínio. só não tão rígida quanto a sua sintaxe. resolver o problemas com português estruturado pode ser uma tarefa tão complexa quanto a de escrever um programa em uma linguagem de programação qualquer. LINGUAGEM DE PROGRAMAÇÃO Uma linguagem de programação é uma notação formal para descrição de algoritmos que serão executados por um computador. Portanto. Clipper y y y 5. Emprega uma linguagem intermediária entre a linguagem natural e uma linguagem de programação. 8 . ou seja. a Linguagem deMáquina. Específica para cada tipo de computador (processador). existentes hoje em dia são capazes de executar somente programas em linguagem de baixo nível.

edita o código-fonte do programa escrito na(s) linguagem(ns) suportada(s) pela IDE. na tentativa de aprimorar a qualidade de software. em um programa executável que pode ser executado em um computador ou outro dispositivo computacional.As Linguagens de Máquina são projetadas levando -se em conta os seguintes aspectos: · Rapidez de execução de programas. cuja linguagem é bastante diferente e de nível mais baixo? SOLUÇÂO: Através da tradução de programas escritos em linguagens de alto nível para alinguagem de baixo nível do computador. Para isso existem três tipos de programas tradutores: Montadores. editado em uma linguagem específica e a transforma em linguagem de máquina. Geração de código . 1.criação do modelo de classes. interfaces.característica mais explorada em Ferramentas CASE. Modelagem (modelling) . lin guagens de programação de alto nível são projetadas em função de: · Facilidade de construção de programas · Confiabilidade dos programas O PROBLEMA É: Como a linguagem de nível mais alto pode ser implementada em um computador.auxilia no processo de encontrar e corrigir defeitos no código-fonte do programa. Depurador ( ebugger) . que visa a maior produtividade dos desenvolvedores. 3. Linker . gerando o código-objeto do programa. 2. a geração de código também é encontrada em IDEs. Interpretadores e Compiladores ou simplesmente uma IDE. contudo com um escopo mais direcionado a templates de código comumente y   9 . ou "Desenvolvimento Rápido de Aplicativos"). 4. · Flexibilidade com que permite a construção de programas de nível mais alto. IDEs Facilitam a técnica de RAD (de Rapid Application Development. compilados em linguagem de máquina. associações e interações dos artefatos envolvidos no software com o objetivo de solucionar as necessidades -alvo do software final. MONTADOR Efetua a tradução de linguagem de montagem (Assembly) para a linguagem demáquina. As características e ferramentas mais comuns encontradas nos IDEs são: y y y y y Editor .compila o código-fonte do programa. · Custo de sua implementação. Compilador (compiler) . Obtém próxima instrução do Assembly Traduz para as instruções correspondentes em linguagem de máquina Executa as instruções em linguagem de máquina Repete o passo 1 até o fim do programa INTERPRETADOR Efetua a tradução de uma linguagem de alto nível para linguagem demáquina da seguinte forma: 1. 2.liga (linka) os vários "pedaços" de código-fonte. 4. Por outro lado. objetos. Em seguida é necessário o uso de outro programa (Link-Editor) que é responsável pela junção de diversos códigos -objeto em um único programa executável. 3. Obtém próxima instrução do código-fonte em linguagem de alto nível Traduz para as instruções correspondentes em linguagem de máquina Executa as instruções em linguagem de máquina Repete o passo 1 até o fim do programa COMPILADOR Efetua a tradução de todo o código-fonte em linguagem de alto nível para as instruções correspondentes em linguagem de máquina.

o que permite. geralmente. Todavia. 3. dentro das limitações do problema. de forma a manter a estrutura do programa mais simples.realiza testes no software de forma automatizada. a modularização consiste noparticionamento do programa em módulos menores bem identificáveis e com funções específicas. mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. 6. 6. ou seja. a solução do problema total vai sendo fatorada emsoluções de subproblemas. 10 . Clareza: Refere-se à facilidade de leitura do programa. caso contrário o programa simplesmente não tem sentido. dividir o problema de forma natural em módulos com subfunções claramente delimitadas. Muitas vezes torna-se necessário sacrificar alguma eficiência de processamento. assim como o próprio a utor do programa entendê-lo após ter estado um longo período afastado dele. bem como deve utilizar os recursos de memória de forma moderada. ou seja. tornando muito mais rápido o processo de desenvolvimento e distribuição do software. Entender o problema. 2. Formular um esboço da solução. seja discos ou via internet. Modularização: Durante a fase de projeto. Um programa deve ter desempenho SUFICIENTE para atender as necessidades do problema e do usuário. é uma poderosa ferramenta no processo de erradicação de "bugs". gerando um relatório. METODOLOGIA DE SOLUÇÃO 1. Generalidade: É interessante que um programa seja tão genérico quanto possível de forma apermitir a reutilização de seus componentes em outros projetos. os resultados gerados pelo processamento do programa devem estar corretos.de forma que o conjunto desses módulos e a interação entre eles permite a resolução doproblema de forma mais simples e clara. deverá ser possível a outro programador seguir a lógica do programa sem muito esforço.consiste na melhoria constante do código-fonte do software. A refatoração. Implementar numa linguagem de programação. 4. Se um programa for escrito com clareza. detalhando. seja na construção de código mais otimizado. em conjunto com os testes automatizados. consistentes com os objetivos do pr ograma. Refatoração (refactoring) . Rever os passos originais. 7.y y y utilizados para solucionar problemas rotineiros. Eficiência: Refere-se à velocidade de processamento e a correta utilização da memória. CRITÉRIOS DE QUALIDADE Refere-se à precisão das informações manipuladas pelo programa. Distribuição (deploy) . (Comentários no código) Simplicidade: A clareza e precisão de um programa são normalmente melhoradas tornando as coisas o mais simples possível. 5. ou outra fo rma de distribuição. em conjunto com ferramentas de modelagem. ERROS NUM PROGRAMA Erros de Compilação: Erros de digitação e de uso da sintaxe da linguagem Erros de Link-Edição: Erro no uso de bibliotecas de subprogramas necessárias ao programa principal.auxilia no processo de criação do instalador do software. Fazer uma primeira aproximação das variáveis necessárias. com base em scripts ou programas de testes previamente especificados. testar com um conjunto de dados significativos. Se o algoritmo estiver suficientemente detalhado. que podem ser implementados separadamentepor diversos programadores de uma equipe. Testes Automatizados (automated tests) . tendo em vista que os testes "garantem" o mesm o comportamento externo do software ou da característica sendo reconstruída. assim auxiliando na análise do impacto das alterações no código-fonte. a geração pode gerar todo ou praticamente todo o código-fonte do programa com base no modelo proposto. Erros de Execução: Erro na lógica do programa (algoritmo). Ferramentas deste tipo mais comuns no mercado são chamadas robôs de testes.

3.b.Z. Obs.1 Operações: soma(+). possui o conteúdo variável durante a execução de um algoritmo ou programa. short int ou long int´): qualquer número inteiro. Caso seja imprescindível para o entendimentopode-se acrescentar. VARIÁVEIS E TIPOS ‡ Identificadores: Representam os nomes escolhidos para rotular as variáveis.. como sugere onome.: Os textos deverão ser representados sempre entre apóstrofes para que não se confundamcom os valores numéricos.. obedecem as seguintes regras: Letra Letra Dígito 1.._} 3. Ex: A. negativo. nulo ou positivo.B. Este conteúdo poderá ser um número (real ou inteiro). negativo.Podemos associar uma variável a uma posição da memória (endereço) e poderemosarmazenar (guardar) neste endereço qualquer valor do conjunto de valores de um tipobásico associado a ela. divisão exata(/) e comparações. -1. procedimentos e funções. podemos definir alguns. BÁSICOS CONSTANTES. Obs.C. normalmente. Operações: soma(+). possui apenas um valor.. B1.: Um exemplo de identificador inválido seria 2AB ou qualquer outro iniciado por um dígito ‡ Constante (³constant´) ± Uma constante (Const).. Ex: 2.5...A. (Exemplo: texto (10)). mas. em um determinado momento. multiplicação(*). Os nomes escolhidos devem explicitar seu conteúdo. Ex: -2. Veja que o inteiro 5. mas. 11 . Os tipos de dados e variáveis utilizados dependem da fina lidade dosalgoritmos. subtração(-). Os nomes devem ser formados por caracteres pertencentes ao seguinte conjunto: {a...SOMA.. como sugere o nome.9. é umidentificador que armazena um valor fixo e imutável.Unidades básicas de armazenamento das informações a nível de linguagens deprogramação. a quantidade máxima de caracteres. z. divisão inteira(/). REAL (³float ou double´): qualquer número real. B. multiplicação(*). Uma variável pode assumir vários valores diferentes ao longo daexecução do programa. IDENTIFICADORES. CARACTER (³char´): qualquer conjunto de caracteres alfanuméricos. subtração(-). nulo ou positivo. O primeiro caractere deve ser uma letra 2. pelo fato de serem largamente utilizados eimplementados na maioria das linguagens: Esse tipo básico poderá ser: INTEIRO (³int.c. Podemos associá a uma posição de -lo memória (endereço) que tem umconteúdo fixo.COMANDOS BÁSICOS 1. resto(%) e comparações.2. EX: A. entre parênteses.. é diferente do texto µ5¶. BC3D. CONTADOR .0.1.. durante a execução de um algoritmoou programa. 0. ‡ Variável (³variable´) ± Uma variável (Var) é um identificador que.. "ABACATE" Operações: comparações TEXTO OU CADEIA DE CARACTERES (³string´):uma variável deste tipo poderá armazenaruma cadeia de caracteres de qualquer tamanho. uma cadeia decaracteres (texto) ou um valor lógico (será definido abaixo).

Bloco. O significado de cada um desses termos será visto e entendido nos itens e capítulos que seseguem. Real. quando o computador está executando umprograma e encontra uma referência a uma variável ou a uma constante qualquer.devemos declará-las de acordo com a sintaxe: inteiro real caracter lógico identificador Ex: Inteiro X1. ele não saberá o que fazer com ela. COMANDO COMPOSTO Um grupo de comandos simples que executam alguma tarefa. Ex: e. umprogramador que estiver implementando um al oritmo. nome. PALAVRAS RESERVADAS São palavras que terão uso específico no nosso pseudo-código e que não deverão serusadas como identificadores.Var.LÓGICO (³boolean´):tipo especial de variável que armazena apenas os valores V e F. Exemplo: Algoritmo. inteiro X1. Enquanto. Até.. Matriz. fim. Variando.terá o seu trabalho simplificado se todas as constantes e variáveis referenciadas no algoritmotiverem sido previamente declaradas. real A. Repita. MÉDIA. etc. Tipo. O significado da declaração de variáveis corresponde à criação de locais na memória rotuladacom o nome da variável (identificador) e marcada com o tipo de valores que ela pode conter. leia(x). 3. Então. Senão. Procedimento. Procedimento. Execute. Início leia(x). se esta nãotiver sido previamente definida. Função. 12 . Vetor. Na maioria das linguagens de programação. Programa.B. em alguma g linguagem de programação. Início. quando se fizerem necessários. lógico TEM. Const. incluindocomentário. obs.. previamente à sua utilização.. Imprima. Paraque os programas manipulem valores. onde Vrepresenta VERDADEIRO e F FALSO. Inteiro. para não causar confusão na interpretação. Se. As constantes são declaradas antes das variáveis.Faça. estes devem ser armazenados em variáveis e para isso. Vejamosos formatos da declaração e alguns exemplos. Texto. Registro. Fim. Da mesma forma. não Operações: Verdadeiro ou Falso 2. COMANDO SIMPLES É uma instrução simples.: X1 é o nome de um local de memória que só pode conter valores do tipo inteiro real SOMA. Caso. DECLARAÇÃO DE VARIÁVEIS Consiste na definição dos nomes e valores das constantes e dos nomes e tipos dasvariáveis que serão utilizadas pelos algoritmos. ou. y = 2*x. caractere frase.

3. {dá o valor absoluto de X} INT (X). X = 2. para isto. Obs. resultando num valor lógico (Verdadeiro ou Falso). {dá a parte inteira de um real X} ARREDONDA (x). OPERADORES RELACIONAIS: São utilizados para relacionar variáveis ou expressões. y = 5-x.1. Exemplos: LOG (X). 3. sendo eles: == igual <menor <= menor ou igual != diferente de >maior >= maior ou igual Exemplo: NUM = 3 NOME = µDENISE¶ NUM > 5 é falso (0) {3 não é maior que 5} NOME < µDENIZ¶ é verdadeiro (1) {DENISE vem antes de DENIZ} 13 . {dá o logaritmo na base 10 de X} SEN (X).2. OPERADORES ARITMÉTICOS: + = Adição * = Multiplicação .Transforma por arredondamento. onde o tipo desse valor seja compatível ao tipo de variável na qual está sendo armazenado. FUNÇÕES PRIMITIVAS: As funções mais comuns de matemática são também definidas e válidas no PORTUGOL. sendo eles: 3. NUM = 8 {A variável NUM recebe o valor 8} NOME = ³Guilherme´ {A variável NOME recebe o valor µGuilherme¶} CONT = 0 AUXNOME = NOME {A variável AUXNOME recebe o conteúdo da variável NOME} ACHOU = falso {A variável ACHOU recebe o valor falso} 3.= Subtração ou inverso do sinal. Este comando permite que se forneça ou altere o valor de uma determinada variável.Fornece o valor -1. {arredonda um real para inteiro} RAIZ (X). de acordo com o especificado na declaração. OPERADORES Na solução da grande maioria dos problemas é necessário que as variáveis tenham seus valores consultados ou alterados. positivo ou igual a zero. / = Quociente da divisão de inteiros ARREDONDA(A) . % = Resto da divisão de inteiros 5%2=1 b a**b = Exponenciação a SINAL(A) . {dá o seno de X} ABS (X). +1 ou zero conforme o valor de A seja negativo. devemos definir um conjunto de OPERADORES. {dá a raiz quadrada de X} etc. 5/2=2 um número fracionário em inteiro.4. OPERADOR DE ATRIBUIÇÃO Identificador = Expressão aritmética Expressão lógica Expressão literal Ex: O valor da expressão é atribuído ao identificador (variável).A parte inteira de um número Fracionário. / = Divisão TRUNCA(A) .

Somente quando chover. apresenta os operadores lógicos já ordenados de acordo com suas prioridades. Se (idade < 18) ou (idade > 95) Então Escrever ('Você não pode fazer carteira de motorista') Senão Escrever ('Você pode possuir carteira de motorista') FimSe Se (idade > = 18) e (idade < = 95) e (aprovado_exame = 'sim') Então Escrever ('Sua carteira de motorista estará pronta em uma semana') Senão Escrever ('Você não possui idade permitida ou não passou nos testes') FimSe. De uma forma geral. somente quandorelampejar ou quando chover e relampejar aomesmo tempo (3 possibilidades).4.primeiro devemos executar o não e depois o ou. ou somente quandorelampejar (2 possibilidades). OPERADORES LÓGICOS: Os operadores lógicos permitem que mais de uma condição seja testada em uma única expressão. Quando eu não saio? Somente quando chover e relampejar ao mesmo tempo (apenas 1 possibilidade). os resultados possíveis para os operadores lógicos 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 não A V V F F A xou B F V V F Exemplos de testes utilizando operadores lógicos: Expressão Se chover e relampejar. ou seja. Se chover ourelampejar. Se chover xourelampejar. 14 2. eu não saio. Se (salario > 180) e (salário < 800) Então Escrever ('Salário válido para financiamento') Senão Escrever ('Salário fora da faixa permitida para financiamento') FimSe. 1. Somente quando chover. por exemplo. se na mesma expressão tivermos o operador ou e o operador não. pode-se fazer mais de uma comparação (teste) ao mesmo tempo. ouseja. Operação Negação Conjunção Disjunção (não exclusiva) Disjunção (exclusiva) Operador não e ou xou (lê-se: ³ou exclusivo´) Note que a tabela acima. 3.(5 + 3) > = 7 é verdadeiro NUM != (4 ± 1) é falso {lembre-se que NUM ³recebeu´ 3} 3. eu não saio. eu não saio. .

é necessário a existência de prioridades. / 4) +.5.y) 7.x ** 2 * (7 . B=4. Escreva-as em forma computacional a) r=2y²+3zb) 15 .y ** 2) b) 2 * x * (3 . 5. lembrando sempre.D/2 c) trunca(0.B. c) JOÃO+JOSÉ/JOEL. 12. Sendo A. A maioria das linguagens de programação utiliza as seguintes prioridades de operadores: 1º . caso contrário poderemos obter valores que não representam o resultado esperado. C=13 e D=4. d) X+Y+B**2+R*3 Qual é a primeira operação executada em cada um dos comandos abaixo? Avalie a seguinte expressão aritmética: 6+4/2*3. Primeiro: Parênteses e Funções Segundo: Expressões Aritméticas 1) +.Efetuar multiplicação e/ou divisão 4º . 24? Qual o resultado das seguintes expressões a) 1 + 7 * 2 ** 2 . 5.y) / (x ** 2 . estes devem ser compatíveis com a linguagem de programação a ser utilizada. Identifique as entradas e saídas das expressões abaixo.2) + 4 * 2 = X 6. cujos conteúdos são: A=3. EXERCÍCIOS INTRODUTÓRIOS ± I 1. 4. operadores ou funções para adaptar o algoritmo as suas necessidades. Avalie as expressões abaixo sabendo que X = 2 e Y = 3 a) 3 * y . a) X+Y-Z.(binário) Terceiro: Comparações Quarto: Não Quinto: e Sexto: ou OBS: O programador tem plena liberdade para incluir novas variáveis. O resultado desta expressão é 15. .Efetuar Funções 3º . PRIORIDADE DE OPERADORES: Durante a execução de uma expressão que envolve vários operadores.Operadores Lógicos Ou seja.Operadores Relacionais 6º .1 = X b) 3 * (1 .3+5)*2 3.Efetuar operações embutidas em parênteses "mais internos" 2º .C e D variáveis do tipo inteiro. .Efetuar adição e/ou subtração 5º . d) (C+D)/C**2 e) B%(A+1) f) sinal(D -C) b)A+B/C**2. Quais os valores fornecidos por cada uma das expressões aritméticas abaixo? a) 100*(B/A)+C b) A%5 .3.(Unitários) 2) ** 3) *. de que. O resultado da expressão 3 + 6 * 13 = X? 2.

sabemos que nas linguagens de programação essa independência não existe. Serão introduzidos paralelamente   ¢ " 0 ) D B 3@ 4A @98 4 32 EC C  ' $& % $ ( $& % $#   !    F  1 V`Y WV U X a  G 16 . a mesma forma. m 5 32 4 32 76 Comando Im im ( i no c): Imprime (na tela ou na impressora) o conteúdo da(s) variável(eis) especificada(s) após o comando. discos.6..  m E     Para que possamos obter dados do meio exterior para uso do computador memória principal . Ex: leia (v). sendo que.. . mas. mas o comando permite a impressão de texto (entre³). têm de ser levadas ao meio externo um arquivo. ES E As estruturas de controle introduzidas nesta unidade facilitarão a expressão de algoritmos e permitirão que exemplos mais significativos sejam apresentados e propostos. através de um dispositivo de saída. monitor. i . ( identificador ) . devemos utili ar comandos de entrada e saída. nas linguagens de programação temos comandos específicos para cada tipo de unidade de Entrada/Saída. 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. visando o aperfeiçoamentodo desenvolvimento do processo de aprendizado da construção de algoritmos. uma tela etc. do meio externo. utilizamos dois comandos assim definidos: omando Lei ( no c): lê. SH QPIH R T ' Lei el el S í . Para isso.. P L Algoritmo Início declarações de variáveis>. para isso. se for necessária para c lareza ou especificação do que está sendo impresso. impressora. estes têm de vir através dos dispositivos de entrada. escreveremos a seguir os comandos básicos de controle do P o programa equivalente em linguagem µC¶ para uma mel or compreensão. uma impressora. i .. as informações que são produzidas. ³expressão´ . no nível de al oritmo esses comandos representam apenas a entrada e a saída da informação. ¥¤ £ ¢¡ S ¦ E E § ¡ ¡ E S Í ©¨ reci o represent r troca e informações e ocorrerá entre o mundo da máquina e o nosso No l orit o mundo. Não será preocupação nossa a formatação de relatórios. ou seja. entre parênteses. I E PSE I E µ ¶ . 3. . valor atual da variável (x) é informado para um dispositivo de saída(monitor). Im im l e Imprima Ex: imprima (x). 6.. . independe do dispositivo utili ado teclado. a próxima informação disponível para leitura e armazena na(s) variável(eis) discriminada(s) após o comando.. valor da variável (v) é dado por um dispositivo de entrada (teclado).6. entre parênteses. 7.

Fim. 17 . a estrutura de seleção é utilizada quando a execução de um comando (ou uma sequência de comandos) depende de um teste anterior (uma ou mais comparações). para mostrar a estrutura lógica e sequência de comandos. } 2. as três também formam a base das estruturas de controle de execução.<comandos>. Vejamos como formalizaremos a representação e o uso dessas estruturas no PORTUGOL e na Linguagem µC¶. quando usando o PORTUGOL e µC¶. A seleção pode ser simples ou composta. ‡ PORTUGOL Início comando 1. ‡C #include <stdio. foram apresentados exemplos das três estruturas necessárias para representação da solução de qualquer algoritmo: a sequência. utilizar nomes significativos e comentar. DOCUMENTAÇÃO Alguns princípios básicosdeverão ser usados desde a criação do primeiro algoritmo: y y y Ao criar as constantes e variáveis. Fim. 1. se necessário for. a seleção e a repetição.h> main () /* Um Primeiro Programa */ { printf ("Meu primeiro programa\n"). Os comentários devem vir entre /* */ Ex: /* Um Primeiro Programa */ O compilador C desconsidera qualquer coisa que esteja começando com /* e terminando */. Utilizar identação (três espaços como sugestão). Utilizar parênteses para evitar ambiguidade nas expressões. } Comentário de códigos: Quando fazemos um programa. Em se tratando de algoritmo para computadores. uma boa ideia é usar comentários que ajudem a elucidar o funcionamento do mesmo. comando n. SELEÇÃO Também chamada de estrutura de decisão ou de processamento condicional. . ‡C #include <stdio. . ESTRUTURAS BÁSICAS DE CONTROLE No capítulo anterior. comando 2.h> main () /* Um Primeiro Programa */ { printf ("Meu primeiro programa\n"). SEQUÊNCIA Grupo de comandos que são executados um após o outro.

// Comando } 2. //Comando } Onde a CONDIÇÃO poderá ser também uma expressão lógica. Nos casos de vários aninhamentos subsequentes. Senão {F} Se CONDIÇÃO_B Então comando2. ou seja."). Fim Se. e se executa um outro comando (ou sequência de comandos) se a condição é falsa.2.3."). ‡ PORTUGOL Se <condição> Então (comandos). Fim se. Senão comando3. SELEÇÃO COMPOSTA Quando se executa um comando (ou sequência de comandos) se uma condição é verdadeira. Fim.1. // Comando } else { printf ("O numero e diferente de 10.2. ‡ PORTUGOL Início Se CONDIÇÃO_A Então {V} comando1. uma boa identação será fundamental para o entendimento do algoritmo quando utilizando pseudo-código. Senão (comandos). ‡C if (num==10) //Condição { printf ("O numero e igual a 10. 18 . Fim Se. Outro aninhamento poderá ocorrer também com esta última seleção e assim por diante. e não há comandos a executar se a condição for falsa. SELEÇÃO SIMPLES Quando a execução de um comando (ou de uma sequência de comandos) depender de uma condição verdadeira. Fim Se. ‡ PORTUGOL Se <condição> Então (comandos). o comando a ser executado dentro de uma seleção (por exemplo. no "Senão") pode ser outra seleção. Fim Se. ANINHAMENTO DE SELEÇÕES A estrutura de Seleção permite o aninhamento. Exemplo1: leia um número inteiro e o imprima se ele for diferente de 0 (ZERO) Exemplo2: Se (a<5) Então Imprima (³o valor de a é ´ a)."). ‡C if (num==10) // Condição { printf ("O numero e igual a 10. 2.

enquanto uma determinada condição (expressão lógica) permanecer verdadeira. ou será executado várias vezes (enquanto for verdadeira). } Exercício: faça um trecho de algoritmo para ler e imprimir o nome e a idade de várias pessoas. Imprima(x).º de vezes que será repetido o laço. while (X < 10) { printf (³%d´. } 3. &X).2. Dependendo do resultado do teste da condição. o conjunto de comandos poderá não ser executado nem uma vez (se for falsa no primeiro teste). Dois cuidados ao criar estruturas de repetição (enquanto): 1. ESTRUTURAS DE REPETIÇÃO . &X).1. ela permite o aninhamento de rep etições. uma mensagem informando o fato. x = 2."). ou seja. até encontrar alguém com 65 anos. X = 2. 19 . ‡ PORTUGOL Início Inteiro x. 2.‡C if (num <= 10) { if (num == 10) printf ("O numero e igual a 10. Enquanto (x<10) Faça Imprima (x). pois se isto não for feito cairemos no que chamamos um laço infinito e de lá o nosso programa não sairá. Fim. quando deverá ser impresso. else printf (³O numero e menor que 10´). LAÇO ENQUANTO(WHILE) A estrutura de repetição (enquanto) é utilizada quando um conjunto de comandos deve ser executado repetidamente. além do nome. Da mesma forma que a estrutura de seleção. x=x+1. CONTROLADOS POR CONTADOR Uma variável é fornecida com o n.LAÇOS(LOOPS) 3.h> main () { int X. Inicializar a(s) variável(eis) que controla(m) o laço dentro do laço (seja por leitura ou por atribuição)."). Inicializar a(s) variável(eis) que controla(m) o laço antes do início do laço. Poderão haver também aninhamentos de seleções dentro de estruturas repetitivas e vice-versa. Algoritmo Abono_por_Contador Início Leia (Numero_de_Funcionários). a existência de uma estrutura de repetição dentro de outra. Chama-se a isso um laço ("loop"). } else if (num <= 20) { printf ("O numero e maior que 10 e menor que 20. ‡C #include <stdio. X = X + 1. Fim Enquanto. Contador = 0. } printf (³%d´. 3.

20 . se for falsa o comando seguinte será executado. Fim.cn são reexecutados enquanto a condição for verdadeira.. Deve-se. enquanto<condição>. x 2. os comandos c1. ela é testada. Fim Enquanto. ‡C do { c1. ‡ PORTUGOL repita c1. ter o cuidado de modificá-la(s) dentro do laço para que não caiamos em um laço infinito. Fim. . se for verdadeira. Imprima(x). pode se fazer o teste no final.. contudo.Repita ± enquanto (do ± while) Início Inteiro x.. Fim Enquanto. .Enquanto (Contador < Número_de_Funcionários) Faça Leia (Nome). Contador = Contador+1.. x = x+1.. Quando a condição é encontrada.7. x = 2. c2. Executa uma instrução e faz um teste lógico. cn. Os comandos c1. c2. c2. REPETIÇÃO COM TESTE NO FINAL Quando se deseja executar a série de comandos uma vez pelo menos. 3. Uma vantagem do repita é que não é preciso inicializar a(s) variável(eis) de controle do laço antes de entrar no mesmo. Fim. .cn são executados pelo menos uma vez. pelo teclado. . } while (condição). conforme será mostrado no exemplo abaixo. . c2. fica repetindo o processo enquanto o teste lógico for Verdadeiro. Dependendo da resposta. mas pode ser sempre substituída por um enquanto. Repita Imprima(x).. Imprima (x). x x+1.. Enquanto (x<=10). cn.. O comando repita-enquanto é equivalente ao comando enquanto. Enquanto x<10 faça Imprima (x).Enquanto (while) Início Inteiro: x. Essa variação tem um uso bastante efetivo na validação de dados de entra da.. .

Imprima (³UFA! CHEGUEI AQUI´). EXERCÍCIOS INTRODUTÓRIOS ± II 1) Quais valores serão impressos após a execução do seguinte trecho de algoritmo I=0. ‡ PORTUGOL abandone ‡C break Exemplo: Enquanto (a>b) faça Leia(a. Inicio Constante FLAG = 999. 3. Além disso. Imprima(a. Para identificá-lo iremos defini-lo como uma constante nos nossos algoritmos. Exemplo: faça um trecho de algoritmo utilizando o PORTUGOL que leia e imprima uma lista de números inteiros terminada pelo número 999. Numa estrutura Repita.b). Fim Enquanto. Fim Enquanto.I**2). os comandos são executados pelo menos uma vez.Numa estrutura Enquanto.8. PI. Se b==0 Então abandone.b).9. que calcula o volume de uma esfera de raio R: Início Real VOLUME. Leia (NUM). Fim Enquanto. ou o fim de um arquivo. Sinalizador ('Flags') O sinalizador ou 'flag' é um valor que. estará sempre associado ao teste de uma condição com comando se. 21 . Leia (NUM) Enquanto (NUM <> FLAG) faça Imprima (NUM). I=I+1. os comandos são executados 0 ou mais vezes. o fim de uma lista de dados. Inteiro NUM. 4. o fim de um programa. /*CUIDADO*/ 2) Dado o algoritmo abaixo. ESCAPE DO LAÇO ± Abandone (break) Comando Abandone: Força uma saída de um laço de repetição. sinaliza a saída de um laço. quando lido.I). Enquanto I<20 Faça Imprima (I. para). O comando abandone só tem sentido dentro de um comando de repetição (enquanto. ‡ Significado do comando abandone : quando o abandone é encontrado. Imprima (³I=´. R. repita. Senão a=a/b. Fim. o próximo comando a ser executado é o primeiro comando logo após o fim do comando de repetição mais interno onde aparece o abandone. 3.

Escolha nomes de variáveis que sejam significativos.Utilize espaços em branco para melhorar a legibilidade. Fim. Exemplo: NOTA MATRÍCULA 3.1416. receber manutenção e serem modificados. Imprima (F.Uma descrição do que faz o algoritmo .21*10² b) "BOLA" e) falso c) "VERDADEIRO" 5. destaque a estrutura na qual estão contidos. 9.Procure alinhar os comandos de acordo com o nível a que pertençam.Use comentários no início para explicar o que o algoritmo faz.Como utilizá-lo . Alguns comentários seriam.Explicação do significado das variáveis mais importantes .Um comando por linha é suficiente . REGRAS PRÁTICAS PARA A CONSTRUÇÃO DE ALGORITMOS LEGÍVEIS 1.O algoritmo fica mais legível . que traduzam o tipo de informação a ser armazenada na variável.O algoritmo fica mais fácil de ser depurado.Autor . 8.Escreva comentários no momento em que estiver escrevendo o algoritmo. 5. inclusive linhas em branco são valiosíssimos para melhorar a aparência de um algoritmo. Fim Enquanto.Estrutura de dados utilizada . Exemplo: B=A*C. Completar os demais valores que serão impressos: R VOLUME DA ESFERA 10) Identifique o tipo de cada uma das constantes abaixo: a) 21 d) 0. R=R+2.Os nomes de quaisquer métodos especiais utilizados . Fim Enquanto. 4.Procure incorporar comentários no algoritmo.Escolha nomes representativos para suas variáveis.Tenha em mente que seus algoritmos deverão ser lidos e entendidos por outras pessoas (e por você mesmo) de tal forma que possam ser corrigidos.Constante PI = 3. 22 . . pelo menos para descrever o significado das variáveis utilizadas. F=X+NOTA/2. Espaços em branco. Um algoritmo não documentado é um dos piores erros que um programador pode cometer. R=0. isto é. isto é.NOTA).VOLUME). Imprima (R.Data da escrita 7. Enquanto P==1 Faça P=P+1. Enquanto R<= 6 Faça VOLUME=4/3*PI*(R**3). 6. Exemplo: /* Cálculo da média */ 2.

Passo 4. fim enquanto O mesmo exemplo com cada comando em uma linha A=14. EXERCÍCIOS COMPLEMENTARES . K=I*K. Enquanto I<10 Faça X=X+1.2. UMA REFLEXÃO ANTES DE RESOLVER OS PROBLEMAS Passo1 . dadas as entradas e valores gerados internamente. Faça um programa que leia o nome e a idade de 3 pessoas e apresente: ‡ Maior idade ‡ Nome da pessoa mais nova ‡ Média das idades 7. I=I+1.I=1.Leia cuidadosamente a especificação do problema até o final. 6.Utilize parênteses para aumentar a legibilidade e prevenir-se contra erros. Passo 8 . 8. Com poucos parênteses A*B*C/(C*D*E) A**B**C A+B<C Com parênteses extras (A*B*C)/(C*D*E) (A**B)**C (A+B)<C 11. 4. I=1.K=I*K. Passo 3. pergunte. Fim Enquanto. elaborando o algoritmo e revendo comentários.Levantar e analisar todas as transformações necessárias. Faça um algoritmo que faça a soma dos números inteiros de 1 a 18.Testar cada passo do algoritmo. Faça um programa que leia o raio de uma circunferência e calcule e apresente sua a área e perímetro. Altere o algoritmo de media de idade para ler também os nomes e ao final mostrar a mensage com os três m nomes mais a média de suas idades.enquanto I<10 faça X=X+1.I 1.Verificar se é necessário gerar valores internamente ao algoritmo e levantar as variáveis necessárias e os valores iniciais de cada uma.2. Faça um algoritmo que leia quatro idades e calcule a média das mesmas. Passo 5. Faça um programa que leia a medida do lado de um quadrado e calcule e apresente a área e o perímetro desta figura. 7. para produzir as saídas especificadas. Passo 2 . Passo 6.Exemplo: A=14.Caso não tenha entendido o problema.Avaliação geral. Faça um programa que leia 4 números inteiros e apresente: ‡ Média dos ímpares ‡ Maior número par ‡ Diferença do maior menos o menor número 5. 3.Levantar e analisar todas as saídas exigidas na especificação do problema (impressões). 2.Levantar e analisar todas as entradas citadas na especificação do problema (leituras). os comentários devem ser alterados. Obs: Perímetro é a soma de todos os lados de uma figura geométrica.I=I+1. Passo 7.Toda vez que uma modificação for feita no algoritmo. 10. 23 .

Faça um programa que leia o valor dos lados de um triângulo retângulo e calcule e apresente a sua área.9. Área = (base*altura)/2 24 .

Cn. X = X +1. um teste para verificar se a variável atingiu o limite e um acréscimo na variável. Cn. i. escrito numa notação compactada. de acordo com as regras da programação estruturada. Fim. v incremento + 1*/ { printf (³%d´. Exemplo para comparação entre Enquanto e Para Início Inteiro X. . C2.. p são variáveis quaisquer e que. enquanto v for menor que 100 faça. v < 100. i: valor inicial de v. &v) } Significado do comando: v. Neste caso existirá sempre uma inicialização da variável de controle. p: valor do incremento de v. Fim Para. 25 . o comando enquanto utilizando-se uma variável de controle. X = 1 /*inicialização*/ Enquanto (X <=10) Faça /*teste*/ Leia(v[X]). f: valor final de v. não devem ser modificadas nos comandos C1. f. .ALGORÍTMOS BASEADOS DADOS HOMOGÊNEAS: 1. 2. vejamos algumas novas estruturas de controle.v++) /* v = 0. Para X de 1 até 10 Passo 1 Faça Leia(v[X]). na verdade. Fim Para Fim. que faremos uso quando trabalharmos com vetores e matrizes. C2. Equivale a: Início Inteiro X. . REPETIÇÃO COM VARIÁVEL DE CONTROLE ± PARA (for) Repete uma instrução um pré-determinado número de vezes. . Sintaxe do comando: ‡ PORTUGOL Para v de i até f passo p Faça C1. para v de i até fpasso p faça onde: v: variável de controle. O comando para é. VETORES E MATRIZES EM ESTRUTURAS DE Antes de tratarmos das estruturas de dados homogêneas. ‡C for (v = 0. /*acréscimo*/ Fim Enquanto. .

Senão comandoN. e e a execução do programa for diferente dependendo do valor obtido ouassumido por esta variável ou expressão. Imprima (X). 2) Toda vez que o fim para é encontrado. os comandos C1. No exemplo acima teríamos: Para X de 1 até 10 Faça Imprima (X). scanf("%c". a variável de controle (i) é incrementada pelo passo p e o teste (v<=l) é feito..Mamao\n"). Caso IDENTIFICADOR = valor_3 comando3.h> main () { char Ch. quando uma variável ou expressão aritmética puder assumir váriosvalores diferent s.3. poderemos utilizar a estrutura que se segue.4..8. ao invésde vários "Se" aninhados.7. Fim Para... Fim Para.10 e fora do comando para será impresso o valor 11..9. 3. // \t Tabulação horizontal ("tab") printf ("\t(2). Quando o passo (p) for igual a 1.&Ch). Por exemplo.Cn não serão executados.6. // \n Nova linha printf ("\t(1). ‡ PORTUGOL Início Conforme Caso IDENTIFICADOR = Valor_1 comando1. se o valor inicial (i) já for superior ao limite ( ).. Neste aspecto o comando para é diferente do comando enquanto. Fim. Caso IDENTIFICADOR = valor_2 comando2..Abacaxi\n"). fflush(NULL). serão impressos dentro do comando para: 1. do { printf ("\n\nEscolha um:\n\n")... ‡ µC¶ #include <stdio. f C2. Fim Conforme. switch (Ch) // Conforme { case '1': // Caso 26 .2..5. com o trecho de algoritmo seguinte: Para X de 1 até 10 Passo 1 Faça Imprima (X). não será necessário escrever esta especificação no comando.Laranja\n\n"). 3) O valor da variável de controle torna-se indefinido assim que é executado o comando para. printf ("\t(3).Nota: 1) Assim como no comando enquanto. SELEÇÃO DENTRE AS MÚLTIPLAS ALTERNATIVAS -CASO (CASE) Em nossos algoritmos. } while ((Ch!='1')&&|(Ch!='2')&&(Ch!='3')).

Caso ERRO = 2 Imprima (MSG2). Emprogramação. Exemplos: a) Início /*trecho de algoritmo para tratamento de três possíveis erros conhecidos na execução de um programa*/ Conforme Caso ERRO = 1 Imprima (MSG1). quando para cada seleção feita pelo usuário do programa. que podem ser referenciados como um todo. 4. uma aplicação sempre interessante desta estrutura é no tratamento de Menus deOpções. b) Início /* trecho de algoritmo para impressão da situação de um aluno a partir da MÉDIA obtida ao fim do curso */ Conforme Caso MÉDIA > 7. Fim Conforme. case '2': printf ("\t\tVoce escolheu Abacaxi. Caso ERRO = 3 Imprima (MSG3). Fim. Senão Imprima (³REPROVADO´). Fim. Após obter-se um valor verdadeiro para um dos casos. break. Por exemplo consideremos um problema em que umprofessor com 5 alunos deseja imprimir a nota e a média de seus alunos. haverá uma sequência deações diferentes a ser executada. Ao declararmos um vetor. Só a declaração destas variáveistornaria impraticável aredação do algoritmo.\n"). Nesse caso serianecessário se considerar cinco variáveis reais para contar as notas dos cinco alunos. o vetor. Nem sempre os tipos básicos (inteiro.0 Imprima (³APROVADO COM DIPLOMA´). 27 . } } 1. Daí a necessidade de novos tipos serem criados. é uma estrutura de dados que contêm elementos de mesmo tipo. VETORES Um vetor ou agregado homogêneo. case '3': printf ("\t\tVoce escolheu Laranja. ou ainda variável composta homogênea. Imagine queo número de alunos da turma seja 80. Fim Conforme. estamos reservando na memória principal do computador uma série de células para uso da variável daquele tipo. Senão Imprima (³ERRO NÃO CONHECIDO´). Outra aplicação é na impressão de diferentes mensagens deerro. break. break. Caso MÉDIA > = 5. paradeterminar qual o comando a ser executado após o teste de cada condição (Ver exemplo b). caractere e lógico) são suficientes para exprimir estruturas de dados em algoritmos. Um destes tipos. O nome do vetor aponta para a base das células e o seu início dá a posição relativa do elemento referenciado ao primeiro (base).\n"). Esta estrutura também pode ser utilizada testando-se as condições ao invés de valores.0 Imprima (³APROVADO COM CERTIFICADO´).printf ("\t\tVoce escolheu Mamao. real.será estudado. cessam os testes dos casos e o próximo comando a ser executado é o que vem a seguir do Fim Conforme.\n").

Nota[I]). se desejarmos atribuir o valor ³FMI´ ao elemento identificado pelo índice6 do vetor anterior. Para I de 0 até 2 Faça Leia (Nome[I]. Nome2. Fim Para. Se o programador não tiver atenção com os limites devalidade para os índices ele corre o risco de ter variáveis sobrescritas ou de ver o computadortravar. osdados serão indexados de 0 a 19. Fim Se.1. Se Nota3 > Média Então Imprima (Nome3). Porexemplo. DECLARAÇÃO DE VETORES tipo_da_variável nome_da_variável [Pi:Pf]. Vamos ver agora um exemplo de utilização de vetores: Exemplo: Real Notas[1:80]. Para acessá-los vamos escrever: exemplo[0] exemplo[1] .Os vetores podem ser unidimensionais ou multidimensionais (matrizes).0 . Nota1). Se Nota1 > Média Então Imprima (Nome1). ‡ Algoritmo Notas {Sem Vetor} Início Caracter Nome1. Para referência a umelemento do vetor. Fim Se.0 . Isto significa que.Posição Inicial do Vetor Pf . Nota3. Real Soma. /*Cálculo da Média*/ Soma = 0. o µC¶ irá reservar 4x20=80 bytes. Estes bytes são reservados de maneira contígua. com incrementos unitários. utiliza-se o nome do vetor e a identificação do elemento (índice) entrecolchetes. Abordaremos este assunto ainda neste capítulo. teremos: NOME[4] ´FMI´ que produzirá 2 3 FMI 4 5 1 Ex. Nota3). ‡ Algoritmo Notas {Com Vetor} Início Caracter Nome[0:2] Real Nota[0:2]. Leia (Nome3. Real Nota1. Leia (Nome2. Média = (Nota1+Nota2+Nota3)/3. Leia(Nome1.0. Fim Para. .: Algoritmo para ler as notas de 3 alunos e imprimir os nomes daqueles cujas notas foremmaior que a média.Este é um cuidado que vocêdeve tomar. 4. O número de elementos de um vetor é dado por: Pf-Pi+1 Isto significa que as posições do vetor são identificadas a partir de Pi. exemplo[19] Mas ninguém o impede de escrever: exemplo[30] exemplo[103] Por quê? Porque o C não verifica se o índice que você usou está dentro dos limites válidos. se declararmos: float exemplo [20]. Para I de 0 até 2 Faça Soma = Soma + Nota [I] . Nota2. Seexistirem porém várias turmas poderemos utilizar um vetor com dois índices (o número da turma eo número do aluno da turma). Se Nota2 > Média Então Imprima (Nome2). Pi . Por exemplo. no exemplo acima. Nome3. Bugs terríveis podem surgir. até Pf: Pi Pi + 1 ----------Pf Cada elemento de um vetor é tratado como se fosse uma variável simples.Posição Final do Vetor Quando o C vê uma declaração como esta ele reserva um espaço na memóriasuficientemente grande para armazenar o número de células especificadas em tamanho. Para I de 0 até 2 Faça Se Nota[I] > Média Então 28 . como uma lista de notas dos 50 alunos de uma turma. Nalinguagem C a numeração começa sempre em zero. tem apenas um índice. Um vetorunidimensional. Média = Soma/3. Nota2).

X[0:29]. Fim. Fim Se. 10.. fim se. que equivale a: NOTA [0] = 5.7. 29 .5.Para inicializar um vetor com valores diferentes. Y[0:9]. imprima (Y). S[0:19]. escreva um algoritmo que: Leia os vetores R e S e Gere ovetor X correspondente à união dos vetores R e S.Fim Se. 2) Dados dois vetores R[9] e S[19]. Imprima (X).S). NOTA[2] =10. fim se. S).. CRR[I]=CRR[6-I+1].. 1) Dado o vetor CRR de caracteres abaixo. J.. para J de 0 até 19 faça se R[I] == S[J] então enquanto K<=I faça se Y[K] != R[I] então se Y[K]==0 então Y[K] =R[I]. Fim Para. Fim. senão abandone. CRR ! 0 1 U O 2 T 3 R 4 E 5 6 C 7 A Qual será a sua configuração depois de executados os comandos: Para I de 0 até 3 passo 1 Faça AUX =CRR[I].0.. fim se. Fim. Fim Para Para I de 0 até 19 Passo 1 Faça X[I+10] = S[I]. 9. I..etc. Fim. fim se.0. fim para.. K. Fim Para.7. leia (R. fim enquanto.5}. Y=0 para I de 0 até 9 faça K = 1. Início Inteiro R[0:9]. 7. fim para.S[0:19]. CRR[6-I+1] =AUX. Fim Para. se Y[K]==R[I] então abandone. Para I de 0 até 9 Passo 1 Faça X[I] = R[I]. Leia (R. a) Gere o vetor Y com os elementos comuns de R e S Início inteiro R[0:9]. . Imprima (Nome[I]). K =K+1. 1. utilizamos um comando ³ construtor´ NOTA ={ 5. Inteiro I.

apresente o conjunto B. 6. Faça um programa que leia um conjunto A com 100 números inteiros e que gere um conjunto Bcom os elemento de A de acordo com a seguinte regra. onde os 15 primeiros elementos são de A e o resto de B. Fim. Apresente o C. 30 . inteiro I. Se o elemento de A for impar. Faça um programa que leia 4 números inteiros e apresente: ‡ Média dos ímpares ‡ Maior número par ‡ Diferença do maior menos o menor número 4. Faça um programa que leia dois conjuntos A e B com 15 números inteiros e gere um conjuntode 30 elementos. O dono do armazém anota a quantidade de cada mercadoria vendida durante o mês. 3. leia (QUANTIDADE. PREÇO). 8. 7. armazene em B somando 5. Faca um programa que leia um conjunto A com 30 números inteiros e que armazene em umconjunto B do mesmo tipo os elementos de A multiplicados por 3. fim para. Ele tem uma tabela que indica para cada mercadoria o preço de venda. Faça um algoritmo que leia 18 números inteiros e calcule e imprima a soma dos mesmos. /* indexador*/ FATURAMENTO = 0. sendo que um conjunto contém a quantidade vendida e o outro o preço de cada mercadoria. armazene emB multiplicando por 5. 5. PREÇO[0:99] /*Tabela de Qtdes vendidas e Preço*/ real FATURAMENTO. 9. Solução Início /* calcula o faturamento*/ real QUANTIDADE[0:99]. Se o elemento de A for par.3) Um armazém trabalha com 100 mercadorias diferentes identificadas pelos números inteiros de 1 a 100. Faça um programa que leia dois conjuntos A e B com 20 inteiros e troque os valores de A comB. EXERCÍCIOS SOBRE VETORES 1.10. Apresente oconjunto C. 2. Faca um programa que leia 2 conjuntos com 50 números inteiros e gere um terceiro conjuntocom a media dos elementos de A e B. para I de 0 até 99 faça FATURAMENTO = FATURAMENTO +QUANTIDA DE[I]*PREÇO[I]. Faca um programa que leia um conteúdo com 100 números inteiros e apresente a media dosnúmeros. Faça um algoritmo que leia 18 números inteiros e calcule e imprima a média dos mesmos 3. Escreva o algoritmo para calcular o faturamento mensal de armazém. isto é : FATURAMENTO=    .  A tabela de preço e quantidade são fornecidas em dois conjuntos. imprima (FATURAMENTO).

. M1[2... repete-se a estrutura bidimensional tantas vezes quantos sãoos elementos da terceira dimensão. 3:4] Para referenciar um elemento da matriz são necessários tantos índices quantas são as dimensõesda matriz. M1[1.2] = 2. Ex: Real MAT[1:3. inteiro: I.1:5]. No exemplo anterior. só tem estas dimensões a mais explícitas: ‡ A sintaxe é a seguinte: <Tipo básico> identificador [Pi1:Pf1.1] = 5. e. ) da declaraçãomais 1.1] = 3. MAT1[1. 2:4. numerando-as de acordo com os limites especificados nadeclaração de tipo.. MAT 1 1 2 3 O número de dimensões da matriz será igual ao número de vírgulas ( . O número de elementos é igual ao produto do número de elementos de cadadimensão: (Pf1-Pi1+1)*(Pf2-Pi2+1)*. Pin:Pfn]. MATRIZES Definição: Conjunto de dados referenciados por um mesmo nome e que necessita de mais deum índice para ter seus elementos individualizados. b) Caracter MAT2[1:3.2] = 6.1] = 1. M1[1.. J.. a coluna. M1[3. é necessária uma declaração dando um nome à variável que segue omodelo. que de diferente.*(Pfn-Pin+1) Exercícios 1) Qual é o número de elementos e dimensões das matrizes especificadas abaixo: a) real MAT1[0:2. ‡ Quando temos mais de uma dimensão então utilizamos as matrizes. 31 2 3 4 5 2 3 4 ... nouso e na declaração. M1[2. Esta especificação corresponde apenas à criação do modelo. Numa matriz bidimensional (duas dimensões) o primeiro índice indica a linha e osegundo.5. Imprima(M1).1:4].1:2]. ou seja. para efetivar a estrutura dedados dentro do algoritmo. Pi2:Ps2. M1[3.3] se refere ao elemento da linha número 1(segunda linha no caso) e coluna número 3 (terceira coluna) MAT1 1 0 1 2 Para matrizes com três dimensões.2] = 4.. Exemplo1:O que será impresso no algoritmo abaixo: Início inteiro M1[1:3.

Leia (MAT).I]).I].1]. MAT[1. MAT[I.0:4].1:4]. Fim Para.4]= AUX. 32 . J =0. I=I+1.J] = MAT[J.Para percorrer a matriz linha por linha: Fixar a linha Variar a coluna Inteiro exemplo[1:3. MAT[2. J=J+1.I] = AUX. Fim Enquanto. AUX=MAT[1.J].4]. MAT[J.J] =I+J. J.3]. Notas: 1.Para I de 1 até 2 Faça Para J de 1 até 3 Faça Imprima (M1[J. Enquanto I<=3 Faça J=0.2] = MAT[3. 2. Fim.1]=MAT[4. Enquanto J<= 4 Faça exemplo[I.Para percorrer a matriz coluna por coluna Fixar a coluna Variar a linha Inteiro exemplo[1:3. I =1. Enquanto J<=4 Faça I=1.0:4]. AUX = MAT[2. 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 configuração de MAT depois de executado o algoritmo: Início Inteiro I. Para I de 1 até 4 Passo 1 Faça Para J de I+1 até 4 Passo 1 Faça AUX = MAT[I. Fim Para. Fim Para. Fim Enquanto.3] = AUX Fim. MAT[4.2]. Caracter M1[1:4. Caracter AUX. Fim Para. MAT[3.

Real: TOTAL. Como no caso de vetores. J=J+1. é equivalente ao seguinte trecho: Para i de 1 até 10 Passo 1 Faça Para j de 1 até 8 Passo 1 Faça leia (MAT[I. Fim Para.1. também para matrizes podemos ter comandos concisosparainicialização. seja MAT definida por: Inteiro MAT[1:10. 33 . Exercícios Resolvidos 1) Dada uma matriz MAT de 4 x 5 elementos. leitura e impressão. ou então: Para j de 0 até 4 Passo 1 Faça Para I de 1 até 3 Passo 1 Faça exemplo[I. SOMALINHA=0. J. 5. Por exemplo. Fim Enquanto.J] I+J. Inteiro: I. Real SOMALINHA[1:4]. somar os elementos do vetor SOMALINHA navariável 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 Solução: Início Real MAT[1:4. O comando: Leia (MAT). Fim Para. 1:5]. Em seguida.J].Enquanto I<= 3 Faça exemplo[I. I=I+1. Do mesmo modo.J] =I+J.1:8]. faça um algoritmo para somar os elementos de cadalinha gerando o vetor SOMALINHA. Fim Para. pode-se inicializar uma matriz com todos os seus elementos iguais a umdeterminado valor escrevendo MAT =0. TOTAL=0. Fim Enquanto. Fim Para.

Para I de 1 até 4 Faça Para J de 1 até 5 Faça SOMALINHA[I]= SOMALINHA[I]+MAT[I. Fim.J]+B[I. Inteiro: I. M[3.J]/DIAGONAL. 2) Escreva um algoritmo que leia duas matrizes reais de dimensão 3 x 5. 34 . Leia (A.I]. Elementos da diagonal principal. Imprima (³TOTAL=´. divida cada elemento de uma linha da matriz pelo elemento da diagonal principal desta linhae imprima a matriz assim modificada. M[1. Para I de 1 até 20 Faça DIAGONAL =M[I. TOTAL). Enquanto I<=3 faça J=1 Enquanto J<=5 faça C[I.Leia (MAT). Imprima ( ³C=´ . C[1:3. Para J de 1 até 20 Faça M[I. Inteiro: I. Imprima (³M=´.1:5]. TOTAL=TOTAL+SOMALINHA[I].M).1:5]. J. Leia (M). Fim Para. J=J+1.J] =A[I.C ). Início Real A[1:3.4] Início real M[1:20.3]. B[1:3. Fim Para. M[2. Real: DIAGONAL.J].2].1].J] =M[I. Obs. 3) Escreva um algoritmo para um programa que leia uma matriz quadrada 20 x 20 de elementosreais. J. Fim.1:20]. M[4.B).J]. calcule e imprima asoma das matrizes. Fim Para. I=I+1.1:5]. I=1. Fim Para. Fim Enquanto. Fim. Fim Enquanto.

. codificação.As variáveis. construção. não afete outras partesdo Algoritmo. organizados de preferência em um sistemahierárquico. evitando-se a repetição de blocos dos programas. C1. b 35 b b b b .C.Blocos. ao ser modificado. Em um Algoritmo. Em se tratando de algoritmos. B 3.poderemos definir nossos procedimentos e funções em qualquer parte do algoritmo principal oudepois dele. etc. e para reutilização de um móduloem outros algoritmos e programas. A grande maioria das linguagens de programação que são utilizadas. tem estafacilidade. Funções. do geral ao particular. entretanto. Exemplo: O que será impresso no algoritmo abaixo? Início Inteiro: X. PROCEDIMENTOS Um procedimento é uma seqüência de comandos precedida por uma seq uência dedeclarações que possui um identificador (nome do procedimento). teste e reutilizaçãodos mesmos. Fim { nome do procedimento}. uma parte do programa) de cada vez. asvariáveis. São chamadasvariáveis Globais. Módulos. independentemente. são acessíveis evisíveis dentro de qualquer procedimento que esteja sendo usado pelo algoritmo.permitir a reutilização. É uma boa técnica ao se construir um procedimento. pois testa-se um módulo (ouseja. Isso fará com que cada procedimento. 2.Y. uma lista de parâmetrosopcional e pode realizar qualquer tipo de processamento que o programador ou analista deseje.por refinamentos sucessivos (desenvolvimento "top-down" ou de cima para baixo). Esses módulos trazem vantagens adicionais para testes. sempre é possível subdividir-se um programa de modo a facilitar o entendimento. no futuro.B. C2. São chamadasvariáveis locais. Procedimentos. Passaremos agora a formalizar a utilização de módulos nos nossos algoritmos e verificar asvantagensque os mesmos trazem para entendimento. No nosso pseudo códigodefiniremos dois tipos de módulos: Os procedimentos ("procedures") e as funções ("functions").D. adotando os formatos que se seguem e as normas de documentação. seja com o nome de Sub -rotinas. Cn. Procedimento troca Início Inteiro: AUX. tipos e constantes declaradas logo após o identificador do algoritmo. não fazer uso no mesmo.de variáveis globais e referenciar e utilizar apenas as variáveis locais e os parâmetros doprocedimento. Os procedimentos e funções são normalmente definidos antes de seremutilizados(chamados) pelo programa principal.X AUX X X Y Y AUX Fim troca. os tipos e as constantes declaradas dentro de um procedimento só são acessáveisdentro dos comandos do procedimento.MODULARIZAÇÃO DE ALGORITMOS 1.. e da mesma forma as variáveis globais poderão ser modificadas sem que hajaefeitos colaterais nos procedimentos. 2) Decompor o algoritmo em módulos funcionais.A. A 5. Sintaxe de declaração Procedimento < nome do Procedimento> Início <declarações>. Subprogramas. INTRODUÇÃO Vimos que os algoritmos estruturados são desenvolvidos levando-se em conta algumaspremissas básicas: 1) Desenvolver o algoritmo em diferentes fases de detalhamento crescente.

Senão as tivéssemos. Uma função no C tem a seguinte forma geral: tipo_de_retorno nome_da_função (declaração_de_parâmetros) Início 36 . C 4. . Fim. Troca. Uma função é um módulo que tem por objetivo calcular e retornar ao algoritmo. D 9. C X. Imprima(A. Y B. nos capítulos anteriores. Cn. D). um programador poderá desenvolver seu procedimento semse preocupar com o algoritmo que o vai chamar. A chamada de uma função para execução é feitaapenas citando o seu identificador no meio -se de uma expressão. A X. FUNÇÕES Funções são as estruturas que permitem ao usuário separar seus programas em blocos. D).inteiro NUM2) Início Inteiro AUXNUM. Fim. Uma lista de parâmetros consiste em uma lista de variáveis e seusrespectivos tipos. Imprima(C. D Y. Fim. C2. Parafazermos programas grandes e complexos temos de construí-los bloco a bloco. Poderemos também testá-lo individualmente eisoladamente para verificar sua correção. que fazem uso de variáveis globais e sua única importante vantagem éfacilitar o entendimento e a solução do algoritmo. B Y.Imprima(A. 3. A isto sedenomina Encapsulamento. Isto será comprovado na disciplina LP. NUM2 = AUXNUM. Os módulos que estivemos utilizando na apostila. pois. . são procedimentossem parâmetros. { nome do procedimento} Exemplo de Procedimento: Procedimento TROCAINTEIROS (Inteiro NUM1. Utilizando parâmetros e não variáveis globais dentro do procedimento. ou seja. uma vez queforam bem definidos os parâmetros. os programas teriam que ser curtos e de pequena complexidade. AUXNUM = NUM1. Troca. Procedimento < nome do Procedimento> (<lista de parâmetros>) < especificação de parâmetros> Início <declaração de variáveis locais> C1. Imprima(C. Y D. por assimdizer. X C. X A. B). B). Uma função é dita recursiva quando chama a ela própria. Vide as funções previamenteexistentes no nosso pseudo -código.procedimento ou função "chamador" um valor. isolá do -lo meio exterior e obter vantagens adicionais na codificação. NUM1 = NUM2. podemos.

Quando se chega a uma declaração retorna (return) a função é encerrada imediatamente e. . Fim. coisas são feitas.. O corpo da função é a sua alma.Algoritmo para calcular o quadrado de um número ‡ PORTUGOL Inteiro Square(inteiro a) Início retorna (a*a). ou retorna. O tipo-de-retorno é o tipo de variável que a função vai retornar. tipo nomeN Repare que o tipo deve ser especificado para cada uma das N variáveis de entrada. Fim Se. . Senão VALORABSOLUTO = (-X).corpo_da_função Fim. Onde: ‡ A lista de parâmetros é semelhante à dos procedimentos ‡ Antes do nome da função dá o tipo do valor que a função retorna ao algoritmo ouprocedimento chamador. É nadeclaração de parâmetros que informamos ao compilador quais serão as entradas da função(assim como informamos a saída no tipo-de-retorno). ou seja. 37 . O Comando retorna (return) O comando return tem a seguinte forma geral: retorna valor_de_retorno. Fim. Algoritmo Principal Início inteiro num. É importante lembrar que o valor de retorno fornecido tem que sercompatível com o tipo de retorno declarado para a função. afunção retorna este valor. A declaração de parâmetros é uma lista com a seguinte forma geral: tipo nome1. Em PORTUGOL utilizaremos a seguinte forma ‡ PORTUGOL Tipo-de-retorno<nome da função>(<declaração dos parâmetros>) Início Corpo da Função Fim. É nele que as entradas são processad saídas sãogeradas ou outras as. Isto se torna claro quandopensamos que a função é terminada quando o programa chega à primeira declaração retorna( return). se o valor de retorno é informado. uma função para qual não declaramos o tipo de retorno é considerada comoretornando um inteiro. imprima ("Entre com um numero: ").. Exercício para casa: Escrever e executar em C o programinha acima . Abaixo estão dois exemplos de uso do retorna (return): Exemplo de função: Inteiro VALORABSOLUTO (inteiro X) Início Se X > = 0 Então VALORABSOLUTO =X. Digamos que uma função está sendo executada. O default é o tipo inteiro(int). Uma função pode ter mais de uma declaração retorna (return). tipo nome2.

ou mesmo para que estes valores participem de expressões. Fim. a%0=0*/ fim se. imprima ("Entre com numero: "). return 0. } . else printf ("\n\nO numero e impar. num=Square(num). /* Retorna 1 se for divisivel */ } int main (){ int num. se (EPar(num)) então imprima ("O numero e par. } int main (){ int num. printf ("Entre com numero: "). scanf ("%d".leia (num). ‡ Em C #include <stdio. ‡ PORTUGOL inteiro EPar (inteiro a) início se (a%2) então /* Verifica se a e divisivel por dois */ return 0. como as funções retornam valores.").\n"). printf ("\n\nO seu quadrado vale: %d\n".Algoritmo para verificar se um número a é divisível por 2. senão imprima ("O numero e impar. leia (num)."). /* Retorna 0 se nao for divisível. num). num=Square(num). /* Retorna 0 se nao for divisivel */ else return 1. podemos aproveitá-los parafazer atribuições. fim.\n"). } É importante notar que. Mas não podemosfazer: 38 .num). Algoritmo Principal Início inteiro num.h> int Square (int a){ return (a*a). fim se.&num). /* Retorna 1 se for divisivel . imprima ("O seu quadrado vale:". ‡ Em C #include <stdio. scanf ("%d".h> int EPar (int a){ if (a%2) /* Verifica se a e divisivel por dois */ return 0. printf ("Entre com um numero: "). a%1=1 */ senão return 1. return 0. if (EPar(num)) printf ("\n\nO numero e par.&num). Fim.

onde são chamadas as funções. Como manter a coerência? Asolução são os protótipos de funções. você declara uma função que irá usar. Vamos implementar agora um dos exemplosda seção anterior com algumas alteraç ões e com protótipos: ‡ PORTUGOL inteiro Square (inteiro a). fim. inteiro Square (inteiro a) início retorna (a*a). Isto é. Algoritmo Principal início inteiro num. fim. imprima ("O seu quadrado vale:". Repare que os protótipos têm umanítida semelhança com as declarações de variáveis. int main (){ int num. leia (num). main(). O compilador toma então conhecimento doformato daquela função antes de compilá-la. nada menos. return 0.h> int Square (int a). Muitasvezes teremos o nosso programa espalhado por vários arquivos. Isto é.func(a. retorna (0). ‡ µC¶ #include <stdio. nos exemplos apresentados. escrevemos as funções antes de escrevermos afunção principal. Ou seja. não poderemos nos dar ao luxo de escrever nesta ordem. Protótipos são nada mais. muitas vezes.num). Imagine-se na pele do compilador. as funções estão fisicamente antes da função principal main(). Um protótipotem o seguinte formato: tipo_de_retorno nome_da_função (declaração_de_parâmetros). imprima ("Entre com um numero: "). estaremos chamandofunçõe em s um arquivo que serão compiladas em outro arquivo. O código correto será então gerado. Foi por isto que as funções foram colocadas antes da função main(): quando ocompilador chegasse à função main() ele já teria compilado as funções e já saberia seusformatos. que declarações defunções. Isto foi feito por uma razão. num=Square(num). scanf ("%f".&num). } 39 . você teria que saber com antecedência quais são ostipos de retorno e quais são os parâmetros das funções para que você pudesse gerar o códigocorretamente. o nome-da-função e a declaração-de-parâmetros são os mesmosque você pretende usar quando realmente escrever a função. num). num=Square(num). /* Errado! */ 4. Mas. printf ("\n\nO seu quadrado vale: %f\n". printf ("Entre com um numero: "). onde o tipo-de-retorno. Se você fosse compilar a funçãomain(). Protótipos de Funções Até agora.b)=x. } int Square (int a){ return (a*a).

.. A característica que tornaas variáveis locais tão importantes é justamente a de serem exclusivas do bloco.. } func (.Observe que a função Square() está colocada depois do algoritmo principal.. . Mas nãoprecisaremos usá-la pois as variáveis declaradas dentro de um bloco já são consideradas locais. Estas são aquelas que sótêm validade dentro do bloco no qual são declaradas.... .y. } . por exemplo.x.x... Fim. e elas nãoapresentarão conflito entre elas. . Abaixo vemos um exemplo de variáveis locais: ‡ PORTUGOL funcao1 (. Eles ajudam a você também: usando protótipos. ‡ µC¶ func1 (.) { int abc. Só para lembrar: um bloco começa quando abrimos uma chave e termina quandofechamos a chave. .. 5.x. A palavra reservada do C auto serve para dizer que uma variável é local... mas o seuprotótipo está antes. para (.... Osprotótipos não só ajudam o compilador.) { real a..É que funções podem também retornar ponteiros sem qualquer problema.b. o que é uma grande ajuda! 5. Podemos terquantos blocos quisermos com uma variável local chamada x. ocompilador evita erros.) Início inteiro abc. não deixando que o programador use funções com os parâmetros erradose com o tipo de retorno errado.1. Variáveis locais O primeiro tipo de variáveis que veremos são as variáveis locais.) { int abc. Mas umcomando para(for) pode ter variáveis locais e que não serão conhecidas fora dali. Sem isto este programa não funcionaria corretamente. funcaq (.. Fim. Fim. Podemos declarar variáveis dentro dequalquer bloco. Usando protótipos você pode construir funções que retornam quaisquer tipos de variáveis bom ressaltar . 40 . Escopo de Variáveis O escopo é o conjunto de regras que determinam o uso e a validade de variáveis nasdiversas partes do programa.. Até agorasó tínhamos visto variáveis locais para funções completas..c. inteiro principal () Início inteiro a.) Início inteiro abc. A declaraçãode variáveis locais é a primeira coisa que devemos colocar num bloco..

..) { inteiro x. Vamos ver um exemplo no nosso pseudo-Código: inteiro z... } . são passadas apenas cópiasdas variáveis. Não há motivo para se preocupar com o escopo deles. Estes são declaradoscomo sendo as entradas de uma função.. As variáveis locais de cada uma delas não irãointerferir com as variáveis locais de outras funções.. Parâmetros formais O segundo tipo de variável que veremos são os parâmetros formais. pois quando o C passa parâmetros para uma função.Elas são conhecidas e podem ser alteradas por todas as funções do programa.11. .12.z..b. 3..c. os parâmetros formais existem independentemente das variáveis que forampassadas para a função. Isto quer dizer que só são conhecidas dentrodeste bloco e são desconhecidas no resto da função Principal main()). A variável x defunc1() é também completamente independente da variável x da função principal main(). fora de todas as funções do programa. Variáveis globais Variáveis globais são declaradas. pois esta alteração não terá efeito na variável que foi passada à função. Assim. Quando temos então... func1 (. ..y. } No exemplo acima as variáveis z e k são globais. Quando usarmos avariável ( a dentro do bloco para (for) estaremos usando a variável a local ao para(for) e não avariável a da função main(). Você pode também alterar o valor de umparâmetro formal. } No programa acima temos três funções... Isto é.. . ... } int main () { int a. } principal { inteiro count. Istotem sentido. Veja que func2() tem uma variável localchamada z.) { inteiro x.k. Eles tomam apenas uma cópia dos valores pa ssados para a função. Asvariáveis a.) { float a.. b e c são locais ao bloco para(for).. como já sabemos. 3. z=10. o comando z=10 quem recebe o valor de 10 é avariável local.. . não afetando o valor da variável global z.y. Elas ocupam memória o tempo todo (as locaissó ocupam memória enquanto estão sendo usadas) e tornam o programa mais difícil de serentendido e menos geral.y.. Quando umafunção tem uma variável local com o mesmo nome de uma variável global a função darápreferência à variável local.Evite ao máximo o uso de variáveis globais. em func2(). a variável abc de func1() não temnada a ver (e pode ser tratada independentemente) com a variável abc de func2(). } func2 (.. for (. 41 .x. Éfácil: o parâmetro formal é uma variável local da função.

imprima ("Entre com um numero: "). quando chamamos uma função os parâmetros formais dafunção copiam os valores dos parâmetros que são passados para a função. neste tipo de chamada. Isto quer dizer quenão são alterados os valores que os parâmetros têm fora da função. dentro da função. imprima ("O numero original e:".h> float sqr (float num). Outro tipo de passagem de parâmetros para uma função ocorre quando alterações nosparâmetros formais.&num). Veja o exemplo abaixo: Exemplo ‡ PORTUGOL real sqr (real num). Este tipo de chamada de função tem o nome de "chamada por referência". nós podemos declarar seus parâmetrosformais como sendo ponteiros. } real sqr (real num) { num=num*num. imprima ("O seu quadrado vale:".sq. } No exemplo acima o parâmetro formal num da função sqr() sofre alterações dentro dafunção. mas sim suas referências (a função usa as referências para alterar os valores dasvariáveis fora da função). O C só faz chamadas por valor. retorna num. scanf ("%f". Há entretanto. O C++ tem um recursoque permite ao programador fazer chamadas por referência. Este tipo de chamada defunção é denominado chamada por valor.6. sem termos que nos preocupar em estar alterando os valores dosparâm etros que foram passados para a função. porquepodemos querer mudar os valores dos parâmetros fora da função também. Passagem de parâmetros por valor e passagem por referência Já vimos que. Quando queremosalterar as variáveis que são passadas para uma função. na linguagem C. sq=sqr(num).sq. void main () { float num.num). um recurso deprogramação que podemos usar para simular uma chamada por referência. no C. } float sqr (float num) { num=num*num. printf ("\n\nO numero original e: %f\n". Isto é bom quando queremos usar os parâmetros formais àvontade dentro da função.sq). mas a variável num da função principal main() permanece inalterada: é uma chamada porvalor. O 42 . Os ponteiros são a "referência" que precisamos para poder alterara variável fora da função. return num. Mas isto também pode ser ruim às vezes. printf ("Entre com um numero: "). int main () { real num. } ‡ Em C #include <stdio. leia (num). alteram os valores dos parâmetros que foram passadospara a função. printf ("O seu quadrado vale: %f\n". Estenome vem do fato de que. sq=sqr(num).num).sq). não se passa para a função os valores dasvariáveis. Isto ocorre porque são passados para a função apenasos valores dos parâmetros e não os próprios parâmetros.

Assim. Swap (&num1. obteremos.num2). no processo de refinamentossucessivos. num2=200. ao definirmos as fases do nosso algoritmo. Por exemplo. um procedimento poderá conter outros procedimentos (e também funções)aninhados. Fim. umalgoritmo estruturado. Da mesma forma. o fatorial de 3 será calculado a partir da chamada à função pelo comando x =fat(3) que retornará em fat o valor 6. com módulos hierarquicamente subordinados e muito menos suscetível aerros de lógica na fase de codificação do programa.quem é este conteúdo? Nada mais que os valores armazenados em num1 e num2. Diz-se então que oprocedimento ou função é recursivo.num2.int *b). void main (void) { int num1. Atravésdo operador * estamos acessando o conteúdo apontado pelos ponteiros e modificando-o.&num2). Veja umexemplo: #include <stdio. Mas. *a=*b. Senão fat=n*fat(n-1). teremos delembrar de colocar um&na frente das variáveis que estivermos passando para a função.único inconveniente é que. Por exemplo.num1. Fim Se. ou seja:     inteiro fat(inteiro n) Início Se n==0 Então fat=1. num1=100. comumente chamado de Módulo principal ou programa principal ou ainda algoritmoprincipal. } void Swap (int *a. } Não é muito difícil. *b=temp.int *b) { int temp. 43 . Estes endereços são copiados nos ponteiros a e b. ao fim do processo de criação. quando usarmos a função. FUNÇÕES RECURSIVAS Existem casos em que um procedimento ou função chama a si próprio. O que está acontecendo é que passamos para a função Swap oendereço das variáveis num1 e num2. 8.h> void Swap (int *a. portanto. temp=*a. ESTRUTURAÇÃO DOS MÓDULOS DE UM ALGORITMO Um procedimento nada mais é que um algoritmo hierarquicamente subordinado a um outroalgoritmo.estão sendo modificados! 7. se transformarmos as mesmas em procedimentos e os refinamentos decada procedimento em outros procedimentos. o fatorial de um número n pode ser definidorecursivamente. que. printf ("\n\nEles agora valem %d %d\n".

Um fator que influencia em muito nessa rapidez é a disposição dos elementos no vetor. Já se estão ordenados. desde que sofram pequenos ajustes. entretanto. ou0 se não o foi} 2. Procedimento PESQSEQ (<tipo básico>VET). A diferença entre um e outro algoritmo de busca. TOTELEM/2 testes. que comosugere o nome. ALGORITMOS DE PESQUISA Para fazermos qualquer pesquisa em vetor (ou matriz) precisamos de quatro parâmetros: a) O vetor no qual realizaremos a pesquisa b) O número de elementos desse vetor que devem ser pesquisados.Portanto para um elemento inexistente teremos de fazer TOTELEM testes e para um elementoexistente faremos. 44 . Nanossa disciplina. poderemos concluir pela sua nãoexistência. ao encontrarmos umelemento maior (ou menor) que o elemento procurado. com certeza. vamos defini-los como Procedimentos de um Algoritmo Principal hipotético. a existência ou não existência de um elementoprocurado. uma solução que certamente nosvem à mente é comparar o elemento que procuramos com cada elemento do vetor. 2. que também podem ser utilizados em matrizes. Seestão desordenados. em um vetor. "Pesquisam". são utilizados paraordenar os elementos de um vetor de forma a facilitar a pesquisa posterior de um elemento. trataremos apenas os algoritmos de pesquisa e ordenação emvetores. Os algoritmos de ordenação ou classificação ("Sort"). só tem 700 carregados. noconjunto de elementos existentes. com osseguintes argumentos: Declarações: Const MAXELEM = 10000 {Número máximo de elementos do vetor. por sua vez. Existem algoritmos para pesquisa e ordenação para as mais variadas estruturas de dados. apenas para limitar o tamanho dovetor} <Tipo básico> Nome do vetor[1:MAXELEM] inteiro TOTELEM {Corresponde ao parâmetro b) Total de elementos a ser pesquisado} <Tipo básico> ELEMPROC {Corresponde ao Parâmetro c) Elemento procurado} Inteiro POS {Corresponde ao Parâmetro d) Posição em VET onde ELEMPROC foi encontrado. PESQUISA SEQÜENCIAL SIMPLES Na pesquisa seqüencial simples. Início Inteiro TOTELEM. Como os algoritmos de pesquisa poderão ser utilizados muitas vezes na solução de diferentesproblemas. seguramente teremos que verificar do primeiro ao último elemento paraconcluir. que o elemento não existe. POS. até queencontremos ou até que concluamos que o elemento procurado não está no vetor. (Lembre que muitasvezes um vetor -se de 1000 elementos. fica por conta da rapidez com que"varremos" o vetor para encontrar o elemento ou para concluirmos que ele não existe. J. na média. teremos de comparar um a um o ELEMPROC com cada elemento de VET.1.ALGORITMOS DE PESQUISA E ORDENAÇÃO 1. Esta é a base do raciocínio dos algoritmos de pesquisa ou busca ("Search"). como o vetor a ser pesquisado não está ordenado peloelemento procurado. <Tipo básico> ELEMPROC. INTRODUÇÃO Quando temos um Vetor (ou Matriz) com muitos elementos e precisamos descobrir se umdeterminado elemento que procuramos se encontra no vetor. c) O elemento procurado d) Um índice que vai ser preenchido com a posição onde o elemento foi encontrado ou retornarácom 0 (zero) caso o elemento não exista. e podemos evitar tratamento de 300elementos com "lixo").

Fim Enquanto. melhor que o anterior para o caso de elemento inexistente. Fim. processaremos a ocorrência dentro do procedimento (apósPOS = J). Devido a isso o número de testes para elementos existentes ou inexistentes será. Fim. Acumula. PESQUISA SEQÜENCIAL ORDENADA Para se utilizar a Pesquisa Seqüencial Ordenada. varrer o vetor até o fim (Elimina-se do laço o testePOS = =0). com certeza. mas teremos de guardar em um vetor todas as posições onde o elemento foiencontrado ou. /*Imprime. Com isso. de TOTELEM/2. o problema sesimplifica. <Tipo básico>ELEMPROC). Fim Se. /*Executa a Pesquisa da primeira ocorrência de ELEMPROC em VET eretorna em POS o índice onde foi encontrada ou 0 se não existe*/ Enquanto (Pos==0) e (J<=TOTELEM) Faça Se VET[J]==ELEMPROC Então POS = J. Fim Se. obrigatoriamente. Senão Imprima(" O elemento não está na lista"). Inteiro TOTELEM. Procedimento PESQORD (<tipo básico> VET. e. Se precisamos determinar todas as ocorrências de um elemento em um vetor. por isso. Fim. 3.13. J = 1.na média. inteiro POS. Fim Enquanto. /*Executa a Pesquisa da primeira ocorrência de ELEMPROC em VET eretorna em POS o índice onde foi encontrada ou 0 se não existe. o vetor de busca tem de estar ordenadopelo campo chave da pesquisa. Início Inteiro J.Leia(ELEMPROC). poderemos abandonar a busca pois. pois teremos que. ao se encontrar no vetor. O trecho de procedimento abaixo exemplifica: ‡ Pesquisa Sequencial com Repetição Trata todas as ocorrências de um elemento procurado no vetor Início POS = 0. não mais oencontraremos. etc. Senão J=J+1. o que é mais usual. Senão J = J+1.*/ Fim Se. J = J + 1. um elemento maior do que oelemento procurado. Enquanto J<=TOTELEM e POS==0 Faça Se VET[J]>=ELEMPROC Então Se VET[J] == ELEMPROC Então POS=J. Fim Se. 45 . Fim Enquanto. Enquanto J < = TOTELEM Faça Se VET[J] == ELEMPROC Então POS = J. /*Indicará ao algoritmo chamador a não ocorrência*/ J = 1. VETtem de estar ordenado pelo campo chave*/ POS = 0. Abandone.

abandone. imprimir a posição onde foi encontrada a chave. POS.desde que o vetor já esteja ordenado. Assim. VETtem de estar ordenado pelo campo chave*/ Inteiro: PRI. Neste exemplo.Exercício resolvido . Nesta pesquisa procuramos o elemento K dividindo o vetorem duas partes e testando em qual das duas ele deveria estar. Seguemse comparações sucessivas ao elemento domeio do segmento onde pode estar o elemento procur do. eliminando-seassim metade do mesmo para a busca. Fim Enquanto. leia (K).³NÃO ESTÁ NO VETOR´). ACHOU = verdadeiro. MED {primeiro. ACHOU = falso. inteiro I. ULT. PESQUISA BINÁRIA A pesquisa binária é um método que também só se aplica a vetores previamente ordenados. ela é muito recomendada para vetores grandes. ULT = TOTELEM.metade do vetor é eliminada.Dado um vetor A de 128 elementos. a cada a comparação feita. início inteiro A[1:128] inteiro. e assim sucessivamente: K K k 3. Procedimento PESQBIN (V: VET. fim se.A sua grande vantagem é a rapidez e. K. PRI = 1. Fim Se. a pesquisa a um elemento ficará mais eficiente se utilizarmos a pesquisa binária. Fim Se. fim se.Neste método. lógico ACHOU. por isso. 46 . leia (A).14. fim para . Inteiro: TOTELEM. Se existir.<Tipo básico> :ELEMPROC) Início /*Executa a Pesquisa binária da primeira ocorrência da ELEMPROC em VETe retorna em POS se o índice foi encontrado ou 0 se não existe. O vetor A e chave K são lidos de cartões. para I de 1 até 128 passo 1 faça se A[I]==K então imprima (K. Senão Se VET[MED] > ELEMPROC Então /*O ELEMPROC está na primeira metade*/ ULT = MED . Senão /*O ELEMPROC está na Segunda metade*/ PRI = MED + 1. fim.1. a primeira comparação é feita com o elemento do meio do vetor. I).K. Enquanto (PRI < = ULT) e (POS == 0) Faça MED = (PRI + ULT)/2 /*quociente da divisão inteira*/ Se VET[MED] == ELEMPROC Então POS = MED. se não. ³ Está na posição´ . último e elemento do meio} POS = 0. se não ACHOU então imprima (³A CHAVE´. Procedendo da mesma forma paraa parte provável. verificar se existe um elemento igual a K(chave) no vetor. Fim. imprimir ³chave K não encontrada´ .

com os seguintes argumentos: Declarações Constante MAXELEM = 1000. a menor carta dentre as remanescentes e se a coloca sobre a primeira. com os elementosremanescentes.K). /*Número máximo de elementos do vetor. b) O número de elementos desse vetor que devem ser ordenados. FIM=128. início /*pesquisa binária*/ inteiro COMEÇO. se comparadoscom os de Pesquisa. Na nossa disciplina. senão imprima (³ Está na posição:´ . seleciona-se. por isso o uso de métodos elementares e demorados não é tãoproblemático como nas pesquisas. COMEÇO =1. (Novamente para evitartratamento de "lixo") Da mesma forma que os algoritmos de pesquisa. /*indicador do último elemento da parte do vetor aconsiderar*/ MEIO. 3.2. MEIO). veremos três algoritmos paraclassificação interna de vetores. MÉTODO DE SELEÇÃO DIRETA Este é um dos mais simples métodos existentes.1. repete-se o processo até que todo o vetor esteja ordenado. Procedimento SELEÇÃO_DIRETA (V: VET. Inteiro: TOTELEM) Início /*Faz a ordenação crescente de TOTELEM elementos de um vetor VET*/ 47 . repita MEIO= (COMEÇO+FIM)/2.2 utilizando-se pesquisa binária. Primeiro descobre-se o menorelemento do vetor e troca-se com o primeiro elemento. /*indicador do elemento do meio da parte do vetorConsiderada*/ K. /*elemento procurado*/ Inteiro A[1:128].sucessivamente. os algoritmos de ordenação poderão serutilizados muitas vezes na solução de diferentes problemas e também vamos defini-los comoum Procedimento do mesmo Algoritmo Principal. Os algoritmos de ordenação são utilizadosnormalmente uma vez em cada execução do programa./*Corresponde ao Parâmetro a) o vetor a serordenado*/ Inteiro TOTLEM /*Corresponde ao Parâmetro b)*/ 3. hipotético. Um exemplobastante elucidativo é o de algumas cartas de baralho na mesa viradas para cima (à vista). Depois. ALGORITMOS DE ORDENAÇÃO Como já foi dito. A partir daí. /*indicador do primeiro elemento da parte do vetor aconsiderar*/ FIM. fim se até A[MEIO]==K ou COMEÇO >FIM. se K<A[MEIO] então FIM=MEIO-1 senão COMEÇO=MEIO+1. o propósito dos algoritmos de ordenação é o de facilitar e acelerar abusca posterior de um elemento no vetor.Seleciona-se a menor (ou maior) para colocá-la na primeira posição. que têm tempo de execução proporcional ao quadrado donúmero de elementos a serem ordenados: y Ordenação por seleção (método seleção direta) y Ordenação por inserção (método inserção direta) y Ordenação por troca (método da bolha) Para fazermos qualquer ordenação em vetor (ou matriz) precisaremos de dois parâmetros: a) O vetor que será ordenado.‡ Exercício 1 do item 7. apenas limitaro tamanho do vetor*/ <tipo básico> VET[1: MAXELEM]. leia (A. fim se fim. se A[MEIO]!=K então imprima (³ Não existe o elemento´). ou poucas vezes.

Fim Enquanto. Fim. J = J . J. Alémdisso o método é mais complicado de entender que o de seleção direta. Segue exemplode uma -se implementação de algoritmo de pesquisa utilizando-se esse método.1) Faça Para J de 1 até (TOTELEM .que leremos o arquivo e já o armazenaremos na memória ordenadamente. 3.1) Faça MIN K. VET[K] = AUX. MÉTODO DE INSERÇÃO DIRETA Nesse método. Dos trêseste é o menos eficiente. VET[J + 1] =AUX.Este método pode ser utilizado. MÉTODO DA BOLHA Este método caracteriza-se por efetuar a comparação sucessiva de paressubseq uentes de elementos. Fim.P) Faça Se VET[J + 1]<VET[J] Então AUX = VET[J]. Inteiro : TOTELEM) Início /*Faz a ordenação de TOTELEM elementos de um vetor VET*/ <Tipo básico> AUX. Fim Se. Para J de (K + 1) até TOTELEM Faça Se VET[J] < VET [MIN] Então MIN = J. Fim Para. Senão Abandone. I. com vantagem. Inteiro: TOTELEM) Início /*Faz o ordenamento de TOTELEM elementos de um valor VET*/ Inteiro P. Inteiro K.2. AUX = VET[MIN]. Voltando-se ao exemplo dobaralho é como se agora as cartas sobre a mesa estão com a face para baixo e cada carta éarrumada ordenadamente na mão em relação as que já estão na mão. Enquanto (J > 0) Faça Se AUX < VET[J] Então VET [J + 1] = VET [J]. /*contador de passadas e índice*/ <Tipo básico> AUX. VET[MIN] = VET[K]. Fim Para. Fim Se.3. VET [J + 1] = AUX.1. Bastam leves modificações no algoritmo. considera-se que um elemento do vetor (o primeiro) está ordenado E"insere-se" os demais considerando os anteriores já ordenados. Procedimento BOLHACRESCENTE (V: VET. se estiverem fora de ordem. Fim Para. por exemplo. /*índices*/ <Tipo Básico> AUX. Procedimento INSERÇÃO_DIRETA (V: VET. /*Troca dos elementos*/ VET[J] =VET[J + 1]. já que cada troca de elementos exige três comandos e o número detrocas é (TOTELEM-1) vezes maior que no método de seleção direta. Para K de 1 até (TOTELEM . /*Índice*/ Para K de 2 até TOTELEM Faça AUX = VET[K]. 48 . J.J. Fim Se.1. J = K . 3. trocando-os de posição. quando se está lendo elementos deum arquivo para serem posteriormente ordenados.Inteiro MIN. Para P de 1 até (TOTELEM .

fim se. /* indicador de mais alto elemento fora de ordem*/ LSUP. Fim. /*aponta para última posição trocada*/ fim enquanto. VET[J+1] = AUX. para J de 1 até LSUP-1 faça se VET[J]>VET[J+1] então /* troca elemento j com j+1*/ AUX = VET[J]. /* auxiliar para troca de elementos*/ BOLHA. .Exercício Resolvido 1) Classificar um vetor numérico VET de 6 elementos em ordem crescente: início /*método da bolha*/ inteiro VET[1:6] inteiro: AUX. /*indicador do elemento do vetor*/ leia (VET). 49 . BOLHA = J. Fim Para. VET[J] = VET[J+1].Fim Para. enquanto LSUP>1 faça BOLHA = 0. fim para LSUP = BOLHA. /*indicador do tamanho do vetor a ser pesquisado. fim. sendo o valor inicial igual a 6*/ J. imprima (VET). LSUP = 6.

You're Reading a Free Preview

Descarregar
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->