Você está na página 1de 21

1.

Introdução

1.1 Noções de Lógica


Lógica é a arte de pensar corretamente. A lógica estuda a correção do raciocínio.

Exemplos:

a) São Paulo é um estado do Brasil.


Marília é uma cidade do estado de São Paulo.
Ciência da Computação – 1º. Termo Portanto, Marília está localizada no Brasil.

b) A gaveta está fechada.


A caneta está dentro da gaveta.
Precisamos primeiro abrir a gaveta para depois pegar a caneta.

1.2 Lógica de Programação


Construção de Lógica da Programação significa o uso correto das leis do pensamento, da “ordem
da razão” e de processos de raciocínio e simbolização formais na programação de
computadores, objetivando racionalidade e o desenvolvimento de técnicas que cooperem

Algoritmos para a produção de soluções logicamente válidas e coerentes, que resolvam com
qualidade os problemas que se deseja programar. [Forbellone2005]

1.3 O que é um Algoritmo?


Um algoritmo pode ser definido como uma seqüência de passos que visam atingir
um objetivo bem definido.
Apesar do nome pouco usual, algoritmos são comuns em nosso cotidiano, como,
por exemplo, uma receita de bolo. Nela está descrita uma série de ingredientes
necessários e uma seqüência de diversos passos (ações) que devem ser fielmente
cumpridos para que se consiga fazer o alimento desejado, conforme se esperava antes
do início das atividades (objetivo bem definido). [Forbellone2005]

Um algoritmo tem por objetivo representar mais fielmente o raciocínio envolvido na


Lógica de Programação e, dessa forma, permite-nos abstrair de uma série de detalhes
computacionais, que podem ser acrescentados mais tarde.

Outra importância da construção de algoritmos é que, uma vez concebida uma


solução algorítmica para um problema, esta pode ser traduzida para qualquer linguagem
de programação e ser agregada das funcionalidades disponíveis nos diversos ambientes.
Este processo é denominado de processo de codificação.

Faculdade de Engenharia e Arquitetura e Tecnologia – UNIMAR – Marília - SP..


Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 1
1.4. Exemplos de Algoritmos do dia-a-dia
Suponhamos que nosso problema é trocar uma lâmpada queimada. A seguir 3.) Os jogadores
alguns exemplos de como criar um algoritmos para isso.
Quatro homens se reúnem diariamente para jogar e conversar. Não há dois com cabelos
Algoritmo 1 – Trocar uma lâmpada queimada da mesma cor e que tenham preferência pelo mesmo jogo. Com as seguintes indicações
• pegar uma escada; dadas, você conseguiria completar o quadro associando à cor de cabelo e ao jogo
preferido de cada um?
• posicionar a escada embaixo da lâmpada;
• pegar uma lâmpada nova;
a) Vicente tem cabelos castanhos.
• subir na escada; b) O jogador de pôquer é louro.
• retirar a lâmpada velha; c) Alguém gosta de jogar dominó, mas não é o Roberto, pois ele gosta de jogar
• colocar a lâmpada nova. pôquer.
d) Lucas gosta de jogar damas.
Nesta versão, simplesmente colocamos os passos para a troca da lâmpada e) O jogador de xadrez tem cabelos brancos.
queimada. Note que partimos do suposto que a lâmpada realmente encontra-se f) Pedro não tem cabelos ruivos.
queimada, e também não consideramos o caso em que a nova lâmpada também não
funcione. A seguir vamos utilizar uma estrutura de decisão para implementarmos o teste Vicente Lucas Pedro Roberto
da lâmpada e uma estrutura de repetição para implementarmos a verificação do Cabelos:
funcionamento da nova lâmpada. Jogo:
Algoritmo 2 - Trocar uma lâmpada queimada com teste antes da troca e
estrutura de repetição até que a nova lâmpada funcione.
• acionar o interruptor; 4.) Amigos do Esporte
• se a lâmpada não acender, então
• pegar uma escada; Quatro atletas tornaram-se amigos durante uma competição internacional. São eles:
• posicionar a escada embaixo da lâmpada; Paul, George, Luís e um atleta da Rússia. Com base nos dados abaixo, descubra o
• buscar uma lâmpada nova; nome, o esporte e o país de cada atleta.
• acionar o interruptor;
• subir na escada; a) Dimitri não jogava futebol nem praticava atletismo.
• retirar a lâmpada queimada; b) O atleta dos EUA praticava basquete.
• colocar uma lâmpada nova; c) Luís não era dedicado à ginástica nem era norte-americano.
• enquanto a lâmpada não acender, faça d) George não era nem do Brasil nem dos EUA.
• retirar a lâmpada queimada; e) Paul não jogava futebol nem praticava atletismo.
• colocar uma lâmpada nova; f) O atleta da Inglaterra não praticava nem ginástica nem futebol.

Atleta: País: Esporte:


1.5 Exercícios que envolvem a Lógica
1.) Um homem precisa atravessar um rio com um barco que possui capacidade apenas
para carregar ele e mais uma de suas três cargas, que são: um lobo, um bode e um
maço de alfafas. O que o homem deve fazer para conseguir atravessar o rio sem
perder suas cargas?

2.) A Torre de Hanói consiste em três hastes (a – b – c), uma das quais serve de suporte
para três discos de tamanhos diferentes (1 – 2 – 3), os menores sobre os maiores.
Pode-se mover um disco de cada vez para qualquer haste, contanto que nunca seja
colocado um disco maior sobre um menor. O objetivo é transferir os três discos para
outra haste.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 2 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 3
5.) Os cinco amigos
Um grupo de cinco amigos decide ir a um Estádio de futebol, mas irão se encontrar lá
dentro do Estádio. Para ficar mais fácil de se encontrarem, cada um vai com um boné
de uma cor, e uma camisa de um time diferente, não há dois amigos com a mesma
2. Tópicos Preliminares
camisa nem com boné da mesma cor. Baseando nas afirmações abaixo, descubra
quem está com que camisa e qual a cor do boné que cada um estava usando. 2.1 Tipos Primitivos
a) Marcos usa boné vermelho. A informação é a matéria-prima que faz com que seja necessária a existência dos
b) Robson está usando a camisa do Brasil. computadores, pois eles são capazes de manipular e armazenar grande volume de
c) O garoto que está com a camisa do São Paulo não usa boné amarelo. dados. A ciência que estuda a informação é a Informática. Aproximando-nos da maneira
d) Quem usa boné verde está com a camisa do Guarani. pela qual o computador manipula as informações, vamos dividi-las em quatro tipos
e) Victor não usa boné amarelo. primitivos:
f) André usa boné azul e não preto.
g) Victor está com a camisa do Santos. Inteiro: toda e qualquer informação numérica que pertença ao conjunto dos números
h) O garoto de boné azul está com a camisa do Cruzeiro. inteiros relativos, sem casa decimal.
Exemplos: Ele tem 18 anos.
Nome: Camisa: Boné: A temperatura desta noite foi de -2 graus.
Antônio
Robson Real: toda e qualquer informação numérica que pertença ao conjunto dos números reais
Marcos (aceita casas decimais). O separador de casas decimais é o ponto (.) e não a vírgula (,).
Victor Exemplos: Sua nota é 6.5.
André O preço deste sapato foi R$ 45.99.

6.) F-1
Caractere: toda e qualquer informação composta por um conjunto de caracteres
O diretor da corrida de F-1 esqueceu qual é a ordem de largada da corrida, e alfanuméricos (letras e dígitos) e/ou por símbolos especiais.
necessita saber disso para informar os jornalistas. Sabendo que são apenas seis Exemplos: O cartaz dizia: “Não Fume”.
pilotos e que cada um pertence a uma equipe onde as cores dos carros são A placa daquele automóvel é “BHA 3456”.
diferentes, ajude-o a formar a ordem de largada baseando-se nas seguintes
afirmações: Logico: toda e qualquer informação que pode apenas assumir duas situações:
a) O 1º colocado tem um carro amarelo. verdadeiro ou falso. (observação: não se utiliza acento em linguagens de programação).
b) Eddie, vai largar na frente da equipe Lola e atrás do carro azul. Exemplos: A porta esta fechada.
c) O carro de Rosset é preto. A lâmpada esta acesa.
d) O último colocado está atrás da Lola.
e) Senna está atrás de um carro branco. 2.2 Constantes
f) Se invertessem a ordem, a equipe Tasman ficaria em primeiro.
g) O carro da equipe Brabham é vermelho. Uma informação é dita constante quando ela não sofre nenhuma variação no
h) O carro do 5º colocado é preto. decorrer do tempo. Seu valor não muda durante a execução do algoritmo.
i) Richie é o piloto da equipe Lotus.
j) O dono do carro verde é Luyendyk. Exemplos: “Teste de Impressão...”
k) A equipe de Minardi está entre as equipes Lotus e March. 1234
l) Patrese, Rosset, Luyendyk e Eddie não conseguiram ficar em 1° lugar. Falso
Ordem: Piloto: Equipe: Cor do carro:

2º 2.3 Variáveis

4º Uma informação é dita variável quando tem possibilidade de ser alterada em algum
5º instante no decorrer do tempo. Ou seja, pode assumir valores diferentes durante a
6º execução do algoritmo.
Exemplos: Cotação do dólar, taxa de juros

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 4 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 5
A prioridade dos operadores aritméticos é: primeiro (^), depois (*, /, \ e %) e por
2.4 Identificadores último (+ e -), exceto quando do uso de parênteses, os quais têm precedência. Na
ocorrência de operadores de mesma prioridade na mesma expressão matemática,
É através dos identificadores que referenciamos (nomeamos) uma variável, devemos resolver da esquerda para a direita.
constante e outros nomes utilizados no programa. A regra básica para criá-los é: Exemplos:

• o primeiro caractere obrigatoriamente deve ser uma letra; 10 * 5 + 4 / 2 (resulta em 52)


10 * (5 + 4) / 2 (resulta em 45)
• os demais podem ser qualquer combinação de letras e dígitos;
• não podem ser utilizados símbolos especiais ( * - + [ } & $ % @ ....). O único
b) operadores relacionais: são utilizados para realizar comparações entre dois valores.
símbolo permitido é o underline ( _ );
São eles: = > < <= >= <> (respectivamente: igual, maior que, menor que, menor
• São permitidos 30 caracteres, mas para algumas Linguagens o compilador ou igual a, maior ou igual a e diferente). Sempre retornam VERDADEIRO ou FALSO.
reconhece apenas 8 caracteres.
Exemplos: ( a >= 10 )
Exemplos: X1 , X2, NOME_FUNC, SOMA_1, tx_juros ( c <> d )
5 >=3 (resulta em VERDADEIRO)

2.5 Declaração de Variáveis c) operadores lógicos: são utilizados para combinar relações. São eles: e ou não xou.
Também retornam VERDADEIRO ou FALSO.
Nos computadores as variáveis são armazenadas em dispositivos eletrônicos
chamados de memória. A diferenciação das várias variáveis é feita através dos Exemplos: ( (a > b) e (c > d) )
identificadores. Portanto, precisamos definir nomes para especificar esses objetos que ( (s = 10) ou (x = -15))
podem ser manipulados. Para declararmos uma variável devemos indicar, além de seu
identificador (nome), o tipo da informação que ela armazenará. Tabelas-verdade de cada operador:

Exemplos: A B AeB A B A ou B A não A A B A xou B


F F F F F F F V F F F
a, b, c : inteiro F V F F V V V F F V V
x1, x2 : real V F F V F V V F V
flag : logico
V V V V V V V V F
rua, cep, nome_do_aluno : caractere
Exemplos: Eu vou almoçar se tiver macarronada e frango.
Note que em um mesmo tipo podem ser declaradas quantas variáveis forem
Quando eu vou almoçar?
necessárias, separando-as por vírgulas.
Eu vou almoçar se tiver macarronada ou frango.
Quando eu vou almoçar?
2.6 Operadores
Eu vou almoçar se tiver macarronada e não tiver frango, ou se tiver frango
Os operadores podem ser aritméticos, relacionais, lógicos e atribuição. mas não tiver macarronada.
Quando eu vou almoçar?
a) operadores aritméticos:

+ - * / Operadores aritméticos tradicionais de adição, subtração, multiplicação e d) operador de atribuição: é utilizado para atribuir uma expressão ou valor à uma
divisão. Exemplo: 4 + 5 = 9; 9 / 2 = 4.5 variável. Será utilizado o símbolo Í .
\ Operador de divisão inteira. Exemplo: 9 \ 2 = 4.
% Operador de módulo (isto é, resto da divisão inteira). Exemplo: 8 % 3 = 2. Exemplos: a Í 10
^ Operador de potenciação. Exemplo: 3 ^ 2 = 9 b Í 2 * a + (a / 4)
a Í a + 1

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 6 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 7
2.7 Exercícios
8.) Escreva a declaração das seguintes variáveis: a sua média, a sua nota máxima obtida
1.) Dos identificadores abaixo, assinale aqueles que estão errados. numa disciplina, o saldo de sua conta bancária, o ano em que espera acabar o curso.
Escolha nomes e tipos apropriados para as suas variáveis.
a) cod b) s 1 c) prova2 d) X@ e) 2y f) aux
9.) Supondo A, B e C variáveis do tipo inteiro, com valores 5, 10 e -8, e D variável do tipo
g) P1-P2 h) M&S i) dados j) Rg k) nome do cliente real com valor 1.5, quais os resultados das expressões abaixo:
a) 2 + A * 3 + C =
2.)Determine qual é o tipo primitivo da informação presente nas sentenças a seguir. b) 3 + (2 * (-C)) / 2 =
a) A placa "Pare!" tinha 2 furos de bala. c) (B -6 * 2)^2 * D + 2 =
b) Josefina subiu 5 degraus para pegar uma maçã boa. d) B MOD 3 + A MOD 2 =
c) Alberta levou 3,5 horas para chegar ao hospital onde concebeu uma garota. e) 2 * A % 3 - C =
d) Astrogilda pintou em sua camisa: "Preserve o meio ambiente", e ficou devendo R$ f) A*3\B =
100,59 ao vendedor de tintas.
e) Felisberto recebeu sua 18a medalha por ter alcançado a marca de 57,3 segundos 10.) Determine os resultados (verdadeiro ou falso) obtidos na avaliação das expressões
nos 100 metros rasos. lógicas seguintes, sabendo que A, B, C, D e E contém respectivamente 2, 7, 3.5,
“noite” e “frio” e que existe uma variável lógica L cujo valor é falso:
3.) Determine qual é o tipo primitivo das informações: a) (B = A * C) e L ou verdadeiro
a) “Pare” b) (não (“dia“ = D)) ou (“frio“ <> “clima“)
b) 2 c) L ou (B DIV A >= C) ou não (A <= C)
c) 100.59 d) L e (C >= B DIV A) ou não (A<= C)
d) “Preserve o meio ambiente”
e) “S”
f) falso
g) 57.3
h) -5000
i) “UNIMAR”
j) 0.001

4.) Declare variáveis capazes de armazenar seus dados pessoais: nome, endereço,
cidade, cep, telefone, cédula de identidade, data de nascimento.

5.) Nas declarações de variáveis abaixo existe alguns erros, encontre-os:

a, b, c, ... z : inteiro
preco1, lucro2, taxa% : real
cliente, nome da cidade, rua : caractere
flag, set : logico

6.) Encontre os erros das seguintes declarações de variáveis:


a) endereço, nfilhos : inteiro
b) idade, resposta : caractere
c) peso, altura, nome : real
d) situação : logico

7.) Supondo que as variáveis COD, NOME, SEXO, DEPTO, FUNÇÃO, SAL, NDEP,
ADIC, VALE, TIPO, sejam utilizadas para armazenar informações referentes a um
funcionário de uma empresa, a saber: código, nome, sexo, departamento em que
trabalha, função que exerce, salário mensal, número de dependentes, salário extra, se
tem direito a vale transporte e tipo sanguíneo, declare-as corretamente.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 8 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 9
3.2 Estrutura de um Algoritmo
3. Comandos de Entrada e Saída Todo algoritmo é constituído por:

3.1 Comandos de Entrada e Saída CABEÇALHO - DECLARAÇÕES - CÓDIGO EXECUTÁVEL

Uma entrada ou saída de dados é uma interrupção que ocorre, no nível de O cabeçalho deve ser começado com a palavra Algoritmo seguido de um
hardware, para realizar alguma tarefa. Assim a entrada de dados é a espera pela identificador (nome para o Algoritmo) entre aspas (“ “).
digitação de uma informação e a saída de dados é a impressão de uma informação. A
unidade padrão de entrada do computador é o teclado e a unidade padrão de saída é o Algoritmo “Calcula_dobro” Cabeçalho
monitor. Pode-se dizer que todo algoritmo se reduz a: //Descrição: calcula o dobro de um valor digitado
//Autor:Julio
//Data:01/02/2007

Entrada Processamento Saída Var Declarações


a,b: inteiro

As linguagens de programação devem possuir funções para que ocorram as Inicio Código
entradas e saídas de dados. Em nossos algoritmos utilizaremos: escreva (“Digite um número:”)
leia (a) executável
Para Entrada de dados: B Í 2 * a
Escreva ( “O dobro de “ , a, “ =” , b )
leia (var) Fimalgoritmo

onde: var é a lista de variáveis (separadas por vírgula) que armazenarão os


dados digitados 3.3 Metodologia para Construção de Algoritmos
Exemplos: A metodologia para a construção de algoritmos é a mesma utilizada para o
desenvolvimento de qualquer programa de computador. Ela consiste basicamente em três
leia (a) etapas:
leia (nome)
leia (Nota1, Nota2, Nota3, Nota4) 1. Análise de Requisitos;
2. Codificação;
Para Saída de dados: 3. Testes.
escreva (expressão e/ou constante e/ou variável) Utilizaremos as seguintes orientações na construção de algoritmos:
ou 1) Ler atentamente o enunciado;
2) Retirar do enunciado a relação das entradas de dados, bem como definir seus tipos
escreval (expressão e/ou constante e/ou variável) primitivos;
3) Retirar do enunciado a relação das saídas de dados;
A diferença entre os dois comandos é que o escreval após exibir o resultado, 4) Determinar o que deve ser feito para transformar as entradas determinadas nas saídas
posiciona o cursor na próxima linha da tela. especificadas, ou seja, determinar o processamento;
5) Construir o algoritmo;
Exemplos: 6) Executar o algoritmo.
escreva (“Digite um número :”)
escreva (5 *6 / 3) Note que os passos 1, 2, 3 e 4 compreendem a etapa de Análise de Requisitos. O
escreva (“Suas Notas são:”, Nota1, “e”, Nota2, “com passo 5 é a Codificação. O passo 6 compreende a fase de Testes, onde executamos o
Media=”, (Nota1+Nota2)/2) Algoritmo inserindo alguns dados de entrada e verificamos se as saídas estão corretas.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 10 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 11
3.4 Exercícios
1.) Elabore um algoritmo para resolver a expressão: R = 2 * a + 3 * b
2.) Elabore um algoritmo para resolver a expressão: R = 1 / y
4. Estruturas de Seleção
Observe que existe a restrição de que se o valor de y for 0 (zero), não haverá solução para o
problema. Assim, este teste deve ser feito a fim de que não ocorra tal erro. Para que isto seja
possível, é necessário o controle do fluxo de dados através das estruturas de seleção da próxima 4.1 Estrutura de Seleção (Comando Se)
seção.
3.) Faça um exercício para escrever "Hello World!". Uma estrutura de seleção permite a escolha de um grupo de ações (bloco de
comandos) a ser executado quando determinadas condições, representadas por
4.) Repita o exercício anterior utilizando variáveis. expressões lógicas ou relacionais, são ou não satisfeitas [Forbellone2005].
5.) Repita o exercício anterior usando constantes.
6.) Escreva um algoritmo que calcule a média aritmética para as seguintes notas: nota1 = 5.0, 4.1.1 Seleção Simples (Desvio Condicional)
nota2=3.5 e nota 3 = 9.5. Obs. crie as variáveis e faça as atribuições necessárias.
7.) Escreva um algoritmo que declare uma variável como inteiro, inicialize essa variável com o Na lógica de programação sempre existe a necessidade de somente executar um
valor 5, incremente essa variável em 10, e atualize o seu valor multiplicando-o pela metade de seu bloco de comandos após a avaliação de uma determinada condição. Em nossa linguagem
valor atual. algorítmica utilizamos o comando Se... entao. A sintaxe deste comando é descrita a
seguir:
8.) Escreva um algoritmo que calcule e mostre a quantidade de R$ 0,05, R$ 0,10, R$ 0,25 R$
0,50 e R$ 1,00 que seriam necessárias para trocar um cheque no valor de R$ 13.463,00, se este se <condição > entao
fosse trocado em cada um dos valores das moedas acima. comando // comando único
fimse
9.) O preço de um produto é dado pelo preço de fábrica, ao qual é adicionado o lucro do vendedor
e os impostos (aplicados ao custo de fábrica). Escreva um algoritmo que calcule e exiba o preço
de venda de um produto qualquer (cujo preço de custo é fornecido pelo usuário) com uma onde:
percentagem para o vendedor de 12% e impostos de 26,95%.
<condição> é uma expressão lógica que, quando inspecionada, pode gerar um
10.) Refaça o exercício anterior, permitindo ao usuário além de fornecer o preço de fábrica, resultado falso ou verdadeiro. Se a <condição> for verdadeira, a ação após a cláusula
entrar também com a percentagem do vendedor e dos impostos (valores expressos em %). entao (comando) será executada; caso contrário (se <condição> for falsa) se encerra a
seleção (fimse), neste caso, sem executar nenhum comando.
11.) FAQ calcule a quantidade de latas de tintas necessárias e o custo para pintar tanques
cilíndricos de combustível, em que são fornecidos a altura e o raio desse cilindro; sabendo
que: Quando precisamos colocar diversas ações (comandos) a serem executados se a
a) a lata de tinta custa R$ 50,00; <condição> for verdadeira, basta colocá-los após a cláusula entao, um comando por
b) cada lata contém 5 litros; linha, conforme o modelo a seguir:
c) cada litro de tinta pinta 3 m2.
se <condição > entao
12.) FAQ troque os valores das variáveis A, B, C e D (tipo inteiro - sendo que os valores iniciais comando 1
devem ser fornecidos pelo usuário) e mostre o seu resultado, ou seja, os valores trocados. A comando 2 // seqüência de comandos
troca deve ser feita da seguinte forma: .
A B C D .
comando n
13.) FAQ dados o primeiro termo e a razão de uma progressão aritmética (PA), determine a
fimse
soma dos seus 5 primeiros termos e exiba o resultado.

Exemplo: Calcular a Média aritmética de 4 notas, apresentando a média final e uma


mensagem de Aprovado (média>=7.0) ou Reprovado (média<7.0).

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 12 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 13
Solução: 4.1.2 Seleção Composta
1. Etapa de Análise: Quando tivermos situações em que duas alternativas dependem de uma mesma
- Entrada de Dados: quatro notas bimestrais (N1, N2, N3, N4) do tipo real; condição, uma da condição ser verdadeira e outra da condição ser falsa, usamos a
- Processamento: calcular a média aritmética das 4 notas: estrutura de seleção composta. A seleção composta de um bloco de comandos é
Média = (N1 + N2 + N3 + N4) / 4 realizada através do comando se... entao ... senao. A sintaxe deste comando é descrita a
- Saída: a média e mensagem de Aprovado (Média>=7.0) ou Reprovado (Média<7.0). seguir:

2. Etapa de Codificação: se <condição > entao


comando 1 //comandos executados se a
Algoritmo “Média_notas” comando 2 //condição for verdadeira
//Descrição: Calcula a média aritmética de 3 notas entradas .
// via teclado e imprime se foi Aprovado ou Reprovado .
//Autor: Julio comando n
//Data: 01/02/2007 senao
Var comando 1 //comandos executados se a
// declaração de variáveis comando 2 //condição for falsa
N1, N2, N3, N4, media : real .
.
Inicio comando n
//Entrada de Dados fimse
escreva (“Forneça as 4 notas bimestrais:”)
leia (N1, N2, N3, N4)
Este comando deve ser interpretado da seguinte forma: Se a <condição> for
//Cálculo da Média verdadeira (comparação entre valores - operação relacional) executa-se o bloco de
media Í (N1 + N2 + N3 + N4) / 4 comandos (comando 1, comando 2, ..., comando n) pertencente ao entao, caso
//Saída de Dados a <condição> seja falsa, executa-se o bloco de comandos (comando 1, comando 2,
escreva (“A média é “, media) ..., comando n) pertencente ao senao.
se (media >= 7) entao
escreva (“ Aluno Aprovado!!”)
fimse Exemplo: Podemos reescrever o Algoritmo de Média aritmética com aprovação e
se (media < 7) entao reprovação utilizando a estrutura de Seleção composta da seguinte forma:
escreva (“ Aluno Reprovado!!”)
fimse
FimAlgoritmo Algoritmo “Média_notasv2”
//Descrição: Calcula a média aritmética de 3 notas entradas
3. Etapa de Testes (Validação) // via teclado e imprime se foi Aprovado ou Reprovado
Esta etapa consiste em executarmos o algoritmo para determinadas entradas e //Autor: Julio
verificar se a saída está correta. Este processo também é denominado de “Teste //Data: 01/02/2007
de Mesa”. Por exemplo, considere a entrada para as notas: 7,5 8,0 9,0 9,5: Var
// declaração de variáveis
Variáveis na memória: N1, N2, N3, N4, media : real

N1 N2 N3 N4 média Inicio
7,5 8,0 9,0 9,5 8,5 //Entrada de Dados
escreva (“Forneça as 4 notas bimestrais:”)
Com estes dados de entrada a saída será: leia (N1, N2, N3, N4)
A média é 8,5 //Cálculo da Média
Aluno Aprovado!! media Í (N1 + N2 + N3 + N4) / 4

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 14 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 15
//Saída de Dados Exemplo: Algoritmo para determinar o maior dentre 3 valores (a, b, c) lidos pelo teclado.
escreva (“A média é “, media)
se (media >= 7) entao Algoritmo “Maior_de_3_valores”
escreva (“ Aluno Aprovado!!”)
var
senao
a, b, c, maior : inteiro
escreva (“ Aluno Reprovado!!”)
fimse Inicio
FimAlgoritmo
escreva ("Digite o valor de a: ")
leia(a)
4.1.3 Seleção Encadeada escreva ("Digite o valor de b: ")
leia(b)
Quando, devido à necessidade de processamento, agruparmos várias seleções, escreva ("Digite o valor de c: ")
leia(c)
formaremos uma seleção encadeada. Normalmente, tal formação ocorre quando
determinada ação ou bloco deve ser executado se um grande conjunto de possibilidades
se ((a > b) e (a > c)) entao
ou combinações de situações for satisfeito [Forbellone2005].
maior Í a
senao
O modelo a seguir expressa um exemplo de seleção encadeada:
se (b > c) entao
se <condição1> entao maior Í b
se <condição2> entao senao
Comando1; // seqüência de comandos a maior Í c
Comando2; // ser executada se a condição1 fimse
. // e a condição 2 forem verdadeiras fimse
.
Comando n; escreva (" o maior valor dentre os lidos =", maior)
fimse Fimalgoritmo
senao
se <condição3> entao 4.2 Estrutura de Seleção (Múltipla Escolha)
Comando1; // seqüência de comandos
Comando2; // ser executada se a condição1 for Quando um conjunto de valores discretos precisa ser testado e ações diferentes
. //falsa e a condição3 for verdadeira são associadas a esses valores, estamos diante de uma seleção encadeada homogênea
. do tipo se – entao – se. Como esta situação é bastante freqüente na construção de
Comando n; algoritmos que dependem de alternativas, utilizaremos uma estrutura específica para
senao estes casos que é a seleção de múltipla escolha [Forbellone2005].
se <condição4> entao
Comandov; // executado se condição1 e A sintaxe utilizada para esta estrutura é a seguinte:
// condição3 forem falsas
// e condição4 verdadeira escolha <expressão_de_seleção>
senao caso V1
Comandof; // executado se condição1, Comando1
// condição3 e condição4 caso V2
// forem falsas Comando2
caso V3
fimse Comando3
fimse caso V4
fimse Comando4
outrocaso
Comando5
fimescolha

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 16 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 17
4.3 Exercícios
Caso o valor da <expressão_de_seleção> seja igual ao valor de V1, então o 1) Elabore um algoritmo que leia um número inteiro e determine se ele é par ou ímpar.
Comando1 será executado; caso contrário serão inspecionados os outros casos até ser
encontrada uma igualdade ou terminarem os casos, executando assim a cláusula 2) Elabore um algoritmo que leia os lados de um triângulo ( a, b, c), verifique se as
outrocaso. Esta última cláusula pode ser omitida. medidas permitem formar um triângulo ( a < b + c, b < a + c e c < a + b). Se for
triângulo, determinar se é equilátero, isósceles ou escaleno.
Esta estrutura é muito utilizada na programação de menu de opções, como no
exemplo a seguir: 3) Elabore um algoritmo leia a idade de um nadador e imprima a categoria que ele
pertence:
Algoritmo "Menu" idade < 8 anos - infantil A
idade >=8 e < 13 - infantil B
var idade >=13 e < 18 - juvenil A
op : inteiro idade >=18 e < 21 - juvenil B
idade >= 21 – sênior
Inicio 4) FAQ tendo como dados de entrada o nome, a altura e o sexo (M ou F) de uma pessoa,
calcule e mostre seu peso ideal, utilizando as seguintes fórmulas:
escreval("******** M E N U ********")
• para sexo masculino Æ peso ideal = (72.7*altura) - 58
escreval("(1) Cadastrar Cliente")
escreval("(2) Cadastrar Filme") • para sexo feminino Æ peso ideal = (62.1*altura) - 44.7
escreval("(3) Locação")
escreval("(4) Devolução") 5) Sejam: número da conta do cliente, saldo anterior, débito e crédito, elabore um
escreval("(5) Relatórios") algoritmo que calcule e mostre saldo atual = saldo anterior - débito + crédito. Se saldo
escreval("(0) Sair") atual for maior ou igual a zero mostre a mensagem: ’Saldo Positivo’, senão a
escreva("opção->") mensagem ’Saldo Negativo’.
leia(op)
6) Sejam três números inteiros diferentes digitados pelo usuário, coloque-os em ordem
crescente.
escolha op
caso 1 7) Dado um caractere qualquer digitado pelo usuário, verificar e escrever se é uma vogal
escreval("Opção 1 - Cadastrar Cliente Selecionada...") (a, e, i, o, u).
caso 2
escreval("Opção 2 - Cadastrar Filme Selecionada...") Seja o seguinte algoritmo:
caso 3
8) Algoritmo “Exemplo”
escreval("Opção 3 - Locação Selecionada...")
Var
caso 4
x,y,z : inteiro
escreval("Opção 4 - Devolução Selecionada...")
resposta : caractere
caso 5
Inicio
escreval("Opção 5 - Relatórios Selecionada...")
escreva (“Forneça dois valores”)
caso 0
leia (x,y)
escreval("Opção 6 - Sair Selecionada...")
outrocaso z Å x * y - 5
escreval("Opção Inválida!!!") se z <= 0 entao
fimescolha resposta Å “A“
senao
Fimalgoritmo se z <= 100 entao
resposta Å “B“
senao
resposta Å “C“
fimse
fimse
escreva (z, resposta)
FimAlgoritmo

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 18 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 19
10) Determinar e mostrar o valor de z, sendo x e y fornecidos pelo usuário, sabendo-se
Faça um teste de mesa e complete o quadro a seguir para os seguintes valores: que:
• se x>0 e y>0 então z = x+y;
2x − y
se x>0 ou y>0 então z = ;
x y z resposta 2
3x
3 2 • se x=y então z =
150 3 y
7 -1 • se nenhuma das situações ocorrer então z=0.
-2 5
50 3 Obs: Não é possível dividir por zero. Caso isto ocorra escrever uma mensagem.

9) Seja o seguinte algoritmo: 11) Dados: a descrição do produto, a quantidade adquirida e o preço unitário, calcular e
escrever o total (total = quantidade adquirida x preço unitário), o desconto e o total a
Algoritmo “Triângulo” pagar (total a pagar = total - desconto), sabendo-se que:
Var • se quantidade <= 5 o desconto será de 2%
a, b, c: inteiro • se quantidade > 5 e quantidade <=10 o desconto será de 3%
mens: caractere • se quantidade > 10 o desconto será de 5%
Inicio
escreva(“Entre com os lados do Triangulo:”)
leia (a, b, c)

se (a<b+c) e (b<a+c) e (c<a+b) entao


se (a=b) e (b=c) entao
mens Å “Triângulo Eqüilátero”
senao
se (a=b) ou (b=c) ou (a=c) entao
mens Å “Triângulo Isósceles”
senao mens Å “Triângulo Escaleno”
fimse
fimse
senão
mens Å “Não e possível formar um triângulo”
fimse

escreva (mens);
FimAlgoritmo

Faça um teste de mesa e complete o quadro a seguir para os seguintes valores:

a b c Mensagem
1 2 3
3 4 5
2 2 4
4 4 4
5 3 3

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 20 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 21
Exemplo: Algoritmo para somar os números de 1 a 100, utilizando a estrutura enquanto.
5. Estruturas de Repetição
Algoritmo “Soma1_a_100v2”
Var
A repetição de um bloco de comandos (“loop”) é uma prática muito freqüente em i, s: inteiro
programação. A estrutura de repetição permite que uma seqüência de comandos seja Inicio
executada repetidamente até que uma determinada condição de interrupção seja s Í 0
satisfeita. i Í 1

5.1 Repetição com Variável de Controle enquanto (i<=100) faca


s Í s + i
Para realizar a repetição com variável de controle, utilizamos a estrutura para, que i Í i + 1
repete a execução de um bloco ou uma ação um número definido de vezes, pois ela fimenquanto
possui limites fixos. A sintaxe para a estrutura de repetição para é a seguinte:
escreva ( “A soma =”, s)
para <var> de <valor_inicial> ate <valor_final> [passo p] faca Fimalgoritmo
bloco de comandos
fimpara
5.3 Repetição com Teste no Final
Deve ser interpretado da seguinte forma: Para <var> (variável contadora) variando
de <valor_incial> até <valor_final> (de p em p) executa-se o bloco de Para realizar a repetição com teste no final, utilizamos a estrutura repita, que
comandos. Quando o passo for igual a 1, pode-se omitir a cláusula passo da sintaxe. permite que um bloco ou uma ação seja repetido até que uma determinada condição seja
verdadeira [Forbelone2005]. A sintaxe desta estrutura é a seguinte:

Exemplo: Algoritmo para somar os números de 1 a 100, utilizando a estrutura para. repita
bloco de comandos
Algoritmo “Soma1_a_100v1” ate ( <condição> )
Var
i, s: inteiro Deve ser interpretado da seguinte forma: Repita o bloco de comandos até que a
Inicio <condição> seja verdadeira.
s Í 0
para i de 1 ate 100 faca Exemplo: Algoritmo para somar os números de 1 a 100, utilizando a estrutura repita.
s Í s + i
fimpara Algoritmo “Soma1_a_100v3”
escreva( “A soma =”, s) Var
FimAlgoritmo i, s: inteiro
Inicio
5.2 Repetição com Teste no Início s Í 0
i Í 1
Para realizar a repetição com teste no início, utilizamos a estrutura enquanto, que
permite que um bloco ou uma ação seja repetida enquanto uma condição determinada repita
<condição> for verdadeira [Forbelone2005]. A sintaxe desta estrutura é a seguinte: s Í s + i
i Í i + 1
enquanto <condição> faca ate ( i > 100 )
bloco de comandos escreva ( “A soma =”, s)
fimenquanto FimAlgoritmo

A interpretação deve ser: enquanto <condição> for verdadeira executa-se o bloco


de comandos. Quando a <condição> for falsa encerra-se o laço de repetição.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 22 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 23
Como finalizador de entrada teremos a letra 'X' no lugar do sexo da criança.
5.5 Exercícios
Determine e imprima:
1.) Construa um algoritmo que verifique se um número fornecido pelo usuário é primo ou • a porcentagem de crianças mortas no período;
não. • a porcentagem de crianças do sexo masculino mortas no período;
• a porcentagem de crianças que viveram dois anos ou menos no período.
2.) Sendo H = 1 + 1/2 + 1/3 + 1/4 + ... + 1/N, prepare um algoritmo para gerar o número H.
O número N é fornecido pelo usuário. 8.) Um cinema possui capacidade de 100 lugares e está sempre com ocupação total.
Certo dia, cada espectador respondeu a um questionário, no qual constava:
3.) Escreva um algoritmo que leia um conjunto de 20 números inteiros e mostre qual foi o • sua idade;
maior e o menor valor fornecido. • sua opinião em relação ao filme, segundo as seguintes notas:
4.) Calcule o imposto de renda de um grupo de 10 contribuintes, considerando que os
Nota Significado
dados de cada contribuinte, número do CPF, número de dependentes e renda mensal
A Ótimo
são valores fornecidos pelo usuário. Para cada contribuinte será feito um desconto de
5% do salário mínimo por dependente: B Bom
C Regular
D Ruim
Renda Líquida Alíquota E Péssimo
Até 2 salários mínimos isento
2 a 3 salários mínimos 5%
3 a 5 salários mínimos 10%
Elabore um algoritmo que, lendo estes dados, calcule e imprima:
5 a 7 salários mínimos 15%
• a quantidade de respostas ótimo;
Acima de 7 salários mínimos 20%
• a diferença percentual entre respostas bom e regular;
• a média de idade das pessoas que responderam ruim;
Observe que deve ser fornecido o valor atual do salário mínimo para que o
• a percentagem de respostas péssimo e a maior idade que utilizou esta opção;
algoritmo calcule os valores corretamente.
• a diferença de idade entre a maior idade que respondeu ótimo e a maior idade que
5.) Foi realizada uma pesquisa sobre algumas características físicas da população de respondeu ruim.
uma certa região, a qual coletou os seguintes dados referentes a cada habitante para
análise: 9.) Em um prédio há três elevadores denominados A, B, e C. Para otimizar o sistema de
controle dos elevadores, foi realizado um levantamento no qual cada usuário
• sexo ('M' – masculino ou 'F' – feminino);
respondia:
• cor dos olhos ('A' – azuis, 'V' – verdes ou 'C' – castanhos);
• o elevador que utilizava com mais freqüência;
• cor dos cabelos ('L' – louros, 'C' – castanhos ou 'P' – pretos);
• o período que utilizava o elevador, entre:
• idade
• 'M' = matutino;
Faça um algoritmo que determine e escreva: • 'V' = vespertino;
• a maior idade dos habitantes; • 'N' = noturno.
• a percentagem de indivíduos do sexo feminino cuja idade está entre 18 e 35 anos
Construa um algoritmo que calcule e imprima:
(inclusive) e que tenham olhos verdes e cabelos louros.
• qual é o elevador mais freqüentado e em que período se concentra o maior fluxo;
O final do conjunto de habitantes é reconhecido pelo valor –1 entrando como idade. • qual o período mais usado de todos e a que elevador pertence;
• qual a diferença percentual entre o mais usado dos horários e o menos usado;
6.) Anacleto tem 1,50 metro e cresce 2 centímetros por ano, enquanto Felisberto tem 1,10 • qual a percentagem sobre o total de serviços prestados do elevador de média
metro e cresce 3 centímetros por ano. Construa um algoritmo que calcule e imprima utilização.
quantos anos serão necessários para que Felisberto seja maior que Anacleto.

7.) Realizou-se uma pesquisa para determinar o índice de mortalidade infantil em um


certo período. Construa um algoritmo que leia o número de crianças nascidas no
período e, depois, em um número indeterminado de vezes, o sexo de uma criança
morta ('M' – masculino ou 'F' – feminino) e o número de meses de vida da criança.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 24 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 25
2.) Elabore um algoritmo para ler um vetor de 50 elementos inteiros e imprima o maior
entre eles.
6. Estruturas de Dados Algoritmo “Maior”
Var
6.1 Variáveis Compostas Homogêneas a: VETOR [1..50] de inteiro
i, mv: inteiro
As linguagens de programação de modo geral oferecem recursos adicionais para
manusear dados com uma organização mais complexa: MATRIZES e REGISTROS. Inicio
As estruturas de dados indicam como os elementos num conjunto são relacionados para i de 1 ate 50 faca
uns com os outros, ou organizados. A matriz é talvez, a estrutura de dados mais escreva (“ elemento[“, i ,”]=”)
conhecida, porque está disponível em quase todas as linguagens de alto nível. Uma leia (a[i])
matriz pode ser classificada como unidimensional (os chamados VETORES) ou fimpara
multidimensional (MATRIZES). mv Í a[1]
para i de 2 ate 50 faca
6.1.1 Variáveis Compostas Homogêneas Unidimensionais - Vetores se ( a[i]>mv ) entao
mv Í a[i]
Um vetor é uma estrutura que para acessá-lo é necessário a utilização de índices. fimse
A declaração é realizada através da palavra: VETOR. Por exemplo: fimpara
escreva(“ O maior valor = “, mv)
A: VETOR [1..50] de inteiro FimAlgoritmo

Neste exemplo a variável A é capaz de armazenar 50 elementos inteiros.


6.1.2 Variáveis Compostas Homogêneas Multidimensionais - Matrizes
A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[47] A[48] A[49] A[50]
Uma matriz é dita multidimensional quando é necessário utilizar dois ou mais
10 12 5 22 98 25 30 66 .................. 13 8 1 89 índices para referenciar (acessar) um determinado elemento da estrutura. Veja o
esquema:

Exemplos: A 1 2 3 4 5
1 5 9 10 32 12
1.) Algoritmo para ler um vetor de 200 elementos reais e imprimir a média dos elementos 2 23 13 11 89 94
3 45 48 21 74 28
Algoritmo “Calcula_Media”
4 67 86 28 55 66
Var
5 52 94 79 63 42
vet: VETOR [1..200] de real
6 8 36 63 32 17
i: inteiro
s, med: real
Inicio No esquema acima, A é uma matriz de duas dimensões com 6 linhas e 5 colunas.
para i de 1 ate 200 faca A referência a um elemento é feita com o auxílio de 2 índices: um para a linha e o outro
escreva (“elemento[”, i, “] = “) para a coluna. Veja:
leia (vet[i])
fimpara A [3,2] = 48
s Í 0 A [5,4] = 63
para i de 1 ate 200 faca
s Í s + vet[i] Declaração
fimpara
med Í s/200 A: VETOR [ 1..6, 1..5 ] de inteiro
escreva ( “A média dos elementos =”, med)
FimAlgoritmo Nesta declaração a matriz A é uma matriz com 6 linhas e 5 colunas.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 26 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 27
Exemplos:
6.2 Variáveis Compostas Heterogêneas
1.) Elabore um algoritmo que leia uma matriz quadrada 5 x 5 e calcule e imprima os
elementos da diagonal principal bem como a soma destes elementos.
Algoritmo “Soma_Diagonal” Os registros são estruturas de dados capazes de armazenar informações de tipos
Var de dados diferentes. Assim, é possível combinar em uma única variável um conjunto de
a : VETOR [1..5,1..5] de inteiro dados diferentes.
i, j, s: inteiro
Inicio
//Entrada dos elementos da Matriz Esquema:
escreval(“Digite os elementos da matriz :”)
para i de 1 ate 5 faca registro
para j de 1 ate 5 faca nome Endereço cidade cep fone idade
escreva (“A[”, i, “,”, j, “]=”)
leia (a[i,j])
fimpara A estrutura acima, é capaz de armazenar 5 informações diferentes.
fimpara
//Impressão e Cálculo da soma dos elementos da diagonal principal
s Í 0 Declaração:
para i de 1 ate 5 faca
s Í s + a[i,i] Para declarar uma variável registro usa-se a diretiva REGISTRO e FIM. Veja o
escreva(a[i,i]) exemplo:
fimpara
escreva (“ A soma da diagonal =”, s) Tipo DADOS = REGISTRO
FimAlgoritmo nome, endereço, cidade: caractere
cep, fone: caractere
2.) Elabore um algoritmo que leia uma matriz 10 x 5 e calcule e imprima a soma de cada linha. idade: inteiro
FIM
Algoritmo “Soma_linha”
Var REG: DADOS
m: VETOR [1..10, 1..5] de real
sl: real
i, j: inteiro Na declaração acima, a variável REG é capaz de armazenar a estrutura utilizada
Inicio como exemplo. O que diferencia os campos ou componentes do registro é o acesso que é
//Entrada dos elementos da Matriz realizado através do ponto (.). Por exemplo, para acesso a cada campo do registro
escreva (“Digite os elementos da matriz:”) declarado no exemplo acima faríamos:
para i de 1 ate 10 faca
para j de 1 ate 5 faca REG.nome, REG.idade, REG.cidade, REG.cep, REG.fone, REG.idade
escreva (“m[”, i, “,”, j, “]=”)
leia (m[i,j])
fimpara
fimpara
//Impressão e Cálculo da soma dos elementos da diagonal principal
para i de 1 ate 10 faca
slÍ 0
para j de 1 ate 5 faca
sl Í sl + m[i,j]
fimpara
escreval(“soma da linha”, i , “ = “, sl)
fimpara
FimAlgoritmo

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 28 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 29
Exemplos:

Vamos fazer um algoritmo para ler 50 registros e imprimir todos os que possuem 1.) Declare um registro contendo as informações de alunos: nome, ra, disciplina, n1, n2.
idade > 21 anos. Em seguida leia 60 registros e imprima a quantidade de alunos aprovados e a
quantidade de alunos reprovados, mostrando o nome e a média dos aprovados.

Algoritmo “Alunos”
Algoritmo “Idade” Var
Var Tipo rec = REGISTRO
Tipo dados = REGISTRO nome, ra, disc: caractere
nome, endereço, cidade: caractere n1, n2: real
cep, fone: caractere FIM
idade: inteiro a: rec
FIM i, qa, qr: inteiro
med: real
reg: dados Inicio
i: inteiro qa Í 0
Inicio qr Í 0
para i de 1 ate 50 faca
escreva(“ nome: “) para i de 1 ate 60 faca
leia(reg.nome) escreva(“nome: “)
escreva(“ endereço: “) leia(a.nome)
leia(reg.endereço) escreva(“ra: “)
escreva(“ cidade: “) leia(a.ra)
leia(reg.cidade) escreva(“disciplina: “)
escreva(“ cep: “) leia(a.disc)
leia(reg.cep) escreva(“digite as 2 notas: “)
escreva(“ fone: “) leia(a.n1,a.n2)
leia(reg.fone) med Í (a.n1 + a.n2) / 2
escreva(“ idade: “)
leia(reg.idade) se ( med >= 7) então
se (reg.idade > 21) entao qa Í qa + 1
escreva (“ nome: “, reg.nome); escreva(“ nome =“, a.nome)
escreva (“ endereço: “,reg.endereço); escreva(“ média =“, med)
escreva (“ cidade: “, reg.cidade); senão
escreva (“ cep: “, reg.cep); qr Í qr + 1
escreva (“ fone: “, reg.fone); fimse
escreva (“ idade : “ , reg.idade) fimpara
senao
escreva(“ a pessoa é menor de idade ! “) escreva(“ Total de aprovados =“, qa);
fimse escreva(“ Total de reprovados =“, qr);
fimpara FimAlgoritmo
FimAlgoritmo
2.) Declare um registro contendo informações de um produto: código, descrição,
fornecedor, quantidade em estoque, etc. Em seguida declare um vetor capaz de
armazenar 500 produtos. Elabore um algoritmo que cadastre os 500 produtos e em
seguida efetue baixas no estoque, solicitando a digitação do código de um produto e se
ele existir no vetor, entrar com a quantidade a ser retirada do estoque. Se esta quantia
for maior que a estocada, zerar o estoque e retirar o que tem, caso contrário atualize o
estoque. Encerrar o programa quando o usuário desejar.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 30 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 31
Algoritmo “Controla_Estoque” 6.3 Exercícios
Var
Tipo reg = REGISTRO
cod: inteiro 1) Escrever um algoritmo que leia um vetor com 6 elementos e em seguida conte
desc, forn: caractere quantos elementos têm valor negativo e escreva esta informação.
qtd: real
FIM 2) Escreva um algoritmo que leia um vetor com 80 elementos. A seguir encontre o valor
do menor elemento (m) e a sua posição no vetor (p) e mostre o seguinte:
//v é uma variável capaz de armazenar 500 registros "o menor elemento é = ", m," e a sua posição é = ",p.
v: VETOR [1..500] de reg
i , qt, cd, achou: inteiro 3) Refazer o algoritmo do exercício anterior de modo que ele também mostre o maior
resp: caractere valor e sua posição.
Inicio
escreval(“ Cadastro dos 500 produtos:”) 4) Escrever um algoritmo que leia um vetor com 20 elementos. A seguir, ordene os
para i de 1 ate 500 faca elementos em ordem crescente e os mostre novamente. Utilize o “método da bolha”
escreva(“codigo : “) para ordenação, o qual consiste em:
leia(v[i].cod)
escreva(“descrição: “) 1º. Passo: percorra o vetor e coloque o maior valor no último elemento do vetor;
leia(v[i].desc) 2º. Passo: percorra o vetor e coloque o segundo maior valor no penúltimo elemento
escreva(“fornecedor: “) do vetor;
leia(v[i].forn) Repita o procedimento até que todos os elementos estejam ordenados.
escreva(“qtd. em estoque:“)
leia(v[i].qtd) 5) Escrever um algoritmo que lê um vetor com 20 elementos. A seguir, troque o primeiro
fimpara elemento com o último, o segundo com o penúltimo, etc, até o décimo com o décimo
repita primeiro e mostre o vetor assim modificado.
escreva (“ Digite o código para busca em vetor: “)
leia (cd) 6) Escreva um algoritmo que leia dois vetores (A e B) e calcule o produto escalar dos
achou Í 0 dois vetores. O produto escalar é calculado da seguinte forma:
i Í 1
Vetor A=[2,3,6,9,4]
enquanto (( achou = 0) e (i < 500)) faca
se (v[i].cod = cd) entao
Vetor B=[1,5,7,4,3]
achou Í 1
senao Produto escalar=2*1 + 3*5 + 6*7 + 9*4 + 4*3 = 107
i Í i + 1
7) Escrever um algoritmo que leia um vetor com 15 elementos. Crie a seguir um segundo
fimse
fimenquanto vetor que contém todos os valores primos do primeiro, e mostre este vetor;
se (achou = 0) entao
escreva(“Produto não cadastrado! “) 8) Escrever um algoritmo que leia 2 vetores com 10 elementos cada. Considerando cada
senao vetor como sendo um conjunto, crie um terceiro vetor que seja a união dos dois
escreva(“Digite a quantidade a retirar do estoque:“) primeiros e o mostre;
leia (qt)
se (v[i].qtd < qt) entao 9) Escrever um algoritmo que leia 2 vetores com 10 elementos cada. Considerando cada
v[i].qtd Í 0 vetor como sendo um conjunto, crie um terceiro vetor que seja a intersecção dos dois
escreva (“Efetuar pedido a”,v[i].forn) primeiros e o mostre;
senao
v[i].qtd Í v[i].qtd - qt
escreva (“Restou:”, v[i].qtd)
10) Escrever um algoritmo que leia 2 vetores com 10 elementos cada. Em seguida, crie
fimse um terceiro vetor, que seja a soma dos elementos dos dois primeiros, e um quarto,
fimse; que seja a diferença entre os elementos dos dois primeiros, e os mostre;
escreva (“ Deseja efetuar outra baixa no estoque:”)
leia (resp) 11) Escreva um algoritmo que leia dois vetores de 10 elementos, ordene cada vetor e crie
ate ( (resp = “N”) ou (resp = “n”)) um terceiro vetor contendo a intercalação dos dois anteriores.
FimAlgoritmo 12) O tempo em que um ônibus leva (em horas) para percorrer o trecho entre duas
cidades distintas está disponível na seguinte tabela:

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 32 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 33
1 2 3 4 5
1 02 05 10 08
2 02 04 11 04
3 05 04 02 07
4 10 11 02 09
5 08 04 07 09
Faça um algoritmo que leia a tabela acima e permita que o usuário consulte a tabela 7. Modularização de Algoritmos
fornecendo o número das cidades. O algoritmo deve terminar quando o usuário entrar
com dois números iguais.

13) Elabore um algoritmo que leia uma matriz quadrada 5x5, calcule e imprima os A principal razão para se criar subprogramas está relacionada com a otimização e
elementos da diagonal principal, bem como a soma destes elementos; a melhor estruturação do código do programa. Ou seja, quando um determinado trecho de
programação deve ser repetido por várias vezes no programa, colocando-o em um
14) Uma matriz quadrada Anxn é um quadrado latino de ordem n se, em cada linha e em subprograma basta referenciá-lo quantas vezes desejar. Organizando o programa em
cada coluna aparecem todos os inteiros 1,2, 3, ...,n. Por exemplo, a matriz A4x4 abaixo módulos, facilita a implementação pois cada “pedaço” pode ser implementado e testado
é um quadrado latino. separadamente, um de cada vez. São duas as formas básicas para desenvolvimento de
subprogramas:
1 2 3 4
2 3 4 1 • PROCEDIMENTOS
A= 4 1 2 3 • FUNÇÕES
3 4 1 2

Faça um algoritmo que leia uma matriz quadrada, cuja ordem é definida pelo usuário, e A diferença básica entre os procedimentos e as funções é que, as funções
obrigatoriamente retornam valor no término de sua execução e os procedimentos não. A
imprima uma mensagem dizendo se ela é ou não um quadrado latino.
declaração dos procedimentos e funções pertencentes a um determinado programa deve
ser feita após a declaração das variáveis globais e antes do início do programa principal.
15) Elabore um algoritmo que leia uma matriz de 4 linhas por 12 colunas, onde cada linha
representa o número referente a uma semana ( 1, 2, 3 e 4) e cada coluna representa
um mês do ano ( 1 = jan, 2 = fev, 3 = mar, 4 = abr, .... 12 = dez). Os valores dos
elementos da matriz representam a quantidade em estoque de um determinado
produto durante o ano. Elabore um algoritmo que calcule e imprima qual o mês e qual 7.1 Procedimentos
a semana que obteve maior estoque do produto. Veja o exemplo:
Um procedimento é criado pela declaração : PROCEDIMENTO. Veja a sintaxe:
Matriz
jan fev mar abr mai jun jul ago set out nov dez
1 2 3 4 5 6 7 8 9 10 11 12
1 20 50 6 12 15 67 17 18 20 28 24 16 PROCEDIMENTO <nome_do_procedimento> [(lista_de_parâmetros)]
2 12 43 55 11 34 55 45 84 16 56 81 23 Var
3 15 23 34 34 76 12 67 27 78 35 43 34 declarações de variáveis locais ao procedimento
4 30 17 22 55 66 15 8 23 74 53 47 46
Inicio
Para o exemplo deverá ser impresso que o maior estoque do ano é de 84 e ocorreu no comandos pertencentes ao procedimento
mês 08 (agosto) na semana ( 2 ). FimProcedimento
16) Elabore um algoritmo que declare uma matriz quadrada de 10 linhas por 10 colunas e
verifique se a matriz é simétrica com relação à diagonal principal. A matriz simétrica é
aquela em que todos os elementos A(i,j) = A(j,i) para quaisquer valores de i e j. Assim,
A[2,1] deverá ser igual a A[1,2], e A[3,5] deverá ser igual a A[5,3] e assim por diante.
Imprimir mensagem “Matriz Simétrica” ou “Matriz não Simétrica”.
17) Faça um algoritmo que calcule a multiplicação entre duas matrizes dadas A e B, de
quaisquer ordens. Lembrar que para poder ser efetuada a multiplicação é necessário
que o número de colunas da matriz A seja o mesmo número de linhas da matriz B.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 34 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 35
PROCEDIMENTO ledados()
Inicio
para i de 1 ate 100 faca
Exemplo: escreva (“nome = “)
leia (a[i].nome)
1) Algoritmo para calcular o maior dentre três valores entrados via teclado. escreva (“ cargo = “)
leia (a[i].cargo)
Algoritmo “Maior_Valor” escreva (“ salário = “)
Var leia (a[i].sal)
a, b, c, max: inteiro //Variáveis Globais fimpara
FimProcedimento
Procedimento DeterminaMaior()
Var PROCEDIMENTO aumento()
maior: inteiro //Variável Local Inicio
Inicio para i de 1 ate 100 faca
se ((a>b) e (a>c)) entao a[i].sal <- a[i].sal * 1.1
maior Í a escreva(“nome = “,a[i].nome,“salário = “,a[i].sal)
senao fimpara
se (b>c) entao FimProcedimento
maior Í b
senao //programa principal
maior Í c Inicio
fimse escreva(“ Entrada dos dados “)
fimse ledados()
max Í maior escreva (“ Impressão dos dados com aumento de salário”)
FimProcedimento aumento()
FimAlgoritmo
Inicio //programa principal

escreva(“ Digite os 3 valores:”)


leia (a, b, c) 7.2 Funções
DeterminaMaior()
escreva(“ O maior valor = “, max) A característica fundamental de uma função é que ela retorna um valor para o
FimAlgoritmo programa que a chamou. Assim, a sua declaração deverá conter o tipo de dado que irá
retornar. Veja:

2) Algoritmo para ler um vetor de 100 registros de funcionários ( nome, cargo, salário) e
imprimir os 100 registros com um aumento de 10%. FUNCAO <nome da função> [(lista_de_parâmetros)]:<tipo_de_dado>
Var
declarações de variáveis locais à função
Algoritmo “Aumento_Salário”
Var Inicio
Tipo reg = REGISTRO //comandos pertencentes à função
nome, cargo: caractere retorne <valor_a_ser_retornado>
sal: real FimFuncao
Fim

// variáveis globais - todos os procedimentos podem usá-las O valor a ser retornado pela função para o programa principal deve seguir o
a: vetor [1..100] de reg comento retorne.
i: inteiro

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 36 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 37
Algoritmo “Exemplo_por_valor”
Exemplo: Algoritmo para calcular o maior entre 3 valores lidos pelo teclado. Var
n1, n2:inteiro //variáveis Globais
Algoritmo “Maior_Valor”
Var Procedimento Inverte(a1,a2:inteiro)
a, b, c, max: inteiro //Variáveis Globais Var
aux: inteiro
FUNCAO DeterminaMaior(): inteiro Inicio
Var aux Í a1
maior: inteiro a1 Í a2
Inicio a2 Í aux
se ((a>b) e (a>c)) entao escreval(“No procedimento a1=”,a1)
maior Í a escreval(“No procedimento a2=”,a2)
senao FimProcedimento
se (b>c) entao
maior Í b Inicio //programa Principal
senao escreva(“Digite os valores de n1 e n2:”)
maior Í c leia(n1,n2)
fimse Inverte(n1,n2)
fimse escreval(“No Programa Principal n1=”,n1)
retorne maior //valor a ser retornado escreval(“No Programa Principal n2=”,n2)
FimAlgoritmo
FimFuncao //Fim da Função

//programa principal No Algoritmo acima, suponha que os valores digitados para n1 e n2 sejam
Inicio respectivamente 1 e 2. Na chamada ao procedimento Inverte(n1,n2) estes valores
escreva(“ Digite os 3 valores:”) serão copiados para as variáveis a1 e a2. Dentro do procedimento os valores de a1 e a2
leia (a, b, c) são invertidos e depois exibidos. Entretanto, esta ação de inverter os valores de a1 e a2
max Í DeterminaMaior() não refletem nas correspondentes variáveis n1 e n2 utilizadas na chamada ao
escreva(“ O maior valor = “, max) procedimento. Abaixo segue o resultado de uma execução.
FimAlgoritmo
Digite os valores de n1 e n2: 1 2
No procedimento a1=2
7.3 Passagem de Parâmetros No procedimento a2=1
No Programa Principal n1=1
Muitas vezes é necessário passar valores que devem ser utilizados para o No Programa Principal n2=2
processamento realizado dentro do subprograma (procedimento ou função). Existem duas
formas de se passar parâmetros para os subprogramas: por valor e por referência.
7.3.2 Passagem de Parâmetros Por Referência

7.3.1 Passagem de Parâmetros Por Valor Na passagem de parâmetros por referência, a grande diferença está no fato de que
todas as modificações feitas nas variáveis do subprograma que receberam seus valores
Na passagem de parâmetros por valor, os valores passados são colocados em por referência refletem nas correspondentes variáveis do programa principal. Por
variáveis locais do subprograma e qualquer modificação nestas variáveis não refletem nas exemplo:
variáveis do programa principal. Por exemplo:

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 38 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 39
Algoritmo “Exemplo_por_Referencia”
Var
n1, n2:inteiro //variáveis Globais

Procedimento Inverte(var a1,a2:inteiro)


Var
8. Referência Bibliográfica
aux: inteiro
Inicio
aux Í a1
a1 Í a2 [Forbellone2005] Forbellone, André Luiz Villar; Eberspächer, Henri Frederico.
a2 Í aux
escreval(“No procedimento a1=”,a1)
Lógica de Programação – A construção de algoritmos e estruturas de dados.
escreval(“No procedimento a2=”,a2) 3ª. Edição. Pearson-Prentice Hall, 2005.
FimProcedimento
[Souza] Sousa, Cláudio Morgado de. Visualg 2.0.
Inicio //programa Principal http://www.apoioinformatica.inf.br
escreva(“Digite os valores de n1 e n2:”)
leia(n1,n2)
Inverte(n1,n2)
escreval(“No Programa Principal n1=”,n1)
escreval(“No Programa Principal n2=”,n2)
FimAlgoritmo

No algoritmo acima, caso sejam digitados os valores 1 e 2 para as variáveis n1 e


n2, estes valores serão passados para o procedimento que os recebe por referência nas
variáveis a1 e a2. Note que para isso devemos utilizar a palavra var antes das variáveis
que receberão seus valores por referência no cabeçalho do subprograma. Assim, toda
modificação no conteúdo das variáveis a1 e a2 dentro do procedimento, refletirão no
conteúdo das variáveis correspondentes (n1 e n2) do programa principal. Abaixo uma
execução que mostra este comportamento.

Digite os valores de n1 e n2: 1 2


No procedimento a1=2
No procedimento a2=1
No Programa Principal n1=2
No Programa Principal n2=1

7.4 Exercícios
1.) Elabore um algoritmo que tenha um procedimento para ler um vetor de 100 elementos
inteiros, uma função que calcule e retorne a média destes valores e imprima este
resultado no programa principal.

2.) Elabore um algoritmo que faça a leitura de um número inteiro no programa principal,
passe esse número para uma função que deverá retornar se este número é primo ou
não. Após este retorno, no programa principal imprima uma mensagem dizendo se o
número é ou não é primo. Lembre-se que para o número ser primo ele deve ser
divisível somente por 1 e por ele mesmo.

Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 40 Faculdade de Engenharia, Arquitetura e Tecnologia – UNIMAR – Marília - SP.. 41

Você também pode gostar