Índice€¦  · Web viewAlém disso, o Fluxograma ou Diagrama de Blocos constituie-se numa forma...

54
Universidade do Contestado Curso de Sistemas de Informação Disciplina de Lógica de Programação Lógica para o Desenvolvimento de Algoritmos e Programas de Computador Prof. Zorzo, Carlos Alberto

Transcript of Índice€¦  · Web viewAlém disso, o Fluxograma ou Diagrama de Blocos constituie-se numa forma...

Universidade do ContestadoCurso de Sistemas de Informação

Disciplina de Lógica de Programação

Lógica para o Desenvolvimento de

Algoritmos e Programas de Computador

Prof. Zorzo, Carlos Alberto

Caçador, Junho/2009.

Lógica para o Desenvolvimento de

Algoritmos e Programas de Computador

Tal apostila não tem a presunção de substituir qualquerreferência indicada na bibliografia da disciplina.

Ela é tão somente uma compilação das notas de aula do professor, servindo a mesma como guia e material de apoio.

Material mais completo e abrangente está indicado na bibliografia

constante no Plano de Ensino da Disciplina em anexo.

1. Introdução2. Lógica de Programação:

2.1 Lógica2.2 Seqüência Lógica2.3 Instruções

3. Algoritmos:3.1 Conceito3.2. Exemplos3.3 Formas de Representação:

3.3.1 Descrição Narrativa3.3.2 Fluxograma ou Diagrama de Blocos3.3.3 Pseudocódigo

3.4 Método de Construção3.5 Exercícios

4. Construção de Algoritmos em Pseudocódigo:4.1 Conceitos e Estruturas básicas:

4.1.1 Estrutura de um algoritmo4.1.2 Tipos de Dados4.1.3 Variáveis4.1.4 Constantes4.1.5 Expressões4.1.6 Instruções/Comandos Primitivos 4.1.7 Exercícios

4.2 Estruturas de Seleção:4.2.1 Estrutura de Seleção Simples 4.2.2 Estrutura de Seleção Composta4.2.3 Estrutura de Seleção Encadeada4.2.4 Estrutura de Seleção de Múltipla Escolha4.2.5 Exercícios

4.3 Estruturas de Repetição:4.3.1 Estrutura de Repetição com Variável de Controle4.3.2 Estrutura de Repetição com Teste no Início4.3.3 Estrutura de Repetição com Teste no Final4.3.4 Exercícios

4.4 Tipos Estruturados de Dados:4.4.1 Vetores4.4.2 Matrizes4.4.3 Exercícios

4.5 Subprogramação:4.5.1 Procedimentos4.5.2 Funções4.5.3 Parâmetros e Escopo de Variáveis4.5.4 Exercícios

4.6 Recursividade:4.7 Alocação Dinâmica de Memória :4.8 Arquivos de Dados:

4.8.1 Arquivos Tipo Texto4.8.2 Arquivos Tipo Registro

4.9 Modularização e Reusabilidade (Units) :5. Anexos

5.1 Plano de Ensino da Disciplina

1. Introdução:

Para que os computadores tenha alguma utilidade para os seres humanos, eles devem ser programados para a realização de tarefas específicas. Desta forma, para que um computador possa ser usado como máquina de automatização de tarefas o mesmo precisa ser alimentado com orientações claras e precisas de como resolver determinada tarefa. Este conjnto de orientações claras e precisas fornecidas ao computador em uma linguagem por ele intelegível é conhecido como um “Programa de Computador” e a área da Ciência da Computação que que trata do estudo e desenvolvimento de metodologias e técncias para a construção de programas, bem como estudo e desenvolvimento de linguagens para tal finalidade, é denominada de Programação de Computadores. Por outro lado, o desenvolvimento de programas de computador normalmente está baseado em uma lógica que, sem se preocupar com uma linguagem de programação específica, especifica através de um formalismo claro e preciso as operações a serem desenvolvidas pelo computador na automatização de uma tarefa. Tal apostila tem por objetivo introduzir os conceitos básicos de um formalismo de especificação de lógica de programação de computadores utilizando um pseudocódigo (não entendível diretamente pelo computador) através da metodologia de programação estruturada.

2. Lógica de Programação:

2.1 Lógica:

A lógica de programação é necessária para as pessoas que desejam trabalhar com o desenvolvimento de sistemas e programas de computador e permite definir as instruções que serão executadas pelo computador dentro de uma seqüência lógica. Desta forma, pode-se definir a lógica de programação como a técnica de encadear pensamentos para atingir determinado objetivo.

2.2 Seqüência Lógica:

Estes pensamentos devem ser descritos como um seqüência de instruções ou passos que devem ser seguidos para se cumprir uma determinada tarefa. Desta forma, uma seqüência lógica pode ser entendida como um conjunto de passos que devem ser seguidos até se atingir um objetivo ou a solução de um problema.

2.3 Instruções:

Em informática uma instrução é uma informação que indica ao computador uma ação elementar a executar. Deve-se ressaltar neste ponto, que uma ordem ou ação isolada normalmente não permite a especificação de todas as instruções para se atingir um objetivo ou realizar uma tarefa completa sendo, para isto, necessário um conjunto de instruções colocadas em uma certa seqüencia lógica. Por exemplo, se quisermos fazer um omelete de batatas, precisaremos colocar em prática uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas, etc, etc. É evidente também que essas instruções devem ser executadas em uma ordem adequada (não se pode descascar as batatas depois de fritá-las).

Dessa maneira, uma instrução tomada isoladamente e em separado não tem muito sentido e, para obtermos o resultado desejado, normalmente precisamos colocar em prática o conjunto de todas as instruções na ordem correta.

Convém ressaltar também, que este conjunto de instruções, quando especificado em uma linguagem de programação é entendido como um Programa de Computador, ao passo que quando especificado através de um formalismo para especificação de lógica de programação, sem estar atrelado a uma linguagem de programação específica, é entendido como um Algoritmo. Em suma, os programas de computadores nada mais são do que algoritmos escritos numa linguagem específica de programação de computadores como Pascal, C, Delphi, Java e Visual Basic entre outras e que são interpretados e executados por um computador.

3. Algoritmos:

3.1 Conceito:

Um algoritmo é, formalmente, uma seqüência finita de passos que levam a execução de uma tarefa, ou seja, a atingir um objetivo. Nesta pequena definição de algoritmo deve-se notar a existência de três idéias básicas:

1. Seqüência: uma ordem de execução das instruções;2. Finita: a seqüência de passos a serem executados deve ser finita; e 3. Objetivo: um algoritmo é desenvolvido para se atingir um determinado

objetivo.

Além disso, um algoritmo deve possuir garantia de repetibilidade, ou seja, toda ver que ele for executado, a partir dos mesmos dados, deverá produzir o mesmo resultado.

De forma genérica, os algoritmos não são específicos da área da Ciência da Computação e pode-se pensar em algoritmos como uma receita de bolo, instruções para se chegar à Universidade, orientações passo a passo para se

ligar um vídeo cassete, etc. Até mesmo as coisas mais simples, podem ser descritas por seqüências lógicas, como por exemplo chupar uma bala (pegar a bala, retirar o papel, colocar a bala na boca, chupar a bala enquanto ela não terminar, jogar o papel no lixo). Qual é o problema com este pequeno algoritmo de 5 passos?

Como um algoritmo é a solução para um problema especificado através de uma seqüência lógica e geralmente existem várias soluções possíveis para um problema, um algoritmo é um possível caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos.

Finalmente, pode-se dizer que o aprendizado de algoritmos não se consegue a não ser através de muitos exercícios e, em suma:

Algoritmos não se aprende: Copiando Algoritmos Estudando Algoritmos

Algoritmos só se aprendem: Construindo Algoritmos Testando Algoritmos

3.2. Exemplos:

Alguns exemplos de algoritmos podem ser vistos abaixo:

Receita de Bolo:Misturar os ingredientesUntar a forma com manteigaDespejar a mistura no fornoLevar a forma ao fornoDeixar assar durante 30 minutosRetirar do fornoDeixar esfriar

Trocar Pneu Furado de um carro:Afrouxar ligeiramente as porcasSuspender o carroRetirar as porcas e o pneu furadoColocar o pneu reservaApertar as porcasAbaixar o carroDar o aperto final nas porcas

Tomar Banho:Entrar no banheiro e tirar a roupaAbrir a torneira do chuveiroEntrar na águaEnsaboar-seSair da água

Fechar a torneiraEnxugar-seVestir-se

Como um leitor atento, tente identificar as diferenças entre os dois algoritmos abaixo que tem por objetivo “lavar o cabelo”?

Algoritmo 1 Algoritmo 2Molhar o cabeloColocar xampúMassagearEnxaguarSecar o cablo

Abrir a torneira do chuveiroEntrar na águaMolhar o cabeloAbrir o xampúColocar um pouco na mãoLevar à cabeçaMassagearEnxaguarSair da águaFechar o chuveiroSecar o cabelo

Pode-se notar que os dois algoritmos abaixo atendem aos requisitos de definição de um algoritmo: são seqüências, são finitos e possuem um objetivo. A diferença básica entre os dois es tá no seu nível de detalhamento ou abstração. Em suma, o segundo algoritmo é muito mais detalhado que o primeiro, fornecendo assim, orientações bem mais precisas a quem for executar o algoritmo. Deve-se ter em mente que o desenvolvimento dos algoritmos deve-se dar num nível de detalhamento mínimo que permita às pessoas executá-los para atingir seus objetivos.

3.3 Formas de Representação:

Como visto, os algoritmos são representações formais do raciocínio a ser seguido para a automatização de uma tarefa e, para tanto, existem formalismos que devem ser seguidos para a sua especificação. Os principais formalismos utilizados para se especificar algoritmos são: “Descrição Narrativa”, “Fluxograma” ou “Diagrama de Blocos” e “PseudoCódigo”.

3.3.1 Descrição Narrativa:

Esta forma de especificação de algoritmos é dada em linguagem natural estando, portanto, impregnada com problemas de má interpretação, ambiguidades e imprecisões. Com exemplo, tem-se o algoritmo abaixo para “trocar o pneu furado de um carro”:

Afrouxar ligeiramente os parafusos (*)Suspender o carroRetirar os parafusos e o pneuColocar o pneu reservaApertar os parafusosAbaixar o carro

Dar o aperto final nos parafusos

No exemplo acima, pede-se ao leitor qual a sua interpretação para a instrução “Afrouxar ligeiramente os parafusos”. Nota-se, neste caso, que a execução desta instrução dá margem à várias interpretações. O que significa para o leitor a palavra “ligeiramente”? Para fins de uma boa execução do algoritmo abaixo, tal instrução deveria ser especificada de forma mais precisa como, por exemplo, “Afrouxar os parafusos girando-os 30° graus no sentido anti-horário”. Em função destes problemas de má interpretação, ambiguidades e imprecisões, próprios da linguagem natural, outros formalismos são mais apropriados para a especificação de algoritmos do que a descrição narrativa em linguagem natural.

3.3.2 Fluxograma ou Diagrama de Blocos:

O Fluxograma ou Diagrama de Blocos é uma das formas mais populares para a especificação de algoritmos, sendo uma forma padronizada e eficaz para representar os passos lógicos de um determinado processamento através de formas geométricas diferentes que especificam ações diferentes. Com ele define-se uma seqüência de símbolos com significados específicos, facilitando, desta forma, a visualização dos passos de um processamento. Além disso, o Fluxograma ou Diagrama de Blocos constituie-se numa forma mais precisa do que a Descrição Narrativa para especificar algoritmos.

3.3.3 Pseudocódigo:

Algoritmos também podem ser descritos através de um formalismo chamado Pseudocódigo, sendo conhecido também por PseudoLinguagem, Português Estruturado ou Portugol. Este nome, pseudocódigo, é uma alusão à posterior necessidade de implementação do mesmo em uma linguagem de programação específica, uma vez que o mesmo não é executável diretamente pelo computador. Desta forma, algoritmos em pseudocódigo (ou qualquer um dos outros formalismos anteriormente citados) são independentes das linguagens de programação, sendo intermediários entre a linguagem falada e uma linguagem de programação. O pseudocódigo é uma representação genérica e bem aceita para a especificação de algoritmos e permite uma tradução praticamente direta para programas de computador na Linguagem Pascal ou C (linguagens muito utilizadas para o ensino de programação).

Um exemplo de algoritmo em pseudocódigo pode ser visto abaixo:

ALGORITMO médiaVAR

n1, n2, n3, média: REALINÍCIO

LEIA (n1,n2,n3)média (n1 + n2 + n3 ) / 3SE média >= 7 ENTÃO

ESCREVA ("Aluno Aprovado")SENÃO

ESCREVA ("Aluno Reprovado")

FIM SEFIM

Dentro do escopo desta apostila, o pseudocódigo foi escolhido como formalismo para a especificação de algoritmos por não possuir os problemas inerentes do formalismo de Descrição Narrativa; ser padronizado e intelegível tanto sintática quanto semanticamente; permitir a elaboração de algoritmos estruturados; ser simples e enxuto e, a despeito disto, permitir a representação clara e precisa da lógica para a resolução de problemas, bem como por facilitar a codificação dos algoritmos nas linguagens de programação Pascal e C.

3.4 Método de Construção:

Como visto, um algoritmo é uma seqüência lógica de instruções que são executadas para se atingir um objetivo. A construção de um algoritmo, consiste basicamente, na especificação de instruções para as fases de:

1. Entrada: corresponde a fornecer ao algoritmo os dados básicos necessários para a resolução do problema (normalmente estes dados serão usados pelo algoritmo para realizar os cálculos e comparações necessárias na etapa de processamento);

2. Saída: corresponde à geração dos resultados do algoritmo para o usuário; e

3. Processamento: é a etapa intermediária do algoritmo onde os dados de entrada, normalmente fornecidos pelo usuário, são transformados nos dados de saída.

Em suma, pode-se sugerir o algoritmo abaixo como um método inicial para a especificação de algoritmos:

(1) Ler atentamente o enunciado;(2) Retirar do enunciado a relação dos dados de entrada;(3) Retirar do enunciado a relação dos dados de saída;(4) Determinar o processamento a ser feito para transformar as

entradas em saídas;(5) Construir o Algoritmo usando o formalismo;(6) Executar o Algoritmo ( Teste de Mesa ).

Após o desenvolvimento de um algoritmo, o mesmo deverá sempre ser testado. Este teste é chamado de TESTE DE MESA e implica em seguir e executar uma a uma as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correto ou não.

3.5 Exercícios:

1) Identifique as fases de um algoritmo para resolver a equação (Y=X2+2X+10), bem como as instruções em cada uma delas (exercício resolvido).

Entradas: valor de XSaídas: valor de YProcessamento:

(1) Elevar X ao quadrado(2) Multiplicar X por 2(3) Somar o resultado de X elevado ao quadrado com o resultado de

X multiplicado por 2(4) Somar o resultado da operação 3 com o valor 10

2) Identifique as etapas, bem como suas instruções, de um algoritmo que calcule o valor da mensalidade que um aluno deve pagar. Para tanto, o usuário possui como informações o nome do aluno, número de créditos que ele faz e o valor unitário do crédito. O algoritmo deverá imprimir o nome do aluno e o valor da mensalidade que este deve pagar.

3) Quais instruções são necessárias para construir um algoritmo que calcule a média aritmética de um aluno com 5 notas.

4) Identifique as instruções para construir um algoritmo que calcule a média ponderada de um aluno com 3 notas. A fórmula de cálculo com os respectivos pesos é a seguinte: média = ( 3*nota1 + 4*nota2 + 2*nota3 ) / 9. O usuário possui como dados o nome do aluno e suas 3 notas e gostaria de ter como resultado final o nome e a média final do aluno.

5) O preço de um automóvel é calculado pela soma do preço de fábrica com o preço dos impostos (45% do preço de fábrica) e com a porcentagem dos vendedores (28% do preço de fábrica). Identifique as instruções de um algoritmo que forneça ao usuário o nome do automóvel e seu preço final.

4. Construção de Algoritmos em Pseudocódigo:

4.1 Conceitos e Estruturas básicas:

4.1.1 Estrutura de um algoritmo:

Na especificação de um algoritmo em Pseudocódigo é necessário o estabelecimento de uma estrutura a fim de organizar o mesmo em seções. Os algoritmos desenvolvidos em pseudocódigo possuem a seguinte estrutura:

ALGORTIMO <nome do algoritmo><área de declarações>

INÍCIO<área de instruções>

FIM

Dentro desta estrutura tem-se as seguintes definições e espaços para códigos específicos:

ALGORTIMO: palavra reservada para indicar o início de um algoritmo;

nome do algoritmo: é somente um nome simbólico dado ao algoritmo com a finalidade de distingui-lo dos demais;

área de declarações: espaço designado para a declaração das informações (variáveis, constantes, tipos de dados do usuário, procedimentos e funções) que serão usadas na seqüência lógica de instruções do algoritmo;

INÍCIO e FIM: palavras reservadas que delimitam o início e o fim da seqüência lógica de instruções ou do algoritmo; e

área de instruções: espaço designado para a especificação da seqüência lógica de instruções do algoritmo que será executada para se atingir seu objetivo.

4.1.2 Tipos de Dados:

O computador, através de um algoritmo, manipula um conjunto de informações através de uma seqüência lógica de instruções com a finalidade de atingir um objetivo. Desta forma, pode-se dizer que a matéria prima com a qual o computador trabalha são as informações que estão na sua memória (local de armazenamento). Estas informações, por sua vez, podem ser de dois tipos:

Instruções: são aquelas informações que comandam o funcionamento do computador e determinam como os dados devem ser tratados; e

Dados: são aquelas informações processadas pelas instruções do computador.

Como exemplo, poderíamos pensar em uma instrução de soma que opera uma adição sobre dois valores ou dados. Em suma, pode-se dizer então que um algoritmo nada mais é do que a especificação de uma seqüência lógica de instruções que manipulam dados a fim de atingir um determinado objetivo.

O formalismo para especificação de lógica de programação chamado Pseudocódigo, adotado nesta apostila, permite ao computador manipular três tipos diferentes de dados:

Numéricos: são aqueles dados representados por números e que serão utilizados pelas instruções do algoritmo para cálculos. Estes, podem ser divididos em Dados Numéricos Inteiros (armazenam dados que não possuem componente decimal) e Dados Numéricos Reais (armazenam dados que possuem componente decimal);

Alfanuméricos: são também conhecidos por dados caracter ou string e são aqueles dados representados por um conjunto de caracteres alfanuméricos e/ou especiais. Estes dados possuem um comprimento

dado pelo número de caracteres nele contido e, em algoritmos, são delimitados por aspas duplas ( “<dado alfanumérico>”); e

Lógicos: são também conhecidos por dados booleanos e podem representar somente dois tipos de informação: Verdadeiro ou Falso.

Os dados manipulados por um algoritmo em pseudocódigo devem ser classificados como sendo de um dos tipos definidos acima (ou de outros tipos que serão explicados posteriormente), sendo tal operação de classificação, feita no momento da declaração de variáveis (posições de memória que armazenarão os dados).

4.1.3 Variáveis:

Todos as informações manipuladas pelo computador devem estar em um local onde o mesmo possa acessá-las. Tal local, utilizado pelo computador para armezenar tanto instruções a serem executadas quanto dados, é chamado de memória (mais especificamente memória primária ou RAM – existem outros tipos de memória que não fazem parte do escopo desta apostila). Para fins únicos de programação de computadores vamos nos ater também somente ao armazenamento e manipulação de dados em memória (a manipulação e tratamento de instruções em memória é um tópico melhor abordado em disciplinas como Compiladores).

A memória do computador pode ser entendida como um conjunto ordenado de caixas ou células, todas de igual tamanho e cada uma delas identificada por um endereço distinto e que, num dado momento, armazenam algum tipo de dado que poderá ser manipulado pelo computador através da seqüência lógica de instruções especificadas pelo algoritmo. Por outro lado, dados diferentes podem ter tamanhos diferentes (um dado numérico real ocupa mais espaço que um dado numérico inteiro). Desta forma, um dado pode ocupar mais de uma célula de memória, dependendo do seu tipo. Assim, para que o computador possa acessar um dado na memória, ele deverá saber o seu endereço de início (endereço da célula de início) e o seu tamanho, recuperando assim, a partir do endereço inicial de memória, a quantidade de total células usadas para armenar aquele dado. Desta forma, seria necessário que, em nossos programas, especificassemos os endereços iniciais de onde estão armazenados cada um dos dados que o computador poderia manipular. O endereçamento de posições de memória através de números hexadecimais é perfeitamente compreendido pela máquina, sendo entretanto, uma tarefa complicada para os programadores.

Para evitar a manipulação de endereços em notação hexadecimal, facilitando assim a manipulação das posições de memória, as linguagens de programação permitem especificar diferentes nomes a cada conjunto de células que armazenam um determinado dado. Desta forma, os programadores ficaram livres de trabalhar com os endereços físicos (números hexadecimais) e passaram a trabalhar com endereços lógicos, ou seja, os nomes dados por eles próprios a um conjunto de células que armazenam um dado. À estes endereços lógicos de

memória que irão armazenar dados dá-se o nome variável. Desta forma, uma variável pode ser entendida como um posição lógica de memória (composta de uma ou mais células físicas, dependendo do tipo do dado armazenado) representada por um nome simbólico dado pelo programador que será usado para acessar e manipular o dado nele contido.

A fim de atender o objetivo para a qual foi proposta, uma variável possui três atributos:

Nome: é a representação simbólica do conjunto de endereços de memória, sendo o mesmo, utilizado para se acessar e manipular o dado nele contido. A especificação de um nome para uma variável deveria serguir algumas regras lógicas, quais sejam: o nome deverá começar por uma letra, podendo ser seguido por outras letras e/ou números; não é permitido o uso de caracteres especiais (exceto o underline “ _”); deve ter um número limitado de caracteres e, principalmente, o nome deve estar relacionado com o significado, para o programa, do dado que ele contém.

Tipo de Dado: uma variável só poderá armazenar informações de um mesmo tipo e, para tanto, deverá ser definido qual o tipo da informação uma variável armazena. Desta forma, o tipo de dado associado a uma variável definirá a natureza da informação nela contida, podendo a mesma ser numérica (inteira ou rel), alfanumérica ou lógica. Além disso, a associação de um tipo de dado a uma variável delimitará a quantidade de células físicas que a mesma ocupará na memória. Por outro lado, a informação do tipo de dado associado com uma variável será usada pelo compilador para a verificação semântica do programa.

Informação: é o conteúdo propriamente dito da variável. A associação de um conteúdo a uma variável deverá obedecer a restrição imposta pela definição do tipo de dado da variável.

Para fins de desenvolvimento de um algoritmo ou programa de computador, todas as variáveis usadas por ele devem ser formalmente explicitadas ao computador, correspondendo, tal ação, à declaração de variáveis. Assim sendo, a declaração de variáveis é obrigatória para todas as variáveis usadas por um algoritmo e deve ser especificada, segundo uma sintaxe que difere de linguagem para linguagem, na <área de declarações> do algoritmo. Mais especificamente, uma declaração de variável consiste em reservar o espaço de memória para a mesma, associando a este espaço um nome e um tipo de dado.

No pseudocódigo aqui adotado, a declaração de variáveis segue a seguinte sintaxe:

ALGORTIMO <nome do algoritmo>VAR

Nome da variável : Tipo de dado associadoINÍCIO

<área de instruções>

FIM

No caso da existência de várias variáveis de um mesmo tipo, pode-se fazer uma única associação de tipo às várias variáveis através da separação das mesmas através de uma vírgula.

4.1.4 Constantes:

As constantes, juntamente com as variáveis, são os elementos básicos que um programa manipula. Assim como uma variável, uma constante também é um endereço lógico de memória para se armazenar um determinado dado. A diferença básica é que um determinado endereço lógico de memória declarado como constante conterá um valor que não poderá ser alterado durante a execução do programa. Uma constante também possui os atributos nome, tipo de dado e informação, da mesma forma que uma variável, e a especificação do seu nome deverá serguir as mesmas regras usadas na especificação de nomes de variáveis. Além disso, constantes também devem ser declaradas na <área de declarações> do algoritmo, da seguinte forma:

ALGORTIMO <nome do algoritmo>CONST

Nome da constante : Valor inicialVAR

Nome da variável : Tipo de dado associadoINÍCIO

<área de instruções>FIM

4.1.5 Expressões:

Uma expressão pode ser entendida como um conjunto de operandos que, relacionando-se por meio de operadores, compõe uma fórmula que, uma vez avaliada, resultará num valor. Como exemplo conhecido de uma expressão, podemos ter uma fórmula matemática. Na confecção de algoritmo e programas, podemos ter expressões aritméticas ou lógicas que diferem entre sí no tipo de operandos/operadores e no tipo de dado do valor resultante de sua avaliação.

Expressões Aritméticas e Operadores:

Expressões aritméticas são aquelas que possuem como operandos variáveis e/ou constantes numéricas combinados através de operadores aritméticos, resultando, após a sua avaliação, em um valor do tipo numérico (inteiro ou real). A tabela de operadores aritméticos, com seu grau de prioridade, é dada abaixo:

Operador Operação Prioridade** Exponenciação 1* Multiplicação 2/ Divisão 2+ Adição 3

- Subtração 3

Quando da avaliação de uma expressão aritmética, o computador segue uma ordem de prioridade para os operadores, conforma a tabela acima. Entretanto, para operadores de mesma prioridade, será avaliado aquele que for encontrado primeiro, da esquerda para a direita, na avaliação da expressão. A fim de quebrar esta hierarquia pré-definida de operadores, pode-se fazer uso dos parênteses, da mesma forma que nas equações matemáticas.

Expressões Lógicas e Operadores:

Expressões lógicas são aquelas que possuem como operandos relações e/ou variáveis e/ou constantes do tipo lógico combinados através de operadores lógicos e/ou relacionais, resultando, após a sua avaliação, em um valor do tipo lógico (verdadeiro ou falso).

Os operadores relacionais são usados para fazer comparações entre elementos (variáveis e/ou constantes) de um mesmo tipo de dado, retornando um valor verdadeiro ou falso. Os operadores relacionais, bem como seus relacionamentos de prioridade, são dados na tabela abaixo:

Operador Operação= Igual

<> Diferente> maior que< menor que

> = maior ou igual a< = menor ou igual a

Os operadores lógicos são usados para combinar resultados de expressões, realizando operações de álgebra booleana, implicando em um resultado final como um valor verdadeiro ou falso. Os operadores lógicos, bem como seus relacionamentos de prioridade, são dados na tabela abaixo:

Operador Operação PrioridadeNÃO Negação 1

E Conjunção 2OU Disjunção 3

Por outro lado, o funcionamento dos operadores lógicos é detalhado pela tabela verdade abaixo:

A B NÃO A NÃO B A E B A OU BV V F F V VV F F V F VF V V F F VF F V V F F

Em suma, pode-se dizer que uma expressão combinada através do operador lógico “E” tem como resultado final verdadeira (V) somente se todas as expressões forem verdadeiras. Por outro lado, uma expressão combinada através do operador lógico “OU” tem como resultado final verdadeira (V) se, pelo menos, uma das expressões for verdadeira. Finalmente, o operador lógico “NÃO” inverte o valor lógica da expressão.

4.1.6 Instruções/Comandos Primitivos:

A manipulação de dados por um algoritmo é feita através da especificação de instruções que os manipulam. Dentro o conjunto de instrução do pseudocódigo, ou de uma linguagem de computador, são consideradas instruções ou comandos primitivos aquelas que efetuam as tarefas essenciais para a operação dos computadores, como a entrada e saída de dados e a movimentação dos mesmos para a memória. São eles, os comandos de atribuição e de entrada e saída de dados.

Comando de Atribuição:

Quando definimos uma variável, para a manipulação por nosso algoritmo, é natural que queiramos atribuir a ela algum valor. Uma das formas de atribuir um valor a uma variável e, consequentemente colocar este dado para dentro da memória do computador, é através de uma atribuição direta do valor desejado para a variável. Para tanto, utiliza-se o símbolo de atribuição ( ) que indica que o valor (ou o resultado da avaliação de uma expressão) que está à direita do símbolo de atribuição será colocado na posição de memória indicada pela variável que está a esquerda do símbolo, conforme a sintaxe abaixo:

Nome da Variável Valor ou Expressão

Deste momento em diante, o acesso àquele valor se dará através da invocação do nome da variável. Deve-se ter em mente que, como uma variável possui um tipo de dado associado, o valor ou resultado da avaliação de uma expressão a ser atribuido àquela variável deverá ser, obrigatoriamente, do tipo de dado definido para a variável. Uma exceção a esta restrição é o conceito de coerção, ou seja, a possibilidade de associação de um valor inteiro a uma variável do tipo numérico real.

Como exemplo poderíamos ter as seguintes atribuições:

A .V.Resultado 5 = 3B 5 + 13/4Sexo "M"Dolar 1,98Nome "JOSE"

Comandos de Entrada e Saída de Dados:

O computador não é uma máquina isolada e precisa interagir com o mundo exterior, quer seja para receber dados fornecidos por um usuário, colocando-os na memória, quer seja para fornecer ao usuário os resultados de seus processamentos. Isto é feito através dos comandos primitivos de entrada e saída de dados.

Os comandos de saída de dados são a forma pela qual informações contidas em sua memória são colocadas em um dispositivo de saída (vídeo, impressora, etc) para que o usuário possa apreciá-las. A sintaxe de um comando de saída é dada abaixo:

ESCREVA ( variável/constante/expressão/literal )

Este comando gera uma saída no vídeo que poderá ser o valor de uma variável, uma constante, o resultado da avaliação expressão, um literal (conjunto de caracteres delimitados por aspas) ou qualquer combinação deste elementos deste que separados por vírgula.

Por outro lado, os comandos de entrada de dados são a forma pela qual dados são fornecidos ao computador através de dispositivos de entrada (inicalmente somente através do teclado) e armazenados em sua memória, nas variáveis especificadas no comando de entrada. Desta forma, pode ser entendido como o inverso de um comando de saída de dados. A sintaxe de um comando de entrada de dados é dada abaixo:

LEIA ( lista de variáveis )

A partir deste ponto, tem o leitor os comandos básicos necessários para especificar as três fases de um algoritmo (Entrada, Processamento e Saída), podendo assim desenvolver seus primeiros exercícios.

4.1.7 Exercícios:

6) Sabendo os seguintes valores de variáveis A=3, B=7 e C=4, avalie as expressões abaixo indicando se seu resultado é verdadeiro ou falso.

Expressões Resultado ( V ou F )(A + C) > BB >= (A + 2)C = (B – A)

(B + A) <= C(C + A) > B

7) Sabendo os seguintes valores de variáveis A=5, B=4, C=3 e D=6, avalie as expressões abaixo indicando se seu resultado é verdadeiro ou falso.

Expressões Resultado ( V ou F )(A > C) AND (C <= D)

(A+B) > 10 OR (A+B) = (C+D)

(A>=C) AND (D >= C)

8)Avalie a seguinte tabela, fornecendo seu resultado final:

A B ( (NÃO A ) E B ) OU ( A E ( NÃO B ))V VV FF VF F

9) Faça um algoritmo que leia as variáveis das equações abaixo e calcule e imprima seu resultado final.

a) XB A F

A

2 4 23 2

3

b) Y HX

H HH

2453

4 32

c) Xa b e fc d g h

ij

( ) ( )( ) ( )

*

10) Faça um algoritmo para calcular a média aritmética de três números quaisquer.

11) Faça um algoritmo que calcule a média ponderada de um aluno com 3 notas. A fórmula de cálculo com seus respectivos pesos é a seguinte: média = (3*nota1 + 4*nota2 + 2*nota3) / 9. O algoritmo deve ler o nome do aluno e suas 3 notas e imprimir o nome e a média final do aluno.

12) Faça um algoritmo para calcular as raízes de uma equação de 2º grau pela fórmula de Báscara.

13) Faça um algoritmo em Portugol que calcule o valor da mensalidade que um aluno deverá pagar. O algoritmo deve ler o nome do aluno, número de créditos que o mesmo está cursando e o valor unitário do crédito. Deverão ser impressos o nome do aluno e o valor da mensalidade devida pelo mesmo.

14) Faça um algoritmo que leia a base e a altura de um triângulo e calcule a sua área conforme a fórmula A = ( B * H ) / 2 . Deverão ser impressos a base, altura e a área do triângulo.

15) O preço de um automóvel é calculado pela soma do preço de fábrica com o preço pago de impostos (45% do preço de fábrica) e a porcentagem paga de comissão aos revendedores (28% do preço de fábrica). Faça um algoritmo que leia o nome e o preço de fábrica do automóvel e imprima o seu nome e o preço final.

16) Suponha que você foi ao supermercado e comprou 2 produtos. Faça um algoritmo em Portugol que leia e nome e o preço dos produtos comprados e

calcule o preço total da compra sabendo que você obteve um desconto de 20%. Deverão ser impressos os nomes dos 2 produtos comprados, seus preços unitários e o valor total da compra com e sem o desconto obtido.

17) Suponha que uma pessoa tenha comprado 3 artigos em uma loja, tendo, para cada artigo, seu nome, preço e percentual de desconto. Faça um algoritmo em Portugol que imprima o nome, preço e preço com desconto de cada artigo comprado, além do total da conta a pagar.

18) Faça um algoritmo que leia o nome, o salário e o número de dependentes de um funcionário e calcule o IR devido pelo funcionário. O valor a ser pago de IR corresponde a 25% do salário do funcionário, descontando-se um abatimento de R$ 0,50 por dependente que o funcionário possua. O algoritmo deverá imprimir o nome do funcionário, seu salário, número de dependentes e o imposto devido. 19) Considere que uma empresa queira dar uma aumento salarial a um funcionário. Deste funcionário, a empresa possui as seguintes informações: seu nome, idade e salário base. O procedimento adotado para o cálculo de aumento do salário é o seguinte: 1) Reajustar o salário base do funcionário em 30%; 2) Conceder uma gratificação de 20% sobre o salário já reajustado; 3) Efetuar descontos de 15% sobre o salário já reajustado e sem a concessão da gratificação. Deverão ser impressos o nome e o novo salário do funcionário na sua forma bruta ( aumento + gratificação ) e líquida ( aumento + gratificação - descontos ).

20) Uma empresa tem para um determinado funcionário uma ficha contendo o nome, número de horas trabalhadas e o número de dependentes de um funcionário. Considere que: (1) a empresa paga 12 reais por hora e 40 reais por dependentes e (2) sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR. Faça um algoritmo para ler o nome, número de horas trabalhadas e número de dependentes de um funcionário. Após a leitura e o processamento, escreva qual o nome, salário bruto, os valores descontados para cada tipo de imposto e finalmente qual o salário líquido do funcionário.

21) Considere que você possua o nome e os preços de uma mercadoria em 01/FEV e 01/MAR. Faça um algoritmo em Portugol que leia estes dados e calcule a variação percentual ocorrida no preço da mercadoria naquele período. Deverão ser impressos o nome da mercadoria, seus preços em 01/FEV e 01/MAR e a variação percentual ocorrida no preço da mesma naquele período.

22) Faça um algoritmo em Portugol que leia três números e jogue-os nas variáveis num1, num2, num3. Após isto, o algoritmo deverá movimentar os valores das variáveis da seguinte forma: jogar o valor original da variável num1 na variável num3; o valor original de da variável num3 na variável num2 e o valor original da variável num2 na variável num1. Deverão ser impressos os valores das três variáveis antes e após a movimentação dos valores.

23) Faça um algoritmo que leia dois números inteiros e jogue-os nas variáveis A e B. O algoritmo deverá então trocar o conteúdo destas variáveis. Deverão ser impressos os conteúdos das variáveis A e B antes e depois de efetuada a troca.

4.2 Estruturas de Seleção:

Como visto na conceituação de algoritmo, o mesmo é preponderantemente seqüêncial, ou seja, todas as suas instruções serão executadas, uma única vez, uma após a outra. Entretanto, a complexidade inerente aos problemas a serem resolvidos pelo computador implica na necessidade de estruturas mais complexas para que algoritmos possam ser projetados para a sua solução.

Durante o desenvolvimento de um algoritmo, frequentemente existe a necessidade de se tomar decisões e excutar ou não determinadas instruções, de acordo com o panorama atual de alguns dados. Para tanto foram projetadas as instruções de seleção ou decisão. Estas permitem definir um conjunto de instruções que poderão ser executadas ou não, dependendo do resultado de um teste realizado em cima de alguns dados. Desta forma, algumas instrução serão ou não executadas durante a execução do programa, interferindo diretamente no andamento do programa, conduzindo a algoritmos e programas que não são totalmente sequenciais.

As instruções de seleção ou decisão encontradas no pseudocódigo são as seguintes: estrutura de seleção simples, estrutura de seleção composta, estrutura de seleção encadeada e estrutura de seleção de múltipla escolha.

4.2.1 Estrutura de Seleção Simples:

Esta estrutura de seleção permite definir um único conjunto de instruções ou comandos que será ou não executado em função do resultado da realização de um teste sobre os dados. Sua sintaxe é dada a seguir:

SE <condição> ENTÃO <conjunto de instruções>FIM SE

Nesta estrutura, um teste sobre os dados é executado através da especificação de uma expressão a ser avaliada. Tal expressão é definida pela cláusula <condição>. Esta, por sua vez, será avaliada e, em resultando um valor verdadeiro, o <conjunto de instruções> será executado. Caso o resultado da avaliação da <condição> não seja verdadeiro, serão executadas as instruções imediatamente seguintes ao término da estrutura, dada pela palavra reservada FIM SE.

Com exemplo desta estrutura, poderíamos ter o seguinte trecho de algoritmo:

SE x > 5 ENTÃO

x x + 1escreva (“O valor de x é igual a “, x)

FIM SE

4.2.2 Estrutura de Seleção Composta:

Uma estrutura de seleção composta permite definir dois conjuntos de instruções passíveis de execução. Estes dois conjuntos de instruções, por sua vez, são excludentes, ou seja, somente um dos dois será executado. A escolha de qual dos dois conjuntos de instruções será executado dependerá também do resultado da avaliação de um teste sobre os dados. Desta forma, um deles será executado quando o resultado da avaliação do teste for verdadeiro, enquanto o outro somente será executado quando o resultado da avaliação do teste for falso. Tal instrução possui a seguinte sintaxe:

SE <condição> ENTÃO <conjunto de instruções1>SENÃO <conjunto de instruções2>FIM SE

Alguns autores consideram a estrutura de seleção composta e a estrutura de seleção simples como uma estrutura única, tendo a cláusula SENÃO como opcional. Na estrutura de seleção composta, um teste sobre os dados, especificado na cláusula <condição> será realizado. Caso o resultado da avaliação deste teste seja verdadeiro, as instruções constantes no <conjunto de instruções1> serão executadas sendo, em caso contrário (o resultado da avaliação do teste é falso) as instruções constantes no <conjunto de instruções2> serão executadas. Após a execução de um dos dois conjuntos de instruções, o fluxo de execução do algoritmo segue normalmente com as instruções imediatamente seguintes ao final da estrutura, dada pela palavra reservada FIM SE.

Como exemplo, pode-se ter o seguinte trecho de algoritmo:

SE x > 5 ENTÃOx x + 1escreva(“O valor de x é igual a “, x)

SENÃOy y + 1escreva(“O valor de y é igual a “, y)

FIM SE

4.2.3 Estrutura de Seleção Encadeada:

Uma estrutura de seleção encadeada nada mais é do que uma combinação entre as estruturas de seleção simples e compostas, possibilitando, desta forma, a especificação de vários conjuntos de instruções passíveis de execução. Entretanto, da mesma forma como na estrutura de seleção composta,

somente um dos conjuntos de instruções especificados será executado, dependendo do resultado de testes sobre os dados.

Um exemplo de sintaxe para este estrutura é dado abaixo:

SE <condição 1> ENTÃOSE <condição 2> ENTÃO <conjunto de instruções1>SENÃO <conjunto de instruções2>FIM SE

SENÃOSE <condição 3> ENTÃO <conjunto de instruções3>FIM SE

FIM SE

O exemplo acima combina duas estruturas de seleção composta, juntamente com uma estrutura de seleção simples, permitindo a especificação de três conjuntos de instruções. Entretanto, somente um deles deverá ser executado. A combinação de estrutras de seleção simples e composta é livre, desde que se observe a hierarquização das mesmas. Um exemplo deste tipo de combinação pode ser visto abaixo:

SE x > 5 ENTÃOSE nome = “José” ENTÃO

escreva(“Nome = “, nome)FIM SE

SENÃOSE y > 5 ENTÃO

x x + 1escreva(“O valor de x é igual a “, x)

SENÃOSE k < 4 ENTÃO

y y + 1escreva(“O valor de y é igual a “, y)

FIM SEFIM SE

FIM SE

4.2.4 Estrutura de Seleção de Múltipla Escolha:

Uma estrutura de seleção de múltipla escolha, da mesma forma que uma estrutura de seleção encadeada, permite a especificação de vários conjuntos de instruções passíveis de execução. Entretanto, somente um destes conjuntos será executado, dependendo de um teste em cima do valor de uma variável. Sua sintaxe pode ser vista abaixo:

CASO <variável a ser testada>valor1 : <conjunto de instruções1>valor2 : <conjunto de instruções2>valor3 : <conjunto de instruções3>

...SENÃO ( opcional )

<conjunto de instruções n>FIM CASO

No contexto da estrutura acima, será executado o <conjunto de instruções?> cujo valor associado valor? corresponda ao valor da <variável a ser testada>. Um exemplo pode ser visto abaixo:

CASO x1 : Escreva(“o valor de x é 1”)2 : Escreva(“o valor de x é 2”)3 : Escreva(“o valor de x é 3”)

SENÃO Escreva(“o valor de x é diferente de 1, 2 e 3”)

FIM CASO

4.2.5 Exercícios:

24) Faça um algoritmo em Portugol que leia dois números inteiros e identifique se os mesmos são iguais ou diferentes. Caso eles sejam iguais imprima uma mensagem dizendo que eles são iguais. Caso contrário, diga qual dos dois números é o menor.

25) Faça um algoritmo em Portugol que verifique se um aluno foi aprovado ou não. O algoritmo deve ler o nome do aluno, suas 3 notas, juntamente com seus 3 pesos e calcular a média ponderada do aluno de acordo com a fórmula abaixo:

Após o cálculo da média final, o algoritmo deverá  verificar o conceito final do aluno e indicar sua aprovação ou não, conforme a tabela abaixo:

Média Final Conceito Resultado9.00 - 10.00 A Aprovado7.50 - 8.99 B Aprovado6.00 - 7.49 C Aprovado5.00 - 5.99 D Reprovado0.00 - 4.99 E Reprovado

O algoritmo deverá  imprimir o nome do aluno, seu conceito e o resultado final.

26) Faça um algoritmo que leia três número diferentes e imprima o maior número dentre os três.

27) Suponha que a Universidade possua a seguinte tabela de valores de créditos por curso :

Curso Valor do CréditoINFO 12,00ADM 10,00

CONTAB 15,00CIÊNCIAS 8,00

Faça um algoritmo em Portugol que leia o nome de um aluno, curso que o mesmo está matriculado e o número de créditos que o ele está cursando e calcule a mensalidade a ser paga pelo aluno. Deverão ser impressos o nome do aluno, seu curso e o valor da mensalidade a pagar.

28) Faça um algoritmo em Portugol que leia o nome, o sexo, a altura e a idade de uma pessoa e calcule e imprima o seu peso ideal de acordo com as seguintes características da pessoa:

Sexo Altura Idade Peso Ideal< = 20 ( 72.7 * h ) - 58> 20 ( 72.7 * h ) - 45< = 40 ( 72.7 * h ) - 50> 40 ( 72.7 * h ) - 58

> 1,50 Independente ( 62,1 * h ) - 44>= 35 ( 62,1 * h ) - 45< 35 ( 62,1 * h ) - 49

29) Faça um algoritmo em Portugol que leia o código do departamento em que um funcionário trabalha (1-secretaria, 2-tesouraria, 3-depto pessoal, 4-almoxarifado), seu nome, salário base e o tempo de serviço. O algoritmo deverá então calcular e imprimir o novo salário base do funcionário conforme as condições abaixo:

Departamento Tempo de Serviço % de AumentoSecretaria ou < 4 anos 50%

Tesouraria > 4 anos 60%Depto Pessoal Independente 30%

< 2 anos 30%Almoxarifado > = 2 anos e < = 4

anos40%

> 4 anos 50%

Deverão ser impressos o nome do funcionário, seu salário antigo e o novo salário.

30) Faça o teste de mesa do algoritmo abaixo diga qual o conteúdo das variáveis A, B e AUX após o término da sua execução:

Inicioa 10b 20aux 10a bb asoma a + bSe soma >= a + aux Então

Se a = b Entãoaux a + ba 10b 20

Fim SeSenão

aux b - a

Masculino

Feminino

> 1,70

< = 1,70

< = 1,50

a aux - 10b aux + 10

Fim SeFim

31) Faça o teste de mesa do algoritmo abaixo diga qual o conteúdo das variáveis A, B e AUX após o término da sua execução:

Inicioa 10b 20aux 10a b + auxb a + auxaux a + btotal aux - ( aux - a - b )se aux = total então

se b > a entãoa b - ab aux - b - aaux total - 2*b - 2*a

fimsesenão

a a - bb aux - baux total - a

fimseFim

32) Suponha que uma empresa deseja fazer uma seleção ente os funcionários para o aumento salarial. Só participará deste aumento o funcionário que possuir mais de 4 anos de serviço, mais de 3 dependentes e salário atual abaixo de R$ 500,00. Faça um algoritmo em Portugol que leia estes dados de um funcionário e imprima uma mensagem dizendo se ele tem direito ao aumento ou não. Caso ele tenha este direito, calcule o novo salário deste funcionário em função de uma taxa de aumento de 48%. Deverão ser impressos o nome do funcionário, seu salário antigo e o novo salário.

33) Sabendo que o preço final de um automóvel é dado pelo soma do preço de fábrica com o valor pago de impostos e o percentual pagos aos revendedores ( 5% do preço de fábrica ), faça um algoritmo em Portugol que use a tabela abaixo e calcule e imprima o nome e o modelo do automóvel e o seu preço final de venda.

Marca Modelo % de ImpostosGOL 1000

CL1215

UNOMILLEELX1.6 R

81518

CORSA GL 23

34) Faça o teste de mesa do algoritmo abaixo e diga qual o conteúdo da variável TOTAL ao término da sua execução.

Inicioabono 10filhos 3aluno ‘ZÉ’curso ‘TPD’cred 20Se ( curso = ‘ADM’ ) ou ( curso = ‘CONTAB’ ) Então

mensal cred * 7,00Senão

mensal cred * 8,00Fim SeSe mensal < = 150,00 Então

Se filhos = 3 Entãoabono 50

Fim SeFim Setotal ( mensal - abono ) / 100

Fim

35) Faça o teste de mesa do algoritmo abaixo e diga qual o conteúdo da variável TOTAL ao término da sua execução.

Iníciocurso “TPD”filhos 0ncred 20perc 0vlcred 3,45se curso = “ADM” então

vlcred 3,47senão

se curso = “CONTAB” entãovlcred 4,17

senãose curso = “CIÊNCIAS” então

vlcred 5,17fimse

fimsefimsese filhos >= 3 então

perc 10senão

se filhos >= 1 entãoperc 5

senãoperc 3

fimsefimsemensal vlcred * ncred

desc mensal * perc/100total mensal - desc

Fim

36) Faça o teste de mesa do algoritmo abaixo e diga qual o conteúdo das variáveis NOME, SALANT e SALNOVO ao término da sua execução.

Inícionome "JOSE"depto 3filhos 4salant 500se depto < 2 então

perc 50senão

se depto < 4 entãoperc 60

senãoperc 70

fimsefimsese filhos < = 1 então

abono 100senão

se filhos < 3 entãoabono 150

senãoabono 200

fimsefimsesalnovo salant + salant*perc/100 + abono

Fim

37) Suponha que você esteja fazendo um concurso público. Cada candidato ao cargo terá direito a uma pontuação em função da sua titulação, anos de experiência e idade. Baseado na tabela abaixo, faça um algoritmo em Portugol que leia o nome do candidato, sua titulação, tempo de experiência e idade. O algoritmo deverá então calcular e imprimir o nome do candidato e sua pontuação final.

Titulação Anos Experiência Pontos2° Grau Independente 50

Graduação Até 4 anos 70Acima de 4 anos 90

Até 4 anos 100Pós-Graduação De 4 a 6 anos 120

Mais de 6 anos 150

Além disso, se o candidato possuir menos de 40 anos de idade, terá direito a mais 100 pontos. Caso contrário, perderá 50 pontos.

4.3 Estruturas de Repetição:

Como citado anteriormente, o desenvolvimento de algoritmos mais complexos implica na necessidade de outras estruturas de controle além da estrutura sequencial inerente do algoritmo. Desta forma, foram introduzidas as estruturas de seleção ou decisão, permitindo a execução condicional de instruções dependendo de uma visão dos dados naquele momento. Outra estrutura básica fornecida pelo pseudocódigo (e também pelas linguagens de programação) para o desenvolvimento de algoritmos são as estruturas de repetição. Estas estruturas nos permitem executar um determinado conjunto de instruções mais de uma vez, possibilitando assim que um determinado processamento seja executado várias vezes.

As estruturas de repetição fornecidas pelo pseudocódigo são as seguintes: estrutura de repetição com variável de controle, estrutura de repetição com teste no início e estrutura de repetição com teste no final.

4.3.1 Estrutura de Repetição com Variável de Controle:

Este tipo de estrutura de repetição permite que um conjunto de instruções seja executado um número fixo e determinado de vezes. Este número de vezes que o conjunto de instruções será executado é determinado por uma variável de controle. Tal estrutura possui a seguinte sintaxe:

PARA <variável de controle> = <valorinicial>, <valorfinal>, <passo> FAÇA<conjunto de instruções>

FIM PARA

Nesta estrutura uma variável de controle é especificada através da cláusula <variável de controle>. Durante a execução desta estrutura, a variável de controle será incrementada ou decrementada de um valor definido em <passo> desde um valor inicial, definido em <valorinicial> até um valor final especificado na cláusula <valorfinal>. Esta diferença entre o valor inicial e o valor final da variável de controle em unidades definidas pelo passo, indicará o número de vezes que o conjunto de instruções será executado.

Semanticamente, uma estrutura de repetição com variável de controle pode ser entendida da seguinte forma: “no início da execução da estrutura a variável de controle será inicializada com o valor constante na cláusula <valorinicial>. Um teste será feito para verificar se o seu valor é menor ou igual ao valor da cláusula <valorfinal>. Caso o resultado deste teste seja verdadeiro, o conjunto de instruções será executado e, ao encontrar o final da estrutura, dado pela palavra reservada FIM PARA, o fluxo de execução retornará para o início da estrutura, dado pela palavra reservada PARA, sendo a variável de controle incrementada automaticamente. Este funcionamento se repetirá até que o resultado do teste “<valorinicial> <= <valorfinal>” seja falso. Neste caso então, o ciclo de execução deste conjunto de instruções é terminado, sendo executada a instrução imediatamente seguinte ao término da estrutura (primeira instrução logo

após a palavra reservada FIM PARA)”. Este procedimento também é válido para o decremento da variável de controle, respeitando-se a inversão do teste e o decremento em vez do incremento da variável de controle.

Como exemplo poderíamos ter o trecho de algoritmo abaixo que lê o nome e três notas de um conjunto de 50 alunos e, para cada um deles, calcula sua média e escreve o nome do aluno e sua média final:

PARA contador = 1,50 FAÇALEIA (nome, nota1, nota2, nota3 )media ( nota1 + nota2 + nota3 ) / 3ESCREVA ( nome, media )

FIM PARA

4.3.2 Estrutura de Repetição com Teste no Início:

Esta estrutura de repetição permite a execução de um conjunto de instruções um número indeterminado de vezes, ou seja, enquanto uma determinada condição seja satisfeita. Desta forma, uma condição (normalmente um teste sobre os dados) é examinada antes da execução do conjunto de instruções e, caso seu resultado seja verdadeiro, o conjunto de instruções é executado. Tal estrutura de repetição possui a seguinte sintaxe:

ENQUANTO <condição> FAÇA<conjunto de instruções>

FIM ENQUANTO

Na estrutura acima, <condição> é uma expressão que será avaliada, retornando um valor verdadeiro ou falso. Caso o resultado da avaliação desta expressão seja verdadeiro, o conjunto de instruções será executado. Após a execução do conjunto de instruções, o final da estrutura, dado pela palavra reservada FIM ENQUANTO, é encontrado fazendo o fluxo de execução retornar para o início da estrutura, dado pela palavra reservada ENQUANTO. Neste caso, o teste especificado em <condição> é executado novamente e, se resultar em um valor verdadeiro, a execução do conjunto de instruções se dará novamente. O fluxo de execução do algoritmo ficará neste loop até que a inspeção da <condição> resulte em um valor falso. Neste caso, serão executadas as instruções imediatamente seguintes ao final da estrutura.

Um exemplo desta estrutura pode ser visto no trecho de algoritmo abaixo que lê o nome e o número de créditos que um aluno faz, juntamente com o valor unitário do crédito e calcula e imprime o nome e a mensalidade que cada aluno tem a pagar, bem como o total de mensalidades a ser recebido pela instituição de ensino:

total 0LEIA (nome)ENQUANTO nome <> “nenhum” FAÇA

LEIA ( vlcred, numcred )mensal vlcred * numcredESCREVA ( nome, mensal )total total + mensalLEIA (nome)

FIM ENQUANTOESCREVA ( total )

4.3.3 Estrutura de Repetição com Teste no Final:

Uma estrutura de repetição com teste no final também permite a execução de um conjunto de instruções um número indeterminado de vezes, até que uma determinada condição seja satisfeita. Entretanto, uma condição (normalmente um teste sobre os dados) é examinada após a execução do conjunto de instruções. Desta forma, o conjunto de instruções associado à estrutura de repetição será executado pelo menos uma vez e as outras execução do conjunto de instruções dependerão do resultado da inspeção da condição. Esta é a diferença básica entre as estruturas de repetição com teste no início e teste no final. Tal estrutura possui como sintaxe:

REPITA <conjunto de instruções>

ATÉ <condição>

Nesta estrutura, inicialmente o conjunto de instruções será executado. Após isto, uma condição será testada. Caso a inspeção desta condição resulte em um valor verdadeiro, o fluxo da execução é desviado para o início da estrutura, dado pela palavra reservada REPITA e o conjunto de instruções é executado novamente. Este ciclo de execução se repete até que a inspeção da condição resulte em um valor falso. Neste caso, serão executadas as instruções imediatamente seguintes ao final da estrutura de repetição, dada pela palavra reservada ATÉ.

4.3.4. Exercícios:

38) Faça um algoritmo em Portugol que imprima todos os números inteiros de 1 a 25.

39) Dada uma série de 20 registros de dados de entrada, cada registro contendo um valor real, escreva um algoritmo em Portugol que imprima os valores negativos e calcule e imprima a média dos valores não negativos.

40) Faça um algoritmo em Portugol que imprima os números ímpares compreendidos entre 10 e 20.

41) Faça um algoritmo que leia uma lista de letras terminada com a letra "Z". Ao final, o algoritmo deve imprimir a quantidade lida de cada vogal.

42) Foi feita uma pesquisa na Lanchonete da Universidade do Contestado envolvendo N alunos. Foi pergunta para cada aluno o seu nome, sua idade, o lanche que ele fez e seu curso em que está matriculado.

Lanche CustoX Salada 3,40

Misto Quente 1,50X Burger 2,80

Pizza 0,90

Total da Conta % de desconto< 8,00 5

< = 8,00 e < = 10,00 7> 10,00 10

Faça um algoritmo em Portugol que, levando em conta as tabelas acima de custo dos lanches e descontos, calcule e imprima:

valor total arrecadado pela lanchonete no período em que foi feita a pesquisa;

nome do lanche mais vendido; média de gasto dos alunos do curso de Processamento de Dados;

43) O DER deseja fazer um levantamento estatístico da utilização de uma determinada rodovia de Santa Catarina. Em um ponto de pedágio levantou-se os seguintes dados de um número desconhecido de condutores de veículos:

estado de origem; número de pessoas viajando; marca e ano de fabricação do veículo; característica da viagem ( 1-Férias / 2-Trabalho ).

Faça um algoritmo em Portugol que calcule e imprima: número de automóveis que passaram por aquele ponto de pedágio; média de pessoas por automóvel número de automóveis que não são do Estado de Santa Catarina; número de automóveis da marca FUSCA fabricados entre os anos de

1970 e 1980; percentagem de automóveis que estavam em viagem de Férias.

44) Foi feita uma pesquisa visando identificar as características físicas da população de uma certa região. Foram coletados os seguintes dados dos seus habitantes: sexo (masculino ou feminino); cor dos olhos (azuis, verdes ou castanhos); cor dos cabelos (louros, castanhos ou pretos) e idade.Faça um algoritmo em Portugol que leia os dados acima de um conjunto desconhecido de habitantes e calcule e imprima:

menor idade dos homens pesquisados; número de pessoas entrevistadas; idade média das mulheres;

percentagem de habitantes de cabelos louros e olhos azuis.

45) Faça um algoritmo em Portugol para calcular o fatorial de um número N qualquer fornecido pelo usuário.

46) Suponha que a empresa TELESC deseje informatizar o processo de controle das contas telefônicas seus assinantes. A cobrança de seus serviços é feita obedecendo os seguintes critérios:

Tarifas Básicas /AssinaturaResidencial Comercial

13,59 25,78

Serviços adicionais cobradosServiço Local 0,54 por pulso excedente

( acima de 90 pulsos )Serviço Interurbano 0,98 por pulso excedente

( acima de 45 pulsos )Despertador Automático 8,50 por serviçoTelegrama Fonado 12,34 por serviço

Faça um algoritmo em Portugol que leia os seguintes dados de um número desconhecido de usuários:

número do telefone ( usado como critério de parada ); tipo da linha ( 1-residencial, 2-comercial ); número de pulsos registrados para chamadas locais; número de pulsos registrados para chamadas interurbanas; número de telegramas passados; número de utilizações do serviço de despertador.

O Algoritmo deverá calcular e imprimir: valor da maior conta e o número do telefone do assinante que a pagou; número de chamadas ao serviço de telegrama fonado; total arrecadado pela TELESC em relação a cada um dos serviços

prestados; total geral arrecadado pela TELESC;

47) Um cinema deseja fazer um levantamento estatístico quanto à sua utilização. Cada usuário preencheu um formulário com os seguintes dados: horário da sessão (14:30 hs ou 20:30 hs); um código indicando se ele pagou meia entrada ou inteira (1-meia ou 2-inteira); sexo; idade e filme assistido.Faça um algoritmo em Portugol que leia estes dados para um conjunto de 500 usuários e calcule e imprima:

horário da sessão de maior lotação; número de pessoas maiores de 18 anos que pagaram meia entrada; quantidade de mulheres assistiram ao filme "GHOST"; número de pessoas maiores de 30 anos que assistiram ao filme "

DANÇA COM LOBOS" na sessão das 14:30 hs.

48) Supunha que uma Universidade tenha os seguintes dados dos seus alunos: Número de Matrícula; Nome; Curso (TPD, ADM, CONT) e Número de créditos devidos. Sabendo-se que os valores dos créditos são de R$ 9,30 para o curso de TPD e R$ 7,57 para os cursos de ADM e CONT, faça um algoritmo em Portugol que leia um conjunto de 500 registros com estes dados e calcule e imprima:

total de créditos devidos pelos alunos; valor médio, em R$, devido pelo curso de TPD; nome dos alunos de ADM que devem mais de 30 créditos.

49) Faça um algoritmo em Portugol que leia um número desconhecido de registros de dados de entrada contendo o nome de um candidato a emprego, sua idade, o código de sua maior escolaridade (1=1° Grau, 2=2° Grau ou 3=3° Grau ) e o cargo de sua preferência. O algoritmo deverá calcular e imprimir:

nome e cargo pretendido pelo candidato mais novo; percentagem de candidatos que possuem o terceiro grau; número de candidatos ao cargo de Analista de Sistemas; idade média dos candidatos que possuem o segundo grau

como maior titulação.

50) Suponha que você trabalha em uma agência de aviação e deseja fazer uma avaliação sobre o atraso e a média de lotação dos vôos da companhia. Faça um algoritmo em Portugol que leia um número desconhecido de registros contendo os seguintes dados: número do vôo; número de lugares do avião; número de lugares ocupados; horário previsto para chegada do vôo e horário real da chegada do vôo.Faça um algoritmo que calcule e imprima:

atraso médio dos vôos; número do vôo que decolou com o menor número de

passageiros; quantidade de vôos que chegaram atrasado ; número do vôo que teve a maior quantidade de lugares vazios.

51) Suponha que para cada aluno da UnC existam as seguintes informações: nome do aluno, curso, idade e renda familiar. Faça um algoritmo em Portugol que leia um conjunto de 500 registros contendo os dados dos alunos e calcule e imprima:

nome e curso do aluno mais novo da UnC; quantidade de alunos de PD com idade entre 20 e 35 anos; renda média familiar dos alunos da Administração.

52) Faça o teste de mesa do algoritmo abaixo e diga qual o conteúdo das variáveis A, B, AUX e X ao término da sua execução.

Iniciofim 3x 0cont 1a 10b 20aux 10a b + auxb a + auxaux a + btotal aux - ( aux - a - b )se a < b então

a b - ab aux - b - aaux total - 2*b - 2*aenquanto cont <= fim faça

x x + acont cont + 1

fim enquantosenão

para cont=1,fim façax x + 2

fim parafimse

Fim

53) Suponha que o governo do Estado esteja iniciando um programa de concessão de bolsas de estudo. Cada aluno preencheu uma ficha com os seguintes dados: nome; curso que está freqüentando e tipo de vínculo empregatício com o Estado ( 1A, 1B, 1C ou 1D). Suponha ainda a seguinte tabela de valores de créditos por curso:

Curso Valor do CréditoPEDAGOGIA 10,00

LETRAS 15,00CIÊNCIAS 8,00

Faça um algoritmo que leia os dados de um número desconhecido de alunos e calcule e imprima:

número total de alunos para cada um dos quatro tipos de vínculo; nome do aluno, tipo de vínculo, número de créditos, valor da

mensalidade a pagar, curso e o valor da bolsa recebida sabendo-se que a mesma é calculada segundo um percentual definido pelo tipo de vínculo do aluno:

Tipo de Vïnculo % de bolsa1A 80 % da mensalidade1B 60 % da mensalidade1C 40 % da mensalidade1D 20 % da mensalidade

Este último relatório deverá possuir o seguinte formato:

Nome Curso Vínculo Créditos Mensalidade Bolsaxxxxxx xxx xxx xxxx xxxxx xxxxxxxxxxx xxx xxx xxxx xxxxx xxxxx 54) Escreva um algoritmo em Portugol que leia um conjunto de 50 registros contendo cada um a altura e o código do sexo da pessoa (1=Masc ou 2=Fem). Este algoritmo deverá calcular e imprimir:

maior e a menor altura do conjunto de pessoas; altura média das mulheres; altura média da turma.

55) Suponha que existam dois candidatos a uma vaga no senado. Feita a eleição, os votos são registrados da seguinte maneira:

Código do Voto Descrição1 Voto para o candidato 12 Voto para o candidato 23 Voto branco4 Voto nulo

Faça um algoritmo em Portugol que leia um conjunto indefinido de registros de código de votos e calcule e imprima:

número de votos de cada candidato; candidato vencedor; número de votos nulos; número de votos brancos; número de eleitores que compareceram às urnas.

56) Escreva um algoritmo em Portugol que faça o levantamento em uma adega da seguinte maneira: leia um conjunto de 300 registros cada um contendo o nome do vinho, ano da safra e o código indicando o tipo do vinho (1=branco, 2=tinto ou 3=rose). O algoritmo deverá calcular e imprimir:

quantidade de cada tipo de vinho; safra e o nome do vinho mais velho; quantidade total de garrafas de vinho; porcentagem de garrafas de vinho rose.

57) Faça um algoritmo que imprima os números pares compreendidos entre 14 e 30 ( inclusive ).

58) Faça um algoritmo em Portugol que leia um valor X e calcule e imprima os 20 primeiros termos da série:

59) Faça um algoritmo em Portugol que leia um conjunto indefinido de registros com os seguintes dados de vendedores de uma empresa: nome, salário fixo e total de vendas efetuadas. Cada vendedor recebe uma comissão proporcional às vendas por ele efetuadas, sendo de 5% para o total de vendas de até R$ 15.000,00 e 7% para vendas acima deste valor. Faça um algoritmo que calcule e imprima:

nome, salário fixo e valor recebido de comissão para cada vendedor; quantidade de vendedores que tem salário fixo abaixo de R$ 500,00

e que receberam mais de R$ 1.000,00 de comissão; total geral pago pela empresa somando-se o total de salário fixo e de

comissão; número total de vendedores da empresa.

60) Faça um algoritmo em Portugol que leia um par de valores inteiros e jogue-os nas variáveis A e B. O algoritmo deverá então calcular o produtório de todos os números compreendidos entre A e B ( inclusive ).

61) Faça um algoritmo em Portugol que leia um conjunto indefinido de registros contendo os seguintes dados de um automóvel: marca, fabricante ( Volks, Ford, Fiat ), capacidade do tanque de combustível e preço de fábrica. O algoritmo deverá então calcular e imprimir:

a marca, fabricante e preço final de cada automóvel sabendo que o preço final é calculado da seguinte maneira: PF + comissão das revendas ( 15% do PF ) + transporte ( R$ 150,00 );

a capacidade média do tanque de combustível dos veículos; qual dos três fabricantes produziu mais veículos; qual a marca e o fabricante do carro mais caro.

62) Faça um algoritmo em Portugol que leia um conjunto indefinido de registros cada um contendo os seguintes dados de um livro: autor, título, data e local de publicação e preço. O algoritmo deverá então calcular e imprimir:

quantidade de livros escritos por José de Alencar que foram publicados em São Paulo;

custo médio dos livros escritos por Rui Barbosa; nome do autor do livro “As Orquídeas”.

63) Faça um algoritmo em Portugol que leia um conjunto de 50 registros, cada um contendo os seguintes dados de um aluno: nome, nota1, nota2, nota3, idade e curso que freqüenta. O algoritmo deverá calcular e imprimir:

nome e a média final de todos os alunos ( média aritmética ); nome do aluno do curso de TPD que obteve a maior média; idade média dos alunos; quantidade de alunos com média acima de 7,0.

64) Faça um algoritmo em Portugol que leia um conjunto de 36 registros cada um contendo os seguintes dados dos times de futebol do campeonato brasileiro: nome do time, estado a que ele pertence, total de pontos feitos no campeonato, número de gols marcados e número de gols sofridos no campeonato. O algoritmo deverá calcular e imprimir:

nome de cada time e o seu saldo de gols ( gols marcados menos gols sofridos );

a soma de pontos dos times do Rio Grande do Sul; nome dos times cuja pontuação foi superior a 50 pontos no

campeonato.

65) Faça um algoritmo em Portugol que leia um conjunto indefinido de registros de vendas dos vendedores de uma imobiliária. Cada registro contém os seguintes dados: código do vendedor, valor da venda, percentual de comissão a ser recebido pelo vendedor e tipo do imóvel vendido ( APTO, CASA, TERRENO ). O algoritmo deverá então calcular e imprimir:

código e a comissão recebida por cada vendedor; código do vendedor que recebeu o maior valor de comissão; quantidade de apartamentos vendidos; valor médio de vendas da imobiliária.

66) Faça um algoritmo em Portugol que leia um conjunto de 365 registros, cada um contendo a temperatura de um dia do ano ( os registros estão ordenados por dia ). O algoritmo deverá calcular e imprimir:

temperatura média do ano; maior temperatura ocorrida no primeiro semestre daquele ano; menor temperatura ocorrida no segundo semestre daquele ano; número de dias do ano em que a temperatura foi superior a trinta graus.

67) Faça um algoritmo que leia um conjunto indefinido de registros de candidatos ao vestibular, cada um contendo os seguintes dados: nome, curso pretendido ( TPD, ADM, CONTAB ), língua escolhida ( ING, ESP ), sexo e idade. O algoritmo deverá então calcular e imprimir:

curso de maior procura no vestibular; idade média das candidatas mulheres; percentual de candidatos que optaram pela lingua inglesa ( ING ); nome e o curso pretendido por cada candidato.

68) Faça um algoritmo que leia os valores das variáveis X e A e calcule o valor de S dado por:

69) Faça um algoritmo para executar uma operação de multiplicação através de somas sucessivas. O algoritmo deverá ler o valor do multiplicando e do multiplicador e calcular e imprimir o resultado da multiplicação.

70) Faça um algoritmo em Portugol que gere e imprima a tabuada dos números de 1 a 10.

71) A conversão de graus Fahrenheit para centígrados é obtida pela fórmula:

Escreva um algoritmo em Portugol que calcule e imprima uma tabela de graus centígrados em função de graus Fahrenheit que variam de 50 a 150 graus. A tabela deverá ter o seguinte formato:

Fahrenheit Centígrados50 ?51 ?: :

150 ?

72) A Série de Fibonacci é formada pela seguinte sequência de números: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... . Escreva um algoritmo em Portugol que gere e imprima esta série até o vigésimo termo.

73) Faça um algoritmo que leia o valor da variável A e calcule e imprima o valor de S dado por:

74) Suponha que a UnC seja dividida em departamentos e que para cada um deles exista um código, conforme a tabela abaixo:

Departamento CódigoSecretaria 1Tesouraria 2Biblioteca 3

NPD 4

Faça um algoritmo em Portugol que leia 250 registros de funcionários da UnC contendo, cada um, o código do departamento do funcionário, seu nome e salário. O algoritmo deverá calcular e imprimir:

nome do funcionário com maior salário da UnC; salário médio por departamento; salário médio da instituição.

75) Faça um algoritmo em Portugol que leia um conjunto de 7000 registros de assinantes das revistas da Editora Abril, cada um contendo os seguintes dados: nome da revista ( EXAME, VEJA, INFO ), valor pago pela assinatura, idade e sexo do assinante. O algoritmo deverá calcular e imprimir:

nome da revista possui maior quantidade de assinantes; idade média dos assinantes da revista INFO; quantidade de homens que assinam a revista VEJA; maior valor de assinatura pago pelas mulheres.

76) Dado o conjunto de dados e o algoritmo abaixo, faça o teste de mesa do mesmo e responda qual o conteúdo das variáveis Aux1, Aux2 e Aux3 ao final da execução do algoritmo.

Início

Aux3 0Maior 0 Sal1, Sal2, Sal3 0 Num1, Num2, Num3 0 Para cont = 1,6 faça

Leia ( nome, idade, depto, sal )Se depto = “A” então

Sal1 Sal1 + salNum1 Num1 + 1

SenãoSe depto = “B” então

Sal2 Sal2 + salNum2 Num2 + 1

SenãoSal3 Sal3 + salNum3 Num3 + 1

FimseFimsesal sal * 1,10Se sal > maior então

Maior salAux2 idade

FimseAux3 Aux3 + sal

Fim paraAux1 Sal3/Num3

Fim

Dados do Algoritmo:

Resultados do Algoritmo:

Aux1 Aux2 Aux3

77) Dado o conjunto de dados e o algoritmo abaixo, faça o teste de mesa do mesmo e responda qual o conteúdo das variáveis Aux1, Aux2 e Aux3 ao final da execução do algoritmo.

InícioAux3 0

LUIZ, 25, C, 800JOÃO, 51, B, 500

CLEUSA, 35, C, 1500MARIA, 20, A, 200

PEDRO, 32, D, 500ZÉ, 28, A, 1800

Menor 999999 Total, Veic 0 ContF, ContG 0 Para cont = 1,6 faça

Leia ( Fab, Mod, Preço, AnoFab )Se Fab = “FIAT" então

ContF ContF + 1Senão

Se Fab = “GM” entãoContG ContG + 1Aux3 Aux3 + Preço*1,10

SenãoSe AnoFab < Menor Então

Menor AnoFabAux2 Mod

FimseFimse

FimseVeic Veic + 1Total Total + Preço

Fim paraAux1 Total / Veic

Fim

Dados do Algoritmo:

Resultados do Algoritmo:

Aux1 Aux2 Aux3

GM, MONZA, 13000, 1991VOLKS,SANTANA,12500,1995

GM, CORSA, 9000, 1994GM, VECTRA, 27000, 1998

FIAT, PÁLIO, 10500, 1996VOLKS, GOL, 12000, 1997