Page 1

APOSTILA DE LÓGICA DE PROGRAMAÇÃO I


1. Índice 1. 2. 3. 4.

Índice....................................................................................................................2 Introdução ............................................................................................................4 Cronograma de aulas...........................................................................................5 Introdução ao Algoritmo .......................................................................................6 4.1. Descrição Narrativa.......................................................................................6 4.2. Fluxograma Convencional ............................................................................6 4.3. Pseudocódigo ...............................................................................................7 5. Dados...................................................................................................................8 5.1. Numéricos.....................................................................................................8 5.2. Dados Lógicos ..............................................................................................9 5.3. Dados literais ................................................................................................9 5.4. Dados caracter............................................................................................10 5.5. Exercícios ...................................................................................................10 6. Variáveis ............................................................................................................12 6.1. Exercícios ...................................................................................................13 7. Expressões ........................................................................................................14 7.1. Expressões aritméticas ...............................................................................14 7.2. Expressões Lógicas ....................................................................................15 7.3. Expressões Literais.....................................................................................18 7.4. Exercícios ...................................................................................................18 8. Estrutura de um algoritmo ..................................................................................21 8.1. Nome do algoritmo......................................................................................21 8.2. Declarando variáveis...................................................................................21 Nome da variável: Tipo ......................................................................................21 8.3. Corpo do algoritmo......................................................................................21 9. Instruções Primitivas ..........................................................................................22 9.1. Instrução Primitiva de Atribuição.................................................................22 9.2. Instrução Primitiva de Saída de Dados .......................................................22 9.3. Instrução Primitiva de Entrada de Dados....................................................24 9.4. Exercícios ...................................................................................................25 10. Exemplos........................................................................................................26 10.1. Exercícios ................................................................................................29 11. Armazenado literais ........................................................................................32 11.1. Exercícios ................................................................................................32 12. Estruturas de decisão .....................................................................................33 12.1. Estruturas de decisão do Tipo Se............................................................33 12.1.1. Exemplos .............................................................................................34 12.1.2. Exercícios ............................................................................................36 12.2. Estruturas de decisão do Tipo Escolha ...................................................38 12.2.1. Exemplos .............................................................................................40 12.2.2. Exercícios ............................................................................................40 13. Estruturas de Repetição .................................................................................42 13.1. Laços Contados.......................................................................................42 13.1.1. Exemplos .............................................................................................43 13.1.2. Exercícios ............................................................................................45 13.2. Laços Condicionais .................................................................................47 13.2.1. Enquanto .............................................................................................47 13.2.2. Exemplos .............................................................................................47 2


13.2.3. Exercícios ............................................................................................49 13.3. Repita ......................................................................................................50 13.3.1. Exemplos .............................................................................................50 13.3.2. Exercícios ............................................................................................51 14. Cartão Bandeira .............................................................................................52 14.1. Exercícios ................................................................................................53 15. Trabalhando com literais ................................................................................54 15.1.1. Exemplos .............................................................................................54 15.2. Exercícios ................................................................................................55 Apêndice A ................................................................................................................56

3


2. Introdução

4


3. Cronograma de aulas

5


4. Introdução ao Algoritmo

Um algoritmo pode ser definido como sendo uma seqüência de passos, logicamente colocados, que resolvem um problema. Existem várias formas de se representar um algoritmo:

4.1.

Descrição Narrativa

Nesta forma de representação os algoritmos são expressos diretamente em linguagem natural. Como exemplo, tem-se o algoritmo seguinte: Receita de Bolo:

4.2.

Misture os Ingredientes

Unte a forma com manteiga

Despeje a mistura na forma

Se houver coco ralado

Então despeje sobre a mistura

Leve a forma ao forno

Enquanto não corar

Deixe a forma no forno

Retire do forno

Deixe esfriar

Fluxograma Convencional

É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam ações (instruções, comandos) distintos. Tal propriedade facilita o entendimento das idéias contidas nos algoritmos e justifica sua popularidade. Esta forma é aproximadamente intermediária a descrição narrativa e ao pseudocódigo, pois é menos imprecisa que a primeira e, no entanto, não se preocupa com detalhes de implementação do programa, como o tipo das variáveis usadas. 6


Ha vários padrões que definem as formas geométricas das figuras que devem ser usadas para representar cada um dos diversos tipos de instruções; contudo, nenhum deles se sobressai com relação aos demais no que diz respeito à aceitação por parte dos usuários. Nota-se que os fluxogramas convencionais preocupam-se com detalhes de nível físico da implementação do algoritmo. Por exemplo, figuras geométricas diferentes são adotadas para representar operações de saída de dados realizadas em dispositivos distintos, como uma fita magnética ou um monitor de vídeo.

4.3.

Pseudocódigo

Antes de utilizarmos uma linguagem de computador, é necessário organizar as ações a serem tomadas pela máquina de forma organizada e lógica, sem nos atermos às regras rígidas da Sintaxe de uma linguagem. Para isto utilizaremos uma forma de escrever tais ações, conhecida como algoritmo, ou pseudocódigo. Esta forma de representação de algoritmos é rica em detalhes, como a definição dos tipos das variáveis usadas no algoritmo e, por assemelhar-se bastante à forma em que os programas são escritos, encontra muita aceitação. Na verdade, esta representação é suficientemente geral para permitir que a tradução de um algoritmo nela representada para uma linguagem de programação específica seja praticamente direta.

7


5. Dados Semelhante ao que acontece em uma calculadora, por exemplo, um sistema de computador manipula informações, como os números que digitamos na calculadora. Em um sistema de computador estas informações são classificadas em tipos dependendo da forma que são formadas, a essas informações passaremos a chamá-las de DADOS. Devemos fazer essa distinção pelo motivo de a memória do computador trabalhar de forma diferente com dados diferentes. Os tipos de dados existentes são:

5.1.

Numéricos

Inteiros: São aos valores numéricos (positivos ou negativos) que não possuem casas decimais. São dados do tipo inteiro: •

Idade de uma pessoa (não podemos dizer que alguém tenha 20,3 anos);

Dia (não existe o dia 15,2);

Exemplos: 24 0 -12

número inteiro positivo; número inteiro; número inteiro negativo;

Reais: São aos valores numéricos (positivos ou negativos) que poderão possuir casas decimais. São dados do tipo real: •

Peso de uma pessoa (alguém pode ter tranqüilamente ter 53,2 kg);

Comprimento de um terreno (uma área pode ter 74,2 m);

Exemplos: 24.01

número real positivo com duas casas decimais;

144.0

número real positivo com uma casa decimal;

-13.3

número real negativo com uma casa decimal;

0.0

número real com uma casa decimal;

Como forma de melhor representarmos os números reais, os trabalharemos sempre com as casas decimais, independente de ser um valor zero. Por exemplo: 8


1,2 – Valor real; 2,0 – Valor real; 2 – Valor inteiro;

5.2.

Dados Lógicos

A existência deste tipo de dado é, de certo modo, um reflexo da maneira como os computadores funcionam. Muitas vezes, estes tipos de dados são chamados de booleanos. O tipo de dados lógico e usado para representar dois únicos valores lógicos possíveis: verdadeiro e falso. E comum encontrar-se em outras referências outros tipos de pares de valores lógicos como sim/não, 1/0, true/false. Nos

algoritmos

apresentados

neste

texto

os

valores

lógicos

serão

representados conforme abaixo, inclusive com os pontos: .V.

- valor lógico verdadeiro;

.F.

- valor lógico falso;

5.3.

Dados literais ou caracter

São caracterizadas como tipo literal às seqüências contendo letras, números e símbolos especiais. Uma seqüência de caracteres deve ser indicada entre aspas duplas (“”). Este tipo de dado também pode ser conhecido como alfanumérico, string ou cadeia. Exemplos: "QUAL ?"

- literal de comprimento 6;

""

- literal de comprimento 1;

"qUaL ?!$"

- literal de comprimento 8;

"AbCdefC Hi"

- literal de comprimento 10;

"1-2+3="

- literal de comprimento 6;

"0"

- literal de comprimento 1 ;

Note que, por exemplo, "1.2" representa um dado do tipo literal de comprimento 3, constituído pelos caracteres "1","." e "2", diferindo de 1.2 que e um dado do tipo real.

9


5.4.

Dados caracter

São dados semelhantes aos literais diferindo que este aceita apenas um único caractere. Um dado do tipo caracter deve ser indicado entre aspas simples (‘’) Exemplo: •

Para representar o sexo de uma pessoa podemos utilizar apenas uma letra (‘M’ ou ‘F’);

5.5.

Exercícios

1) Classifique os dados a seguir conforme o seu tipo. I - Inteiros R - Reais L - Literais B - Lógicos (ou Booleanos) N - Aqueles que a principio não podemos definir o tipo C - Caracter a) b) c) d) e) f) g) h) i) j) k) l) m) n) o) p) q) r) s) t) u)

( )0 ( )1 ( ) 0.0 ( ) -1 ( ) -32 ( ) "Fim de Questão" ( ) -0.001 ( ) +0.05 ( ) .V. ( ) 'a' ( ) “abc” ()V ( )”+3257” ( )F ( ) '+3257.” ( ).F ( ) +36 ( ) “-0.0” ( ) 'V' ( ) '.F.' ( ).F.

2) Classifique os dados a seguir conforme o seu tipo.

I - Inteiros 10


R - Reais L - Literais B - L贸gicos (ou Booleanos) C - Caracter a) b) c) d) e) f) g)

( ( ( ( ( ( (

) Nome ) Idade ) Sexo ) Peso ) Data ) CPF ) Altura

11


6. Variáveis Vimos no capitulo anterior que em um algoritmo trabalhamos dados de vários tipos, agora precisamos saber como iremos trabalhar com ela. Quando algum dado é processado pelo computador ele será armazenado na memória, mas não podemos colocar lá de qualquer forma, pois corremos o perigo de quando precisar dela não a encontrar. Imaginamos uma grande estante com muitas gavetas onde guardamos nossas coisas. Quando precisarmos de algo será complicado de acharmos, mas se de alguma forma identificarmos cada gaveta (com uma etiqueta, por exemplo) tudo fica mais fácil, pois poderemos ir direto no local correto sem precisar procurar por tudo. Com a memória funciona de forma semelhante, daremos nomes para áreas onde iremos guardar as informações e quando precisarmos saberemos onde ela se encontra. A essa área da memória damos o nome de Variável. Para utilizarmos essas variáveis devemos definir que tipo de dado será armazenado nela (inteiro, real, literal, caracter ou lógico), pois uma variável do tipo inteiro não pode, por exemplo, armazenar um valor lógico. Devemos também dar um nome para essa variável, nome esse que possui algumas regras para ser formado: a) Começar com uma letra; b) Os demais caracteres podem ser letras, números ou ‘_’; c) Não podemos colocar como nome variáveis palavras utilizadas pelo algoritmo como comandos como escreva, leia, var, etc.. d) Procure dar nomes “sugestivos” para suas variáveis, fica muito mais fácil saber o que guardamos na variável chamada Idade, já em uma variável chamada PARALELEPIPEDO fica complicado. Exemplos: Salário

Correto

1ano

Errado (não começou com uma letra)

Ano1

Correto

A casa

Errado (contém o caractere branco) 12


6.1.

Sal/hora

Errado (contém o caractere "/")

Sal_hora

Correto

_desconto

Errado (não começou com uma letra)

Exercícios

1) Na lista a seguir, assinale com V os nomes de variáveis válidos e com I os inválidos. a) b) c) d) e) f) g) h) i) j) k) l) m) n) o) p) q)

( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (

) ABC ) 123A )_ ) A123 ) ABCDE ) 3ABC ) _A ) Aa ) _1 ) _a123 ) Etc... )A ) Acd1 )1 ) A0123 ) B312 ) Variavel

13


7. Expressões O conceito de expressão em termos computacionais esta intimamente ligado ao conceito de expressão (ou fórmula) matemática, onde um conjunto de variáveis e constantes numéricas relacionam-se, por meio de operadores, compondo uma formula que, uma vez avaliada, resulta num valor. Dependendo desse valor resultante, definimos 3 tipos de expressões: • Aritméticas; • Literais; • Lógicas;

7.1.

Expressões aritméticas

Expressões aritméticas são aquelas cujo resultado da avaliação é do tipo numérico, seja inteiro ou real. Somente o uso de operadores aritméticos e variáveis numéricas é permitido em expressões deste tipo. Os operadores aritméticos relacionados às operações aritméticas básicas estão sumarizados na tabela. Operador + * / + Div Resto

Operação Adição Subtração Multiplicação Divisão Manutenção de sinal Inversão de sinal Parte inteira da divisão Resto da divisão

As variáveis usadas em expressões aritméticas podem somente ser do tipo inteiro ou real. Resultados de expressões aritméticas:

Inteiro Inteiro

+ * + *

Inteiro

= Inteiro

Real

= Real

14


+ * + *

Real Real Inteiro Inteiro Real Real Inteiro Inteiro

Inteiro

= Real

Real

= Real

Inteiro Real / Inteiro Real DIV Inteiro RESTO Inteiro

= Real = Inteiro = Inteiro

Repare pela tabela acima que sempre que tivermos um valor real na expressão, o resultado será real, e em uma divisão o resultado sempre será real.

7.2.

Expressões Lógicas

Expressões lógicas são aquelas cujo resultado da avaliação e um valor lógico. (.V. ou .F.). Os operadores lógicos são mostrados na tabela. Operador .OU. .E. .NÃO

Prioridade 3 2 1

Para exemplificar o uso de operadores lógicos, a tabela verdade a seguir apresenta duas variáveis lógicas A e B. Uma vez que cada variável lógica possui somente dois valores possíveis, então há exatamente quatro combinações para estes valores, razão pela qual a tabela tem quatro linhas. As diversas colunas contêm os resultados das operações lógicas sobre as combinações possíveis dos valores das variáveis A e B. A .F. .F. .V. .V.

B .F. .V. .F. .V.

.NÃO. A .NÃO.B A .OU. B .V. .V. .F. .V. .F. .V. .F. .V. .V. .F. .F. .V.

A .E. B .F. .F. .F. .V.

- O operador lógico .NÃO. sempre inverte o valor de seu operando. Ex.: .NÃO..V. =.F. e .NÃO. .F. = .V.; - Para que a operação lógica .OU. tenha resultado verdadeiro basta que um de 15


seus operandos seja verdadeiro; Para melhor visualizar este efeito, podemos imaginar que as variáveis lógicas A e B são como dois interruptores ligados em paralelo num circuito de acionamento de uma lâmpada.

Neste exemplo, um interruptor fechado (e que, portanto, permite a passagem de corrente elétrica) representa uma variável lógica cujo valor é verdadeiro (.V.). Por outro lado, um interruptor aberto representa uma variável lógica com valor falso (.F.). No circuito, para que a lâmpada acenda basta que um dos interruptores esteja fechado. Analogamente, para que a operação lógica .OU. tenha resultado verdadeiro (.V.) basta que apenas um dos operandos possua valor lógico .V. Por outro lado, para que a operação lógica .OU. possua resultado .F. (para que a lâmpada esteja apagada) e necessário que os dois operandos possuam valor .F. (e necessário que os dois interruptores estejam abertos). Para que a operação lógica .E. tenha resultado verdadeiro é necessário que seus dois operandos tenham valor lógico .V.. Em termos de um circuito elétrico, uma operação lógica .E. pode ser representada por dois interruptores ligados em série.

Nota-se no circuito acima que a lâmpada somente estará acessa quando os dois interruptores (A e B) estiverem fechados. Por outro lado, basta que um dos interruptores (A ou B) esteja aberto para que a lâmpada não acenda. Da mesma forma, a operação lógica .E. só resulta em .V. quando A e B forem iguais a .V., 16


ainda, para que a operação lógica .E. resulte em .F. basta que um de seus operadores seja .F.. Ha, ainda, outro tipo de operador que pode aparecer em operações lógicas os operadores relacionais, mostrados na tabela. Operador = <> < <= > >= Estes

operadores

são

Comparação Igual Diferente Menor Menor ou igual Maior Maior ou igual

somente

usados

quando

se

deseja

efetuar

comparações. Comparações só podem ser feitas entre objetos de mesma natureza, isto e, variáveis do mesmo tipo de dado. O resultado de uma comparação é sempre um valor lógico. O uso de operadores relacionais possibilita o aparecimento em expressões lógicas de variáveis de outros tipos de dados que não o lógico. Exemplo: sejam A e B variáveis lógicas, X e Y variáveis reais, e R. S e T variáveis literais, com os respectivos valores: A = .V. , B = .F., X = 2.5, Y = 5.0, R = "JOSÉ", S = "JOÃO" e T = "JOÃOZINHO" A tabela seguinte contém algumas expressões lógicas contendo estas variáveis. Expressão A .OU. B A .E. B . NÃO. A X=Y X = (Y/2) R=S S=T R<>S R>S S>T (( A .OU. B) .OU. (XY) .OU. (ST))

→ → → → → → → → → → →

Resultado .V. .F. .F. .F. .V. .F. .F. .V. .V. .F. .V. 17


Um resultado interessante de ser observado e o da expressão S > T. ou seja, "JOÃO" > "JOÃOZINHO", cujo resultado é falso. A primeira pergunta que surge deve ser com relação à maneira como é feita tal comparação. Para tal, deve-se recorrer à tabela de códigos ASCII. Tal tabela estabelece para cada caractere um código diferente. De acordo com este código e possível comparar dois dados de tipo literal, comparando os caracteres dos mesmos da esquerda para a direita. Ao comparar os literais "JOSÉ" e "JOÃO", verificamos que seus dois primeiros caracteres (J e o) são iguais, mas que "S" é maior que "A", segundo a tabela ASCII. Portanto "JOSÉ" e maior que "JOÃO". Estes tipos de comparação são muito úteis na ordenação alfabética de variáveis literais. Outra forma é imaginar as duas palavras em um dicionário, a primeira viria primeiro que a segunda, então a segunda é maior.

7.3.

Expressões Literais

Expressões literais são aquelas cujo resultado da avaliação é um valor literal. Este tipo de expressão é bem menos freqüente que os anteriores. Os tipos de operadores existentes variam de uma linguagem de programação para outra, não havendo uma padronização. Para que o assunto não passe em branco, considere-se como exemplo a operação de concatenação de strings: tome-se duas strings e acrescenta-se (concatena-se) a segunda delas ao final da primeira. Em algumas linguagens esta operação é representada pelo símbolo (operador) (+). Por exemplo, a concatenação das strings "REFRIGERA" e "DOR" e representada por "REFRIGERA" + "DOR" e o resultado de sue avaliação e "REFRIGERADOR".

7.4.

Exercícios

1) Dada a declaração de variáveis VAR

A, B, C

: inteiro

X, Y, Z

: real

NOME, RUA

: literal

L1, L2

: lógico

Classifique as expressões seguintes de acordo com o tipo de dado do resultado de sua avaliação: 18


I - Inteiros R - Reais L - Literais B - Lógicos (ou Booleanos) N - Aqueles que a principio não podemos definir o tipo a) ( ) A + B + C b) ( ) A + B + Z c) ( ) A > Y d) ( ) NOME > RUA e) ( ) NOME + RUA f) ( ) L1.OU. L2 g) ( ) A > B = L1 h) ( ) X + Y / Z i) ( ) (RUA <> NOME) .E. (. NÃO. (A = B)) j) ( ) A + B / C k) ( ) X + Z / A l) ( ) A + X / Z m) ( ) A + Z / A n) ( ) A > B 2) Para as mesmas variáveis declaradas no exercício anterior, às quais são dados os valores seguintes: A=1

X = 2.0

NOME = “X”

B=2

Y = 10.0

RUA = “Y”

C=3

Z = -1.0

L1 = .V.

L2 = .F. Determine o resultado da avaliação das expressões abaixo: a) A + C / B b) A + B / C c) C / B / A d) X * B e) NOME + RUA f) NOME = RUA 19


g) L1 .OU. L2 h) (L1 .E. (.NÃO. L2)) i) (L2 .E. (.NÃO. L1)) j) (L1 .E. (.NÃO. L2)) .OU. (L2 .E. (.NÃO. L1)) k) X > Y .E. C <= B l) (C - 3 * A) < (X + 2 * Z) 3) Indique o resultado das seguintes expressões: a) 5/2 b) 5 DIV 2 c) 5 RESTO 2 d) (200 DIV 10) RESTO 4 e) 5 > 7 f) (7<8) .OU. (9<8) g) (((10 DIV 2) RESTO 6)>5) .E. (3<(2 RESTO 2)) .E. (.NÃO.(2<3)) 4) Crie tabelas verdade para as expressões lógicas a seguir: a) (A .OU. B).E.(.NÃO. A) b) (A .OU. B).E.(.NÃO. (A .OU. B)) c) (A .E. (NÃO .B.))

20


8. Estrutura de um algoritmo Como comentado anteriormente, na construção de um algoritmo devemos seguir regras, além disso, devemos seguir a estrutura dele. Algoritmo <nomedoalgoritmo> Var <Variáveis> inicio <comandos> fim.

8.1.

Nome do algoritmo

Na estrutura acima temos na primeira linha o nome do algoritmo. Para darmos esse nome devemos utilizar as mesmas regras utilizadas para nomes de variáveis.

8.2.

Declarando variáveis

Na declaração Var devemos declarar as variáveis (aquelas áreas de memória, lembram?). Para declararmos deveremos utilizar a seguinte sintaxe: Nome da variável: Tipo Exemplos: var Nome: Literal Idade: inteiro Peso, altura: Real Rua: Literal Reparem que no terceiro exemplo foram declaradas duas variáveis de uma única vez, isso pode ser feito com várias variáveis desde que elas sejam do mesmo tipo.

8.3.

Corpo do algoritmo

Entre os comando Inicio e Fim será desenvolvido nosso algoritmo. Nele todo a seqüência lógica para a resolução do problema. 21


9. Instruções Primitivas Como o próprio nome diz, instruções primitivas são os comandos básicos que efetuam tarefas essenciais para a operação dos computadores, como entrada e saída de dados (comunicação com o usuário e com os dispositivos periféricos), e movimentação dos mesmos na memória. Estes tipos de instrução estão presentes na absoluta maioria das linguagens de programação. De fato, um programa que não utilize nenhuma instrução primitiva - como as que serão definidas neste capítulo - é incapaz de se comunicar com o mundo exterior e, portanto não tem utilidade alguma.

9.1.

Instrução Primitiva de Atribuição

A instrução primitiva de atribuição, ou simplesmente atribuição, é a principal maneira de se armazenar uma informação numa variável. Sua sintaxe é: <nome_de_variável> ← <expressão> Exemplo: ALGORITMO Teste Var Número: INTEIRO Início Número ← 10 Fim. O Exemplo acima nos informa que: a) Foi definida uma variável, a qual demos o Nome de “Número”, e informamos que esta variável, ou posição de memória, só poderá aceitar dados que sejam inteiros. b) Atribuímos à variável “Número” o valor 10

9.2.

Instrução Primitiva de Saída de Dados

O algoritmo anterior não é prático, pois, apesar do computador ter calculado um determinado valor ou armazenado o mesmo na variável Número, este valor ficou retido na memória do computador e não foi mostrado ao usuário, o maior interessado no mesmo. As instruções primitivas de saída de dados são o meio pela qual informações contidas na memória dos computadores são colocadas nos dispositivos 22


de saída, pare que o usuário posse apreciá-las. Ha duas sintaxes possíveis pare esta instrução: Escreva <lista_de_variáveis> ou Escreva <literal> Algoritmo EXEMPLO Var Preço_unit Preço_tot : real Quant : inteiro Início Preço_unit ← 5.0 Quant ← 10 Preço_tot ← Preço_unit * Quant Escreva Preço_tot Fim. Algoritmo EXEMPLO Var Preço_unit Preço_tot : real Quant : inteiro Início Preço_unit ← 5.0 Quant ← 10 Preço_tot ← Preço_unit * Quant Escreva “Resultado ”, Preço_tot Fim. Algoritmo EXEMPLO Var Preço_unit Preço_tot : real Quant : inteiro Início Preço_unit ← 5.0 Quant ← 10 Preço_tot ← Preço_unit * Quant Escreva “Resposta” Escreva Preço_tot Fim. Daqui por diante, Escreva será considerada uma palavra reservada não mais poderá ser utilizada como nome de variável, de modo que toda vez que for encontrada em algoritmos será identificada como um comando de saída de dados. Uma lista_de_variáveis é um conjunto de nomes de variáveis separados por vírgulas. Um literal é simplesmente um dado do tipo literal delimita por aspas, e 23


aparecerá exatamente como foi escrito.

9.3.

Instrução Primitiva de Entrada de Dados

O algoritmo anterior ainda carece de uma melhoria essencial. Toda vez que ele é executado, o mesmo valor é calculado, já que os valores das variáveis Preço_unit e Quant permanecem inalterados. Seria interessante que estes valores pudessem ser fornecidos ao computador pelo usuário do programa toda vez que o programa fosse executado, pare que o usuário tivesse um maior controle sobre o valor calculado. A instrução primitiva de entrada de dados foi criada para suprir esta necessidade. Sua sintaxe é: Leia <lista_de_variáveis> 1 2 3 4 5 6 7 8 9 10 11 12

Algoritmo EXEMPLO Var Preço_unit Preço_tot : real Quant : inteiro Início Escreva “Informe valor unitário: ” Leia Preço_unit Escreva “Quantidade: ” Leia Quant Preço_tot ← Preço_unit * Quant Escreva Preço_tot Fim. Neste exemplo as linhas foram numeradas para um melhor entendimento. A execução do algoritmo acima é inicializado pela declaração das variáveis

(linhas 2 á 4), onde elas serão criadas em memória. Depois disso é que a execução propriamente dita irá iniciar. Linha 6 - Uma mensagem é enviada para o vídeo. Linha 7 – Neste momento a execução é parada esperando uma resposta do usuário, já que o comando leia pede que seja digitado algo e pressionado enter a seguir o dado informado será armazenado na variável Preço_unit. Linha 10 – Um calculo é realizado e atribuído a variável Preço_tot. Linha 11 – É mostrado o valor armazenado da Preço_tot. Um erro que muitos tem na construção de algoritmos é associar os comandos Escreva e Leia, ou seja, acham que toda vez que tivermos um comando Escreva temos que ter um Leia, e vice-versa. Cuidado ambos os comandos são 24


independentes um do outro.

9.4.

Exercícios

1) Faça um algoritmo/programa para atribuir a variáveis as seguintes informações: a) 12345.0 b) 123456 c) -1122 d) 10 e) .V. f) 12345605 2) No seguinte algoritmo existem erros, encontre e comente-os. Algoritmo teste var Maria: Literal Idade: Inteiro Letra: Literal Maria: Real Inicio Idade  23 Idade  678 Idade  letra Letra  ABC Letra  A Letra  2 Fim. 3) Qual a diferença entre as seguintes atribuições? a) b)

Letra 

'A'

Nome



Letra  A Nome 

“João” João

25


10. Exemplos Neste capitulo serão mostrados alguns exemplos para melhor continuidade do conteúdo. Antes de tentar resolver qualquer algoritmo você deve: •

Ler o enunciado e tentar entende-lo;

Procurar descobrir quais as informações que o usuário possui e quais ele quer receber como resposta.

Além disso, não adianta saber todos os comandos do algoritmo ou de uma linguagem se não sabemos como usa-lo. a) Faça um algoritmo que leia o código e o nome de uma pessoa Algoritmo um Var Cod: inteiro Nome: Literal Inicio Escreva “Código: ” Leia Cod Escreva “Informe nome: ” Leia Nome Fim b) Faça um algoritmo que leia um numero e multiplique pelo numero seguinte a ele. Algoritmo dois Var N1, N2, N3: Real Inicio Escreva “Informe Número” Leia N1 N2N1+1 N3N2 * N1 26


Escreva “Resultado: ”, N3 Fim O exemplo acima também pode ser resolvido da seguinte maneira. Algoritmo dois Var N1, N3: Real Inicio Escreva “Informe Número” Leia N1 N3(N1+1) * N1 Escreva “Resultado: ”, N3 Fim Repare nos parênteses, caso eles não existissem a multiplicação seria feita primeiro, tornando a resposta incorreta. c) Um cliente comprou em uma loja dois produtos (A e B). O usuário deverá entrar com o preço unitário e quantidade dos produtos. Ao final, mostrar o valor a ser pago e o valor do desconto dado (17% de desconto). Algoritmo tres Var P1, P2, Q1, Q2, T1, T2: Real Inicio Escreva “Primeiro preço: ” Leia P1 Escreva “Segundo preço: ” Leia P2 Escreva “Primeira qtde: ” Leia Q1 Escreva “Segunda qtde: ” Leia Q2 T1 P1 * Q1 + P2 * Q2 T2  T1 * 0.17 Escreva “Total: ”, T1 Escreva “Total do desconto: ”, T2 27


Fim d) Faça um algoritmo para calcular a comissão do vendedor de dois produtos. O usuário entra com o preço unitário, quantidade dos produtos e comissão. Ao final, mostrar o total das vendas e a comissão que o vendedor ganhou. Algoritmo quatro Var P1, P2, Q1, Q2, T1, T2, C: Real Inicio Escreva “Primeiro preço: ” Leia P1 Escreva “Segundo preço: ” Leia P2 Escreva “Primeira qtde: ” Leia Q1 Escreva “Segunda qtde: ” Leia Q2 Escreva “Comissão: ” Leia C T1 P1 * Q1 + P2 * Q2 T2  T1 * (C/100) Escreva “Total: ”, T1 Escreva “Total da comissão: ”, T2 Fim Note que não podemos trabalhar diretamente com as percentagens em um algoritmo. Para realizarmos deveremos imaginar como faríamos um calculo desse tipo caso não haja a tecla “%” na mesma. Exemplos: a) Temos um valor A e queremos adicionar 10%; X A * 1.1 b) Temos um valor A e queremos adicionar uma percentagem B; X A * (1+B/100) c) Temos um valor A e queremos retirar 10%; X A * 0.9 d) Temos um valor A e queremos retirar uma percentagem B; 28


X A * (1-B/100) Para entender esses exemplos apresentados poderemos utilizar uma regra de 3 da matemática Para o exemplo A seria a seguinte: 100% – 1 110% – X 100 X=110 x=1.1 Para o exemplo C seria a seguinte: 100% – 1 100% - B% – X 100X = 100 – B X=1-B/100

10.1.

Exercícios

1) Faça um algoritmo/programa para ler as seguintes informações de uma pessoa: Nome, Idade, Sexo, Peso, Telefone. 2) Faça um algoritmo/programa para fazer o cálculo do quadrado de um número, ou seja, o produto de um número por si mesmo. 3) Escreva um algoritmo/programa para calcular a média entre dois números quaisquer. 4) Escreva um algoritmo/programa pare calcular o valor de y na seguinte função y= 3x + 2. 5) Faça um algoritmo/programa para ler a base e a altura de um triângulo. Em seguida, escreva a área do mesmo. Obs.: Área = ( Base * Altura ) / 2 6) Dado um valor em graus Fahrenheit transforme-o para graus Celsius (lembrese que a fórmula para transformar um valor dado em graus Celsius para graus Fahrenheit é a seguinte): C=

( F − 32) * 5 9

7) Dado um valor de hora, minuto e segundo, faça um algoritmo/programa que transforme em segundos todas estas informações e mostre este resultado no vídeo. 8) Escreva um algoritmo/programa pare calcular o consumo médio de um automóvel (media em Km/l), dado que são conhecidos a distância total percorrida e o volume de combustível consumido pare percorrê-la.

29


9) Dado nome e três (3) notas de um aluno, onde as notas têm os respectivos pesos: 1, 2 e 3, faça um algoritmo/programa que mostre o nome e a média do aluno. Lembre-se que a fórmula para calcular a média é: Média =

( N 1 *1 + N 2 * 2 + N 3 * 3) (1 + 2 + 3)

10) Dado nome, as três (3) notas de um aluno, e o peso de cada uma das notas, faça um algoritmo/programa que mostre o nome e a média do aluno. 11) Dado nome, preço de compra e o preço de venda de uma mercadoria, faça um algoritmo/programa que mostre o nome e o lucro obtido com a venda da mesma. 12) Dado nome do vendedor, quantidade de produtos que o mesmo vendeu durante o mês e o preço unitário do produto, faça um algoritmo/programa que mostre nome do vendedor e o valor total obtido com as vendas. 13) Dado nome do vendedor, quantidade de produtos que o mesmo vendeu durante o mês, preço unitário do produto e o percentual de comissão pago para o vendedor, faça um algoritmo/programa que mostre nome do vendedor, o total obtido com as vendas e o valor de comissão a ser pago. 14) Um caixa eletrônico possui apenas notas de 1, 10 e 100. Um cliente digita um determinado valor neste caixa eletrônico e espera receber uma determinada quantidade de notas. Faça o algoritmo/programa para calcular a quantidade de notas de cada um dos tipos acima citados que o cliente deverá receber (você poderá facilmente resolver este exercício se usar os operadores DIV e RESTO). Exemplo: Valor digitado: 348 Notas de 100

:

3

Notas de 10

:

4

Notas de 1

:

8

15) Ler as seguintes informações de um funcionário: Nome, idade cargo e o seu salário bruto. Considere: a) O salário bruto teve um reajuste de 38%. b) O Salário total é descontado em 15% E escrever os seguintes resultados: • Escreva nome, idade e cargo. • Escreva o salário bruto. • Escreva o salário líquido.

16) Uma empresa tem para um determinado funcionário uma ficha contendo o nome, número de horas trabalhadas e o n0 de dependentes de um funcionário. Considerando que: a) A empresa paga 12 reais por hora e 40 reais por dependentes. b) Sobre o salário são feito descontos de 8,5% para o INSS e 5% para IR. 30


Leia o Nome, número de horas trabalhadas e número de dependentes de um funcionário. Após a leitura, escreva o nome, salário bruto, os valores descontados para cada tipo de imposto e finalmente qual o salário líquido do funcionário. 17) 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 a percentagem do revendedor (28% do preço de fábrica). Leia o nome do automóvel e o preço de fábrica e escreva o nome do automóvel e o preço final. 18) Peça para o usuário digitar: Nome, salário bruto e o percentual de desconto de um funcionário qualquer. Após, imprima no vídeo o nome digitado, salário bruto e o salário líquido. 19) Peça para o usuário digitar: Nome, salário bruto e o percentual de acréscimo de um funcionário qualquer. Após, imprima no vídeo o nome digitado, salário bruto e o salário líquido. 20) Peça para o usuário digitar: Nome, quantidade de horas trabalhadas, o valor pago pôr hora de trabalho e o percentual de desconto de um funcionário qualquer. Após, imprima no vídeo o nome digitado, salário bruto e o salário líquido. 21) Em uma fábrica trabalham uma quantidade X de homens e uma quantidade Y de mulheres. Peça para o usuário digitar estas quantidades, e após a entrada destes dados imprima: Total de pessoas que trabalham nesta fábrica, o percentual de homens e o percentual de mulheres com relação ao total de funcionários.

31


11. Armazenado literais Uma informação do tipo literal nada mais é do que um conjunto de caracteres que podem ser letras, dígitos ou símbolos especiais. Exemplificando, a informação do tipo literal "BANANA" possui seis caracteres e, portanto, seis posições são utilizadas. Estes caracteres terão suas posições numeradas de forma continua e partir de 0. Posição 0 1 2 3 4 5

Informação B A N A N A

A figura mostra o caso em que se armazena a literal "BANANA". Tendo isso em mente, poderemos acessar quaisquer um dos elementos. Para isso utilizaremos: nome da variável + [ +posição desejada + ] Algoritmo um Var P1: Literal P2: Inteiro Inicio Escreva “Informe Palavra: ” Leia P1 Escreva “Informe posição: ” Leia P2 Escreva “Caracter: ”, P1[P2] Fim

11.1.

Exercícios

1) Ler um LITERAL em forma de data. Exemplo: “26/09/95” e escrever o dia, mês e ano desta data todos em separados. 2) Faça um programa que solicite ao usuário a data do dia na forma DD/MM/AA. Imprima a data na tela no seguinte formato: AA/MM/DD.

32


12. Estruturas de decisão Neste tipo de estrutura o fluxo de instruções a ser seguido é escolhido em função do resultado da avaliação de uma ou mais condições. Uma condição é uma expressão lógica. A classificação das estruturas de decisão é feita de acordo com o número de condições que devem ser testadas pare que se decide qual o caminho a ser seguido. Segundo esta classificação temos dois tipos de estruturas de decisão: − Se − Escolha

12.1.

Estruturas de decisão do Tipo Se

Nesta estrutura uma única condição (expressão lógica) é avaliada. Se o resultado desta avaliação for verdadeiro (.V.), então um determinado conjunto de instruções (comando composto) é executado. Caso contrário, ou seja, quando resultado da avaliação for falso (.F.), um comando diferente é executado. A execução do algoritmo prosseguirá necessariamente por um deles. Esta escolha e feita em função do resultado da expressão: um dos caminhos é rotulado com (.V.) e será seguido quando a condição for verdadeira o outro e rotulado com (.F.) e será seguido quando a condição for falsa.

Se <Condição> Então <Comando_Composto_1> Senão <Comando_Composto_1> Fimse A semântica desta construção é a seguinte: a condição é avaliada, se o resultado for verdadeiro, então o comando_composto_1 é executado. Ao término de sua execução o fluxo do algoritmo prossegue pela instrução seguinte a construção, ou seja, o primeiro comando após o Fimse. Nos casos em que a condição e avaliada como falsa, o comando_composto_2 é executado e, ao 33


término do mesmo, o fluxo de execução prossegue pela primeira instrução seguinte ao Fimse. Há casos particulares e muito comuns desta construção, onde o comando_composto_2 e um conjunto vazio de instruções. Neste caso, a porção relativa ao Senão pode ser omitida, resumindo a sintaxe da construção forma mostrada a seguir.

Se <Condição> Então <Comando_Composto_1> Fimse A semântica desta construção e a seguinte: no caso da condição seja verdadeira, o comando_composto_1 é executado e, após seu término, o fluxo de execução prossegue pela próxima instrução após o Fimse. Quando a condição e falso, o fluxo de execução prossegue normalmente pela primeira instrução após o Fimse.

12.1.1.

Exemplos

a) Faça um algoritmo onde o usuário irá digitar a idade de uma pessoa, após de uma mensagem informando se a mesma é maior ou menor de idade. Algoritmo um Var Idade: inteiro Início Escreva “Informe idade: ” Leia Idade Se Idade >= 18 Então Escreva "Maior de idade" Senão Escreva "Menor de idade" Fimse 34


Fim. b) Em uma loja de CDs, cada item possui um estoque e também um estoque mínimo (caso o estoque estiver abaixo deverá ser reposto o estoque). Faça um algoritmo que leia o estoque e o estoque mínimo de um determinado CD após mostre no vídeo se existe ou não a necessidade de reposição, no case de sim, deverá avisar a quantidade necessária para regularizar o estoque. Algoritmo dois Var E1, E2, QN: Real Início Escreva “Estoque: ” Leia E1 Escreva “Estoque mínimo: ” Leia E2 Se E1>= E2 Então Escreva "Não existe necessidade de reposição" Senão QNE1-E2 Escreva “São necessários ”,QN,” CDs para regularizar o estoque” Fimse Fim. c) Uma papelaria faz cópias de documentos (xerox) pelos seguintes valores: a. De 1 a 10 cópias, R$ 0.10; b. De 11 a 50 cópias, R$ 0.08; c. De 51 a 100 cópias, R$ 0.06; d. Acima de 100 cópias, R$ 0.05; Sendo que o usuário informará a quantidade de cópias e o valor da encadernação (todas cópias irão ser encadernadas juntas), mostre no vídeo o valor a receber pela papelaria. Algoritmo Tres Var Qc: inteiro E, V :Real Início Escreva “Qtde de cópias: ” Leia QC Escreva “Valor encadernação: ” Leia E Se QC <=10 Então VQC * 0.1 + E Senão Se QC<= 50 Então VQC * 0.08 + E Senão Se QC<= 100 Então 35


Fim.

VQC * 0.06 + E Senão VQC * 0.05 + E FimSe FimSe FimSe Escreva “O valor a ser pago é :”,V

12.1.2.

Exercícios

1) Dado o preço de uma mercadoria, dê um desconto de 10% se este preço for superior a R$10,00. 2) Escreva um algoritmo/programa para determinar o maior entre dois números reais dados. 3) Faça um algoritmo/programa que leia os valores A, B, C, e diga se a soma de A + B é menor que C. 4) Faça um algoritmo/programa que leia dois valores inteiros A e B, e se os valores forem iguais deverá se somar os dois, caso contrário multiplique A por B. 5) Faça um algoritmo/programa que leia o nome e as três notas de uma disciplina de um aluno e ao final escreva o nome do aluno, sua média e se ele foi aprovado a média é 8. 6) Escreva um algoritmo/programa para determinar se uma pessoa é maior ou menor de idade. 7) Dado a quantidade de homens e mulheres em uma fábrica, mostre no vídeo qual destes dois grupos possui a maior quantidade de representantes. Imagine que as quantidades sejam diferentes. 8) Dado o nome e a média de dois alunos, imprima no vídeo o nome e a média do aluno que possui a maior média (considere que as médias sejam diferentes). 9) Dado um número qualquer, imprimir uma mensagem no vídeo informando se o mesmo é positivo ou negativo. Imagine que o número seja diferente de zero. 10) Dado um número inteiro positivo, imprimir uma mensagem no vídeo informando se o mesmo é par ou ímpar (utilize o operador RESTO para resolver esta questão). 11) Uma empresa decide dar um aumento de 30% aos funcionários cujo salário é inferior a 5.000. Escreva um algoritmo/programa que possa ser utilizado para efetuar o cálculo do salário reajustado de um funcionário. 12) Faça um algoritmo/programa que leia 3 números inteiros e escreva o menor deles. 13) Faça um algoritmo/programa que leia 3 números inteiros e escreva o maior deles.

36


14) Dado nome e idade de uma pessoa, mostre no vídeo o seu nome e a seguinte mensagem: a. Criança, se a idade for até 12 anos. b. Adolescente se a idade estiver entre 12 e 20 anos c. Adulta se a idade for igual ou superior a 20 anos 15) Dado o nome e a média de três alunos, imprima no vídeo o nome e a média do aluno que possui a maior média (considere que as médias sejam diferentes). 16) Uma empresa decide dar um reajuste a seus funcionários de acordo com os critérios seguintes, faça um algoritmo que leia o salário e mostre a novo valor: a. 50% para aqueles que ganham menos de 3.000; b. 20% para aqueles que ganham entre 3.000 e 10.000; c. 15% para os demais. 17) Dados três valores distintos, fazer um algoritmo/programa que, após a leitura destes dados coloque-os na tela em ordem crescente. 18) Dados três valores distintos, fazer um algoritmo/programa que, após a leitura destes dados coloque-os na tela em ordem decrescente. 19) Dado o preço de uma mercadoria e a sua categoria (A ou B) dê um desconto em seu preço de acordo com a seguinte regra: d. 5%: se for da categoria A e o preço for superior ou igual a $100,00 e. 8%: se for da categoria A e o preço for inferior a $100,00 f. 10%: se for da categoria B e o preço for superior ou igual a $50,00 g. 12%: se for da categoria B e o preço for inferior a $50,00 20) Dados três valores X, Y, Z, verificar se eles podem ser os comprimentos dos lados de um triângulo, e se forem, verificar se é um triângulo eqüilátero, isósceles ou escaleno. Se eles não formarem um triângulo, escrever uma mensagem. Antes da elaboração do algoritmo/programa, torna-se necessária à revisão de algumas propriedades e definições. h. O comprimento de cada lado de um triângulo é menor do que a soma dos comprimentos dos outros dois lados. i.

Chama-se triângulo eqüilátero aquele que tem os comprimentos dos três lados iguais,

j.

Chama-se triângulo isósceles aquele que tem os comprimentos de dois lados iguais.

k. Chama-se triângulo escaleno aquele que tem os comprimentos dos três lados diferentes. 21) Uma locadora de filmes possui três categorias: A – romance, 37


B – Drama, C – Terror, Cada uma destas categorias, têm uma determinada quantidade de filmes em catálogo. Sabe-se que a locadora adquiriu uma determinada quantidade de filmes, todos de uma mesma categoria. Para isto tem-se: A quantidade comprada e a categoria (A,B ou C) a qual estes filmes se enquadram. Mostre no vídeo as quantidades de filmes que ficarão em catálogo, de cada categoria, após a compra ter sido feita. 22) Uma loja dividiu suas mercadorias dentro de categorias indicadas pôr cores: Azul, Verde e Vermelho. As cores têm pôr finalidade indicar um determinado desconto especial que o cliente irá pagar. Tais descontos são os seguintes: •

Azul, a mercadoria tem 50% de desconto sobre o preço de venda.

Verde, a mercadoria tem 30% de desconto sobre o preço de venda.

Vermelho, a mercadoria tem 20% de desconto sobre o preço de venda.

Para enquadrar uma mercadoria dentro de uma das categorias acima, a loja utiliza a seguinte fórmula: X=

PV − PC *100 PC

Onde PC = Preço de compra e PV = preço de venda A relação de enquadramento é dada pela seguinte regra: •

Grupo azul, se X for menor que 10.

Grupo verde, se X for de 10 até 25.

Grupo vermelho se X for maior que 25

Dado Nome da mercadoria, preço de compra e o preço de venda, imprima no vídeo o nome da mercadoria, grupo a qual ela pertence e o preço que o cliente deverá pagar, já com o desconto. 23) Para cada funcionário de uma loja sabe-se: número de horas trabalhadas, valor pago pela loja pôr hora de trabalho, nome do funcionário e o seu tempo de serviço. A loja irá dar um abono para os funcionários de acordo com o seguinte critério: •

Abono de 5% se o tempo de serviço for inferior a cinco anos.

Abono de 10% se o tempo de serviço for de 5 a 10 anos.

• Abono de 15% se o tempo de serviço for superior a 10 anos. Mostre no vídeo o nome de cada funcionário, salário bruto, tempo de serviço e o salário líquido (com o abono).

12.2.

Estruturas de decisão do Tipo Escolha

Este tipo de estrutura é uma generalização da estrutura Se, onde somente uma condição era avaliada e dois caminhos podiam ser seguidos. Na estrutura de decisão do tipo Escolha pode haver uma ou mais condições a serem testadas e um 38


comando composto diferente associado a cada uma destas.

Escolha Caso <Condição_1> <Comando_composto_1> Caso <Condição_2> <Comando_composto_2> ... Caso <Condição_n> <Comando_composto_n> Senão <Comando_composto_s> Fimescolha Seu funcionamento é o seguinte: ao entrar-se numa construção do tipo Escolha, a Condição_1 é testada: se for verdadeira, o comando_composto_1 e 39


executado e, após seu término, o fluxo de execução prossegue pela primeira instrução após o final da construção (Fimescolha); se a Condição 1 for falso, a condição_2 é testada: se esta for verdadeira, o comando_composto_2 e executado e, ao seu término, a execução prossegue normalmente pela instrução seguinte ao Fim escolha. O mesmo raciocínio e estendido a todas as condições da construção. No caso em que todas as condições são avaliadas como falsas, o Comando_composto_s (correspondente ao Senão da construção) e executado. O teste a ser realizado deverá ser sempre de igualdade, utilizando apenas variáveis do tipo Caracter ou Inteiro e em todos os testes a serem apenas uma variável será usada.

12.2.1.

Exemplos

Algoritmo Exemplo2 Var Salário, Sal_reaj: real Categoria: inteiro Início Escreva “Salário” Leia Salário Escreva “Categoria” Leia Categoria Escolha Caso Categoria = 1 Sal_reaj  1.5 * Salário Caso Categoria = 2 Sal_reaj  1.3 * Salário Senão Sal_reaj  1.1 * Salário Fimescolha Escreva “Salário Reajustado = ", Sal_reaj Fim. Um caso particular desta construção e aquele em que o comando_composto_s não contém nenhuma instrução. Isto ocorre nas situações em que não se deseja efetuar nenhuma ação quando todas as condições testadas são falsas. Assim, pode-se dispensar o uso do Senão na construção como acontece também na construção Se.

12.2.2.

Exercícios

1) Faça um algoritmo/programa que leia um número que represente um determinado mês do ano. Após a leitura escreva por extenso qual o mês lido. Caso o número digitado não esteja na faixa de 1..12 escreva uma mensagem informando o usuário do erro da digitação. 2) Uma empresa irá dar um aumento de salário aos seus funcionários de acordo com a categoria de cada empregado. O aumento seguirá a seguinte regra: 40


a) Funcionários das categorias A ganharão 10% de aumento sobre o salário. b) Funcionários das categorias B ganharão 15% de aumento sobre o salário. c) Funcionários das categorias C ganharão 25% de aumento sobre o salário d) Funcionários das categorias D ganharão 35% de aumento sobre o salário. e) Funcionários das categorias demais ganharão 50% de aumento sobre o salário. Faça um algoritmo/programa que escreva Nome, categoria e salário reajustado de cada Empregado. 3) Faça um algoritmo/programa que leia 2 números reais, e peça a operação a ser realizada com eles : 1-Soma, 2- Subtração, 3- Multiplicação, 4- Divisão.

41


13. Estruturas de Repetição São muito comuns as situações em que se deseja repetir um determinado trecho de um programa um certo número de vezes. Por exemplo, pode-se citar o caso em que se deseja realizar um mesmo processamento para conjuntos de dados diferentes. Exemplo: processamento de folha de pagamentos de uma empresa, em que o mesmo cálculo e efetuado pare cada um dos funcionários. As estruturas de repetição são muitas vezes chamadas de Laços ou, também, de Loops. A classificação das estruturas de repetição e feita de acordo com o conhecimento prévio do número de vezes que o conjunto de comandos será executado. Assim, os laços dividem-se em: − laços contados, quando se conhece previamente quantas vezes o comando composto no interior da construção será executado; − laços condicionais, quando não se conhece de antemão o número de vezes que o conjunto de comandos no interior do laço será repetido, pelo fato de o mesmo estar amarrado a uma condição sujeita a modificação pelas instruções do interior do laço.

13.1.

Laços Contados

Os laços contados são úteis quando se conhece previamente o número de vezes que se deseja executar um determinado conjunto de comandos, então, este tipo de laço nada mais e que uma estrutura dotada de mecanismos para contar o número de vezes que o corpo do laço (ou seja, o comando composto em seu interior) e executado. Para <var> de <Início> até <final> incr <inc> faça <Comando_composto> Fimpara A semântica do laço contado é a seguinte: no Início da execução da construção o valor <Início> é atribuído a variável <var>. A seguir, o valor variável <var> é comparado com o valor <final>. Se <var> for maior que <final>, então o comando composto não é executado e a execução do algoritmo prossegue pelo primeiro comando seguinte ao Fimpara. Por outro lado, se valor de <var> for menor ou igual a <final>, então o comando composto interior da construção e executado e, ao final do mesmo, o valor e adicionada variável <var>. Feito isso, retorna-se a comparação entre <var> e <final> repete-se o processo até que <var> tenha um valor maior que <final>, quando o laço é finalizado e a execução do algoritmo prossegue pela instrução imediatamente seguinte ao Fimpara. Algumas observações interessantes devem ser feitas: − <var> é necessariamente uma variável do tipo inteiro, uma vez que seu valor é alterado a cada iteração (volta do laço); − <Início>, <fim> e <inc> podem ser constantes ou variáveis. − <inc> é o valor que é adicionado a variável <var> ao final de cada iteração do laço. Há linguagens de programação que permitem que seja atribuído um valor negativo, de modo que o valor da variável <var> diminui a cada iteração. Neste caso, deve-se atentar à necessidade de inversão do sinal da comparação (de > para <) que e feito cada volta do laço, pare seu correto funcionamento. 42


− Na grande maioria dos casos <inc> tem o valor 1 (incremento unitário). Portanto, admite-se a omissão do trecho incr de <inc> da sintaxe do comando Para e, quando isto ocorre, assume-se um incremento de 1.

13.1.1.

Exemplos

1) Ler um valor e listar os números a partir de um. Algoritmo Um Var A, I : Inteiro Inicio Escreva “Digite um valor” Leia A Para i de 1 até A faça Escreva I FimPara Fim. 2) Somar os números de um até um limite informado pelo usuário. Algoritmo Dois Var A, I, Soma : Inteiro Inicio Escreva ”Digite um valor” Leia A Soma0 Para I de 1 até A faça Soma  soma + I FimPara Escreva Soma Fim. 3) Somar uma quantidade de números, informada pelo usuário, lidos pelo teclado. Algoritmo Tres Var A, I, Soma : Inteiro Inicio Soma0 Para I de 1 até 10 faça Escreva ”Digite um valor” Leia A Soma  soma + A FimPara Escreva Soma Fim. 43


4) Ler 10 números e somar os que são pares. Algoritmo Quatro Var A, I, Soma : Inteiro Inicio Soma0 Para I de 1 até 10 faça Escreva ”Digite um valor” Leia A Se (A resto 2 ) = 0 então Soma  soma + A FimSe FimPara Escreva Soma Fim. 5) Ler um valor N e calcular: Algoritmo Cinco Var N, I, Soma : Inteiro Inicio Soma0 Escreva ”Digite um valor” Leia N Para I de 1 até N faça Soma  soma + ( 1 / I ) FimPara Escreva Soma Fim. 6) Ler um valor N e calcular Algoritmo Seis Var N, I, Soma : Inteiro Inicio Soma0 Escreva ”Digite um valor” Leia N Para I de 1 até N faça Se (I Resto 2) = 0 então Soma  soma - ( 1 / I ) Senão Soma  soma + ( 1 / I ) FimSe FimPara 44


Fim.

Escreva Soma

7) Ler nome e idade de 10 pessoas e informar o mais velho deles. Algoritmo Sete Var I, Idade, Maior : Inteiro Nome, NomeMaior: Literal Inicio Maior0 Para I de 1 até 10 faça Escreva ”Digite o nome” Leia Nome Escreva ”Digite a idade” Leia Idade Se Idade > Maior então NomeMaior  Nome Maior  Idade FimSe FimPara Escreva ”Mais Velho ”, NomeMaior Escreva ”Idade mais velho ”,Maior Fim.

13.1.2.

Exercícios

1) Faça um algoritmo/programa que calcule: Y = 1 + 2 + 3 + 4 + 5 + ... + 1000. 2) Faça um algoritmo/programa que calcule: Y = 1 + 3 + 5 + 7 + 9 + ...+ 999. 3) Peça para o usuário digitar um número inteiro positivo qualquer, digamos N. Após calcule N!. 4) Peça para o usuário digitar dois valores inteiros positivos, digamos A e B. Após calcule “A elevado ao expoente B”. 5) Calcule Y na formula abaixo. Y = 2 - 4 + 6 - 8 + ...± N 6) Um cliente comprou em uma loja N mercadorias, das quais é conhecido: Preço e categoria. A categoria possibilita um desconto especial de acordo com a seguinte tabela: a) Categoria A: desconto de 5% no preço da mercadoria b) Categoria B: desconto de 10% no preço da mercadoria c) Categoria C: desconto de 15% no preço da mercadoria Faça um algoritmo que mostre ao final o valor total desta compra. 7) Uma empresa possui N vendedores que ganham por comissão sobre cada produto vendido. Cada vendedor em um determinado mês vendeu X 45


produtos, onde cada produto tem preço e quantidade. A empresa deseja obter um relatório com o Nome, o total de vendas e o valor a ser pago a cada vendedor. A comissão paga pela empresa é de 30% sobre o valor de cada produto vendido. 8) Dado um número indeterminado de palavras, sendo que cada palavra possui um tamanho indeterminado, o qual deverá ser lido pelo teclado, faça um algoritmo/programa que mostre a palavra informa de forma inversa. 9) Uma sala de aula possui N alunos, dos quais é conhecido: Nome, cidade onde mora e idade. Faça um algoritmo/programa que imprima: a) A quantidade de alunos que residem em TUBARÃO b) A quantidade de alunos que residem em CRICIUMA c) A quantidade de alunos que possuem idade inferior a 17 anos d) O nome dos alunos que morem em JAGUARUNA e que tenha idade entre 10 e 15 anos 10) Uma empresa possui N funcionários dos quais são conhecidos seus nomes e idades. Faça um algoritmo/programa que imprima o nome e a idade da pessoa mais idosa e a mais nova. Considere que não existem pessoas com idades iguais. 11) Uma empresa possui uma série de N funcionários, dos quais é conhecido: Nome, Idade e Sexo. Faça um algoritmo/programa que imprima: a) O nome e idade do homem mais jovem; b) O nome e idade da mulher mais idosa; c) O percentual de homens, em relação ao total de funcionários, existentes na fábrica. d) O percentual de mulheres, em relação ao total de funcionários, existentes na fábrica. 12) Faça um algoritmo/programa para cada formula a seguir:

x! x! x! + + ... + x +1 x + 2 x+x

a)

y=

b)

y=

1 1 1 + + ... + ( x − 1)! ( x − 2)! ( x − N )!

Y=

1 2 3 4 5 6 n + + + + + + ... + 2 3 4 5 6 7 n +1

c) d) e)

Y = 1 + (2 – 3) + 4 + (5 – 6) + 7 + (8 – 9) + ... Y=

1 1 1 1 + 2 + 3 + ... + n 1 x x x x

46


13.2.

Laços Condicionais

Laços condicionais são aqueles cujo conjunto de comandos em seu interior e executado ate que uma determinada condição seja satisfeita. Ao contrário do que acontece nos laços contados, nos laços condicionais não se sabe de antemão quantas vezes o corpo do laço será executado. As construções que implementam laços condicionais mais comuns nas linguagens de programação modernas são: − Enquanto − Repita

13.2.1.

Enquanto

Sua semântica é a seguinte: ao Início da construção Enquanto a condição é testada. Se seu resultado for falso, então o comando composto no seu interior não e executado e a execução prossegue normalmente pela instrução seguinte ao Fimenquanto. Se a condição for verdadeira o comando composto é executado e ao seu término retorna-se ao teste da condição. Assim, o processo acima será repetido enquanto a condição testada for verdadeira. Quando for falsa, o fluxo de execução prosseguirá normalmente pelas instruções posteriores ao Fimenquanto. Enquanto <condição> Faça <comando composto> Fimenquanto Uma vez dentro do corpo do laço, a execução somente abandonará o mesmo quando a condição for falsa. O usuário deste tipo de construção deve estar atento a necessidade de que em algum momento a condição deverá ser avaliada como falsa. Caso contrário, o programa permanecerá indefinidamente no interior do laço, o que e conhecido como Laço infinito ou Looping.

13.2.2.

Exemplos

1) Ler uma quantidade indeterminada de números e ao final mostrar o somatório. Algoritmo um Var op: literal num, soma: real Inicio Soma  0 Op  “s” Enquanto (op = “S”) .ou. (op = “s”) faça Escreva “informe o numero para calculo” Leia num Soma soma + num Escreva “deseja continuar? (s/n) “ Leia op Fimenquanto 47


fim

Escreva soma

2) Ler vários números para calcular o fatorial. Algoritmo dois Var op: literal I, tot: inteiro Inicio Op“s” Enquanto (op = “S”) .ou. (op = “s”) faça Escreva “informe o numero para calculo” Leia num Tot1 Para i de 1 até num faça Tot  tot * i Fimpara Escreva tot Escreva “deseja continuar? (s/n)” Leia op Fimenquanto Fim 3) Calcular a área de 50 triângulos de tamanhos diferentes. Algoritmo tres Var base, altura, area: real Quant: inteiro Inicio Quant 1 Enquanto quant < 50 faça Escreva “leia a base” Leia base Escreva “leia a altura” Leia altura Área  base * altura Escreva quant,”º triângulo “,área Quant  quant + 1 Fimenquanto Fim 4) Calcular uma quantidade de números seqüenciais iniciados por 1 até que o somatório seja igual ou superior a 200.

48


Algoritmo quatro Var Soma, num: inteiro Inicio Soma  0 Num  1 Enquanto soma < 200 faça Soma  soma + num Num num + 1 Fimenquanto Escreva soma Escreva num Fim 5) Calcular o total de uma compra de uma quantidade indeterminada de produtos. Algoritmo cinco Var Op: literal Valor, quant, tot: real Inicio Op  “s” Tot 0 Enquanto (op = “S”) .ou. (op = “s”) faça Escreva “valor produto” Leia valor Escreva “quant produto” Leia quant Tot tot + valor * quant Escreva “deseja continuar? (s/n) “ Leia op Fimenquanto Escreva tot Fim

13.2.3.

Exercícios

1) Faça um algoritmo/programa para ler o Nome, idade e sexo de um número indeterminado de alunos. Ao final escreva o total de alunos lidos. 2) Faça um algoritmo/programa para somar os restos da divisão por 3 de 200 números. 3) Faça um algoritmo/programa para calcular a área de N quadriláteros. Fórmula: Área = Lado * Lado. 4) Faça um algoritmo/programa para calcular a área de N Círculos. Fórmula: Área = π * raio * 2, sendo π = 3,141592. 5) Faça um algoritmo/programa para ler N números inteiros e ao final escrever sua média. 49


6) Uma empresa que possui X funcionários precisa saber a média de seus salários. Faça um algoritmo/programa para ler a quantidade de funcionários e o salário de cada um e escrever a média dos salários. 7) Faça um algoritmo/programa para: a. Leia um valor X e um valor N. b. Calcular: Y = 2X - 4X + 6X - 8X + 10X - … NX. 8) Faça um algoritmo/programa para ler um valor X e um Valor N. Após, calcule a seguinte expressão: Y=

( X + 1) ( X + 2) ( X + 3) 1!

+

2!

+

3!

+ ...+

(X + N) N!

9) Fazer um algoritmo/programa que calcule escreva o valor de S onde: 99 1 3 5 7 S = + + + +...+ 1 2 3 4 50

10) Fazer um algoritmo/programa que calcule escreva o valor de S onde: 1 2 3 4 5 10 S= − + − + ...− 1 4 9 16 25 100

13.3.

Repita

A estrutura de repetição Repita funciona semelhante à estrutura Enquanto, a diferença entre elas é a posição do teste lógico na estrutura, na estrutura Enquanto o teste lógico era logo no inicio, onde dependendo da situação o conteúdo do laço poderia não ser executado. Já na estrutura Repita o teste é realizado no final do laço, sendo que pelo menos uma vez o conteúdo será executado. Repita <comando composto> Enquanto <condição>

13.3.1.

Exemplos

1) Ler uma quantidade indeterminada de números e ao final mostrar o somatório. Algoritmo um Var op: literal num, soma: real Inicio Soma  0 Repita Escreva “informe o numero para calculo” Leia num Soma soma + num 50


Escreva “deseja continuar? (s/n) “ Leia op Enquanto (op = “S”) .ou. (op = “s”) Escreva soma Fim 2) Ler vários números para calcular o fatorial. Algoritmo dois Var op: literal I, tot: inteiro Inicio Repita Escreva “informe o numero para calculo” Leia num Tot1 Para i de 1 até num faça Tot  tot * i Fimpara Escreva tot Escreva “deseja continuar? (s/n)” Leia op Enquanto (op = “S”) .ou. (op = “s”) Fim 3) Calcular a área de 50 triângulos de tamanhos diferentes. Algoritmo tres Var base, altura, area: real Quant: inteiro Inicio Quant 0 Repita Escreva “leia a base” Leia base Escreva “leia a altura” Leia altura Área  base * altura Escreva quant,”º triângulo “,área Quant  quant + 1 Enquanto quant < 50 faça Fim

13.3.2.

Exercícios

Como forma de exercitar a estrutura de repetição Repita resolva novamente a lista de exercícios anterior (estrutura Enquanto). 51


14. Cartão Bandeira Para melhor compreensão desta técnica mostramos primeiro o exemplo a seguir já mostrado em capítulos anteriores: Algoritmo cinco Var Op: literal Valor, quant, tot: real Inicio Op  “s” Tot 0 Enquanto (op = “S”) .ou. (op = “s”) faça Escreva “valor produto” Leia valor Escreva “quant produto” Leia quant Tot tot + valor * quant Escreva “deseja continuar? (s/n) “ Leia op Fimenquanto Escreva tot Fim Nesta forma de trabalho além das informações pedidas pelo sistema (valor e quantidade) é necessária uma outra, a opção do usuário. Na utilização do cartão bandeira essa terceira não é necessária, mas sim uma das informações do sistema será trabalhado em um teste lógico. Para refazermos novamente o exemplo acima, primeiro devemos saber em que ordem os dados serão pedidos pelo usuário, no nosso caso primeiro valor depois quantidade, assim utilizaremos o valor no cartão bandeira. Sendo assim, o exemplo passara ficara da seguinte forma: Algoritmo cinco Var Op: literal Valor, quant, tot: real Inicio Tot 0 Escreva “valor produto” Leia valor Enquanto (valor>=0) faça Escreva “quant produto” Leia quant Tot tot + valor * quant Escreva “valor produto” Leia valor Fimenquanto Escreva tot Fim 52


Na execução do algoritmo acima a informação “valor do produto” é pedida ao usuário por duas vezes, pois no momento que for digitado um valor negativo para a variável é sinal de que não existe mais nenhuma informação a ser digitada.

14.1.

Exercícios

1) Dado um número indeterminado de funcionários, onde são fornecidos o Nome, número de dependentes e o número de horas trabalhadas. Pede-se que seja impresso, para cada funcionário, o seu Nome, salário bruto, salário líquido e o valor descontado. A empresa, paga R$ 25,00 por hora de trabalho, e R$ 125,55 por dependente, e ainda faz um desconto de 12% sobre o salário bruto. Pede-se ainda que seja impresso o total de funcionários da empresa, o total gasto com salários, e o total descontado. Utilize cartão bandeira. 2) Escreva um algoritmo/programa para calcular o reajuste salarial de uma empresa que possui vários funcionários (Utilize cartão bandeira), de acordo com os seguintes critérios: •

Os funcionários com salário inferior a 1.000,00 devem ter um reajuste de 40%;

Os funcionários com salário entre 1.000,00 (inclusive) e 3.000,00 (inclusive) devem ter um reajuste de 30%;

Os funcionários com salário superior a 3.000,00 devem ter um reajuste de 20%.

3) Dado uma relação de N alunos (Utilize cartão bandeira), cada um possuindo a mesma quantidade Q de notas, faça um algoritmo/programa que mostre: a) Nome e média dos alunos b) Quantidade de alunos aprovados (média para aprovação: >= 7.0) c) Quantidade de alunos reprovados (média para reprovação: <= 2.0) d) Quantidade de alunos em recuperação (média de recuperação: 2 < média < 7.0) 4) Uma empresa possui uma série de N funcionários (Utilize cartão bandeira), dos quais é conhecido: Nome, Idade e Sexo. Faça um algoritmo/programa que imprima: a) A média da idade dos homens; b) A média da idade das mulheres; c) A média da idade das pessoas com mais de 18 anos;

53


15. Trabalhando com literais Em algoritmo não temos nenhum comando que nos informe a quantidade de caracteres existentes em um literal, o que pode tornar alguns problemas sem uma possível solução. Para a resolução deste problema utilizamos um método que ajuda bastante, que é a colocação de um “$” ao final deste literal, assim poderemos fazer a análise caracter a caractere e quando for encontrado o “$” é porque chegamos ao final.

15.1.1.

Exemplos

1) Dado uma seqüência de caracteres qualquer (digitada pelo usuário) terminada pelo caractere “$”, faça um algoritmo que retire qualquer ocorrência de vogais. Algoritmo um Var P, P1: literal Q: Inteiro Inicio Escreva “Palavra: ” Leia P PP+’$’ P1”” Q0 Enquanto (P[Q]<>’$’) faça Se P[Q] <>’A’ .e. P[Q] <>’E’ .e. P[Q] <>’I’ .e. P[Q] <>’O’ .e. P[Q] <>’U’ .e. P[Q] <>’a’ .e. P[Q] <>’e’ .e. P[Q] <>’i’ .e. P[Q] <>’o’ .e. P[Q] <>’u’ então P1P1+P[Q] FimSe QQ +1 Fimenquanto Escreva P1 Fim 2) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caractere), faça um algoritmo/programa que imprima no vídeo a quantidade de caracteres existentes, excetuando-se o caracter “$”. Algoritmo um Var P: literal Q: Inteiro Inicio Escreva “Palavra: ” Leia P PP+’$’ Q0 Enquanto (P[Q]<>’$’) faça 54


QQ +1 Fimenquanto Escreva P1 Fim

15.2.

Exercícios

1) Dado uma quantidade indeterminada de palavras, sendo que as mesmas sempre terminam com o caractere “$”, escreva o tamanho de cada uma das mesmas (o sinal de “$” não deve ser considerado na contagem). 2) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caracter), faça um algoritmo/programa que copie uma determinada quantidade Q de caracteres desta seqüência de caracteres. Imagine que a cópia inicie pelo 1º caracter da seqüência de caracteres. 3) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caractere), faça um algoritmo/programa que transforme todos os caracteres da seqüência de caracteres para maiúsculo. 4) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caractere), faça um algoritmo/programa que mostre no vídeo uma mensagem informando ao usuário se a palavra digitada é palíndrome ou não. Obs; uma palavra é palíndrome quando lida de trás para frente fica igual a original, exemplos: ASA, MIRIM. 5) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caracter), faça um algoritmo/programa que imprima no vídeo a quantidade de vogais existentes. 6) Dado uma seqüência de caracteres qualquer terminada pelo caracter “$” (imagine que o usuário digitou este caracter), faça um algoritmo/programa que retire qualquer ocorrência do caracter espaço em branco.

55


Apêndice A Após construirmos, como poderemos garantir que ele está correto? Isso é muito difícil de termos certeza, pois ainda não existe (pelo menos nunca ouvi falar) de uma espécie de “compilador” de algoritmos. Mas para termos uma idéia, o que podemos fazer é uma técnica chamada de Teste de Mesa. O Teste de Mesa consiste em listarmos, em forma de uma tabela, todas as variáveis existentes no algoritmo uma ao lado da outra e abaixo dela irmos colocando os valores delas durante a execução “imaginária” do algoritmo. Ai pergunta-se: e as informações que são pedidas ao usuário? Para essas informações deveremos simular valores que foram digitados para o usuário. Vamos a um exemplo simples: 1 2 3 4 5 6 7 8 9 10 11 12

Algoritmo EXEMPLO Var Preço_unit Preço_tot : real Quant : inteiro Início Escreva “Informe valor unitário: ” Leia Preço_unit Escreva “Quantidade: ” Leia Quant Preço_tot ← Preço_unit * Quant Escreva Preço_tot Fim. Neste exemplo temos 3 variáveis que estão listadas a seguir: Preço_unit 5

Preço_tot 15

Quant 3

Na execução imaginaria que fizemos o seguinte: 1- Aparece na tela a mensagem da linha 6; 2- O usuário digita um valor pedido na linha 7, simulamos que o valor tenha sido 5 conforme no exemplo; 3- Aparece na tela a mensagem da linha 8; 4- O usuário digita um valor pedido na linha 9, simulamos que o valor tenha sido 3 conforme no exemplo; 5- É feito o calculo da expressão da linha 10 com os valores “informados” pelo usuário, onde o resultado é armazenado na variável indicada. 6- A parece a mensagem da linha 11 com a resposta, no nosso caso, pelos valores simulados, a resposta deverá ser 15. Este exemplo apresentado é bem simples, vamos a um mais complexo: 1 2 3

Algoritmo cinco Var Valor, quant, tot: real 56


4 5 6 7 8 9 10 11 12 13 14 15 16

Inicio Tot 0 Escreva “valor produto” Leia valor Enquanto (valor>=0) faça Escreva “quant produto” Leia quant Tot tot + valor * quant Escreva “valor produto” Leia valor Fimenquanto Escreva tot Fim Valor 5 2 3 -1

quant 3 2 1

Tot 0 15 19 22

Como neste exemplo as variáveis trocam de valores constantementes, os novos valores são colocado sempre abaixo e os outros deixam de existir. Lembrando que os valores das variáveis Valor e Quant são imaginariamente informadas pelo usuário nos dando como resposta o valor 22. Agora pense: em uma ação real onde façamos uma compra de 3 produtos com os preços e quantidades como acima, teremos um valor 22? Se a resposta for não, então seu algoritmo esta errado, caso contrario ele estará correto. Outro detalhe que devemos considerar é que quando realizamos um Teste de Mesa aprendemos mais ainda a lógica de programação. Portanto faça Teste de Mesa em seus algoritmos, além de poder ter mais certeza se ele esta correto você estará aprendendo mais ainda.

57

Lógica de Programação - Professor Marcos Tonon  

Apostila de Lógica de programação do Curso de Informática com ênfase em Programação do CEDUP Diomício Freitas. Matéria Lecionada por Marcos...

Lógica de Programação - Professor Marcos Tonon  

Apostila de Lógica de programação do Curso de Informática com ênfase em Programação do CEDUP Diomício Freitas. Matéria Lecionada por Marcos...

Advertisement