Escolar Documentos
Profissional Documentos
Cultura Documentos
Livro - Algoritmos e Programação I
Livro - Algoritmos e Programação I
CDU: 681.3.421.2
ISBN 978-85-7528-510-7
Prezado(a) aluno(a)
Vanessa Lindemann
1 INTRODUÇÃO ............................................................................................................9
1.1 Conceito de algoritmo..........................................................................................9
1.2 Construção do algoritmo ....................................................................................10
1.3 Formas de representação de algoritmos..............................................................11
1.4 Estrutura básica de um algoritmo .......................................................................15
Atividades .............................................................................................................17
2 CONCEITOS FUNDAMENTAIS ....................................................................................19
2.1 Dados .............................................................................................................19
2.2 Variáveis ..........................................................................................................20
2.3 Constantes .......................................................................................................22
2.4 Expressões .......................................................................................................22
Atividades .............................................................................................................26
3 INSTRUÇÕES PRIMITIVAS ........................................................................................29
3.1 Instrução primitiva de atribuição ......................................................................29
3.2 Instrução primitiva de saída ..............................................................................32
3.3 Instrução primitiva de entrada ...........................................................................34
Atividades .............................................................................................................36
4 ESTRUTURA SEQUENCIAL ........................................................................................39
4.1 Estrutura básica de um algoritmo sequencial ......................................................39
4.2 Exemplo de um algoritmo com estrutura sequencial ............................................40
4.3 Construção de algoritmos sequenciais ...............................................................42
4.4 Teste de mesa de algoritmos com estrutura sequencial .......................................46
Atividades .............................................................................................................52
5 ESTRUTURA DE CONTROLE CONDICIONAL: SE ...........................................................53
5.1 Estrutura condicional SE simples........................................................................53
5.2 Estrutura condicional SE composta ....................................................................55
5.3 Estrutura condicional SE encadeada ..................................................................59
5.4 Formatação da solução do algoritmo ..................................................................65
Atividades .............................................................................................................66
Atividades .............................................................................................................78
7 ESTRUTURA DE CONTROLE DE REPETIÇÃO: ENQUANTO ..............................................81
Atividades .............................................................................................................94
8 ESTRUTURA DE CONTROLE DE REPETIÇÃO: REPITA ....................................................99
Atividades ...........................................................................................................106
9 ESTRUTURA DE CONTROLE DE REPETIÇÃO: PARA.....................................................111
Atividades ...........................................................................................................117
10 INTRODUÇÃO À LINGUAGEM C ...............................................................................121
10.1 Identificadores ..............................................................................................122
10.2 Tipos de dados ..............................................................................................123
10.3 Modeladores .................................................................................................123
10.4 Declaração, inicialização e escopo de variáveis ...............................................124
10.5 Definição de constantes ................................................................................124
10.6 Códigos de formato .......................................................................................125
10.7 Caracteres especiais ....................................................................................127
10.8 Comando de atribuição .................................................................................127
10.9 Operadores e funções ....................................................................................128
10.10 Comentários................................................................................................130
10.11 Funções de entrada e saída ..........................................................................130
10.12 Estruturas de controle condicional ...............................................................131
10.13 Estruturas de controle de repetição .............................................................133
Atividades ...........................................................................................................137
Por exemplo, se desejamos fazer um algoritmo para fazer a soma de dois números
Exemplo 1.1. Faça um algoritmo que calcule e escreva a média final de um aluno
ULBRA – Educação a Distância
1.3.2 Fluxograma
O fluxograma, também chamado de diagrama de blocos, é uma representação de
algoritmo que utiliza símbolos geométricos para representar as ações (comandos
ou instruções) a serem seguidas. Assim como português estruturado, é utilizado
para organizar o raciocínio lógico do problema antes de implementá-lo em uma
linguagem de programação. Os símbolos utilizados para representar estas ações
são apresentados na Tabela 1.1.
mais trabalhoso fazer desenhos do que escrever texto. O algoritimo do exemplo 1.1
início
S media >= 6 N
fim
• 1 pitada de sal
ULBRA – Educação a Distância
Glossário
• Programa: é uma sequência de instruções que podem ser executadas por
um computador. É um conjunto de ordens dadas a um computador para a
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores:
algoritmos, Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do
Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
Atividades
1. Vamos construir alguns algoritmos? Descreva os passos necessários para
solucionar os seguintes desafios.
Resposta:
Encha o balde de 5 litros e despeje a água no balde de 3 litros, enchendo-o.
Agora, restaram 2 litros no balde de 5 litros. Jogue fora a água do balde de 3
litros e coloque nele os 2 litros que estavam no balde de 5 litros. A seguir, encha
o balde de 5 litros novamente e pronto! No balde de 3 litros estão, agora, 2
litros de água, enquanto o balde de 5 litros está cheio, totalizando 7 litros!
2.1 Dados
O objetivo da maioria dos algoritmos é manipular dados, transformando os dados
de entrada em dados de saída (resultados). Um dado é um atributo que descreve
entidades ou características, por exemplo: o nome de uma pessoa, sua idade, seu
peso ou o número de páginas de um livro.
Quando vamos desenvolver um algoritmo, precisamos previamente identificar o
tipo do dado que está sendo manipulado. Isso é necessário, pois, quando formos
converter o algoritmo para uma linguagem de programação, os dados serão
armazenados na memória principal do computador e um espaço de memória
específico (tamanho) deve ser reservado a cada tipo de dado. Os principais tipos
de dados são: inteiro, real, caractere, cadeia e lógico.
de alunos em uma turma (alunos = 24); idade de uma pessoa (anos = 25); o ano
ULBRA – Educação a Distância
2.2 Variáveis
Uma variável pode ser definida como um local, na memória principal, utilizado
para armazenar o conteúdo de um determinado dado, podendo receber muitos
valores diferentes durante a execução do algoritmo, mas em um dado instante ela
só pode apresentar um valor único.
O conceito de variável foi criado para permitir, que através do nome (identificador),
os algoritmos possam armazenar, localizar e manipular as informações na
memória dos computadores. São, portanto, formadas por três atributos: um nome
(identificador), um tipo de dado, e um valor.
Toda variável possui um nome único que a diferencia das demais. A escolha do
nome de uma variável cabe ao programador, porém algumas regras devem ser
observadas. São elas:
• devem sempre começar com uma letra;
• podendo ser seguida de letras e/ou números;
Exemplo
variáveis
nome, endereco: cadeia
idade: inteiro
peso, altura: real
2.3 Constantes
ULBRA – Educação a Distância
2.4 Expressões
Operadores são elementos fundamentais que, quando relacionados com operandos,
produzem uma expressão. Por exemplo, a expressão 3 + 2 relaciona dois operandos
(os números 3 e 2) por meio do operador (+) que representa a operação de adição.
Os operandos dividem-se em aritméticos, relacionais e lógicos. Esta divisão está
diretamente relacionada com o tipo de expressão onde aparecem os operadores.
Como pode ser observado, nos algoritmos podemos utilizar três operadores
14 4
-12 3,5 quociente
20
- 20
0 resto da divisão
14 4
-8 3 quoiente inteiro (div)
2 resto da divisão inteira (mod)
Temos que ter um cuidado especial quando convertemos uma expressão matemática
para utilizá-la em um algoritmo. Considere a expressão a seguir.
3+5
2
V V F F V V
V F F V F V
F V V F F V
F F V V F F
Referências
ULBRA – Educação a Distância
Atividades
1) Marque com um (X) somente os identificadores válidos.
a) ( ) nome b) ( ) endereço c) ( ) 3x4
d) ( ) soma e) ( ) salário_líquido f) ( ) a
g) ( ) nomedaempresa h) ( ) ah! i) ( ) salario total
j) ( ) média k) ( ) x2 l) ( ) data
2) Observe os dados listados a seguir e identifique o seu tipo, marcando com “I”
os inteiros, “R” os reais e “C” as cadeias.
a) ( ) nome de uma pessoa b) ( ) o tamanho de uma mesa
c) ( ) preço de um produto d) ( ) o número de cadeiras de uma mesa
e) ( ) um dia do mês f) ( ) o código de um produto
Gabarito:
1. As respostas corretas são: a, d, f, g, k e l.
2. a) C; b) R; c) R; d) I; e) I; f) C
3. b
4. c
5. a) V; b) F; c) V; d) V
<variável> <expressão>
<variável> <variável>
<variável> <constante>
Seu funcionamento consiste em avaliar a expressão (variável ou constante) que
está à direita do comando e armazenar o valor resultante desta expressão (variável
ou constante) na posição de memória correspondente à variável que aparece à
esquerda do comando. Para isso, é necessário que o tipo de dado resultante da
expressão (variável ou constante) avaliada e o tipo de dado da variável sejam
compatíveis. No exemplo media 6.8 (lê-se “média recebe seis e oito”), o valor
6,8 é armazenado na posição de memória reservada à variável media, que deverá
ser do tipo real. Outros exemplos da instrução primitiva de atribuição podem ser
observados no Quadro 3.1.
x, y: lógico 01 x verdadeiro
codigo, qtde: inteiro
02 y x
desconto, total: real
nome, telefone: cadeia 03 codigo 2089
resposta1: caractere 04 qtde 3
resposta2: caractere
05 total qtde * 5
06 desconto total * 0.1
07 nome "Ana Lu"
08 telefone "(99)3333-0123"
09 resposta1 "S"
10 resposta2 resposta1
Por fim, vale lembrar que uma sequência de atribuições modifica o conteúdo da
variável armazenada na memória, como ilustra o exemplo do Quadro 3.4.
01 algoritmo exemplo31
02 variáveis
03 nota1, nota2, media: real
04 início
05 nota1 7
06 nota2 9
07 media (nota1 + nota2) / 2
08 fim
de saída pode ser uma única variável, uma lista de variáveis, um literal ou uma
01 algoritmo exemplo32
02 variáveis
03 nota1, nota2, media: real
04 início
05 nota1 7
06 nota2 9
07 media (nota1 + nota2) / 2
08 escrever ("Média do aluno = ", media)
09 fim
A instrução primitiva de entrada permite que dados fornecidos pelo usuário via
teclado (ou por outros dispositivos) sejam armazenados em variáveis na memória
do computador.
A sintaxe do comando de entrada de dados é exibida a seguir e exemplificada no
Quadro 3.8.
ler(<variável>)
ler(<lista de variáveis>)
01 algoritmo exemplo33
02 variáveis
03 nota1, nota2, media: real
04 início
05 escrever("Digite a primeira nota: ")
06 ler(nota1)
07 escrever("Digite a segunda nota: ")
08 ler(nota2)
09 media (nota1 + nota2) / 2
10 escrever ("Média do aluno = ", media)
11 fim
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores:
algoritmos, Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do
Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
Atividades
ULBRA – Educação a Distância
variáveis
nome, aluno: cadeia
resp: caractere
a, b, c: inteiro
total, preco, resto: real
teste, flag: lógico
variáveis
nome: cadeia
idade: inteiro
peso, altura, imc: real
(a) variáveis
a, b, x, y: inteiro
c, desconto, z: real
teste: caractere
(b) variáveis
teste: caractere
a, b, c, x, y: inteiro
desconto, z: real
(c) variáveis
teste: cadeia
a, b, c, x, y: inteiro
desconto, z: real
(d) variáveis
teste: caractere
a, b, x, y: inteiro
c, desconto, z: real
(e) Nenhuma das respostas anteriores.
Respostas
1) a = F; b = V; c = F; d = V; e = V.
2) c.
3) a, b, c, f, h.
4) c.
5) b
01 algoritmo exemplo33
02 variáveis
03 nota1, nota2, media: real
04 início
05 escrever("Digite a primeira nota: ")
06 ler(nota1)
07 escrever("Digite a segunda nota: ")
08 ler(nota2)
09 media (nota1 + nota2) / 2
10 escrever ("Média do aluno = ", media)
11 fim
Exemplo 4.1
Descrição do problema: construa um algoritmo que: (a) leia o nome de um
funcionário, a quantidade de horas por ele trabalhadas e o valor que ele recebe por
hora; (b) calcule o salário bruto, o valor do INSS (8% sobre o salário bruto) e o salário
líquido do funcionário; (c) escreva o nome do funcionário e os valores calculados.
A partir deste enunciado, monta-se o esquema da Figura 4.3 que contém os
elementos básicos para a construção da solução.
01 algoritmo exemplo41
02 variáveis
03 nome: cadeia
04 ht: inteiro
05 vh,sb,inss,sl: real
06 início
07 escrever("Nome do funcionário: ")
08 ler(nome)
09 escrever("Quantidade de horas trabalhadas: ")
10 ler(ht)
11 escrever("Valor da hora: ")
12 ler(vh)
13 sb ht * vh
14 inss sb * 0.08
15 sl sb - inss
16 escrever ("Funcionário: ", nome)
17 escrever ("Salário bruto: R$", sb)
18 escrever ("INSS: R$", inss)
19 escrever ("Salário líquido: R$", sl)
20 fim
O algoritmo inicia com a definição de um identificador (linha 01), que deve seguir
as mesmas regras usadas para definir nomes de variáveis - como não é permitido o
uso de espaço em branco e caracteres especiais, o exemplo 4.1 é identificado como
exemplo41. Entre as linhas 02 e 05, consta a declaração de variáveis: o nome do
funcionário é do tipo cadeia, a quantidade de horas trabalhadas foi declarada do
tipo inteiro e as demais variáveis são do tipo real (valor da hora, salário bruto, inss
ULBRA – Educação a Distância
e salário líquido). O corpo do algoritmo está entre as linhas 06 e 20, onde estão
organizados os elementos básicos de entrada/processamento/saída do esquema
apresentado na Figura 4.3. Os comandos que representam a entrada de dados
estão entre as linhas 07 e 12 - antes de cada instrução primitiva de entrada (linhas
08, 10 e 12), e será emitida uma mensagem para o usuário, indicando os dados a
serem digitados (linhas 07, 09 e 11). Os cálculos do processamento aparecem entre
as linhas 13 e 15, cujos resultados serão escritos entre as linhas 16 e 19 - comandos
que representam a saída de dados.
Exemplo 4.2
Descrição do problema: sabe-se que na cidade X o índice de natalidade anual é
30% maior do que na cidade Y. Construa um algoritmo que, a partir do índice de
natalidade anual da cidade Y, calcule e escreva o valor estimado da natalidade
anual na cidade X.
O esquema da Figura 4.4 contém os elementos básicos para a construção da solução
deste problema.
01 algoritmo exemplo42
02 variáveis
03 x, y: real
04 início
05 escrever("Índice de natalidade da cidade Y: ")
06 ler(y)
07 x y * 1.3
08 escrever ("Índice de natalidade da cidade X: ", x)
09 fim
Exemplo 4.3
Descrição do problema: faça um algoritmo que converta uma temperatura de graus
Centígrados para graus Fahrenheit. A fórmula de conversão é F=(9*C+160)/5, onde
F é a temperatura em Fahrenheit e C é a temperatura em Centígrados.
Os dados de entrada e saída, bem como o processamento necessário para resolver
o problema, podem ser observados na Figura 4.5. A partir destes dados, chega-se à
solução para o problema, apresentada em português estruturado no Quadro 4.5.
01 algoritmo exemplo43
02 variáveis
03 C, F: real
04 início
05 escrever("Temperatura em graus Centígrados: ")
06 ler(C)
07 F (9*C+160)/5
08 escrever ("Temperatura em graus Fahrenheit: ", F)
09 fim
O teste de mesa tem por objetivo detectar, caso existam, erros semânticos na
solução do algoritmo (ou seja, erros de lógica). Para realizar o teste de mesa, as
variáveis utilizadas no algoritmo devem ser listadas, uma simulação da execução do
algoritmo é realizada e todos os valores assumidos pelas variáveis são registrados.
No final, compara-se a resposta obtida com a resposta esperada. Caso não haja
coincidência entre estas respostas, detectou-se um erro de lógica.
Os exemplos descritos a seguir apresentam o algoritmo e seu teste de mesa.
Exemplo 4.4
Descrição do problema: faça um algoritmo para calcular a área de um triângulo.
Mesmo que não esteja explícito na descrição do problema, os dados de entrada podem
ser identificados a partir da fórmula usada para calcular a área de um triângulo.
Assim, como ilustra a Figura 4.6, os dados necessários para calcular esta área são a
base e a altura do triângulo. No processamento, simplesmente, aplica-se a fórmula
e, por fim, o resultado deverá ser exibido ao usuário. O algoritmo que resolve este
problema é descrito no Quadro 4.6 e seu teste de mesa é explicado na sequência.
01 algoritmo exemplo44
02 variáveis
03 b, h, area: real
04 início
05 escrever("Base: ")
06 ler(b)
07 escrever("Altura: ")
08 ler(h)
09 area (b*h)/2
10 escrever ("Área = ", area)
11 fim
Para testar a solução apresentada, é preciso definir valores para os dados de entrada.
Feito isto, a simulação de execução deve ser iniciada, passando linha a linha do
algoritmo e registrando os valores assumidos pelas variáveis. Na linha 05 do
algoritmo (Quadro 4.6), primeira instrução a ser executada, será emitida uma
mensagem ao usuário para que ele informe a base do triângulo. Esta instrução não
altera o valor de nenhuma das variáveis, portanto, não gera registro na tabela do
teste de mesa. Na linha 06 (Quadro 4.6), o valor digitado pelo usuário será lido e
armazenado na variável b, gerando um registro no teste de mesa, conforme ilustra
o Quadro 4.8. Este registro contém o número da linha da instrução executada no
algoritmo e o valor de entrada da variável b, definido como 12 neste teste.
Na linha 07 (Quadro 4.6), uma mensagem será emitida ao usuário solicitando que
ULBRA – Educação a Distância
ele digite a altura do triângulo, valor que será lido e armazenado na variável h
(linha 08 - Quadro 4.6), gerando um novo registro na tabela do teste de mesa, que
pode ser observado no Quadro 4.9.
Por fim, na linha 10 (Quadro 4.6), consta a instrução primitiva de saída que irá
exibir ao usuário o valor da área do triângulo, calculado no algoritmo. O Quadro
4.11 apresenta, à direita, a saída do algoritmo.
06 12
08 5
09 30
Exemplo 4.5
Descrição do problema: escreva um algoritmo para calcular a quantidade de
combustível necessária para um automóvel percorrer determinada distância.
Considerar um consumo médio de um litro de combustível para cada 12 km
rodados.
Para calcular a quantidade de combustível necessária para um automóvel percorrer
uma distância qualquer, é necessário saber a distância a ser percorrida e o consumo
médio do veículo. No enunciado do problema, consta apenas o consumo médio do
veículo. Portanto, a distância a ser percorrida deverá ser informada pelo usuário.
A Figura 4.7 apresenta os elementos básicos para a construção deste algoritmo.
01 algoritmo exemplo45
02 variáveis
03 distancia, litros: real
04 início
05 escrever("Informe a distância a ser percorrida: ")
06 ler(distancia)
07 litros distancia/12
08 escrever ("Serão necessários ",litros," de combustível.")
09 fim
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores: algoritmos,
Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
Atividades
ULBRA – Educação a Distância
1 pé = 12 polegadas;
1 jarda = 3 pés;
Com instrução única Com bloco de instruções Mais de uma condição e bloco de
instruções
01 algoritmo exemplo51
02 variáveis
03 nota1, nota2, media: real
04 início
05 escrever("Digite a primeira nota: ")
06 ler(nota1)
07 escrever("Digite a segunda nota: ")
08 ler(nota2)
09 media (nota1 + nota2) / 2
10 escrever ("Média do aluno = ", media)
11 se(media>=6)então
12 escrever("Aluno aprovado!")
13 fim
01 algoritmo exemplo52
02 variáveis
03 nota1, nota2, media: real
04 início
05 escrever("Digite a primeira nota: ")
06 ler(nota1)
07 escrever("Digite a segunda nota: ")
08 ler(nota2)
09 media (nota1 + nota2) / 2
10 escrever("Média do aluno = ", media)
11 se(media>=6)então
12 escrever("Aluno aprovado!")
13 senão
14 escrever("Aluno reprovado!")
15 fim
Exemplo 5.3
Descrição do problema: escreva um algoritmo que verifique se um valor qualquer
digitado pelo usuário é positivo ou negativo.
se(valor<0)então Negativo
escrever("Negativo") ou
senão
escrever("Positivo") Positivo
01 algoritmo exemplo53
02 variáveis
03 valor: real
04 início
05 escrever("Informe um valor qualquer: ")
06 ler(valor)
07 se(valor<0)então
08 escrever("Negativo")
09 senão
10 escrever("Positivo")
11 fim
Antes de iniciar o teste de mesa, vale lembrar que a escolha dos dados de testes é
muito importante na simulação. Os dados escolhidos devem garantir a execução
também coincide com o resultado esperado. Os dados deste teste podem ser
ULBRA – Educação a Distância
01 algoritmo exemplo53
02 variáveis
03 valor: real
04 início
05 escrever("Informe um valor qualquer: ")
06 ler(valor)
07 se(valor<0)então
08 escrever("Negativo")
09 senão
10 se(valor>0)então
11 escrever("Positivo")
12 senão
13 escrever("Zero é neutro")
14 fim
Para testar todas as possibilidades de saída desta solução, o teste de mesa deve ser
realizado considerando três valores: um positivo, um negativo e o zero.
Exemplo 5.4
Descrição do problema: escreva um algoritmo para encontrar o maior entre dois
valores quaisquer digitados pelo usuário.
O algoritmo do Quadro 5.9 foi construído a partir dos dados do esquema da Figura
5.2. Em seguida, apresenta-se o teste de mesa realizado (Quadros 5.5 e 5.6).
01 algoritmo exemplo54
02 variáveis
03 valor1,valor2:real
04 início
05 escrever("Informe o primeiro valor: ")
06 ler(valor1)
07 escrever("Informe o segundo valor: ")
08 ler(valor2)
09 se(valor1>valor2)então
10 escrever("Maior = ", valor1)
11 senão
12 se(valor2>valor1)então
13 escrever("Maior = ", valor2)
14 senão
15 escrever("Valores iguais!")
16 fim
Neste exemplo, três possibilidades devem ser testadas: valor1 maior; valor2
maior; valor1 e valor2 iguais.
No teste realizado, descrito a seguir, definiu-se como dados de entrada 8 e 5.
Assim, o resultado esperado é “Maior = 8”. O Quadro 5.10 apresenta a primeira
etapa do teste de mesa, que consiste em montar o esquema para registrar os valores
assumidos pelas variáveis durante a simulação da execução do algoritmo.
Exemplo 5.5
Descrição do problema: tendo como dados de entrada a altura e o gênero de uma
pessoa, escreva um algoritmo para calcular seu peso ideal, utilizando as seguintes
fórmulas: para homens (72,7 x altura) 58; para mulheres (62,1 x altura) 44.7.
01 algoritmo exemplo55
02 variáveis
03 genero: caractere
04 altura, peso_ideal: real
05 início
06 escrever("Qual o seu gênero(M ou F)? ")
07 ler(genero)
08 escrever("Qual a sua altura? ")
09 ler(altura)
10 se(genero="M")então
11 peso_ideal (72.7*altura)-58
12 senão
13 se(genero="F")então
14 peso_ideal (62.1*altura)-44.7
15 senão
16 início
17 peso_ideal 0
18 escrever("Gênero inválido.")
19 fim
20 escrever("Peso ideal = ", peso_ideal)
21 fim
Exemplo 5.6
Descrição do problema: leia um valor inteiro e verifique se ele é par ou ímpar.
01 algoritmo exemplo56
02 variáveis
03 valor: inteiro
04 início
05 escrever("Digite um valor inteiro: ")
06 ler(valor)
07 se(valor mod 2 = 0)então
08 escrever(valor, " é par.")
09 senão
10 escrever(valor, " é ímpar.")
11 fim
Neste caso, a variável valor deve ser do tipo inteiro para ser utilizada com o
operador mod, que retorna o resto de uma divisão.
Exemplo 5.7
Descrição do problema: um banco concederá um crédito especial aos seus clientes,
variável conforme o saldo médio no último ano. Construa um algoritmo que leia
o saldo médio de um cliente, calcule e escreva o valor do crédito de acordo com
a tabela a seguir.
01 algoritmo exemplo57
02 variáveis
03 saldo_medio, credito: real
04 início
05 escrever("Digite o saldo médio do cliente no último ano: ")
06 ler(saldo_medio)
07 se(saldo_medio<=500)então
08 credito 0
09 senão
10 se(saldo_medio>500)e(saldo_medio<=1000)então
11 credito saldo_medio*0.2
12 senão
13 se(saldo_medio>1000)e(saldo_medio<=3000)então
14 credito saldo_medio*0.3
15 senão
16 credito saldo_medio*0.4
17 escrever ("O cliente tem R$", credito," de crédito.")
18 fim
Exemplo 5.8
Descrição do problema: faça um algoritmo que execute as operações básicas de uma
calculadora. Leia dois valores numéricos e um símbolo; caso o símbolo seja um dos
relacionados a seguir efetue a operação correspondente com os valores digitados
pelo usuário; caso contrário, digite a mensagem “Operador inválido!”. Símbolos:
+ soma, - subtração, * multiplicação, / divisão. Atenção para a divisão por 0!
01 algoritmo exemplo58
02 variáveis
03 valor1, valor2: real
04 op: caractere
05 início
06 escrever("Valor 1: ")
07 ler(valor1)
08 escrever("Operador (+ - * /): ")
09 ler(op)
10 escrever("Valor 2: ")
11 ler(valor2)
12 se(op="+")então
13 escrever("Resultado = ", valor1+valor2)
14 senão
15 se(op="-")então
16 escrever("Resultado = ", valor1-valor2)
17 senão
18 se(op="*")então
19 escrever("Resultado = ", valor1*valor2)
20 senão
21 se(op="/")então
22 se(valor2<>0)então
23 escrever("Resultado = ", valor1/valor2)
24 senão
25 escrever("Não é possível dividir por 0.")
26 senão
27 escrever("Operador inválido!")
28 fim
se(valor1>valor2)então se(valor1>valor2)então
escrever(valor1) escrever(valor1)
senão senão
se(valor2>valor1)então se(valor2>valor1)então
escrever(valor2) escrever(valor2)
senão senão
escrever("Valores iguais!") escrever("Valores iguais!")
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores:
algoritmos, Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do
Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
Atividades
Parte I - Questões objetivas e testes de mesa
1) Após executar o teste a seguir:
x 0
se (a <= b) e (c > b) então
x 5
senão
x 10
Usuário Senha
analuisa 990123
luciano 714460
josue 134895
Entre 2 e 4 anos 2%
Entre 5 e 10 anos 5%
2 1
3 4
5) Faça um algoritmo que leia três valores (A, B e C) e verifique se eles formam
ou não um triângulo. Se for um triângulo, indique de que tipo é: equilátero,
escaleno ou isósceles.
Triângulo: forma geométrica composta por três lados, sendo que cada lado
é menor que a soma dos outros dois lados (isto é uma regra, ou seja, uma
condição). Logo, é triângulo quando A< B+C, B<A+C e C<A+B.
Isósceles: dois lados iguais (A=B) ou (A=C) ou (B=C).
Escaleno: todos os lados diferentes (A<>B) e (B<>C).
Equilátero: todos os lados iguais (A=B) e (B=C).
4 (a) 3
ULBRA – Educação a Distância
4 (b) 66
4 (c) 50
4 (d) 4
5 - Custo = R$ 140,64
Quantidade de latas de tinta = 5,86
O capítulo anterior apresentou a estrutura condicional SE, que avalia uma expressão
lógica que resulta verdadeiro ou falso. Se o resultado desta expressão for verdadeiro,
as instruções da cláusula então são executadas. Caso contrário, o fluxo é desviado
para executar as instruções da cláusula senão. Tem-se, portanto, dois caminhos
possíveis a serem seguidos. Em situações de igualdade para uma mesma variável,
em que é necessário comparar a variável com vários valores, utiliza-se a estrutura
condicional SE encandeada (como ilustrou o exemplo 5.8). Neste caso, tem-se uma
seleção de múltipla escolha.
O uso da estrutura condicional ESCOLHA, tema deste capítulo, pode simplificar
bastante a “cascata” de estruturas SE, necessária em situações de seleção de múltipla
escolha. A estrutura ESCOLHA pode ser utilizada, portanto, em situações de
igualdade para uma mesma variável, desde que esta variável seja do tipo inteiro,
caractere ou lógico.
A sintaxe da estrutura condicional ESCOLHA é apresentada a seguir.
escolha(<variável>)
caso <1>: <instrução ou bloco de instruções>
caso <2>: <instrução ou bloco de instruções>
caso <n>: <instrução ou bloco de instruções>
senão
<instrução ou bloco de instruções>
fim
Se a variável avaliada tiver um dos valores listados nas opções, a instrução (ou
ULBRA – Educação a Distância
01 algoritmo exemplo58
02 variáveis
03 valor1, valor2: real
04 op: caractere
05 início
06 escrever("Valor 1: ")
07 ler(valor1)
08 escrever("Operador (+ - * /): ")
09 ler(op)
10 escrever("Valor 2: ")
11 ler(valor2)
12 escolha(op)
13 caso "+": escrever("Resultado = ", valor1+valor2)
14 caso "-": escrever("Resultado = ", valor1-valor2)
15 caso "*": escrever("Resultado = ", valor1*valor2)
16 caso "/": se(valor2<>0)então
17 escrever("Resultado = ", valor1/valor2)
18 senão
19 escrever("Não é possível dividir por 0.")
20 senão
21 escrever("Operador inválido!")
22 fim
23 fim
Exemplo 6.1
01 algoritmo exemplo61
02 variáveis
03 valor: inteiro
04 início
05 escrever("Digite um valor entre 0 e 10: ")
06 ler(valor)
07 escolha(valor)
08 caso 0: escrever("Zero")
09 caso 1: escrever("Um")
10 caso 2: escrever("Dois")
11 caso 3: escrever("Três")
12 caso 4: escrever("Quatro")
13 caso 5: escrever("Cinco")
14 caso 6: escrever("Seis")
15 caso 7: escrever("Sete")
16 caso 8: escrever("Oito")
17 caso 9: escrever("Nove")
18 caso 10: escrever("Dez")
19 senão
20 escrever("Valor inválido!")
21 fim
22 fim
Exemplo 6.2
Descrição do problema: faça um algoritmo que leia um código (COD) e duas
variáveis (X e Y). Quando o código for A: teste e informe se X é par ou ímpar; B:
teste e informe qual o menor valor (X ou Y); C: verifique e informe se os valores
são múltiplos.
01 algoritmo exemplo62
02 variáveis
03 codigo: caractere x, y: inteiro
04 início
05 escrever("Qual o código (A, B ou C)? ") ler(codigo)
06 escrever("Qual o valor de x? ") ler(x)
07 escrever("Qual o valor de y? ") ler(y)
08 escolha(codigo)
09 caso "A": se(x mod 2 = 0)então
10 escrever(x, " é par.")
11 senão
12 escrever(x, " é ímpar.")
13 caso "B": se(x<y)então
14 escrever("x=",x," é menor do que y=",y)
15 senão
16 se(x>y)então
17 escrever("y=",y," é menor do que x=",x)
18 senão
19 escrever(x," e ",y," são iguais")
20 caso "C": se(x mod y = 0)ou(y mod x = 0)então
21 escrever(x," e ",y," são múltiplos)
22 senão
23 escrever(x," e ",y," não são múltiplos)
24 senão
25 escrever("Código inválido! Digite A, B ou C.")
26 fim
27 fim
Exemplo 6.3
Descrição do problema: considerando o cardápio de uma lanchonete, apresentado
a seguir, construa um algoritmo que calcule e informe o valor a ser pago por um
01 algoritmo exemplo63
02 variáveis
03 codigo, qtde: inteiro
04 início
05 escrever("Digite o código do produto: ")
06 ler(codigo)
07 escrever("Digite a quantidade: ")
06 ler(qtde)
08 escolha(codigo)
09 caso 001: escrever("Total a pagar = R$",qtde*8)
09 caso 002: escrever("Total a pagar = R$",qtde*6)
09 caso 003: escrever("Total a pagar = R$",qtde*12)
09 caso 004: escrever("Total a pagar = R$",qtde*3)
09 caso 005: escrever("Total a pagar = R$",qtde*3)
09 caso 006: escrever("Total a pagar = R$",qtde*2)
24 senão
25 escrever("Código inválido!")
26 fim
27 fim
Referências
ULBRA – Educação a Distância
Atividades
Para cada um dos exercícios a seguir, monte o esquema com os elementos básicos
(entrada / processamento / saída), construa o algoritmo com a solução para o problema
e, por fim, realize o teste de mesa para assegurar que a resposta esteja correta.
1) Construa um algoritmo que leia o código de um produto e imprima sua descrição
e seu preço, conforme a tabela a seguir. O algoritmo deverá emitir uma mensagem
de alerta, caso o código do produto digitado não esteja cadastrado.
4) Escreva um algoritmo que calcule o que deve ser pago por um produto,
considerando como dados de entrada o preço normal de etiqueta e a escolha
da condição de pagamento. Utilize os códigos da tabela a seguir para efetuar
o cálculo do valor a ser pago dependendo da condição de pagamento.
Exemplo 7.1
Descrição do problema: considerando o cardápio de uma lanchonete, apresentado
a seguir, construa um algoritmo que calcule e informe o valor a ser pago por um
determinado cliente. O algoritmo deve ler o código do produto e a quantidade
adquirida, calcular e escrever o total a pagar.
01 algoritmo exemplo71
02 variáveis
03 codigo, qtde: inteiro
04 total: real
05 resp: caractere
06 início
07 total 0
08 resp "S"
09 enquanto(resp="S")faça
10 início
11 escrever("Digite o código do produto: ")
12 ler(codigo)
13 escrever("Digite a quantidade adquirida: ")
14 ler(qtde)
15 escolha(codigo)
16 caso 001: total total + (qtde*8.00)
17 caso 002: total total + (qtde*6.00)
18 caso 003: total total + (qtde*12.00)
19 caso 004: total total + (qtde*3.00)
20 caso 005: total total + (qtde*3.00)
21 caso 006: total total + (qtde*2.00)
22 senão
23 escrever("Código inválido!")
24 fim
25 escrever("Continuar o registro de produtos? S/N ")
26 ler(resp)
27 fim
28 escrever("Total a pagar = R$",total)
29 fim
Exemplo 7.2
Descrição do problema: construa um algoritmo que leia 10 valores do tipo inteiro,
calcule e escreva a média dos valores lidos.
Este é um exemplo da primeira situação, ou seja, o número de iterações está
especificado na descrição do problema o bloco de instruções da estrutura de
repetição deverá ser executado 10 vezes. Nesta situação, cria-se uma variável
do tipo contador para controlar o fluxo da estrutura de repetição. Esta variável,
denominada cont, deverá: (a) ser inicializada no início do algoritmo (cont 0);
(b) ser validada na condição de interrupção para que sejam executadas 10 iterações
(cont <10); (c) para cada valor lido, contar um (cont cont + 1). Estas
instruções aparecem em negrito na solução em português estruturado apresentada
no Quadro 7.3. Na sequência, a Figura 7.1 ilustra esta mesma solução representada
em fluxograma.
Exemplo 7.3
Descrição do problema: construa um algoritmo que leia vários valores do tipo
inteiro (0 encerra a entrada de dados), calcule e escreva a média dos valores
lidos.
01 algoritmo exemplo73
02 variáveis SITUAÇÃO 02
03 valor, soma, cont: inteiro N° de iterações determinado, com
04 media: real condição de interrupção definida.
05 início
06 cont 0
07 soma 0
08 escrever("Digite um valor: ")
09 ler(valor)
10 enquanto(valor<>0)faça
11 início
12 cont cont + 1
13 soma soma + valor
14 escrever("Digite um valor: ")
15 ler(valor)
16 fim
17 media soma / cont
18 escrever("Média = ", media)
19 fim
O Quadro 7.5 ilustra a Situação 03, quando nem o número de iterações, nem a
Exemplo 7.4
Descrição do problema: construa um algoritmo que leia vários valores do tipo
inteiro, calcule e escreva a média dos valores lidos.
01 algoritmo exemplo74
SITUAÇÃO 03
02 variáveis
N° de iterações indeterminado, sem
03 valor, soma, cont: inteiro
condição de interrupção definida.
04 media: real
05 resp: caractere
06 início
07 cont 0
08 soma 0
09 resp "S"
10 enquanto(resp="S")faça
11 início
12 escrever("Digite um valor: ")
13 ler(valor)
14 cont cont + 1
15 soma soma + valor
16 escrever("Continuar? S/N ")
17 ler(resp)
18 fim
19 media soma / cont
20 escrever("Média = ", media)
21 fim
Exemplo 7.5
ULBRA – Educação a Distância
01 algoritmo exemplo75
02 variáveis SITUAÇÃO 01
03 valor, cont, mult: inteiro N° de iterações determinado.
04 início
05 cont 0
06 mult 0
07 enquanto(cont<10)faça
08 início
09 cont cont + 1
10 escrever("Digite o ",cont,"° valor: ")
11 ler(valor)
12 Se(valor mod 3 = 0) então
13 mult mult + 1
14 fim
15 escrever(mult, " valores são múltiplos de 3.")
16 fim
Exemplo 7.6
Descrição do problema: escreva um algoritmo que leia um número não
determinado de valores (qualquer valor negativo encerra a entrada de dados),
encontre e escreva o menor entre eles.
01 algoritmo exemplo76
SITUAÇÃO 02
02 variáveis
03 valor, menor: real N° de iterações indeterminado, com
04 início condição de interrupção definida.
05 escrever("Digite um valor: ")
06 ler(valor)
07 menor valor
08 enquanto(valor>=0)faça
09 início
10 se(valor<menor)então
11 menor valor
12 escrever("Digite um valor: ")
13 ler(valor)
14 fim
15 escrever("Menor valor = ", menor)
16 fim
Exemplo 7.7
Exemplo 7.7 - Calcula o preço novo dos produtos e a média destes valores.
01 algoritmo exemplo77
SITUAÇÃO 03
02 variáveis
N° de iterações indeterminado, sem
03 cod, cont: inteiro
condição de interrupção definida.
04 preco,preconovo,soma,media:real
05 resp: caractere
06 início
07 cont 0
08 soma 0
09 resp "S"
10 enquanto(resp="S")faça
11 início
12 escrever("Digite o código e o preço atual: ")
13 ler(cod, preco)
14 preconovo preco * 1.2
15 escrever("Preço com 20% de aumento = R$ ",preconovo)
16 soma soma + preconovo
17 cont cont + 1
18 escrever("Continuar? S/N ")
19 ler(resp)
20 fim
21 media soma / cont
22 escrever("Média dos preços com aumento = ", media)
23 fim
Exemplo 7.8
Descrição do problema: escreva um algoritmo para calcular a média final de cada
um dos alunos de uma turma de Algoritmos, considerando 03 notas: trabalho A
com peso 3, trabalho B com peso 2 e a prova com peso 5. Além disso, é importante
saber a média geral da turma.
Exemplo 7.8 - Calcula a nota final dos alunos de uma turma e a média geral da turma.
01 algoritmo exemplo78
02 variáveis SITUAÇÃO 03
03 cont: inteiro N° de iterações indeterminado, sem
04 n1, n2, n3, soma, media: real condição de interrupção definida.
05 resp: caractere
06 início
07 cont 0
08 soma 0
09 resp "S"
10 enquanto(resp="S")faça
11 início
12 escrever("Digite as três notas do aluno: ")
13 ler(n1, n2, n3)
14 media (n1*3 + n2*2 + n3*5)/10
15 escrever("Média do aluno = ",media)
16 soma soma + media
17 cont cont + 1
18 escrever("Continuar? S/N ")
19 ler(resp)
20 fim
21 media soma / cont
22 escrever("Média geral da turma = ", media)
23 fim
Exemplo 7.9
Descrição do problema: Chico tem 1,5m e cresce 2cm por ano, enquanto Zé tem
1,1m e cresce 3cm ao ano. Construa um algoritmo que calcule e mostre quantos
anos serão necessários para que Zé seja maior que Chico.
01 algoritmo exemplo79
02 variáveis
03 cont: inteiro
04 chico, ze: real
06 início
07 cont 0
08 chico 1.5
08 ze 1.1
10 enquanto(ze<chico)faça
11 início
12 chico chico + 0.02
13 ze ze + 0.03
14 cont cont + 1
20 fim
22 escrever("São necessários", cont," anos para Zé > Chico.")
23 fim
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores:
algoritmos, Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do
Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
Atividades
ULBRA – Educação a Distância
tendo como dados de entrada 2, 9, 47, -7, -11, -49, 47, 30, 100, -100, -120, -47, 14,
(b) 9;
(c) 7;
(d) 15;
(e) 6.
(a) 1, 3, 5, 7, 9,
ULBRA – Educação a Distância
(b) 1, 3, 5, 7, 9
O primeiro valor deve ser menor que o segundo.
(c) 1, 3, 5, 7, 9,
3, 5
(d) 2, 4, 6, 8,
O primeiro valor deve ser menor que o segundo.
(e) 1, 3, 5, 7, 9,
4,
(3) Escreva um algoritmo que calcule a média dos números pares digitados
ULBRA – Educação a Distância
(4) Faça um algoritmo que lei um valor inteiro e positivo, calcule e escreva
o seu fatorial.
Exemplos: !4 = 1 x 2 x 3 x 4 = 24
!5 = 1 x 2 x 3 x 4 x 5 = 120
Por definição, !0 = 1
Uma ou mais instruções serão executadas repetidamente até que sua condição
resulte verdadeiro. Como a condição só é avaliada no final de cada iteração, a
instrução ou bloco de instruções a ser repetido será executado pelo menos uma vez,
independente do valor inicial da condição de interrupção. Depois de cada iteração,
se o resultado da condição for falso, o fluxo de execução retorna para o início da
estrutura REPITA. Este processo é repetido até que a condição de interrupção resulte
verdadeiro. Neste caso, o fluxo de execução do algoritmo continuará a partir da
instrução imediatamente após à estrutura REPITA.
Como a estrutura de repetição REPITA é delimitada pela diretiva ATÉ, as diretivas
de início e fim não são utilizadas para delimitar seu bloco de instruções como nas
estruturas estudadas nos capítulos anteriores.
Para exemplificar a aplicação da estrutura REPITA, são apresentados na sequência
seis exemplos. Os três primeiros têm o mesmo objetivo, calcular e escrever o
percentual de valores negativos digitados pelo usuário. Entretanto, cada um
representa uma situação diferente em relação ao número de iterações ou à condição
de interrupção ser ou não previamente conhecido.
No exemplo 8.1, a descrição do problema indica que deverão ser lidos 25 valores,
ULBRA – Educação a Distância
Exemplo 8.1
Descrição do problema: construa um algoritmo que leia 25 valores, calcule e escreva
o percentual de valores negativos.
01 algoritmo exemplo81
SITUAÇÃO 01
02 variáveis
N° de iterações determinado.
03 cont, negativo: inteiro
04 valor, perc: real
05 início
06 cont 0
07 negativo 0
08 repita
09 escrever("Digite um valor: ")
10 ler(valor)
11 cont cont + 1
12 se(valor < 0)então
13 negativo negativo + 1
14 até(cont=25)
15 perc (negativo*100)/25
16 escrever("% de negativos = ",perc)
17 fim
Exemplo 8.2
01 algoritmo exemplo82
02 variáveis SITUAÇÃO 02
03 cont, negativo: inteiro N° de iterações indeterminado, com
04 valor, perc: real condição de interrupção definida.
05 início
06 cont 0
07 negativo 0
08 repita
09 escrever("Digite um valor: ")
10 ler(valor)
11 cont cont + 1
12 se(valor < 0)então
13 negativo negativo + 1
14 até(valor=0)
15 perc (negativo*100)/cont
16 escrever("% de negativos = ",perc)
17 fim
Exemplo 8.3
ULBRA – Educação a Distância
01 algoritmo exemplo83
02 variáveis SITUAÇÃO 03
03 cont, negativo: inteiro N° de iterações indeterminado, sem
04 valor, perc: real condição de interrupção definida.
05 resp: caractere
06 início
07 cont 0
08 negativo 0
09 repita
10 escrever("Digite um valor: ")
11 ler(valor)
12 cont cont + 1
13 se(valor < 0)então
14 negativo negativo + 1
15 escrever("Continuar? S/N ")
16 ler(resp)
17 até(resp="N")
18 perc (negativo*100)/cont
19 escrever("% de negativos = ",perc)
20 fim
Exemplo 8.4
01 algoritmo exemplo84
SITUAÇÃO 01
02 variáveis
N° de iterações determinado.
03 genero: caractere
04 peso, altura, soma, media: real
05 cont, idade, maior, fem, masc, alt: inteiro
06 início
07 cont 0
08 maior 0 fem 0 masc 0 soma 0 alt 0
09 repita
10 escrever("Digite gênero, idade, peso e altura: ")
11 ler(genero, idade, peso, altura)
12 se(idade>maior)então
13 maior idade
14 se(genero="F")então
15 início
16 fem fem + 1
17 soma soma + peso
18 fim
19 senão
20 se(genero="M")então
21 início
22 masc masc + 1
23 se(altura<1.70)então
24 alt alt + 1
25 fim
26 cont cont + 1
27 até(cont=40)
28 fem (fem*100)/40
29 masc (masc*100)/40
30 media soma/fem
31 escrever("Maior idade = ", maior)
32 escrever(fem,"% são mulheres e ", masc, "% homens")
33 escrever("Peso médio das mulheres = ", media)
34 escrever(alt, " homens medem menos que 1,70m")
35 fim
Exemplo 8.5
ULBRA – Educação a Distância
01 algoritmo exemplo85
02 variáveis SITUAÇÃO 02
03 senha: cadeia N° de iterações indeterminado, com
05 início condição de interrupção definida.
08 repita
09 escrever("Digite a senha: ")
10 ler(senha)
12 se(senha<>"a76dk09")então
13 escrever("Senha inválida")
14 até(senha="a76dk09")
16 escrever("Acesso permitido")
17 fim
Exemplo 8.6
01 algoritmo exemplo86
SITUAÇÃO 03
02 variáveis
N° de iterações indeterminado, sem
03 resp: caractere condição de interrupção definida.
04 perc, media: real
05 idade, ts, disc, qtde, cont, soma: inteiro
06 início
07 perc 0 qtde 0 soma 0 cont 0
08 repita
09 escrever("Digite idade: ")
10 ler(idade)
11 escrever("Digite tempo de serviço: ")
12 ler(ts)
13 escrever("Digite qtde de disciplinas que ministra: ")
14 ler(disc)
15 se(idade>=30)e(idade<=50)então
16 perc perc + 1
17 se(ts>10)então
18 qtde qtde + 1
19 soma soma + disc
20 cont cont + 1
21 escrever("Continuar? S/N ")
22 ler(resp)
23 até(resp="N")
24 perc (perc*100)/cont
25 media soma/cont
26 escrever(perc,"% dos professores têm entre 30 e 50 anos")
27 escrever(qtde," prof. com tempo de serviço superior a 10")
28 escrever("Média de disciplinas por professor = , media")
29 fim
Referências
ULBRA – Educação a Distância
Atividades
Parte I - Questões objetivas
1) O algoritmo a seguir imprime a sequência de pares entre 1 e 100.
( ) Certo
( ) Errado
algoritmo exerc1
variáveis
n: inteiro
início
n 1
repita
escrever(i)
i i + 2
até(i=100)
fim
tendo como dados de entrada 2, 9, 47, -7, -11, -49, 47, 30, 100, -100, -120, -47, 14,
3) O algoritmo a seguir tem como objetivo calcular a média dos valores lidos.
Entretanto, isto não acontece corretamente devido a um erro.
01 algoritmo exerc3
02 variáveis
03 n,s,m: real
04 i: inteiro
05 início
06 s 0
07 i 0
08 repita
09 ler(n)
10 s s + n
11 i i + 1
12 até(i=10)
13 m s/2
14 escrever(m)
15 fim
O erro está na linha:
(a) 3
(b) 10
(c) 13
(d) 9
(e) 12
algoritmo exerc4
variáveis
valor: inteiro
início
valor 0
repita
escrever(“Digite um valor inteiro: “)
ler(valor)
até(valor=0)
fim
(a) Tantos quantos forem digitados.
(b) Tantos quantos forem digitados, até ser digitado 0 (zero).
(c) Tantos quantos forem digitados, até ser digitado um valor negativo.
(d) Tantos quantos forem digitados, até ser digitado um valor que não é
inteiro.
(e) Nenhum.
(3) Um hotel cobra R$ 360,00 a diária e mais uma taxa de serviços. A taxa
é de: R$ 5,50 por diária, se o número de diárias for maior que 15; R$
6,00 por diária, se o número de diárias for igual a 15; R$ 8,00 por diária,
se o número de diárias for menor que 15. Construa um algoritmo que
imprima o nome e a conta (total das diárias, total da taxa e total a pagar)
de cada um dos clientes com reserva no hotel.
(5) Elabore um algoritmo que repita a leitura de uma data até que ela
seja válida. Para cada data incorreta escrever a mensagem “DATA
INVÁLIDA”. Quando a data for informada corretamente deve ser
impressa a mensagem “ACESSO DATA VÁLIDA” e o algoritmo
encerrado. Para resolver este problema, use três variáveis para
representar a data: dia, mês e ano; não esqueça de considerar ano
bissexto, quando o mês de fevereiro tem 29 dias.
1 - Errado
2-b
3-c
4-b
5-c
Onde:
• v representa a variável de controle;
• vi indica o valor inicial da variável de controle;
• vf indica o valor final da variável de controle;
• p define o incremento ou decremento da variável de controle.
A variável de controle assumirá, a cada iteração, um dos valores da faixa que inicia
com o valor vi e encerra no valor vf. O p corresponde ao incremento ou decremento
dado à variável de controle. O padrão é incrementar 1 a cada iteração, caso em que
a diretiva passo p pode ser omitida.
Nos capítulos anteriores, foram identificados três cenários onde são utilizadas as
estruturas de repetição: Situação 01, quando o número de iterações é previamente
conhecido; Situação 02, quando o número de iterações é indeterminado, mas tem-
se uma condição de interrupção definida; Situação 03, quando nem o número de
iterações, nem a condição de interrupção são previamente conhecidos - caso em
que é necessário usar uma variável auxiliar na condição de parada do laço de
repetição. Em português estruturado, a estrutura PARA só pode ser usada para
ENQUANTO REPITA
01 cont 0 01 cont 0
02 enquanto(cont<25)faça 02 repita
03 início 03 <demais instruções>
04 <demais instruções> 04 cont cont + 1
05 cont cont + 1 05 até(cont=25)
06 fim
Como pode ser observado, nos dois exemplos do Quadro 9.1 a variável cont
é inicializada (linha 01), incrementada (linha 05 no exemplo com a estrutura
ENQUANTO e linha 04 com a estrutura REPITA) e testada para controlar o final
do laço de repetição (linha 02 na estrutura ENQUANTO, linha 05 na estrutura
REPITA). A estrutura PARA é a mais adequada para esta situação, pois há uma
economia de instruções, a própria estrutura se encarrega de inicializar, incrementar
e encerrar a variável de controle, como ilustra o Quadro 9.2. Estes três processos
ocorrem na linha 01.
PARA
Exemplo 9.1
Descrição do problema: construa um algoritmo que leia 10 valores, um de cada
vez, conte e escreva quantos estão no intervalo [10,20] e quantos estão fora deste
intervalo.
01 algoritmo exemplo91
02 variáveis SITUAÇÃO 01
03 valor, cont, dentro, fora: inteiro N° de iterações determinado.
04 início
05 dentro 0 fora 0
06 para cont de 1 até 10 faça
07 início
08 escrever("Digite um valor: ")
09 ler(valor)
10 se(valor>=10)e(valor<=20)então
11 dentro dentro + 1
12 senão
13 fora fora + 1
14 fim
15 escrever(dentro, " números dentro do intervalo")
16 escrever(fora, " números fora do intervalo")
17 fim
Exemplo 9.2
Descrição do problema: construa um algoritmo que escreva os números pares
entre 1 e 100.
01 algoritmo exemplo92
SITUAÇÃO 01
02 variáveis
N° de iterações determinado.
03 cont: inteiro
04 início
05 para cont de 2 até 100 passo 2 faça
06 escrever(cont)
07 fim
Exemplo 9.3
Descrição do problema: construa um algoritmo que escreva a soma dos números
ímpares entre dois valores quaisquer informados pelo usuário.
01 algoritmo exemplo93
SITUAÇÃO 01
02 variáveis
N° de iterações determinado.
03 cont, vi, vf, soma: inteiro
04 início
05 soma 0
06 escrever("Digite o valor inicial: ")
07 ler(vi)
08 escrever("Digite o valor final: ")
09 ler(vf)
10 para cont de vi até vf faça
11 início
12 se(cont mod 2 = 1)então
13 soma soma + cont
14 fim
15 escrever("Soma dos ímpares do intervalo = ", soma)
16 fim
Exemplo 9.4
Descrição do problema: construa um algoritmo que leia um valor inteiro, entre 1
e 10, e escreva a sua tabuada.
Exemplo: 5
01 algoritmo exemplo94
02 variáveis SITUAÇÃO 01
03 valor, cont: inteiro N° de iterações determinado.
04 início
05 escrever("Digite um valor inteiro entre 1 e 10: ")
06 ler(valor)
07 se(valor>=1)e(valor<=10)então
08 para cont de 1 até 10 faça
09 escrever(cont,"x",valor,"=",cont*valor)
10 senão
11 escrever("Valor inválido. Digite valore entre 1 e 10.")
12 fim
Exemplo 9.5
Descrição do problema: em uma pesquisa realizada com 1000 habitantes de
uma região, foram coletados os seguintes dados: idade, gênero e salário. Faça
um algoritmo que calcule e informe: a idade média do grupo, o percentual de
mulheres e de homens e, também, a quantidade de pessoas com salário superior
a R$ 5.000,00.
01 algoritmo exemplo95
02 variáveis SITUAÇÃO 01
03 cont, idade, soma, pessoa: inteiro N° de iterações determinado.
04 salario, media, fem, masc: real
05 genero: caractere
06 início
07 soma 0 fem 0 masc 0 pessoa 0
08 para cont de 1 até 1000 faça
09 início
10 escrever("Digite idade, gênero (M ou F) e salário: ")
11 ler(idade, genero, salario)
12 soma soma + idade
13 se(genero="F")então
14 fem fem + 1
15 senão
16 se(genero="M")então
17 masc masc + 1
18 se(salario>5000)então
19 pessoa pessoa + 1
20 fim
21 media soma/1000
22 fem (fem *100)/1000
23 masc (masc *100)/1000
24 escrever("Idade média = ", media)
25 escrever("Feminino = ", fem,"%")
26 escrever("Masculo = ", masc,"%")
27 escrever(pessoa, " pessoas possuem salário > 5.000,00")
28 fim
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores:
algoritmos, Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do
Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
Atividades
(a) 7;
(b) 8;
(c) 6;
(d) 10;
(e) 12.
3) O algoritmo a seguir...
algoritmo exerc3
variáveis
i: inteiro
início
para i de 100 até 1 passo -2 faça
escrever(i)
fim
(a) imprime os números de 1 a 100 em ordem decrescente;
(b) imprime os números pares entre 100 e 1 em ordem crescente;
(c) imprime os números ímpares entre 1 e 100 em ordem crescente;
(d) imprime os números entre 1 e 100;
(e) imprime os números pares entre 1 e 100 em ordem decrescente.
(c) n2 + log n;
Exemplos: !4 = 1 x 2 x 3 x 4 = 24
!5 = 1 x 2 x 3 x 4 x 5 = 120
Por definição, !0 = 1
Bibliotecas são arquivos contendo várias funções que podem ser incorporadas aos
programas escritos em C. A diretiva #include faz com que as funções inseridas na
biblioteca especificada possam ser utilizadas no programa. As bibliotecas stdio.h
e conio.h permitem a utilização de diversos comandos de entrada e saída e de
funções de tela, respectivamente. São exemplos de funções de tela, os comandos
usados para limpar a tela, posicionar o cursor em uma determinada posição na
tela, trocar a cor da fonte e/ou do fundo.
Os parênteses ao lado da palavra main indicam que ela é uma função, o tipo void
indica que ela não retornará nenhum valor, enquanto as chaves delimitam o seu
início e o seu fim. O bloco de comandos que estiver entre as chaves é executado
sequencialmente quando a função for chamada.
É importante salientar que a linguagem C é case sensitive, ou seja, é sensível a letras
maiúsculas e minúsculas (por exemplo, a é diferente de A) e todos os programas
devem, obrigatoriamente, ser escritos em letras minúsculas. Outro detalhe
importante é que cada comando é finalizado com um ponto-e-vírgula.
As seções a seguir são dedicadas à apresentação de conceitos e definições
importantes e necessárias para o início da programação em linguagem C.
10.1 Identificadores
Em linguagem C, os nomes utilizados para referenciar variáveis, constantes e
funções definidas pelo usuário são chamados de identificadores.
A criação de um identificador deve seguir as seguintes regras: podem ser formados
por letras, números e sublinhado; devem iniciar com uma letra; letras minúsculas
e maiúsculas são consideradas caracteres distintos; não podem ser palavras
reservadas; podem conter qualquer tamanho, porém apenas os 32 primeiros
caracteres são significativos.
Além disso, é importante criar identificadores considerando a sua aplicação
para facilitar a leitura do código-fonte e, consequentemente, o trabalho do
programador. A quantidade de horas trabalhadas por uma pessoa durante uma
10.3 Modeladores
É possível forçar que o resultado de uma expressão seja de um tipo específico
usando o conceito de modelador. A forma geral de um modelador é
(tipo)expressão
onde tipo é um dos tipos padrão da linguagem C.
Sendo r uma variável declarada do tipo float, as expressões a seguir resultam
em valores diferentes.
r=9/2; // essa expressão resulta 4
r=(float)9/2; // com o uso do modelador, resulta 4.5
Código Formato
%c Caractere
%i Inteiro
%l Inteiro longo
%p Ponteiro
%% Símbolo %
Eles são usados em funções de entrada e de saída de dados (descritas na seção 10.11).
A função de entrada scanf, por exemplo, possui dois parâmetros: o código de
formato e uma variável. Neste caso, o valor digitado pelo usuário será armazenado
na variável denominada peso, declarada e formatada como float.
scanf(“%f”,&peso);
A função printf, exemplificada a seguir, também contém dois parâmetros: o
primeiro é uma constante, apresentada entre aspas; o segundo é uma variável,
denominada dias. O valor armazenado na variável dias será exibido na posição
em que aparece o código de formato usado na mensagem, neste caso o %i.
printf(“Sua idade em dias e: %i”, dias);
Código Resultado
float valor=136.472;
int valor=790;
Operadores Matemáticos
+ a + b Soma o conteúdo de a e de b.
Operadores Relacionais
e && Conjunção
ou || Disjunção
não ! Negação
total=total+valor; total+=valor;
num=num*5; num*=5;
d=d-valor; d-=valor;
x=x/5; x/=5;
Resumindo:
ULBRA – Educação a Distância
10.10 Comentários
Os comentários são textos que podem ser inseridos no programa com o objetivo de
documentá-lo e não são analisados pelo compilador. Os comentários de uma linha
são precedidos do símbolo //, enquanto o comentário de várias linhas é envolvido
por /* e */, conforme pode ser observado nos exemplos a seguir.
// Este é um comentário de uma linha.
/* Este é um comentário
de mais de uma linha. */
A sintaxe das duas funções é diferente. A função scanf tem dois parâmetros: o
132
Quadro 10.1 Exemplo da estrutura de controle condicional SE
Exemplo 10.1 - Ler um valor do tipo inteiro e verificar se ele é par ou ímpar.
Process Black
início
clrscr(); //limpa a tela
gotoxy(10,10); //posiciona o cursor
escrever("Digite um valor: ") printf("Digite um valor: ");
ler(valor) scanf("%i",&valor);
gotoxy(10,14);
se(valor mod 2 = 0)então if(valor%2==0)
escrever(valor," é par.") printf("%i é par.", valor);
senão else
escrever(valor," é ímpar.") printf("%i é ímpar.", valor);
getch(); //pausa
fim }
7/8/2013 16:01:22
133
Exemplo 10.3 - Ler 10 valores do tipo inteiro, calcular e escrever a média dos valores
lidos.
Exemplo 10.5 - Ler 10 valores do tipo inteiro, calcular e escrever a média dos valores lidos.
Referências
ASCENCIO, A. F. G.; CAMPOS, E. A. V.. Fundamentos da Programação de Computadores:
algoritmos, Pascal, C/C++ (padrão ANSI) e Java. 3.ed. São Paulo: Pearson Education do
Brasil, 2012.
BERG, A. C.; FIGUEIRÓ, J. P.. Lógica de Programação. 2.ed. Canoas: Ed. ULBRA, 2001.
FORBELLONE, A. L. V.; EBERSPÄCHER, H. F.. Lógica de Programação: a construção de
algoritmos e estruturas de dados. 3.ed. São Paulo: Pearson/Prentice Hall, 2005.
GOODRICH, M. T.; TAMASSIA, R.. Projeto de Algoritmos. Porto Alegre: Bookman, 2004.
MATTOS, Patrícia Noll de. Linguagem de Programação II (Caderno Universitário 027). 2.ed.
Canoas: Ed. ULBRA, 2001.
MIZRAHI, V. V.. Treinamento em Linguagem C. 2.ed. São Paulo: Pearson/Prentice Hall, 2008.
PUGA, S.; RISSETTI, G.. Lógica de Programação e Estruturas de Dados. São Paulo: Pearson/
Prentice Hall, 2003.
SCHILDT, Herbert. C Completo e Total. 3. ed. São Paulo: Makron Books, 1997.
Atividades
( ) Errado
#include <stdio.h>
void main( ){
int i =2;
printf (“O valor de i = %i \n”, i);
}
(a) Imprime: O valor de i = 2 e pula para a próxima linha;
(b) Imprime: O valor de i = 2 \n;
(c) Pula para a próxima linha e imprime: O valor de i = 2 ;
(d) Imprime: O valor de i = 2 ;
(e) Nenhuma das alternativas anteriores.
12) Para que faixa de valores da variável x o seguinte segmento de código imprime
a letra C? (Questão da prova do POSCOMP 2003)
if(x<=200)
if(x<100)
if(x<0) printf(“A”)
else printf(“B”)
else printf(“C”)
else printf(“D”)
(a) 0<x<100;
(b) x<=100;
(c) 100<x<=200;
(d) x>200;
(e) 100<=x<=200.