FACULDADE DE VIÇOSA
DEPARTAMENTO DE CIÊNCIAS EXATAS E TECNOLÓGICAS
DET 109 [PROGRAMAÇÃO DE COMPUTADORES I]
APOSTILA
[Maria Vanderléa de Queiroz]
1º Semestre – 2013
Sumário
1 SISTEMAS DE NUMERAÇÃO........................................................................................................................ 3
2 ALGORITMO................................................................................................................................................ 9
3 Estrutura Condicional................................................................................................................................ 21
4 ESTRUTURAS DE REPETIÇÃO..................................................................................................................... 28
5 MÓDULOS................................................................................................................................................. 37
6 VETORES ................................................................................................................................................... 45
DET109 [Programação de Computadores I]
1 SISTEMAS DE NUMERAÇÃO
Para registrar informações sobre quantidades foram criados diversos métodos de representálas. O método usual é o sistema de numeração posicional de base 10. Isso significa que a
posição ocupada por cada algarismo em um número altera seu valor de uma potência de 10
(na base 10) para cada casa à esquerda.
Por exemplo, no sistema decimal, de base 10, no número 125 o algarismo 1 representa 100
(uma centena ou 102), o 2 representa 20 (duas dezenas ou 2x10 1) e o 5 representa 5 mesmo
(5 unidades ou 5x100). Assim, em nossa notação, 125 = 1x102 + 2x101 + 5x100
1.1 BASE DE UM SISTEMA DE NUMERAÇÃO
A base de um sistema é a quantidade de algarismos disponível na representação. A base 10 é
a mais usualmente empregada, embora não seja a única utilizada. Exemplos de outras bases
no nosso dia a dia acontecem como comprar uma dúzia de rosas ou uma grosa de parafusos
(base 12) e também, uma partida de futebol que dura 90 minutos.
Os computadores utilizam a base 2 (sistema binário) e os programadores, por facilidade, usam
em geral uma base que seja uma potência de 2, tal como a base hexadecimal, 2 4 ou
eventualmente ainda a base octal, 23.
Na base 10, dispomos de 10 algarismos para a representação do número: 0, 1, 2, 3, 4, 5, 6,
7, 8 e 9. Na base 2, seriam apenas 2 algarismos: 0 e 1. Na base 16, seriam 16: os 10
algarismos aos quais estamos acostumados, mais os símbolos A, B, C, D, E e F, representando
respectivamente 10, 11, 12, 13, 14 e 15 unidades. Generalizando, temos que uma base b
qualquer disporá de b algarismos, variando entre 0 e (b-1).
A representação 125.3810 (base 10) significa 1x102 + 2x101 + 5x100 + 3x10-1 + 8x10-2
Generalizando, representamos uma quantidade N qualquer, numa dada base b, com um
número tal como segue:
Nb = an.bn + .... + a2.b2 + a1.b1 + a0.b0 + a-1.b-1 + a-2.b-2 + .... + a-n.b-n sendo que
an.bn + .... + a2.b2 + a1.b1 + a0.b0 é a parte inteira e
a-1.b-1 + a-2.b-2 + .... + a-n.b-n é a parte fracionária.
Intuitivamente, sabemos que o maior número que podemos representar com n algarismos, na
base b, será o número composto n vezes pelo maior algarismo disponível naquela base (ou
seja, b-1). Por exemplo, o maior número que pode ser representado na base 10 usando 3
algarismos será 999 (ou seja, 103 - 1 = 999).
Generalizando, podemos ver que o maior número inteiro N que pode ser representado, em
uma dada base b, com n algarismos (n "casas"), será N = b n - 1. Assim, o maior número de 2
algarismos na base 16 será FF16 que, na base 10, equivale a 25510 = 162 - 1.
3
DET109 [Programação de Computadores I]
1.2 REPRESENTAÇÃO BINÁRIA
Os computadores modernos utilizam apenas o sistema binário, isto é, todas as informações
armazenadas ou processadas no computador usam apenas duas grandezas, representadas
pelos algarismos 0 e 1. Essa decisão de projeto deve-se à maior facilidade de representação
interna no computador, que é obtida através de dois diferentes níveis de tensão. Havendo
apenas dois algarismos, portanto dígitos binários, o elemento mínimo de informação nos
computadores foi apelidado de bit (uma contração do inglês binary digit).
Na base 2, o número "10" vale dois. Mas se 10 2 = 210, então dez é igual a dois? Não, dez não
é e nunca será igual a dois!
Na realidade, "10" não significa necessariamente "dez". Nós estamos acostumados a associar
"10" a "dez" porque estamos acostumados a usar o sistema de numeração decimal. O número
102 seria lido "um-zero" na base 2 e vale 2 10 (convertido para "dois" na base dez),
105 seria lido "um-zero" na base 5 e vale 5 10 (convertido para "cinco" na base dez),
1010 pode ser lido como "um-zero" na base 10 ou então como "dez" na base dez,
1016 seria lido "um-zero" na base 16 e vale 1610 (convertido para "dezesseis" na base dez), etc.
Toda vez que um número for apresentado sem que seja indicado em qual sistema de
numeração ele está representado, entenderemos que a base é dez. Sempre que outra base for
utilizada, a base será obrigatoriamente indicada.
A representação binária é perfeitamente adequada para utilização pelos computadores. No
entanto, um número representado em binário apresenta muitos bits, ficando longo e passível
de erros quando manipulado por seres humanos normais como, por exemplo, os
programadores, analistas e engenheiros de sistemas. Para facilitar a visualização e
manipulação por programadores de grandezas processadas em computadores, são usualmente
adotadas as representações octal (base 8) e principalmente hexadecimal (base 16).
Ressaltamos mais uma vez que o computador opera apenas na base 2 e as representações
octal e hexadecimal não são usadas no computador, elas se destinam apenas à manipulação
de grandezas pelos programadores.
1.2.1Atividades
a) Qual a representação em binário do número 57?
Solução: Para encontrarmos esta representação podemos fazer divisões sucessivas por 2 e
marcar todos os restos e ao final o que sobrou como pode ser visto abaixo.
57
1
2
28
0
2
14
0
Pegando os dígitos marcados na direção da seta, temos o nº na
base 2, 1 1 1 0 0 1
2
7
1
2
3
1
2
1
Outra forma de encontrar o número é considerar as potências da
base 2 e ligar, colocar um, naquelas que serão usadas para
somar o valor desejado como mostrado abaixo:
25
32
1
24
16
1
23
8
1
22
4
0
21
2
0
20
1
1
=
32+
16+
8+
0+
0+
1=
57
b) De maneira inversa, o número 101012 representa qual número decimal?
Vamos colocar todos os números e somar as potências de duas
correspondentes.
1
0
1
0
1x24
0x23
1x22
0x21
=16+
0+
4+
1+
1
1x20
1 = 21
4
DET109 [Programação de Computadores I]
1.2.2Exercícios
a) Qual a representação binária do número 68?
b) Qual a representação em decimal do número 111012?
1.3 REPRESENTAÇÃO EM OCTAL E EM HEXADECIMAL
Em projetos de informática, isto é, nos trabalhos realizados pelos programadores, analistas e
engenheiros de sistemas, é usual representar quantidades usando sistemas em potências do
binário. Octal e principalmente hexadecimal, são utilizados para reduzir o número de
algarismos da representação e conseqüentemente facilitar a compreensão da grandeza e evitar
erros. No sistema octal, base 8, cada três bits são representados por apenas um algarismo
octal, de 0 a 7. No sistema hexadecimal, base 16, cada quatro bits são representados por
apenas um algarismo hexadecimal, de 0 a F.
Em Computação e Eletrônica, as bases mais utilizadas para sistemas de numeração são:
- Binária (base 2)
- Octal (base 8)
- Decimal (base 10)
- Hexadecimal (base 16)
1.3.1Atividades
c) Qual a representação em octal do número 157?
Solução: Para encontrarmos esta representação podemos fazer divisões sucessivas por 8 e
marcar todos os restos e ao final o que sobrou como pode ser visto abaixo.
157
5
8
19
3
8
2
Pegando os dígitos marcados na direção da seta, temos o nº na
base 8, 2 3 5
Outra forma de encontrar o número é considerar as potências da
base 8 e ligar, colocar um, naquelas que serão usadas para somar o
valor desejado como mostrado abaixo:
82
64
2
81
8
3
80
1
5
=
2x64+
3x8+
5x1=
157
d) De maneira inversa, o número 20711 representa qual número decimal?
Vamos colocar todos os números e somar as potências de duas
correspondentes.
2
0
7
1
4
3
2
2x8
0x8
7x8
1x81
=8192+
0+
448+
8+
1
1x80
1 = 8649
e) Posso dizer que o número 180 está na base octal? Justifique sua resposta.
f) Qual a representação em hexadecimal do número 2150?
Solução: Para encontrarmos esta representação podemos fazer divisões sucessivas por 16
e marcar todos os restos e ao final o que sobrou como pode ser visto abaixo.
238
0
16
Pegando os dígitos marcados na direção da seta, temos o nº na
base 16, 9 4 C
5
DET109 [Programação de Computadores I]
12
148
4
16
9
Outra forma de encontrar o número é considerar as potências da
base 8 e ligar, colocar um, naquelas que serão usadas para somar o
valor desejado como mostrado abaixo:
162
256
9
161
16
4
160
1
12
=
9x256+
4x16+
12x1=
2380
g) De maneira inversa, o número 1AB21 representa qual número decimal?
Vamos colocar todos os números e somar as potências de duas
correspondentes.
1
A
B
2
1x164
Ax163
Bx162
2x161
=65536+
40960+
2816+
32+
1
1x160
1 = 109345
1.3.2Exercícios
c) Qual a representação octal do número 111?
d) Qual a representação em decimal do número 77108?
e) Qual a representação hexadecimal de 4268?
f) Qual a representação em decimal do número 8048?
1.3.3Lista de exercícios complementar
http://www.questoesdeconcursos.com.br/pesquisar/disciplina/arquitetura-de-computadores/assunto/sistemas-denumeracao?di=93&page=3&pp=&ss=249
1. Coloque V(Verdadeiro) ou F(Falso). Deixe os cálculos na solução da questão.
a) (
) No sistema binário, a operação de multiplicação dos números 1011 e 101
resulta no número 1000101 (CESPE - 2011 - EBC - Analista - Administração de Sistemas).
b) (
) No sistema binário, a operação de subtração dos números 101101 e 100111
tem como resultado o número 000110. (CESPE - 2011 - EBC - Analista - Administração de
Sistemas)
c) (
) A soma dos números binários 11001 e 10111 é o binário 110000; a soma dos
números hexadecimais A2E e C1F é o hexadecimal 1A4D; e a soma dos números octais
376 e 427 é o octal 1025. (CESPE - 2008 - MPE-RR - Analista de Sistemas)
d) (
) Considere que, em uma operação, os números binários 1100 e 1111 sejam
somados em um microprocessador. Nesse caso, o resultado dessa operação, em
notação binária, corresponde a 10011. (CESPE - 2011 - FUB - Técnico de Laboratório - Física –
Específicos)
e) A soma dos endereços representados em hexadecimal pelos números 243A e B7D6
resulta no endereço DC10, também representado na base 16.
(CESPE - 2010 - MPU - Técnico
de Informática)
f) O endereço codificado em hexadecimal como 10F é representado na base 2 pelo
número 100001111. (CESPE - 2010 - MPU - Técnico de Informática)
2. Nos sistemas de numeração, da conversão do número 120 na base octal para a base
hexadecimal, resulta: (FUNCAB - 2010 - SEJUS-RO - Analista de Sistemas)
a) (
) 80
b) (
) 2E
c) (
) 3E8 d) (
) 50
e) (
) 1010000
3. Se o sistema decimal é utilizado pelos seres humanos, o sistema binário constitui a base
para a representação da informação nos computadores. Nesse contexto, um equipamento
6
DET109 [Programação de Computadores I]
dispõe de três displays, o primeiro que mostra números em formato decimal, o segundo
em binário e o terceiro em hexadecimal, havendo uma correspondência entre as
representações. Se o display decimal mostra o número 250, os equivalentes em binário e
em hexadecimal mostrarão, respectivamente, (FGV - 2010 - CODESP-SP - Analista de Sistemas - Tipo
1)
a) (
d) (
) 11111010 e FA b) (
) 11111110 e FE. e) (
4. Seja
N
uma
base
) 11111010 e FE.
) 11111110 e FA.
de
numeração,
c) (
) 11111010 e FC.
e
os
números
. Sabendo-se que a igualdade B + D = A + E.C é
válida, o produto de valores válidos para a base N é (CESGRANRIO - 2011 - TRANSPETRO - Analista
de Sistemas Júnior)
a) (
) 24
b) (
) 35
c) (
) 36
d) (
) 42
e) (
) 45
5. Em relação aos sistemas de numeração e representação de dados, analise as seguintes
afirmativas: (FUMARC - 2011 - BDMG - Analista de Sistemas)
I. O número 10001 em binário corresponde ao número 17 na representação decimal.
II. D na representação hexadecimal corresponde ao número 1110 em binário.
III. BBB na representação hexadecimal corresponde ao número 3003 na representação
decimal.
Marque a
a)
b)
c)
d)
alternativa CORRETA:
apenas as afirmativas I e II são verdadeiras.
apenas as afirmativas I e III são verdadeiras.
apenas as afirmativas II e III são verdadeiras.
todas as afirmativas são verdadeiras.
6. 1001+1010=10011 no sistema de numeração binário é equivalente a
(COPEVE-UFAL - 2011 -
UFAL - Analista de Tecnologia da Informação)
a)
b)
c)
d)
e)
9+8=17 no sistema de numeração decimal.
10+11=21 no sistema de numeração decimal.
9+10=19 no sistema de numeração decimal.
7+12=19 no sistema de numeração decimal.
11+12=23 no sistema de numeração decimal.
7. Considere o quadro abaixo:
(FCC - 2011 - TRT - 1ª REGIÃO (RJ) - Analista Judiciário - Tecnologia da
Informação)
Os valores que preenchem correta e respectivamente as colunas Binário, Octogonal e
Hexadecimal são
a) 11001 e 101101;
b) 11000 e 101100;
c) 10111 e 101010;
d) 11010 e 101011;
e) 10111 e 101001;
8. Multiplicando-se os
23 e 43; 11 e 1B.
20 e 53; 10 e 1A.
22 e 54; 10 e 1C.
21 e 53; 11 e 1A.
21 e 45; 12 e 1A.
hexadecimais A3
DESENVOLVIMENTO - Analista de Sistemas)
a) 7C29
b) 7DAF
c) 7D6F
e
C5,
obtém-se
d) 7EF9
(FCC
-
2011
-
NOSSA
CAIXA
e) 7EA9
7
DET109 [Programação de Computadores I]
9. O resultado de 15AF subtraído de 17FA, em hexa, é
(FCC
-
2011
-
NOSSA
CAIXA
DESENVOLVIMENTO - Analista de Sistemas)
a) 25
b) 200
c) 24B
d) 24C
e) DB5
10. Um sistema de numeração é um conjunto de regras que permite ler e escrever números.
Sobre os sistemas de numeração é CORRETO afirmar: (IESES - 2010 - CRM-DF - Assistente de
Tecnologia da Informação)
I. O sistema decimal, que representa números em base 10, é um sistema de numeração
em que todas as quantidades são representadas utilizando o conjunto de símbolos S = { 0,
1, 2, 3, 4, 5, 6, 7, 8, 9 }.
II. O sistema binário, que representa números em base 2, é um sistema de numeração em
que todas as quantidades são representadas utilizando o conjunto de símbolos S = { 0,
1 }.
III. O sistema octal, que representa números em base 8, é um sistema de numeração em
que todas as quantidades são representadas utilizando o conjunto de símbolos S = { 1, 2,
3, 4, 5, 6, 7, 8 }.
IV. O sistema hexadecimal, que representa números em base 16, é um sistema de
numeração em que todas as quantidades são representadas utilizando o conjunto de
símbolos S = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F }.
A sequência correta é:
a) Apenas as assertivas I, II e IV estão corretas.
b) Apenas as assertivas I e II estão corretas.
c) Apenas as assertivas I, II e III estão corretas.
d) As assertivas I, II, III e IV estão corretas.
11. Todo sistema de computação moderno é construído de modo a ser capaz de armazenar,
interpretar, armazenar e manipular informações codificadas de qual forma?
a) Decimal
b) Octal.
c) Binária.
d) Hexadecimal.
12. Considere A=1010 e B=1100, sendo esses valores representados em binário. O valor de y
para = A.B, ou seja, y =Aand B, é: (FUNCAB - 2010 - PRODAM-AM - Analista de Tecnologia da
Informação - Banco de Dados)
a) 0110
b) 1001
c) 1000
d) 1110
f) 10110
13. Um administrador de sistemas, ao analisar o conteúdo de um arquivo binário, percebeu
que o primeiro byte desse arquivo é, em hexadecimal, igual a 9F, que corresponde, em
decimal, ao valor (CESGRANRIO - 2010 - BNDES - Analista de Sistemas – Suporte)
a) 16
b) 99
c) 105
d) 159
e) 234
14. Considere os dois números abaixo:
X = 2577377 (octal)
Y = AFEFF (hexadecimal)
Assinale a alternativa que apresenta o resultado da subtração (X - Y), expresso no sistema de
numeração decimal. (FUNIVERSA - 2010 - MPE-GO - Técnico de Informática)
b) 38564948
b) 1856738 c) 7052342 d) 105432
e) 0
15. Considerando o início em zero, o sistema de numeração hexadecimal tem a mesma
representação do sistema decimal até o número (FCC - 2010 - TRE-RS - Técnico Judiciário Programação de Sistemas)
a) 1
b) 9 c) 10 d) 15 e) 16
16. Um odômetro binário digital mostra 10010010 no mostrador. Os dois números que se
seguem a partir desse número, são: (FGV - 2009 - MEC – Documentador)
a) 10010011 e 10010111
b) 10010011 e 10010101 c) 10010011 e 10010100
d) 10010101 e 10010110
e) 10010101 e 10010111
8
DET109 [Programação de Computadores I]
2 ALGORITMO
2.1 CONCEITO
1. "Serve como modelo para programas, pois sua linguagem é intermediária à linguagem
humana e às linguagens de programação, sendo então, uma boa ferramenta na validação
da lógica de tarefas a serem automatizadas.“
2. “Os algoritmos, servem para representar a solução de qualquer problema, mas no caso do
Processamento de Dados, eles devem seguir as regras básicas de programação para que
sejam compatíveis com as linguagens de programação.”
3. “Um procedimento para resolver um problema matemático (ex. achar o máximo divisor
comum) em um número finito de passos que frequentemente envolve a repetição de uma
operação; ou de forma mais abrangente: um procedimento passo-a-passo para resolver
um problema ou realizar algum objetivo.” (Manber, 1989:1)
4. Em Matemática: “sequência finita de regras, raciocínios ou operações que, aplicada a um
número finito de dados, permite solucionar classes semelhantes de problemas (por
exemplo, algoritmo para extrais uma raiz cúbica)”.
5. Em Informática: “conjunto das regras e procedimentos lógicos perfeitamente definidos que
levam à solução de um problema em um número finito de etapas”.
O significado da palavra é muito similar ao de uma receita, procedimento, técnica,
rotina. Um algoritmo é um conjunto finito de regras que fornece uma seqüência de
operações para resolver um problema específico. Segundo o dicionário do prof. Aurélio
Buarque de Holando um algoritmo é um: "Processo de cálculo, ou de resolução de um grupo
de problemas semelhantes, em que se estipulam, com generalidade e sem restrições, regras
formais para a obtenção de resultado ou de solução de problema."
Knuth (1968,1973), uma das pessoas mais respeitadas na área de algoritmos
computacionais, indicou uma lista de cinco propriedades que são amplamente aceitas como
requisitos para um algoritmo:
Finitude: “Um algoritmo deve sempre terminar após um número finito de etapas”.
Definição: “Cada passo de um algoritmo deve ser definido com precisão; as ações a
serem executadas deverão ser especificadas rigorosamente e sem ambiguidades para cada
caso”.
Entrada: “Valores que são dados ao algoritmo antes que ele inicie. Estas entradas são
tomadas a partir de um conjunto de objetos especificados”.
Saída: “...os valores resultantes das ações do algoritmo relacionadas com as entradas
especificadas”.
Eficácia: “...todas as operações a serem realizadas no algoritmo deve ser
suficientemente básicas que podem, em princípio, ser feitas com precisão e em um período de
tempo finito por um homem usando papel e lápis”.
2.2 FORMAS DE REPRESENTAÇÃO
2.2.1Descrição Narrativa
Nesta forma de representação os algoritmos simples são expressos diretamente em
linguagem natural.
9
DET109 [Programação de Computadores I]
1. Receita de bolo
Misture os ingredientes
Unte a forma com manteiga
Despeje a mistura na forma
Se houver coco ralado então
despeje sobre a mistura
Leve a forma ao forno
Enquanto não corar
deixe a forma no forno
Retire do forno
Deixe esfriar
3. Trocar um pneu furado
Afrouxar ligeiramente os parafusos
Suspender o carro
Retirar os parafusos e o pneu
Colocar o pneu reserva
Apertar os parafusos
Abaixar o carro
Dar o aperto final nos parafusos
5. Calcular o IMC e o peso ideal de uma
pessoa
Obter o peso de uma pessoa
Obter a altura de uma pessoa
Obter o sexo de uma pessoa
Calcular o IMC dividindo-se o peso pelo
quadrado da altura (IMC = peso/altura2)
Se o sexo for feminino
Exibir o IMC
Peso Ideal = (62.1 * altura) – 44.7
Se o sexo for masculino
Peso Ideal = (72.7 * altura) – 58
Exibir o Peso Ideal
2. Tomar um banho
Entrar no banheiro e tirar a roupa
Abrir a torneira do chuveiro
Entrar na água
Ensaboar-se
Sair da água
Fechar a torneira
Enxugar-se
Vestir-se
4. Calcular média de um aluno
Obter as suas 2 notas de provas
Calcular a média aritmética
Se a média for maior que 7, o aluno foi
aprovado,
senão ele foi reprovado
6. Calcular a distância entre dois
pontos(x1,y1) e (x2,y2)
Obter o valor de X1
Obter o valor de y1
Obter o valor de x2
Obter o valor de Y2
Calcular a distância
Distancia =
( x 2 − x1) 2 +
( y 2 − y1) 2
Exibir Distancia
2.2.2Fluxograma
6. Fluxograma Convencional
É uma representação gráfica de algoritmos onde formas geométricas diferentes implicam
ações (instruções, comandos) distintos.
– Tal propriedade facilita o entendimento das idéias contidas nos algoritmos e justifica
sua popularidade
– Esta forma é aproximadamente intermediária à descrição narrativa e ao pseudocódigo
(subitem seguinte), pois é menos imprecisa que a primeira e, no entanto, não se
preocupa com detalhes de implementação do programa
Início e fim
Decisão
Operação de atribuição
Operaçã
Operação de Saída
o de Entrada
EXEMPLO: Cálculo da média de duas notas de um aluno
10
DET109 [Programação de Computadores I]
Não existe consenso entre os especialistas sobre qual seria a melhor maneira de
representar um algoritmo. Atualmente a maneira mais comum de representar-se algoritmos é
através de uma pseudo-linguagem ou pseudo-código. Esta forma de representação tem a
vantagem de fazer com que o algoritmo seja escrito de uma forma que está próxima de uma
linguagem de programação de computadores. Algoritmo de encontrar a menor temperatura
dentro de registros de temperaturas mostrada na seção anterior usou linguagem natural para
representar o algoritmo.
2.2.3Conceitos Importantes
PROGRAMA é uma seqüência de instruções. O programa deve ser escrito numa LINGUAGEM
DE PROGRAMAÇÃO; as linguagens naturais têm ambigüidades e podem dar margem a
diferentes interpretações.
HARDWARE é o conjunto de dispositivos físicos do computador, o equipamento.
SOFTWARE são os programas que permitem que o equipamento saiba o que realizar, que ele
funcione.
MEMÓRIA (escaninhos no modelo hipotético) é um dispositivo físico para armazenar
programas e dados.
PROCESSADOR (operador e máquina de calcular no modelo hipotético) é o dispositivo que
realiza o processamento.
DISPOSITIVOS DE ENTRADA E SAÍDA OU PERIFÉRICOS (no modelo hipotético
corresponde à caixa de entrada, caixa de saída, máquina de escrever) são formas de
11
DET109 [Programação de Computadores I]
comunicação entre o usuário e o computador. Ex.: leitoras de disco, monitores, teclados,
vídeos, impressoras, etc.
BIT é a menor unidade de informação de um computador, pode assumir os valores 0 ou 1.
BYTE é o conjunto de oito bits.
SISTEMA OPERACIONAL é a coleção de programas que gerencia e aloca recursos de
hardware e de software. Exemplos de tarefas que um sistema operacional realiza são: leitura
de dados pelo teclado, impressão de informações no vídeo, gerenciamento da execução de
vários programas pela CPU, gerenciamento da memória principal e da memória secundária
para uso dos programas em execução, etc. Ex.: Linux, Unix, Windows XP, OS2, MS-DOS.
LINGUAGEM DE MÁQUINA é o conjunto de instruções que podem ser interpretados e
executados diretamente pela CPU de um dado computador. É específica para cada
computador.
LINGUAGEM ASSEMBLER (Linguagem de Baixo Nível) representação da linguagem de
máquina através de códigos mnemônicos. Também é específica de cada máquina.
LINGUAGEM DE ALTO NÍVEL (Linguagem de Programação) é uma linguagem formal que
independe do conjunto de instruções da linguagem de máquina do computador. Cada instrução
de alto nível equivale a várias instruções da linguagem de máquina, sendo assim mais
produtiva. Ex.: Pascal, C, Algol, BASIC, Lisp, Prolog, Java, PHP, etc. Esta linguagem se
aproxima da linguagem humana e pode ser traduzida por programas especiais em linguagem
de máquina.
COMPILADOR é um tradutor de programas escritos em uma linguagem de programação para
programas em linguagem de máquina. Uma vez que o programa foi convertido para código de
máquina, este pode ser executado independente do compilador e do programa original.
SISTEMA - Um conjunto
equipamentos).
interligado
de
programas (e, eventualmente,
também
de
2.2.4Exercícios
1. Faça um algoritmo que descreva o procedimento para trocar um pneu de um carro.
2. Uma agência de previsão do tempo armazena diariamente a temperatura média de uma
determinada região. Cada uma dessas temperaturas fica arquivada em um cartão, com a
data e o horário da coleta. Você deve desenvolver um algoritmo que irá descobrir qual a
menor temperatura registrada nos arquivos da agência. Lembre-se que as temperaturas
podem ser negativas ou positivas.
3. Você está dirigindo um ônibus que vai do Rio de Janeiro para Fortaleza. No início temos 32
passageiros no ônibus. Na primeira parada, 11 pessoas saem do ônibus e 9 entram. Na
segunda parada, 2 pessoas saem do ônibus e 2 entram. Na parada seguinte, 12 pessoas
entram e 16 pessoas saem. Na próxima parada, 5 pessoas entram no ônibus e 3 saem.
Qual a cor dos olhos do motorista do ônibus?
4. Foram pintadas cinco casas com cinco cores diferentes. Em cada casa mora uma pessoa de
nacionalidade diferente. Cada um dos proprietários dessas casas bebe uma bebida
diferente, tem um animal de estimação diferente e pratica um determinado esporte. Essas
três características: bebidas, animais de estimação e esportes são únicos para cada
proprietário, não existe repetição. Segundo as lendas, existe um problema de lógica, criado
por Albert Einstein, de difícil solução, mas possível. Este problema é genial pois não possui
pegadinhas e não precisa de um grande número de conhecimento extra. Para resolvê-lo
você deve aplicar a lógica e ter muita perseverança. Os fatos que devem ser considerados
são os seguintes:
1. O inglês mora na casa vermelha.
12
DET109 [Programação de Computadores I]
2. O sueco tem cães.
3. O dinamarquês bebe chá.
4. A casa verde fica a esquerda da casa branca.
5. O dono da casa verde bebe café.
6. A pessoa que joga futebol cria pássaros.
7. O dono da casa amarela joga beisebol.
8. O homem que mora na casa do centro bebe leite.
9. O norueguês mora na primeira casa.
10. O homem que joga vôlei mora ao lado da pessoa que tem gatos.
11. O homem que tem um cavalo mora ao lado do homem que joga beisebol.
12. A pessoa que joga tênis bebe cerveja.
13. O alemão joga hóquei.
14. O norueguês mora ao lado da casa azul.
15. O homem que joga vôlei tem um vizinho que bebe agua.
O problema é: Qual proprietário tem como animal de estimação o peixe?
5. Faça um algoritmo que calcule a área de uma mesa de jantar (redonda ou retangular).
6. Dois caçadores estão perdidos em uma floresta, sem munição e prestes a morrer de fome.
Um deles, conhecedor da flora, conseguiu achar uma planta muito nutritiva. Entretanto,
para comê-la, eles têm de esquentá-la por 30 segundos exatos senão ela os matará.
Porém, para marcar o tempo, eles só têm duas ampulhetas, uma que marca 22 segundos e
outra que marca 14 segundos. Como eles conseguirão marcar o tempo?
7. Você acaba de encontrar uma caixa. Ao abri-la, você encontra nove moedas de ouro
idênticas e um bilhete que diz que uma das moedas é falsa (foi forjada com um metal que
possui um peso diferente do outro, mas que é imperceptível pela comparação unitária feita
pelas mãos). Você também dispõe de uma balança de dois pratos. Como descobrir qual a
moeda diferente usando apenas três vezes a balança e ainda dizer se ela é mais leve ou
mais pesada?
8. Em um lado de uma ponte estão cinco pessoas que precisam atravessá-la. Está escuro e
elas possuem apenas uma lanterna que deve ser sempre utilizada durante a travessia da
ponte que suporta a passagem de apenas duas pessoas simultaneamente. Essas pessoas
possuem idades diferentes levando, portanto, tempos diferentes para atravessar a ponte:
uma delas leva 1 minuto, outra; 3 minutos, a terceira; 6 minutos a quarta 8 e a última leva
20 minutos. Como elas devem fazer para que todos atravessem a ponte em no máximo 30
minutos?
Você
pode
praticar
interativamente
no
seguinte
endereço:
http://www.mdig.com.br/index.php?itemid=1014
9. Em um lado de um rio se encontram: três missionários e três canibais. Existe apenas uma
canoa capaz de levar apenas duas pessoas de cada vez. Sabendo que, caso o número de
canibais seja maior do que o de missionários, esses serão devorados por eles, como fazer
para atravessar todos eles em segurança para a outra margem do rio? Lembre-se que,
para que outros entrem no barco, os que estão lá precisam descer e nesse momento pode
ocorrer uma tragédia! A canoa nunca faz qualquer viagem (seja de ida ou de volta)
sozinha.
10. Desenvolva um fluxograma para representar o algoritmo 5 (cálculo do IMC e do peso ideal)
em descrição narrativa apresentado anteriormente.
13
DET109 [Programação de Computadores I]
11. Considere duas cidades A e B. A cidade A encontra-se nas coordenadas (x1,y1) e a cidade
B em (x2,y2). Desenvolva um algoritmo que calcule a distância entre elas (DAB) e exiba a
melhor rota para sair de A e chegar em B, considerando que se a distância entre as cidades
(DAB) for maior ou igual a 400 km exiba a mensagem “Ir pela BR262”, caso seja menor
que 400 km “Ir para BR101”.
12. Considere o seguinte algoritmo em descrição narrativa para calcular e exibir as raízes de
uma equação do segundo grau. Desenvolva um fluxograma que represente este algoritmo.
Obter o valor de A
Obter o valor de B
Obter o valor de C
Calcular delta = B 2 − 4 AC
Se delta for menor que zero entao
Exiba mensagem “Não existem raízes reais”
Senão
− B + delta
Calcule x1 =
2A
− B − delta
Calcule x 2 =
2A
Exibir x1
Exibir x2
13. Para calcular o salário líquido de um funcionário temos o seguinte algoritmo em descrição
narrativa. Desenvolva o fluxograma correspondente a esta situação.
Obter o número de horas trabalhadas (NHT)
Obter o valor da hora trabalhada (VHT)
Obter o número de dependentes (NDEP)
Obter o número de horas extras (NHE)
Obter o número de dias faltosos (FALTAS)
Calcular o salário Bruto (SBRUTO) multiplicando-se NHT por VHT
Calcular desconto do INSS que é igual a 10% do salário bruto
Calcular o salário família (SFAMILIA) que é 5% do salário bruto para cada dependente
Se houver hora extra
Calcular o valor a pagar pelas horas extras (VEXTRA), 50% a mais de
VHT multiplicado
por NHT
Calcular o desconto por falta (VFALTAS) igual a FALTAS multiplicado por VHT
Calcular salário líquido
Calcular o desconto do imposto de renda (IR) de forma simplificada. Caso salário seja maior ou
igual a 2000,00 descontar 6%
Calcular e exibir o salário líquido
SLIQUIDO = SBRUTO + SALARIOFAMILIA + VEXTRA – INSS – IR – VFALTAS
2.2.5PSEUDOCÓDIGO
Esta é uma forma de representação de algoritmos rica em detalhes, como a definição dos tipos
das variáveis usadas no algoritmo. Por assemelhar-se bastante à forma em que os programas
são escritos, encontra muita aceitação. Na verdade, esta representação é suficientemente
geral para permitir a tradução de um algoritmo nela representado para uma linguagem de
programação específica seja praticamente direta.
Neste curso, utilizaremos a linguagem Visualg para descrever os algoritmos em pseudocódigo.
14
DET109 [Programação de Computadores I]
O Visualg é um programa que permite editar, interpretar e executar algoritmos em uma
linguagem próxima do português estruturado, pseudocódigo como um programa normal de
computador. Este é um bom recurso para quem inicia em programação pois permite em um
mesmo ambiente criar e entender o processo de execução.
O formato geral de um algoritmo no Visualg é o seguinte:
algoritmo "semnome"
// Função :
// Autor :
// Data : 8/8/2011
// Seção de Declarações
var
inicio
// Seção de Comandos
fimalgoritmo
2.2.6 Exemplos
EXEMPLO 1
algoritmo "CalculaMedia"
// Função : Calcula a média aritmética entre duas notas
// Autor : Maria Vanderléa de Queiroz
// Data : 8/8/2005
var
nota1,nota2, media: real
inicio
leia(nota1)
leia(nota2)
media <- (nota1+nota2)/2
escreva("Media = ",media)
fimalgoritmo
EXEMPLO 2
algoritmo "CalculaIMC"
// Função :
// Autor :
// Data : 8/8/2011
// Seção de Declarações
var
peso, altura, imc: real
inicio
// Seção de Comandos
leia(peso)
leia(altura)
imc <- peso/(altura * altura)
escreval("IMC = ",imc)
fimalgoritmo
2.2.7Etapas para execução de um programa
Considerando uma linguagem compilada, em primeiro lugar é preciso escrever o programa
fonte. Este é o processo de edição. Nesta fase o programa fonte é como um texto, porém com
uma estrutura característica, como mostrado nos exemplos anteriores.
O programa fonte é um texto que nós entendemos, porém o computador não. Para que o
algoritmo escrito seja entendido pelo computador, ele precisa ser traduzido para uma
linguagem que o computador possa entender e executar, uma linguagem mais próxima dos
comandos da máquina. Este processo de tradução chama-se compilação.
15
DET109 [Programação de Computadores I]
Após a compilação gera-se um programa executável, que pode enfim, entrar na fase de
execução.
Outra forma de execução de um programa é a interpretação. A execução de um programa
interpretado é em geral mais lenta que o programa compilado. Por outro lado, o uso de
programas interpretados permite que trechos de código possam ser trocados por novos
facilmente, fazendo com que o programa fonte possa mudar durante sua execução. Este é um
dos grandes motivos de se usar programas interpretados em sistemas especialistas. Duas
linguagens para as quais podemos encontrar interpretadores são Lisp e Prolog.
No nosso caso, utilizaremos o Visualg para implementar nossos algoritmos. Este é ambiente
que permite editar e interpretar algoritmos em sua linguagem própria. Assim, precisamos:
(1) editar (escrever e corrigir) o algoritmo,
(2) executar, de forma interpretada, isto é, um a um os comandos,
(3) observar o comportamento das variáveis,
(4) fornecer ou gerar valores de entrada e
(5) observar os resultados de saída.
Por permitir estas etapas, o Visualg é uma ferramenta inicial que após o entendimento dos
conceitos fundamentais pode ser facilmente descartada para utilizar-se um outro ambiente de
programação específico para uma determinada linguagem de programação.
2.3 LINGUAGEM DO VISUALG
•
Formato geral do algoritmo
algoritmo "semnome"
// Função : Coloque aqui a função deste algoritmo
// Autor : Coloque aqui seu nome
// Data : 29/2/2012
// Seção de Declarações: são colocadas as variáveis necessárias ao processamento
var
inicio
// Seção de Comandos
fimalgoritmo
•
Variáveis
o Identificam informações necessárias no processamento
o Precisam ser declaradas antes de serem utilizadas
o Possuem nome e tipo (inteiro, real, caracter, ...)
-
o
Com relação ao nome da variável: deve começar com uma letra e conter
letras, números e underline, até um limite de 30 caracteres. É sugestão
que os nomes sejam significativos.
- Com relação ao tipo:
• inteiro: define variáveis numéricas sem do tipo inteiro, sem casas
decimais
• real: define variáveis numéricas do tipo real, com casas decimais
• caractere: define variáveis com sequências de caracteres ou
strings. Estas podem representar nome de pessoas, nome de
cidades, telefone entre outros.
• logico: variáveis com apenas dois valores, verdadeiro ou falso,
conhecidos como tipos booleanos.
• Existem variáveis que podem ser do tipo vetor que será
apresentado posteriormente.
Observe os exemplos 1 e 2 no item 2.2.6.
16
DET109 [Programação de Computadores I]
•
Operador de atribuição: permite atribuir valores
o A atribuição de valores a variáveis é feita com o operador <- .
o Do lado esquerdo fica a variável à qual se deseja atribuir um valor e do lado
direito pode-se colocar qualquer expressão (constante, variáveis, expressões)
desde que seu resultado tenha tipo igual ou compatível ao da variável.
Exemplos:
x <- 3
salario <- 4580.50
nomeDoEstudante <- “Jose Florentino de Jesus”
terminar <- falso
delta <- b^2 – 4 * a * c
•
Operadores Aritméticos
+,Operadores unários, isto é, são aplicados a um único operando. São os
operadores aritméticos de maior precedência. Exemplos: -3, +x. Enquanto o
operador unário - inverte o sinal do seu operando, o operador + não altera o
valor em nada o seu valor.
\
Operador de divisão inteira. Por exemplo, 5 \ 2 = 2. Tem a mesma
precedência do operador de divisão
tradicional.
+,-,*, Operadores aritméticos tradicionais de adição, subtração, multiplicação e
/
divisão. Por convenção, * e / têm
precedência sobre + e -. Para modificar a ordem de avaliação das operações,
é necessário usar parênteses
como em qualquer expressão aritmética.
MOD ou Operador de módulo (isto é, resto da divisão inteira). Por exemplo, 8 MOD 3
%
= 2. Tem a mesma
precedência do operador de divisão tradicional.
^
Operador de potenciação. Por exemplo, 5 ^ 2 = 25. Tem a maior precedência
entre os operadores aritméticos
binários (aqueles que têm dois operandos).
+
Operador de concatenação de strings (isto é, cadeias de caracteres), quando
usado com dois valores
(variáveis ou constantes) do tipo "caractere". Por exemplo: "Rio " + " de
Janeiro" = "Rio de
Janeiro".
•
Operadores Relacionais
=,<,
Respectivamente: igual, menor que, maior que, menor ou igual a, maior ou
>,<=, igual a, diferente de. São utilizados em expressões lógicas para se testar a
>=,
relação entre dois valores do mesmo tipo. Exemplos: 3 = 3 ( 3 é igual a 3?)
<>
resulta em VERDADEIRO ; "A" > "B" ("A" está depois de "B"?)resulta em
FALSO.
Importante: No VisuAlg, as comparações entre strings não diferenciam as letras maiúsculas
das minúsculas. Assim, "ABC" é igual a "abc". Valores lógicos obedecem à seguinte ordem:
FALSO < VERDADEIRO.
•
Operadores Lógicos
nao
Operador unário de negação. nao VERDADEIRO = FALSO, e nao FALSO =
VERDADEIRO. Tem a maior precedência entre os operadores lógicos.
ou
Operador que resulta VERDADEIRO quando um dos seus operandos lógicos
for verdadeiro.
e
Operador que resulta VERDADEIRO somente se seus dois operandos lógicos
forem verdadeiros.
xou
Operador que resulta VERDADEIRO se seus dois operandos lógicos forem
diferentes, e FALSO se forem iguais.
17
DET109 [Programação de Computadores I]
•
Linearização de expressões: para a construção de algoritmos que realizam cálculos
matemáticos, todas as expressões aritméticas devem ser linearizadas, ou seja,
colocadas em linhas, devendo também ser feito o mapeamento dos operadores da
aritmética tradicional para os do Português Estruturado. Exemplos.
Representação tradicional
x1 + x 2 + x3
3
( x 2 − x1) 2 +
x1 =
•
− B+
( y 2 − y1) 2
delta
2A
Representação computacional
(x1 + x2 + x3)/3
raizq((x2-x1)^2+(y2-y1)^2)
x1 <- (-B + raizq(delta)) / (2 * A)
Comandos de entrada e saída:
o Saída: escreva ou escreval: escreve no dispositivo de saída padrão, na tela, o
conteúdo de cada uma das expressões que compõem a lista de expressões, que
devem estar separadas por vírgulas.
É possível especificar o número de espaços no qual se deseja escrever um
determinado valor. Por exemplo, o comando escreva(x:5) escreve o valor da
variável x em 5 espaços, alinhado-o à direita. Para variáveis reais, pode-se
também especificar o número de casas fracionárias que serão exibidas. Por
exemplo,
considerando
y
como
uma
variável
real,
o
comando
escreva(y:6:2)escreve seu valor em 6 espaços colocando 2 casas decimais.
Outros exemplos:
escreva(“Valor da média = “,media)
escreval(“Raiz cúbica de 27 = “,27 ^(1/3))
escreval(“x = “, x:4:1, y+3:4))
Entrada: leia
- Forma geral: leia(<lista de variáveis>)
- Descrição: recebe valores digitados pelo usuário, atribuindo-os às
variáveis cujos nomes estão em <lista de variáveis>, é respeitada a
ordem especificada na lista.
- Exemplos:
leia(nome)
leia(salario)
Após esta introdução de conceitos fundamentais fica mais fácil entender os algoritmos
dos exemplos 1 e 2 anteriores. Na próxima sessão são apresentadas as versões em Visualg de
algoritmos vistos anteriormente.
o
2.4 TRADUÇÃO DE ALGORITMOS
Traduza os algoritmos em fluxograma à esquerda para algoritmos em Visualg.
18
DET109 [Programação de Computadores I]
início
nota1,nota2,nota3
media ←
(nota1 + nota 2 + nota3)
3
media
algoritmo "calculaMedia"
var
nota1,nota2,nota3: real //dados de entrada
media: real //processamento e saída
inicio
escreva("Digite 1ª nota: ")
leia(nota1)
escreva("Digite 2ª nota: ")
leia(nota2)
escreva("Digite 3ª nota: ")
leia(nota3)
media <- (nota1+nota2+nota3)/3
escreva("Média = ",media)
fimalgoritmo
fim
algoritmo "distancia2Pontos"
var
x1,y1,x2,y2: inteiro
distancia: real
inicio
escreva("Digite a coordenada x1: ")
leia(x1)
escreva("Digite a coordenada y1: ")
leia(y1)
escreva("Digite a coordenada x2: ")
leia(x2)
escreva("Digite a coordenada y2: ")
leia(y2)
distancia <- raizq((x2-x1)^2+(y2-y1)^2)
escreva("Distância (",x1,",",y1,") e ","(",x2,",",y2,") =
",distancia)
início
x1,y1,x2,y2
distancia =
distancia
fim
2.5 EXERCÍCIOS
1. Faça um algoritmo que leia as 3 notas de um aluno (x1, x2 e x3), no intervalo de 0 a 10,
calcule e exiba a média ponderada das notas deste aluno, com pesos p1 = 2, p2 = 3 e p3
= 5. A média aritmética ponderada é dada por:
Ou seja, neste caso, somatório das notas
multiplicadas pelos respectivos pesos e tudo
dividido pela soma dos pesos
_
xp =
Teste seu algoritmo para x1 = 5, x2 = 7 e x3 = 8. O resultado deverá ser 7.1.
2. Um sistema de equações lineares do tipo:
, pode ser resolvido de acordo com:
19
DET109 [Programação de Computadores I]
Desenvolva um algoritmo que lê os coeficientes a,b,c,d,e e f, calcule e exiba os valores de x e
y. Teste seu algoritmo com a = 2, b = 3, c = 8, d = 5, e = -1 e f = 3. O resultado será x = 1 e
y = 2.
3. O custo ao consumidor de um carro novo é a soma do custo de fábrica com a percentagem
do distribuidor e dos impostos (aplicados ao custo de fábrica). Supondo que a percentagem
do distribuidor seja de 25% e os impostos de 46%, desenvolva um algoritmo que leia o
custo de fábrica de um carro e exiba o custo ao consumidor.
4. Faça um algoritmo que leia o tempo de duração de um evento em uma fábrica expressa
em segundos e mostre-o expresso em horas, minutos e segundos.
5. Escrever um algoritmo que lê um valor inteiro em reais (R$) e calcula qual o menor
número possível de notas de 100, 50, 20, 10, 5, 2 e 1 em que o valor lido pode ser
decomposto. Escrever o valor lido e a relação de notas necessárias.
20
DET109 [Programação de Computadores I]
3 ESTRUTURA CONDICIONAL
3.1 INTRODUÇÃO
Na vida real tomamos decisões a todo o momento baseadas em uma situação existente.
Em um algoritmo, chamamos esta situação de condição. Associada a uma condição, existirá
uma alternativa possível de ações.
se <condição> entao
<ações (uma ou mais) a serem realizadas se a condição for verdadeira>
fimse
3.2 EXEMPLOS E FORMA GERAL
se (saldo < 0) entao
escreval(“Saldo insuficiente”)
fimse
se (lado1 = lado2) e (lado2 = lado3) entao
escreval(“Triângulo eqüilátero”)
fimse
se <condição> entao
<ações (uma ou mais) a serem realizadas se a condição for verdadeira>
senao
<ações (uma ou mais) a serem realizadas se a condição for falsa>
fimse
Exemplos:
se (lado1 = lado2) e (lado2 = lado3) entao
escreval(“Triângulo equilátero”)
senao
escreval(“Não é triângulo equilátero”)
fimse
algoritmo "CalculaAreadoCirculo"
var
area, raio: Real
inicio
escreva ("Entre com raio do círculo")
leia (raio)
se Raio > 0 entao
area <- PI*(raio^2)
escreva ("A área do círculo de raio ", raio, " é ", area)
senao
escreva ("Raio não pode ser nulo ou negativo!")
fimse
fimalgoritmo
3.2.1Exercícios
1. Considere as variáveis abaixo:
var
x,y: inteiro
achou: lógico
k,z: real
21
DET109 [Programação de Computadores I]
cor: caracter
Avalie as expressões lógicas abaixo e preencha os espaços com os valores lógicos
V(verdadeiro) ou F(falso):
x
y
k
z
Cor
x%2=0
x>y
(x+y)>z
Cor=”branco”
10
5
2.5 3.0
“azul”
13
25 0.5 45.0 “branco”
2. Complete o algoritmo abaixo de modo a exibir o resultado final, caso a média seja
maior ou igual a 70, o algoritmo deve exibir a mensagem “APROVADO” caso contrário
exibir a mensagem “REPROVADO OU EM PROVA FINAL”.
algoritmo "Media3Notas"
// Este algoritmo tem como entrada as 3 notas de um estudante
// Calcula e exibe a média aritmética considerando-as
// Utiliza uma estrutura sequencial de comandos
var
nota1,nota2,nota3,media: real
inicio
escreva("Nota 1: ")
leia(nota1)
escreva("Nota 2: ")
leia(nota2)
escreva("Nota 3: ")
leia(nota3)
media <- (nota1 + nota2 + nota3)/3
escreval("Media = ",media)
fimalgoritmo
3. Observe os trechos de códigos abaixo, eles são equivalentes? Explique sua resposta.
(I)
se (media >= 70) entao
escreval(“Aprovado”)
senao
escreval(“Reprovado ou em prova final”)
fimse
(II)
se (media >= 70) entao
escreval(“Aprovado”)
fimse
se (media < 70) entao
escreval(“Reprovado ou em prova final”)
fimse
(III)
se (media >= 70) entao
escreval(“Aprovado”)
se (media < 70) entao
escreval(“Reprovado ou em prova final”)
fimse
fimse
22
DET109 [Programação de Computadores I]
4. O que faz o algoritmo abaixo?
algoritmo "exercicio3"
var
x,y,z,k: inteiro
inicio
escreva("digite valor: ")
leia(x)
k <- x
escreva("digite valor: ")
leia(y)
se (y > k) entao
k <- y
fimse
escreva("digite valor: ")
leia(z)
se (z > k) entao
k <- z
fimse
escreval("Resultado = ",k)
fimalgoritmo
Teste seu algoritmo com os dados da
tabela
x
y
z
k
5
6
7
10
20
8
5
3
2
5. Escreva um algoritmo que leia um número inteiro. Se o número lido for positivo,
escreva uma mensagem indicando se ele é par ou ímpar. Se o número for negativo,
escreva a seguinte mensagem “Este número não é positivo”.
6. Observe e estude o seguinte algoritmo em descrição narrativa. Em seguida implemente
este algoritmo no Visualg.
Obter o valor de A
Obter o valor de B
Obter o valor de C
Calcular delta = B 2 − 4 AC
Se delta for menor que zero entao
Exiba mensagem “Não existem raízes reais”
Senão
− B + delta
2A
− B − delta
Calcule x 2 =
2A
Calcule x1 =
Exibir x1
Exibir x2
7. Observe o fluxograma abaixo, estude-o e depois de entendê-lo, identificar entrada,
processamento e saída, desenvolva um algoritmo em Visualg que implemente-o.
23
DET109 [Programação de Computadores I]
V
8. Avalie o seguinte problema:
F
 peso 
2 
 altura 
O IMC é calculado pela fórmula IMC = 
é dada de acordo com o seguinte critério:
IMC
< 18,5
18,5 – 24,9
25,0 – 29,9
Classificação
Magreza
Saudável
Sobrepeso
IMC
30,0 – 34,9
35,0 – 39,9
≥ 40,0
. A classificação
Classificação
Obesidade Grau I
Obesidade Grau II (severa)
Obesidade Grau III (mórbida)
Suponha que você tenha que calcular o seu próprio IMC. Que dados precisa como entrada?
Qual será o processamento? Qual será a saída? Desenvolva um algoritmo que permita calcular
e exibir o IMC e a respectiva classificação de uma pessoa. Teste-o, invente dados para testar
as faixas e confirmar a ausência de erros. Ele funcionou corretamente? Teste valores absurdos
para peso e altura. Seu programa aceita? Se sim, não deveria. Modifique-o para que fique
mais robusto, isto é, funcione em qualquer situação.
9. Para calcular o salário líquido de um funcionário temos o seguinte algoritmo em descrição
narrativa. Após estudá-lo, implemente-o no Visualg.
Obter o número de horas trabalhadas (NHT)
Obter o valor da hora trabalhada (VHT)
Obter o número de dependentes (NDEP)
Obter o número de horas extras (NHE)
Obter o número de dias faltosos (FALTAS)
Calcular o salário Bruto (SBRUTO) multiplicando-se NHT por VHT
Calcular desconto do INSS que é igual a 10% do salário bruto
Calcular o salário família (SFAMILIA) que é 5% do salário bruto para cada dependente
Se houver hora extra
Calcular o valor a pagar pelas horas extras (VEXTRA), 50% a mais de
VHT multiplicado por NHT
Calcular o desconto por falta (VFALTAS) igual a FALTAS multiplicado por VHT
Calcular salário líquido
Calcular o desconto do imposto de renda (IR) de forma simplificada. Caso salário seja maior ou igual a 2000,00
descontar 6%
Calcular e exibir o salário líquido
SLIQUIDO = SBRUTO + SALARIOFAMILIA + VEXTRA – INSS – IR – VFALTAS
24
DET109 [Programação de Computadores I]
10.
11.
Altere o algoritmo 1 do capítulo anterior, sessão 2.5, para também emitir o resultado,
uma mensagem de "Aprovado", caso a média seja igual ou superior a 6, ou a mensagem
"Reprovado", caso contrário.
O que muda no algoritmo se utilizarmos outro critério, como o utilizado na FDV:
Media
Resultado
Média >= 70
“APROVADO”
40 <= Média < 70 “EM PROVA FINAL”
Média < 40
“REPROVADO”
12.
Elaborar um algoritmo que lê 2 valores a e b e exiba a mensagem: "São múltiplos" ou
"Não são múltiplos".
13.
Elabore um algoritmo que tendo como entrada
uma das seguintes categorias, exibindo-a:
Categoria
Infantil A
Infantil B
Juvenil A
Juvenil B
Adulto
14.
15.
a idade de uma pessoa, classifique-o em
Faixa etárea
5-7
8-10
11-13
14-17
Acima de 18
Escreva um algoritmo que leia 3 números inteiros e mostre o maior deles.
Escreva um algoritmo que leia a matrícula de um aluno e suas três notas. Calcule a
média ponderada do aluno, considerando que o peso para a maior nota seja 4 e para as
duas restantes, 3. Exiba o código do aluno, suas três notas, a média calculada e uma
mensagem "APROVADO" se a média for maior ou igual a 6 e "REPROVADO" se a média for
menor que 6.
16.
O cardápio de uma lanchonete é o seguinte:
Especificação
Código
Preço
Cachorro quente
100
1,20
Bauru simples
101
2,30
Bauru com ovo
102
2,70
Hambúrger
103
2,50
Cheeseburguer
104
3,20
Refrigerante
105
2,00
Escrever um algoritmo que leia o código do item pedido, a quantidade e calcule o valor a ser
pago por aquele lanche. Considere que a cada execução somente será calculado um item.
17.
Desenvolva um algoritmo que baseando-se no peso e na altura de um indivíduo calcule
e exiba seu IMC de acordo com a seguinte expressão:
IMC = peso
altura 2
Em seguida, o algoritmo deverá exibir a classificação de acordo com o IMC calculado:
IMC (kg/m2)
< 18,5
18,5 <= IMC <25
25 <= IMC < 30
30 <= IMC < 35
35 <= IMC < 40
IMC >= 40
Classificação
Baixo Peso
Peso Normal
Sobrepeso
Obeso I
Obeso II
Obeso III
25
DET109 [Programação de Computadores I]
18.
Altere
indivíduo.
- para
- para
o algoritmo anterior de modo a também calcular e exibir o peso ideal do
O peso ideal é calculado de acordo com as seguintes expressões:
homem, sexo = ‘M’: (72.7 x altura) – 58.0
mulheres, sexo = ‘F’: (62.1 x altura) – 44.7
19.
Um banco concederá um crédito especial aos seus clientes, variável com o saldo médio
no último ano. Faça um algoritmo que leia o saldo médio de um cliente e calcule o valor do
crédito de acordo com a tabela abaixo. Seu algoritmo deve exibir uma mensagem
informando o saldo médio e o valor do crédito.
Saldo médio
Percentual
de 0 a 200
nenhum crédito
de 201 a 400 20% do valor do saldo médio
de 401 a 600 30% do valor do saldo médio
acima de 601 40% do valor do saldo médio
20.
Um usuário deseja um algoritmo onde possa escolher que tipo de média deseja calcular
a partir de 3 notas. Faça um algoritmo que leia as notas, a opção escolhida pelo usuário,
calcule e exiba a média.
1 - aritmética
2 - ponderada (3,3,4)
3 – harmônica
Expressões para cálculos das médias
mediaAritmética = (nota1 + nota 2 + nota3)
3
mediaPonderada = ((nota1x3) + (nota 2 x3) + (nota3x 4))
mediaHarmonica =
(3 + 3 + 6)
3
1
1
1
+
+
nota1 nota 2 nota3
21.
Um vendedor precisa de um algoritmo que calcule o preço total devido por um cliente.
O algoritmo deve receber o código de um produto e a quantidade comprada e calcular o
preço total, usando a tabela abaixo. Mostre uma mensagem no caso de código inválido.
Preço
Código
unitário
'ABCD'
R$ 5,30
'XYPK'
R$ 6,00
'KLMP'
R$ 3,20
'QRST'
R$ 2,50
22.
Uma empresa concederá um aumento de salário aos seus funcionários, variável de
acordo com o cargo, conforme a tabela abaixo. Faça um algoritmo que leia o salário e o
cargo de um funcionário e calcule o novo salário. Se o cargo do funcionário não estiver na
tabela, ele deverá, então, receber 40% de aumento. Mostre o salário antigo, o novo salário
e a diferença.
Código
23.
Cargo
Percentual
101
Gerente
10%
102
Engenheiro
20%
103
Técnico
30%
Elaborar um algoritmo que lê 3 valores a,b,c e verifica se eles formam ou não um
triângulo. Supor que os valores lidos são inteiros e positivos. Caso os valores formem um
26
DET109 [Programação de Computadores I]
triângulo, calcular e escrever a área deste triângulo de acordo com as expressões abaixo.
Se não formam triângulo escrever os valores lidos e uma mensagem informando “não
formam um triângulo”. Se um dos lados for maior que a soma dos outros dois, os lados
não formam triângulo.
area =
s ( s − lado1)( s − lado 2)( s − lado3)
s=
lado1 + lado 2 + lado3
2
24.
Escrever um algoritmo que lê a hora de início de um jogo e a hora do final do jogo
(considerando apenas horas inteiras) e calcula a duração do jogo em horas, sabendo-se
que o tempo máximo de duração do jogo é de 24 horas e que o jogo pode iniciar em um
dia e terminar no dia seguinte.
25.
Escrever um algoritmo que lê um conjunto de 4 valores i, a, b, c, onde i é um valor
inteiro e positivo e a, b, c, são quaisquer valores reais e os escreva. A seguir:
a) Se i=1 escrever os três valores a, b, c em ordem crescente.
b) Se i=2 escrever os três valores a, b, c em ordem decrescente.
c) Se i=3 escrever os três valores a, b, c de forma que o maior entre a, b, c fique dentre os
dois.
26.
Escrever um algoritmo que lê:
- a percentagem do IPI a ser acrescido no valor das peças
- o código da peça 1, valor unitário da peça 1, quantidade de peças 1
- o código da peça 2, valor unitário da peça 2, quantidade de peças 2
O algoritmo deve calcular o valor total a ser pago e apresentar o resultado.
Fórmula : (valor1*quant1 + valor2*quant2)*(IPI/100 + 1)
27.
Escrever um algoritmo que lê a hora de início e hora de término de um jogo, ambas
subdivididas em dois valores distintos : horas e minutos. Calcular e escrever a duração do
jogo, também em horas e minutos, considerando que o tempo máximo de duração de um
jogo é de 24 horas e que o jogo pode iniciar em um dia e terminar no dia seguinte.
28.
Escrever um algoritmo que lê o número de identificação, as 3 notas obtidas por um
aluno nas 3 verificações e a média dos exercícios que fazem parte da avaliação. Calcular a
média de aproveitamento, usando a fórmula MA = (Nota1 + Nota2 x 2 + Nota3 x 3 +
ME )/7
A atribuição de conceitos obedece a tabela abaixo:
Média de
Conceito
Aproveitamento
9,0
A
7,5 e < 9,0
B
6,0 e < 7,5
C
4,0 e < 6,0
D
< 4,0
E
O algoritmo deve escrever o número do aluno, suas notas, a média dos exercícios, a média de
aproveitamento, o conceito correspondente e a mensagem: APROVADO se o conceito for A,B
ou C e REPROVADO se o conceito for D ou E.
29.
O departamento que controla o índice de poluição do meio ambiente mantém 3 grupos
de indústrias que são altamente poluentes do meio ambiente. O índice de poluição
aceitável varia de 0,05 até 0,25. Se o índice sobe para 0,3 as indústrias do 1º grupo são
intimadas a suspenderem suas atividades, se o índice cresce para 0,4 as do 1° e 2° grupo
são intimadas a suspenderem suas atividades e se o índice atingir 0,5 todos os 3 grupos
devem ser notificados a paralisarem suas atividades. Escrever um algoritmo que lê o índice
de poluição medido e emite a notificação adequada aos diferentes grupos de empresas.
27
DET109 [Programação de Computadores I]
4 ESTRUTURAS DE REPETIÇÃO
O VisuAlg implementa as três estruturas de repetição usuais nas linguagens de programação:
o laço contado para...ate...faca e os laços condicionados enquanto...faca e repita...ate (similar
ao repeat...until). A sintaxe destes comandos vem a seguir.
4.1 A ESTRUTURA PARA ... FACA
Esta estrutura repete uma sequência de comandos um número pré determinado de vezes.
Seu formato geral é apresentado abaixo:
para <variável-de-controle> de <valor-inicial> ate <valor-final> [passo <incremento>] faca
<sequência de comandos?
fimpara
variável-de-controle
valor-inicial
valor-final
incremento
fimpara
Uma variável que controla a repetição. Deve ser necessariamente
uma variável de tipo enumerável como o tipo inteiro.
É uma expressão que especifica o valor inicial da variável de
controle.
É uma expressão que especifica o valor máximo da variável de
controle.
É um elemento opcional. Quando presente, precedida pela palavra
passo, é uma expressão que especifica o incremento que será
acrescentado à variável de controle em cada repetição. Quando
esta opção não é utilizada, o valor padrão de <incremento> é 1.
Vale a pena ter em conta que também é possível especificar
valores negativos para <incremento>. Por outro lado, se a
avaliação da expressão <incremento > resultar em valor nulo, a
execução do algoritmo será interrompida, com a impressão de uma
mensagem de erro.
Indica o fim da seqüência de comandos a serem repetidos. Cada
vez que o programa chega neste ponto, é acrescentado à variável
contadora o valor de <incremento >, e comparado a <valor-final
>. Se for menor ou igual (ou maior ou igual, quando <incremento
> for negativo), a seqüência de comandos será executada mais
uma vez; caso contrário, a execução prosseguirá a partir do
primeiro comando que esteja após o fimpara.
<valor-inicial >, <valor-final > e <incremento > são avaliados uma única vez antes da
execução da primeira repetição, e não se alteram durante a execução do laço, mesmo que
variáveis eventualmente presentes nessas expressões tenham seus valores alterados.
No exemplo a seguir, os números de 1 a 10 são exibidos em ordem crescente.
algoritmo "NúmerosDe1a10"
var j: inteiro
inicio
para j de 1 ate 10 faca
escreva (j:3)
fimpara
fimalgoritmo
28
DET109 [Programação de Computadores I]
Importante: Se, logo no início da primeira repetição, <valor-inicial > for maior que <valorfinal > (ou menor, quando <incremento> for negativo), o laço não será executado nenhuma
vez. O exemplo a seguir não imprime nada.
algoritmo "NumerosDe10a1NaoFunciona"
var j: inteiro
inicio
para j de 10 ate 1 faca
escreva (j:3)
fimpara
fimalgoritmo
Este outro exempo, no entanto, funcionará por causa do passo -1:
algoritmo "NumerosDe10a1Eestefunciona"
var j: inteiro
inicio
para j de 10 ate 1 passo -1 faca
escreva (j:3)
fimpara
fimalgoritmo
4.2 A ESTRUTURA REPITA ... ATE
Esta estrutura repete uma sequência de comandos até que uma determinada condição seja
satisfeita.
Seu formato geral é mostrado abaixo:
repita
<sequência de comandos>
ate <expressão lógica>
repita
ate <expressão lógica>
Indica o início da repetição.
Indica o fim da <seqüência-de-comandos> a serem repetidos.
Cada vez que o programa chega neste ponto, <expressão-lógica>
é avaliada: se seu resultado for FALSO, os comandos presentes
entre esta linha e a linha repita são executados; caso contrário, a
execução prosseguirá a partir do primeiro comando após esta
linha.
Considerando ainda o mesmo exemplo:
algoritmo "NumerosDe1a10"
var j: inteiro
inicio
j <- 1
repita
escreva (j:3)
j <- j + 1
ate j > 10
fimalgoritmo
Importante: Como o laço repita...ate testa sua condição de parada depois de executar sua
seqüência de comandos, esta seqüência poderá ser executada uma ou mais vezes.
4.3 A ESTRUTURA ENQUANTO ... FACA
Esta estrutura repete uma seqüência de comandos enquanto uma determinada condição
(especificada através de uma expressão lógica) for satisfeita.
29
DET109 [Programação de Computadores I]
Seu formato geral é apresentado abaixo:
enquanto <expressão-lógica> faca
<seqüência-de-comandos>
fimenquanto
<expressão lógica>
fimequanto
Esta expressão é avaliada antes de cada repetição do laço. Quando
seu resultado for VERDADEIRO, <sequência-de-comandos> é
executada.
Indica o fim da <sequência-de-comandos> que será repetida.
Cada vez que a execução atinge este ponto, volta-se ao início do
laço para que <expressão-lógica> seja avaliada novamente. Se o
resultado desta avaliação for VERDADEIRO, a <sequência-decomandos> será executada mais uma vez; caso contrário, a
execução prosseguirá a partir do primeiro comando após
fimenquanto.
O mesmo exemplo anterior pode ser resolvido com esta estrutura de repetição:
algoritmo "NumerosDe1a10"
var j: inteiro
inicio
j <- 1
enquanto j <= 10 faca
escreva (j:3)
j <- j + 1
fimenquanto
fimalgoritmo
Importante: Como o laço enquanto ... faca testa sua condição de parada antes de executar
sua seqüência de comandos, esta seqüência poderá ser executada zero ou mais vezes.
4.4 EXERCÍCIOS
1. Observe o algoritmo abaixo
algoritmo "calculaMediaComRepeticao"
var
nota1,nota2,nota3: real //dados de entrada
media: real //processamento e saída
numeroDeAlunos: inteiro //contador para o número de alunos
inicio
numeroDeAlunos <- 0
repita
escreva("Digite 1ª nota: ")
leia(nota1)
escreva("Digite 2ª nota: ")
leia(nota2)
escreva("Digite 3ª nota: ")
leia(nota3)
media <- (nota1+nota2+nota3)/3
escreval("Média = ",media)
escreval("-----------------")
numeroDeAlunos <- numeroDeAlunos + 1
ate (numeroDeAlunos = 3)
fimalgoritmo
a. Quantas vezes os comandos serão executados? Por que?
30
DET109 [Programação de Computadores I]
b. Explique como fazer para que seja calculada a média para 100 estudantes.
c. Agora vamos calcular a média da turma. Observe o algoritmo modificado abaixo.
algoritmo "calculaMediaComRepeticao"
var
nota1,nota2,nota3: real //dados de entrada
media, soma, mediaTurma: real //processamento e saída
numeroDeAlunos: inteiro //contador para o número de alunos
inicio
numeroDeAlunos <- 0
soma <- 0
repita
escreva("Digite 1ª nota: ")
leia(nota1)
escreva("Digite 2ª nota: ")
leia(nota2)
escreva("Digite 3ª nota: ")
leia(nota3)
media <- (nota1+nota2+nota3)/3
escreval("Média = ",media:6:2)
soma <- soma + media
//ACUMULADOR
escreval("-----------------")
numeroDeAlunos <- numeroDeAlunos + 1 //CONTADOR
ate (numeroDeAlunos = 3)
mediaTurma <- soma / 3
escreval("-----------------")
escreval("Média da turma = ",mediaTurma:6:2)
fimalgoritmo
d. O que mudou?
e. Agora vamos contar quantos estudantes conseguiram média maior ou igual a
60.
algoritmo "calculaMediaComRepeticao"
var
nota1,nota2,nota3: real //dados de entrada
media, soma, mediaTurma: real //processamento e saída
numeroDeAlunos, contaAcima60: inteiro //contador para o número de alunos
inicio
numeroDeAlunos <- 0
contaAcima60 <- 0
soma <- 0
repita
escreva("Digite 1ª nota: ")
leia(nota1)
escreva("Digite 2ª nota: ")
leia(nota2)
escreva("Digite 3ª nota: ")
leia(nota3)
media <- (nota1+nota2+nota3)/3
se (media >= 60) entao
contaAcima60 <- contaAcima60 + 1
fimse
escreval("Média = ",media:6:2)
soma <- soma + media
escreval("-----------------")
numeroDeAlunos <- numeroDeAlunos + 1
ate (numeroDeAlunos = 3)
mediaTurma <- soma / 3
31
DET109 [Programação de Computadores I]
escreval("-----------------")
escreval("Média da turma = ",mediaTurma:6:2)
escreval("Número de estudantes com média acima de 60 = ",contaAcima60)
fimalgoritmo
f.
O que foi alterado?
2. Desenvolva um algoritmo que leia informações sobre um grupo de 50 pessoas (teste seu
algoritmo para 3 pessoas e depois reformule o algoritmo para 50 pessoas) e calcule alguns
dados estatísticos. Para cada pessoa do grupo deve ler o nome da pessoa, a altura, o peso
e o sexo (“F” para feminino e “M” para o masculino). Calcular e escrever:
a. A média de peso das pessoas (somatório dos pesos de todas as pessoas pela
quantidade de pessoas);
b. A quantidade total de homens e mulheres e o percentual de cada.
c. Como tornar o número de pessoas da pesquisa flexível? Implemente sua
solução.
d. O nome da pessoa mais alta.
Solução: Seguem abaixo algoritmos que mostram a construção do algoritmo por partes.
Um processo de repetição para x pessoas.
algoritmo "pesquisa"
var
pessoas, contaPessoas: inteiro
inicio
escreva("Quantas pessoas foram entrevistadas ? ")
leia(pessoas)
contaPessoas <- 1
repita
escreval("Processando pessoa nº: ",contaPessoas)
escreval("------------------------")
contaPessoas <- contaPessoas + 1
ate (contaPessoas > pessoas)
fimalgoritmo
Processo de repetição para um número determinado de pessoas com a leitura dos
dados.
algoritmo "pesquisa"
var
pessoas, contaPessoas: inteiro
nome: caracter
peso,altura: real
sexo: caracter
inicio
escreva("Quantas pessoas foram entrevistadas ? ")
leia(pessoas)
contaPessoas <- 1
repita
escreval("Processando pessoa nº: ",contaPessoas)
escreval("------------------------")
escreva("Nome: ")
leia(nome)
escreva("Peso: ")
leia(peso)
escreva("Altura: ")
leia(altura)
escreva("Sexo [F - Feminino] ou [M - Masculino]: ")
contaPessoas <- contaPessoas + 1
ate (contaPessoas > pessoas)
fimalgoritmo
leia(sexo)
Cálculo da média de peso das pessoas.
32
DET109 [Programação de Computadores I]
algoritmo "pesquisa"
var
pessoas, contaPessoas: inteiro
nome: caracter
peso,altura, somapeso, mediaPeso: real
sexo: caracter
inicio
escreva("Quantas pessoas foram entrevistadas ? ")
leia(pessoas)
contaPessoas <- 1
somaPeso <- 0
repita
escreval("Processando pessoa nº: ",contaPessoas)
escreval("------------------------")
escreva("Nome: ")
leia(nome)
escreva("Peso: ")
leia(peso)
escreva("Altura: ")
leia(altura)
escreva("Sexo [F - Feminino] ou [M - Masculino]: ")
somaPeso <- somaPeso + peso
contaPessoas <- contaPessoas + 1
ate (contaPessoas > pessoas)
mediaPeso <- somaPeso/pessoas
escreval("Média de peso das pessoas = ",mediaPeso:5:2)
fimalgoritmo
leia(sexo)
Cálculo do número de homens e mulheres e seus percentuais.
algoritmo "pesquisa"
var
pessoas, contaPessoas, homens, mulheres: inteiro
nome: caracter
peso,altura, somapeso, mediaPeso: real
sexo: caracter
inicio
escreva("Quantas pessoas foram entrevistadas ? ")
leia(pessoas)
contaPessoas <- 1
somaPeso <- 0
homens <- 0
mulheres <- 0
repita
escreval("Processando pessoa nº: ",contaPessoas)
escreval("------------------------")
escreva("Nome: ")
leia(nome)
escreva("Peso: ")
leia(peso)
escreva("Altura: ")
leia(altura)
escreva("Sexo [F - Feminino] ou [M - Masculino]: ")
leia(sexo)
somaPeso <- somaPeso + peso
se (sexo = "F") entao
mulheres <- mulheres + 1
senao
se (sexo = "M") entao
homens <- homens + 1
senao
escreva("Sexo inesperado, não considerado!")
fimse
fimse
contaPessoas <- contaPessoas + 1
ate (contaPessoas > pessoas)
mediaPeso <- somaPeso/pessoas
escreval("Média de peso das pessoas = ",mediaPeso:5:2)
escreval("Número de mulheres consideradas = ",mulheres," equivale a ",
(mulheres/pessoas*100):5:2," %")
33
DET109 [Programação de Computadores I]
escreval("Número de homens considerados = ",homens," equivale a
",homens/pessoas*100:5:2," %")
fimalgoritmo
Verificação da pessoa mais alta.
algoritmo "pesquisa"
var
pessoas, contaPessoas, homens, mulheres: inteiro
nome, nomePessoaMaisAlta: caracter
peso,altura, somapeso, mediaPeso, maiorAltura: real
sexo: caracter
inicio
escreva("Quantas pessoas foram entrevistadas ? ")
leia(pessoas)
contaPessoas <- 1
somaPeso <- 0
homens <- 0
mulheres <- 0
maiorAltura <- 0
repita
escreval("Processando pessoa nº: ",contaPessoas)
escreval("------------------------")
escreva("Nome: ")
leia(nome)
escreva("Peso: ")
leia(peso)
escreva("Altura: ")
leia(altura)
escreva("Sexo [F - Feminino] ou [M - Masculino]: ")
leia(sexo)
somaPeso <- somaPeso + peso
se (sexo = "F") entao
mulheres <- mulheres + 1
senao
se (sexo = "M") entao
homens <- homens + 1
senao
escreva("Sexo inesperado, não considerado!")
fimse
fimse
se (altura > maiorAltura) entao
maiorAltura <- altura
nomePessoaMaisAlta <- nome
fimse
contaPessoas <- contaPessoas + 1
ate (contaPessoas > pessoas)
mediaPeso <- somaPeso/pessoas
escreval("Média de peso das pessoas = ",mediaPeso:5:2)
escreval("Número de mulheres consideradas = ",mulheres," equivale a ",
(mulheres/pessoas*100):5:2," %")
escreval("Número de homens considerados = ",homens," equivale a
",homens/pessoas*100:5:2," %")
escreval("Pessoa mais alta é ",nomePessoaMaisAlta," com ",maiorAltura:5:2,"
m.")
fimalgoritmo
3. Observe o algoritmo abaixo. O que faz o trecho de algoritmo abaixo?
repita
escreva(“Digite sua altura: “) leia(altura)
se (altura <= 0) entao
escreval(“Altura inválida! “)
fimse
ate (altura > 0)
4. O que há de novo no algoritmo abaixo?
34
DET109 [Programação de Computadores I]
algoritmo "comandoCaso"
var
nota : inteiro
inicio
escreva("Entre com a nota do aluno:")
leia(nota)
escolha nota
caso 0,1,2,3
escreval("Reprovado.")
caso 5 ate 7, 4
// A lista não precisa estar em uma ordem específica
// Só na cláusula ATE o primeiro valor precisam ser menor que o segundo
escreval("Em final.")
caso 8 ate 10
escreval("Aprovado")
outrocaso
escreval("Nota inválida.")
fimescolha
fimalgoritmo
5. Faça com que o processo de leitura da nota e exibição do resultado seja repetitivo e pare
somente quando a matrícula 0 (zero) for digitada. Lembre-se de validar a matrícula, ela
deve ser maior ou igual a 0 (zero).
6. Observe a seguinte interação com o usuário feita por um algoritmo em execução no
Visualg. O computador sorteia um número através do comando n <- randi(10) + 1 e o
usuário tenta acertar. O algoritmo interage com o usuário dando uma dica se o valor
fornecido é pequeno ou grande e ao acertar dá os parabéns e mostra o número de
tentativas. Vamos programar?
Início da execução
Digite palpite de 1 a 10: 5
Tente número menor
Digite palpite de 1 a 10: 2
Tente número maior
Digite palpite de 1 a 10: 3
Parabéns você acertou em 3 !
Fim da execução.
E se desejarmos dar apenas 3 chances ao jogador, o que mudará no algoritmo?
7. Lembra-se de como converter números na notação decimal para a binária? Fazemos
sucessivas divisões por 2 e consideramos o resto até que não possamos mais dividir e
consideramos também o quociente ao final. Observe o exemplo abaixo.
21
1
2
10
0
2
5
1
2
2
2
0
1
Considerando os restos marcados com tracejado e o último quociente temos o número
binário 10101.
Descrição narrativa do algoritmo
Considere o número decimal n, no nosso exemplo 21.
Considere uma variável do tipo caractere, chamada resposta, que nenhum caracter
armazena inicialmente.
35
DET109 [Programação de Computadores I]
Divida n por 2 e caso o resto seja 0 concatene o caractere ”0” à resposta, caso seja 1
concatene ”1”
Armazene em n agora o resultado quociente da divisão do passo anterior.
Repita o processo até que _______________________ .
Desenvolva um algoritmo que tenha como entrada o número inteiro e exiba o número
binário correspondente.
8. Agora vamos fazer o contrário, dado um número binário vamos descobrir qual é o decimal
correspondente. Como fazer? Precisamos pegar cada um dos números, 0 (zero) ou 1 (um)
e multiplicar pela potência de 2 correspondente à posição que ocupa. Por exemplo:
24
1
1x16
23
0
0x8
22
1
1x4
21
0
0x2
20
1
1x1
16+4+1=21
Existem funções que manipulam caracteres que serão úteis:
Exemplificando:
algoritmo "testes"
Var
sequencia: caractere
expoente: inteiro
inicio
sequencia <- "Boa noite"
escreval(compr(sequencia)) // escreverá 9
escreval(copia(sequencia,1,3)) // exibirá Boa
expoente <- 3
escreval(exp(2,expoente)) //exibirá 8
fimalgoritmo
Descrição narrativa do algoritmo
Considere o número binário n do tipo caractere.
Considere o número a ser formado decimal, iniciando com 0 (zero).
Considere um expoente inteiro começando com zero.
Acrescente à variável decimal exp(2,expoente) e passe para o próximo expoente até não
existir mais caracteres.
36
DET109 [Programação de Computadores I]
5 MÓDULOS
5.1 INTRODUÇÃO
Módulos ou subalgoritmos: São trechos de algoritmos que efetuam um ou mais cálculos
determinados. Ao invés de escrever um algoritmo grande, escreva vários algoritmos menores,
os quais, não isoladamente, mas em conjunto, resolvem o problema proposto. É conveniente
utilizá-los quando uma determinada tarefa é efetuada em diversos lugares no mesmo
algoritmo. Ao invés de escrever um trecho diversas vezes, escreva um sub-algoritmo e chameo diversas vezes.
_ - Eles reduzem o tamanho do algoritmo.
_ - Facilitam a compreensão e visualização do algoritmo.
_ - São declarados no início do algoritmo e podem ser chamados em qualquer ponto após
_ sua declaração.
_ - Eles podem ser do tipo Funcao que retorna algum valor ou Procedimento que nada
retorna.
_
5.2 FUNÇÕES
Uma função é um instrumento estático que tem como objetivo retornar um valor ou uma
informação como parâmetro. A chamada de uma função é feita através da citação do seu
nome seguido de seus argumentos iniciais entre parênteses. As funções podem ser
predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse.
Funções Predefinidas do Visualg
O Visualg vem com bibliotecas de funções predefinidas que você pode utilizar em seus
programas.
Veja a tabela abaixo:
Abs (valor : real) : real
Arccos (valor : real) : real
Valor absoluto
Arco cosseno
Arcsen (valor : real) : real
Arco seno
Arctan (valor : real) : real
Arco tangente
Asc (s : caracter) : inteiro
Cos (valor : real) : real
Retorna o código
ASCII
Retorna o nº de
caracateres de c
Copia um
determinado
trecho do caractere
Cosseno
Pi : real
Logaritmo natural (ln)
Converte em
Maiúscula
Converte em
Minúscula
Converte um numero
inteiro ou real para
caractere
Valor Pi
Pos (subc, c : caracter) :
inteiro
Quad (valor : real) : real
Retorna a posição do
caractere.
Elevado quadrado
Co-tangente
Potenciação
Radpgrau (valor : real) :
real
Raizq (valor : real) : real
Rand : real
Grauprad (valor : real) : real
Converte grau para
radiano
Randi (limite : inteiro) :
inteiro
Int (valor : real) : inteiro
Converte o valor em
inteiro
Logaritmo de base
10
Sen (valor : real) : real
Converte Radiano para
grau.
Raiz quadrada
Gerador de números
aleatórios entre 0 e 1
Gerador de números
inteiros aleatórios com
um limite determinado
Seno
Cotan (valor : real) : real
Exp (<base>,<expoente>)
Tan (valor : real) : real
Tangente
Compr (c : caracter) : inteiro
Copia (c : caracter , posini,
posfin : inteiro) : caracter
Log (valor : real) : real
Logn (valor : real) : real
Maiusc (c : caracter) :
caracter
Minusc (c : caracter) :
caracter
Numpcarac (n : inteiro ou
real) : caracter
37
DET109 [Programação de Computadores I]
5.3 FUNÇÕES
A criação de uma função deve ser declarada, com os demais objetos, no início do programa.
Este tipo de subalgoritmo sempre retorna um e apenas um valor ao algoritmo que lhe chamou.
Cada função tem associada ao seu valor de retorno um tipo explícito. Da mesma maneira com
que os parâmetros são fixos para todas as chamadas o retorno também é fixo.
Algoritmo "<nome do algoritmo>"
var
<declaração de variáveis globais>
<definição da função>
inicio
< lista de comandos>
fimalgoritmo
Sintaxe da Função
funcao <identificador> ([var]<parâmetros>) <tipo de retorno>
var
<declaração de variáveis locais>
inicio
<lista de comandos>
retorne <variável de retorno>
fimfuncao
Identificador: Nome da função.
Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos
identificadores para indicar a passagem por referência. Os identificadores são separados por
vírgula.
Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de dados
a separação é feita com ponto-e-vírgulas ';'.
Tipo de retorno da função: Real, Inteiro, Lógico ou Caractere.
Declaração de variáveis locais: idêntica a declaração de variáveis globais. As variáveis
declaradas localmente tem validade dentro do escopo da função.
Retorne: local onde é colocado a variável de retorno.
Criando Procedimentos
A criação de um procedimento também deve ser declarado, com os demais objetos, no início
do programa. Este tipo de subalgoritmo nada retorna, apenas executa uma sequência de
instruções. Os parâmetros são fixos para todas as chamadas.
Sintaxe Procedimento:
procedimento <identificador> ([var]<parâmetros>)
var
<declaração de variáveis locais>
inicio
<lista de comandos>
fimprocedimento
Identificador: Nome do procedimento.
38
DET109 [Programação de Computadores I]
Passagem de parâmetros por referência: utiliza-se a construção VAR antes dos
identificadores para indicar a passagem por referência. Os identificadores são separados por
vírgula.
Parâmetros: Entre um mesmo tipo de dados são separados por vírgula. Entre tipos de dados
a separação é feita com ponto-e-vírgulas ';'.
5.4 APLICAÇÃO DE FUNÇÕES E PROCEDIMENTOS
1. Observe o algoritmo abaixo:
algoritmo "MenuComModulos"
funcao fatorial(n: inteiro): inteiro
var x, fat: inteiro
inicio
fat <- 1
para x de 2 ate n faca
fat <- fat * x
fimpara
retorne fat
fimfuncao
funcao somatorio(n: inteiro): inteiro
var soma, contador: inteiro
inicio
soma <- 0
para contador de 1 ate n faca
soma <- soma + contador
fimpara
retorne soma
fimfuncao
funcao primo(n: inteiro): logico
var contador,divisores: inteiro
inicio
divisores <- 0
para contador de 1 ate n faca
se (n % contador = 0) entao
divisores <- divisores + 1
fimse
fimpara
se (divisores = 2) ou (n = 1) entao
retorne verdadeiro
senao
retorne falso
fimse
fimfuncao
procedimento exibeDivisores(n: inteiro)
var contador, quantos: inteiro
inicio
quantos <- 0
para contador de 1 ate n faca
se (n % contador = 0) entao
escreva(contador:3)
quantos <- quantos + 1
fimse
fimpara
39
DET109 [Programação de Computadores I]
escreval
escreval("Existem ",quantos," divisores.")
fimprocedimento
funcao sorteiAte(n: inteiro): inteiro
var sorteio: inteiro
inicio
sorteio <- randi(n) + 1
retorne sorteio
fimfuncao
procedimento converteDecimalBinario(n: inteiro)
var
numeroDecimal: inteiro
numeroBinarioEmCaracter: caracter
inicio
numeroDecimal <- n
enquanto numeroDecimal > 0 faca
se (numeroDecimal mod 2) = 0 entao
numeroBinario <- "0" + numeroBinarioEmCaracter
senao
numeroBinario <- "1" + numeroBinarioEmCaracter
fimse
numeroDecimal <- numeroDecimal div 2
fimenquanto
escreval("A representação binária de", n, " é ", numeroBinarioEmCaracter)
fimprocedimento
procedimento converteBinarioDecimal(numeroBinarioEmCaracter: caracter)
var
numeroDecimal, expoente, posicao, i: inteiro
inicio
numeroDecimal <- 0
expoente <- 0
para i de 1 ate compr(numeroBinarioEmCaracter) faca
posicao <- compr(numeroBinarioEmCaracter) - i + 1
se copia(numeroBinarioEmCaracter,posicao,1)="1" entao
numeroDecimal <- numeroDecimal + int(exp(2,expoente))
fimse
expoente <- expoente + 1
fimpara
escreval("A representação decimal de ", numeroBinarioEmCaracter, " é ", numeroDecimal)
fimprocedimento
var //GLOBAIS
n, opcao: inteiro
inicio //PROGRAMA PRINCIPAL
repita
escreval("MENU DE OPÇÕES")
escreval("--------------")
escreval("1. Fatorial")
escreval("2. Somatório")
escreval("3. Exibe divisores")
escreval("4. Verifica se é primo")
escreval("5. Sair")
escreva("Digite opção: ")
leia(opcao)
escolha opcao
40
DET109 [Programação de Computadores I]
caso 1
escreva("Digite o nº inteiro e maior que zero: ")
leia(n)
escreval("Fatorial(",n,") = ",fatorial(n))
caso 2
escreva("Digite o nº inteiro e maior que zero: ")
leia(n)
escreval("Somatório de 1 a ",n," = ",somatorio(n))
caso 3
escreva("Digite o nº inteiro e maior que zero: ")
leia(n)
escreval("Divisores de ",n)
exibeDivisores(n)
caso 4
escreva("Digite o nº inteiro e maior que zero: ")
leia(n)
se primo(n) entao
escreval("O número ",n," é primo.")
senao
escreval("O número ",n," não é primo.")
fimse
outrocaso
escreval("Opção inválida")
fimescolha
ate (opcao = 5)
converteBinarioDecimal("1111")
fimalgoritmo
5.5 EXERCÍCIOS
1.
Desenvolva no programa principal os comandos para obter os dados do teclado, calcular e exibir
o IMC, peso ideal e emitir o diagnóstico de uma pessoa.
algoritmo "CalculaIMC"
funcao calculaIMC(peso,altura: real): real
inicio
retorne (peso/altura^2)
fimfuncao
funcao calculaPesoIdeal(sexo: caracter): real
var pesoIdeal: real
inicio
se sexo = "F" entao
pesoIdeal <- (62.1 * altura) - 44.7
senao
pesoIdeal <- (72.7 * altura) - 58
fimse
retorne pesoIdeal
fimfuncao
procedimento emiteDiagnostico(imc: real)
inicio
se (imc < 18.5) entao
escreva("Peso abaixo do ideal!")
senao
se (imc < 2409) entao
escreva("Saudável!")
41
DET109 [Programação de Computadores I]
senao
se (imc < 29,9) entao
escreva("Sobrepeso!")
senao
se (imc < 34,9 entao
escreva("Sobrepeso Grau I")
senao
se (imc < 39,9) entao
escreva("Sobrepeso Grau II")
senao
escreva("Sobrepeso Grau III")
fimse
fimse
fimse
fimse
fimse
fimprocedimento
var
inicio
fimalgoritmo
2. Observe o algoritmo abaixo e:
-
Escreva no programa principal os comandos para ler do teclado os dados necessários,
calcular e exibir o tipo do triângulo e sua área. Teste seu algoritmo várias vezes com os
seguintes triângulos, completando a tabela abaixo com os resultados obtidos:
Lado 1
Lado 2
Lado 3
Tipo
Área
4
5
6
8
8
12
10
10
10
algoritmo "triangulo"
funcao triangulo(a,b,c: real): caracter
var tipo: caracter
inicio
se ((a > b + c) ou (b > a + c) ou (c > a + b)) entao
tipo <- " As medidas não formam um triangulo. "
senao
se (a = b) e (a = c) entao
tipo := " Eqüilátero "
senao
se (a = b) ou (a = c) ou (b = c) entao
tipo <- " Isóceles "
42
DET109 [Programação de Computadores I]
senao
tipo := " Escaleno "
fimse
fimse
fimse
retorne tipo
fimfuncao
procedimento areaTriangulo(a,b,c: real)
var sp, area: real
inicio
sp <- (a+b+c)/2
area <- raizq ( (sp*(sp - a) * ( sp - b) * (sp - c) ))
escreva("Área calculada = ",area)
fimprocedimento
var
lado1, lado2, lado3: real
inicio // programa principal
fimalgoritmo
43
1
-
Os comandos que colocou fazem o processamento apenas para um triângulo, como
realizar os cálculos para um conjunto de 5 triângulos?
algoritmo "triangulo"
funcao triangulo(a,b,c: real): caracter
var tipo: caracter
inicio
se ((a > b + c) ou (b > a + c) ou (c > a + b)) entao
tipo <- " As medidas não formam um triangulo. "
senao
se (a = b) e (a = c) entao
tipo := " Eqüilátero "
senao
se (a = b) ou (a = c) ou (b = c) entao
tipo <- " Isóceles "
senao
tipo := " Escaleno "
fimse
fimse
fimse
retorne tipo
fimfuncao
procedimento areaTriangulo(a,b,c: real)
var sp, area: real
inicio
sp <- (a+b+c)/2
area <- raizq ( (sp*(sp - a) * ( sp - b) * (sp - c) ))
escreva("Área calculada = ",area)
fimprocedimento
var
lado1, lado2, lado3: real
inicio // programa principal
fimalgoritmo
- Identifique as linhas onde existem variáveis locais e variáveis globais no algoritmo da
questão 1.
Locais
Globais
2
3
6 VETORES
6.1 INTRODUÇÃO
Vetores – são estruturas de dados, disponíveis nas linguagens de programação, que
permitem, durante o processamento de um programa, manter e/ou alterar na
memória, um conjunto de dados de um mesmo tipo, organizados em uma única
dimensão.
Exemplos:
A=[3
0 13 ]
5
NOME =
F F M F]
9.6 8.1 ]
2
7
8
1
6
9 10
4]
JOSE
MARIA
CARLA
PEDRO
B=[ -2
S=[ M
F
M
4
M
5
F
0
F
-5
F
LUCIA
declaração
leitura ou geração dos elementos do vetor
processamento, usando e/ou modificando os elementos do vetor
impressão dos elementos do vetor
6.2.1DECLARAÇÃO DE VETORES
…
var A, B: vetor [1..10] de inteiro
nome : vetor [1..5] de caracter
s: vetor [1..15] de caracter
…
6.2.2LEITURA E GERAÇÃO
a. Leitura dos elementos de um vetor
...
para i de 1 ate 10 faca
leia ( A[i] )
{ou}
fimpara
…
…
4
F
M
8
11
M
M
NOTAS=[6.5 7.9 4.3 8.2 10.0 5.7 8.4 2.1
6.2 OPERAÇÕES BÁSICAS
1.
2.
3.
4.
0
5
para i de 1 ate 10 faca
escreva(“A[“, i ,’] = ” )
leia(A[i])
fimpara
…
b. Leitura dos elementos de 2 vetores de mesma dimensão
...
{ leitura de todo o vetor A, e depois, leitura de todo o vetor B }
para i de 1 ate 10 faca
leia ( A[i] )
fimpara
para i de 1 ate 10 faca
leia ( B[i] )
fimpara
…
...
{lendo o 1º elemento do vetor A, o 1º do vetor B, o 2º elemento de A, o 2º elemento
de B etc}
para i de 1 ate 10 faca leia( A[i], B[i] )
…
{ou}
…
para i de 1 ate 10 faca
escreva( “A[“, i ,”]=’”
leia( A[i] )
escreva( “ B[“ i ,”=”)
leia( B[i] )
fimpara
…
c. Geração de vetores com elementos que seguem uma regra prédefinida
...
{ gerando um vetor de 10 elementos inteiros, com todos os elementos iguais a 0 }
para i de 1 ate 10 faca
A[ i ] <- 0
fimpara
...
...
{ gerando um vetor de 10 elem., com os elementos de índice par iguais a 0, e impar
iguais a 1 }
para i de 1 ate 10 faca
6
7
se ( i % 2 = 0 ) entao
A[i] <- 0
senao
A[i] <- 1
fimse
fimpara
...
...
{ gerando o vetor de 10 elementos A = [ 1
para i de 1 ate 10 faca
A[ i ] <- i
fimpara
...
2
3
4
5
6
7
8
9 10 ] }
...
{ gerando um vetor FIB com os 10 primeiros elementos da seqüência de Fibonacci }
FIB[1] <- 1
FIB[2] <- 1
para i de 3 ate 10 faca
FIB[i] <- FIB [i-2] + FIB [i-1]
…
6.2.3PROCESSAMENTO
d. Processando vetores sem modificar o valor ou a posição de seus
elementos
...
{ somando os elementos de um vetor A, já lidos, colocando a soma na variável s }
s <- 0
para i de 1 ate 10 faca
s <- s + A[i]
…
...
{ calculando a soma e a media dos elem. do vetor NOTAS, colocando os resultados em
sem}
s <- 0
para i de 1 ate 10 faca
s <- s + NOTAS[i]
fimpara
m<- s / 10
…
…
{ contando o nº de elem. do vet. NOTAS maiores ou igual a 6.0, colocando o resultado
em nm6 }
nm6 <- 0
para i de 1 ate 10 faca
se NOTAS[ i ] >= 6.0 entao
8
9
nm6 <- nm6 + 1
fimse
fimpara
…
{ contando o número de elementos menores que 0 no vetor B, colocando o resultado
em nneg
nneg <- 0
para i de 1 ate 10 faca
if B[ i ] < 0 entao
nneg <- nneg + 1
fimse
fimpara
…
…
{ contando e somando os elem. menores que 0 no vetor B e os elementos maiores ou
iguais a 0 }
nmen0 <- 0
smen0 <- 0
nmai0 <- 0
smai0 <- 0
para i de 1 ate 10 faca
se B[ i ] < 0 entao
nmen0 <- nmen0 + 1
smen0 <- smen0 + B[i]
senao
nmai0 <- nmai0 + 1
smai0 <- smai0 + B[i]
fimse
fimpara
…
…
{ localizando e imprimindo as posições dos elementos iguais a 0 dentro do vetor B }
para i de 1 ate 10 faca
se B[i] =0
entao
escreval( “ Zero encontrado na posição “ , i )
senao
escreval( “ Zero não existe no vetor B “);
fimse
fimpara
…
10
11
{ localizando e imprimindo a posição de um único elemento cujo valor é AK, dentro do
vetor A }
AK <- 8
i <- 1
enquanto ( A[i] <> AK ) e (i < 10)
i <- i+1
fimenquanto
faca
se A[i] =AK entao
escreval(AK , “ encontrado na posição ’”, i )
senao
escreval( AK, “ não existe no vetor A “)
fimse
…
…
{ localizando e imprimindo as posições dos elementos iguais a 0 dentro do vetor B }
para i de 1 ate 10 faca
se B[i] =0
entao
escreval( “ Zero encontrado na posição ’”, i )
senao
escreval( “ Zero não existe no vetor B ‘”;
…
…
{ localizando e imprimindo a posição de um único elemento cujo valor é AK, dentro do
vetor A }
AK <- 8
i <- 1
enquanto ( A[i] <> AK ) e (i < 10)
i <- i+1
faca
se A[i] = AK entao
escreval(AK , “ encontrado na posição ’”, i )
senao
escreval(AK, “ não existe no vetor A “);
…
....
{ encontrando o maior elemento do vetor B }
maior <- B[1]
para i de 2 ate 10 faca
se maior < B[i] entao
maior <- B[i]
fimse
fimpara
…
12
13
{ encontrando o maior elemento do vetor B e sua posição dentro do vetor }
maior <- B[1]
posmaior <- 1
para i de 2 ate 10 faca
se maior < B[i] entao
maior <- B[i]
posmaior <- i
fimse
fimpara
e. Processando vetores modificando o valor ou a posição de seus
elementos
...
{ trocando o 10º elemento com o 1º elemento do vetor A }
temp <- A[10] ;
A[10] <- A[1] ;
A[1] <- A[10];
...
...
{ acumulando a soma dos i primeiros elementos do vetor B no i-ésimo do vetor B }
para i de 2 ate 10 faca
B[i] <- B[i] + B[i-1]
fimpara
…
...
{ trocando o 10º elem. com o 1º elem., 0 9º elem. Com o 2º, o 8º com o 3º do vetor
B etc }
para i de 1 ate 5 faca
temp <- B[i]
B[i] <- B[11-i]
B[11-i] <- temp
fimpara
…
6.2.4IMPRESSÃO
f.
Cálculo da média de notas da turma e impressão das notas acima
desta
algoritmo "alunosENotas"
var
numeroEstudantes, i: inteiro
nome: vetor [1..45] de caracter
nota: vetor [1..45] de real
soma, media: real
inicio
repita
14
15
escreva("Digite o número de estudantes a considerar: ")
leia(numeroEstudantes)
se (numeroEstudantes < 1) ou (numeroEstudantes > 45) entao
escreval("Nº de estudantes inválido, deve ser entre 1 e 45!")
fimse
ate (numeroEstudantes >= 1) e (numeroEstudantes <= 45)
para i de 1 ate numeroEstudantes faca
escreva("Nome do estudante nº ",i," : ")
leia(nome[i])
escreva("Nota final: ")
leia(nota[i])
escreval("--------------------------")
soma <- soma + nota[i]
fimpara
media <- soma / numeroEstudantes
escreval("--------------------------")
escreval("Média de notas da turma = ",media:5:2)
escreval("--------------------------")
escreval("RELAÇÃO DE ESTUDANTES COM NOTA ACIMA DA MÉDIA DA TURMA")
escreval("------------------------------------------------------")
para i de 1 ate numeroEstudantes faca
se nota[i] >= media entao
escreval(nome[i]:40, nota[i]:5:2)
fimse
fimpara
fimalgoritmo
DET109 [Programação de Computadores I]
16
17
Trabalho Final em 20/06/2012
Observe o algoritmo abaixo:
algoritmo "trabalhoFinal"
arquivo
"C:\Documents
documentos\DET109\vetores\clientes.txt"
var
soma, media: real
contador, acima: inteiro
clientes: vetor[1..43] de caracter
consumo: vetor [1..43] de real
local: vetor [1..43] de inteiro
local_nome: vetor[1..5] de caracter
inicio
local_nome[1]
local_nome[2]
local_nome[3]
local_nome[4]
local_nome[5]
<<<<<-
and
Settings\Aluno\Meus
"Amoras"
"Bom Jesus"
"Centro"
"Fátima"
"Nova Viçosa"
para contador de 1 ate 43 faca
leia(clientes[contador])
fimpara
soma <- 0
escreval("CLIENTE":40,"BAIRRO":11,"CONSUMO":10)
escreval("------------------------------------------------------------")
para contador de 1 ate 43 faca
consumo[contador] <- randi(101)
soma <- soma + consumo[contador]
local[contador] <- randi(5)+1 //1: Amoras 2: Bom Jesus 3: Centro 4: Fátima 5: Nova Viçosa
18
19
escreval(clientes[contador]:40,local_nome[local[contador]]:11,consumo[contador
]:10)
fimpara
escreval("------------------------------------------------------------")
media <- soma / 43
escreval("Média de consumo geral = ",media:5:2)
escreval
escreval("RELAÇÃO DE CLIENTES COM CONSUMO ACIMA DA MÉDIA")
escreval("---------------------------------------------")
para contador de 1 ate 43 faca
se (consumo[contador] >= media) entao
escreval(clientes[contador]:40,consumo[contador]:10)
acima <- acima + 1
fimse
fimpara
escreval
escreval("---------------------------------------")
escreval("Nº de cliente com consumo acima da média = ",acima)
20
21
fimalgoritmo
Modifique o algoritmo acima de modo a:
a. Calcular e exibir a média de consumo por bairro.
b. Processar e exibir o nome do bairro que tem maior consumo médio.
22
Download

DET 100 – INFORMÁTICA