Professional Documents
Culture Documents
Lgica de
Programao
e Algoritmos
Prof. Cludio Lus V. Oliveira
prof.claudioluis@fatec.sp.gov.br
Sumrio
Introduo.................................................................................................. 2
1.1. Lgica de Programao ....................................................................... 3
1.2. Algoritmo ............................................................................................ 6
1.3. Representao e Armazenamento de Dados ....................................... 9
1.4. Formas de Representao de Algoritmos .......................................... 12
1.5. Operadores ....................................................................................... 18
1.6. Portugol Studio.................................................................................. 25
1.7. Estrutura Sequencial ......................................................................... 28
1.8. Estruturas de Seleo ........................................................................ 31
1.9. Estruturas de Repetio .................................................................... 47
1.10. Vetores e Matrizes .......................................................................... 58
1.11. Funes ........................................................................................... 68
1.12. Estruturas, Registros e Campos ....................................................... 77
1.13. Linguagens de Programao ............................................................ 82
Referncias .............................................................................................. 87
Lgica de Programao e
Algoritmos
Introduo
Adotando uma abordagem bastante simplificada, podemos definir
que um computador consiste em um equipamento que permite o
processamento de dados. Qualquer programa desenvolvido,
independente da sua complexidade, sempre ir conter um conjunto de
dados de entrada, realizar algum tipo de processamento (transformao)
desses dados, produzindo um conjunto de dados de sada, conforme
podemos observar na Figura A.
Exerccios
4) Considerando a srie: 56, 56, 41, 41, 26, 26, N, N. Qual ser o valor
de N?
a) 14
b) 9
c) 11
d) 12
e) 13
5) Tringulos so figuras que tm ngulos. Se uma figura no tem ngulos.
Logo:
a) Essa figura pode ser um crculo.
b) Essa figura no um tringulo.
c) Essa figura pode ser um retngulo ou um tringulo.
d) No existem figuras sem ngulos.
e) No possvel chegar a uma concluso.
6) Considerando a sequncia: 1, 2, 3, 5, 8, N. Indicar o valor de N:
a) 15
b) 11
c) 14
d) 13
e) 12
7) Quando B maior que A, X menor que A. Porm, A nunca maior ou
igual a B. Assim:
a) X nunca menor que B.
b) X nunca menor que A.
c) X nunca maior que B.
d) A, B e X so iguais.
e) No possvel chegar a uma concluso.
8) Considerando a frase a seguir, qual a melhor comparao?
"Uma chamin est para a casa assim como uma rvore est para ...".
a) o riacho.
b) o galho.
c) a folha.
d) o cu.
e) o cho.
1.2. Algoritmo
Um algoritmo pode ser definido como uma sequncia ordenada,
finita e bem definida de passos que, quando executados, realizam uma
tarefa especfica ou resolvem um problema, por exemplo, uma receita de
bolo ou o manual de instrues de um televisor.
Exerccios
Exerccios
) 3VALOR
) SOBRENOME
) menor
) SAIDA
) DESC%
) eRRo
) PCT
) #MAIOR
) R$
(
(
(
(
(
(
(
(
(
) VALOR-1
) R1&R2
) EX=1
) Resposta
) DESC
) REAL
) P_C_T
) BRASIL
) Valor final
(
(
(
(
(
(
(
(
(
) PRECO_UNIT
) R1_R2
) SOL1
) SALDO-MED
) SALDO_MED
) DLAR
) PCT%
) result
) VLR+Bonus
(
(
(
(
(
(
(
(
(
) MAXVALOR
) CID
) sobreNome
) %DESC
) [INICIO]
) US$
) PCT.
) res-saida
) Cursos
10
Tipo de Dado
Jos
Jos da Silva
VERDADEIRO
34,560
-45
18
0,56565
-0,4560
0,00000
12,78
100 anos
Maria
10
--56,4
45,422
FALSO
45,001
4444
-56
13250-000
Escola
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
11
Faculdade
falso
Endereco
Cidade
12
1.4.2. Fluxograma
Consiste no uso de ilustraes grficas para representar as
instrues. Apresenta a lgica de um algoritmo, enfatizando passos
individuais atravs de objetos grficos e o fluxo de execuo atravs de
setas.
Conjunto de smbolos utilizados em um fluxograma:
Smbolo
Finalidade
Identifica o incio ou o fim de um
algoritmo
Indica o sentido de execuo e
conecta os smbolos utilizados
Clculos e atribuies de valores
Deciso
13
Smbolo
Finalidade
Procedimento pr-definido
14
Aps a entrada dos dados ser realizada a soma dos dois nmeros o
resultado ser armazenado no identificador S. Em seguida, realizamos a
exibio de S e, por fim, indicaremos o fim do algoritmo.
A soluo para este mesmo problema pode ser representada de
uma forma mais detalhada, conforme podemos observar na Figura 1.3.
Este estilo de representao facilita a futura implementao da soluo do
problema em uma linguagem de programao, pois deixa mais claro os
passos a serem seguidos. Preferivelmente, procure adotar esse tipo de
soluo na resoluo dos problemas computacionais.
15
{ Portugol }
programa
{
// Soma de dois nmeros digitados pelo usurio
funcao inicio()
{
// Declarao das variveis
inteiro n1, n2, s
// Mostrar uma mensagem na tela
escreva ("Digite um nmero: ")
// Obter um valor digitado pelo usurio
leia (n1)
escreva("Digite outro nmero: ")
leia (n2)
// Realizar a soma de n1 com n2 e armazenar
// o resultado na varivel s
s = n1 + n2
// Exibir o resultado obtido
escreva ("O valor da soma ", s)
}
}
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
16
{ Portugol }
// Declarao das variveis
inteiro n1, n2, s
A exibio de dados de qualquer programa deve ser realizada
atravs da utilizao da funo escreva. Nesta funo passe os parmetros
(contedo) a serem exibidos separados por ponto, ou seja, no exemplo a
seguir a cadeia de caracteres "O valor da soma " e o valor da varivel s
sero exibidos.
{ Portugol }
escreva ("O valor da soma ", s)
Na funo escreva podemos usar o caractere especial \n dentro de
uma cadeia de caracteres (string) para realizar uma mudana de linha no
contedo que est sendo impresso, por exemplo, no programa a seguir
teramos o contedo da cadeia de caracteres sendo exibido em linhas
diferentes.
{ Portugol }
programa
{
funcao inicio()
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
17
{
escreva ("Ol\nPessoal")
}
}
A entrada de dados em um programa realizada atravs da funo
leia. Esta funo recebe o dado digitado no teclado e atribui a varivel
passada como parmetro da funo, no exemplo a seguir, temos a varivel
n1 recebendo o contedo digitado pelo usurio.
{ Portugol }
leia (n1)
Normalmente exibimos uma mensagem antes de uma entrada de
dados, utilizando a funo escreva, orientando o usurio sobre o que deve
ser digitado, por exemplo:
{ Portugol }
escreva ("Digite um nmero: ")
leia (n1)
1.5. Operadores
Alm do operador de atribuio (=) j abordado anteriormente,
existem tambm os operadores aritmticos, relacionais e lgicos. Os
operadores aritmticos so utilizados para a realizao de clculos
matemticos:
Operador
Adio
Subtrao
Multiplicao
Diviso
Resto
Representao Simblica
(Fluxograma ou pseudolinguagem)
+
*
/
%
18
{ Portugol }
X = 25 + 12 - 4
Operadores relacionais permitem a comparao entre
identificadores, valores ou mesmo expresses. O resultado de uma
comparao sempre ser um valor booleano (ou lgico), ou seja,
verdadeiro ou falso.
Operador
Maior
Maior ou igual
Menor
Menor ou igual
Igual a
Diferente de
Representao Simblica
(Fluxograma ou pseudolinguagem)
>
>=
<
<=
==
!=
{ Portugol }
A >= ((34 - 5) * 2)
Os operadores lgicos so adotados para conectar e associar
expresses que precisam realizar diversas comparaes diferentes.
Tambm importante salientar que o resultado dessas expresses
sempre ser um valor booleano (ou lgico).
Operador
E (And)
Ou (Or)
No (Not)
Representao Simblica
(Fluxograma ou pseudolinguagem)
e
ou
nao
19
{ Portugol }
A == B e B > 0
Na operao lgica E (And) a sada ser verdadeira apenas se todas
as entradas forem verdadeiras, ou seja:
Entrada 1
falso
falso
verdadeiro
verdadeiro
Entrada 2
falso
verdadeiro
falso
verdadeiro
Sada
falso
falso
falso
verdadeiro
Entrada 2
falso
verdadeiro
falso
verdadeiro
Sada
falso
verdadeiro
verdadeiro
verdadeiro
20
Operador
()
* ou /
+ ou =
==, <, >, <=, >= ou !=
nao
e
ou
{ Portugol }
A > 10 * B e B == 10 + 2
Ilustrando o conceito de resoluo da expresso vamos considerar o
seguinte cenrio:
{ Portugol }
A = 6
B = 2
A > 10 * B e B == 10 + 2
O programa ir realizar 10 * B, ou seja, 10 * 2 que igual a 20 e, em
seguida, 10 + 2 que 12. Desta forma, podemos observar agora a
resoluo parcial da expresso:
{ Portugol }
A > 20 e B == 12
21
{ Portugol }
falso e falso
A ltima etapa da resoluo consiste em avaliar os operadores
lgicos, neste caso, teremos como resultado final da expresso o valor
falso.
Outra forma de avaliar uma expresso atravs da construo de
tabela verdade. Uma tabela verdade permite demonstrar o conjunto de
possibilidades existentes para a combinao de variveis ou expresses e
operadores lgicos. Por exemplo, considerando a seguinte expresso:
{ Portugol }
X > 10 e Y <= 100
A tabela verdade ser utilizada para demonstrar as vrias
possibilidades de combinaes, conforme ilustramos a seguir:
Expresso
Resultados
possveis
Exerccios
X > 10
F
F
V
V
Y <= 100
F
V
F
V
Operador
e (And)
X > 10 e Y <= 100
F
F
F
V
22
a)
b)
c)
d)
e)
f)
g)
X == 4 e Y == 5
X == 3 e Y == 7
X < 5 ou Y != 8
X <= 2 e Y == 7
nao X == 2 e Y == 6
X < 5 e Y > 2 ou Y != 7
Y < 5 ou X > 0 e nao X != Y
{ Portugol }
I = 2
J = 9
K = 6
Avaliar as expresses indicando o resultado final (verdadeiro ou falso):
a)
b)
c)
d)
e)
f)
g)
h)
i)
j)
I > 2 e K == 6
I != 2 ou J <= 5
I == 3 ou J >= 2 e K == 9
I == 3 e nao J <= 10 e K == 6
I != 2 ou J == 9 e K > 2
J > I e K != I
I > J ou J < 5
I != J e J == K
K >= 2 ou I < J
I >= J ou J > I e K != J
A < 6 ou B >= 5
J != 10 e K >= 5
nao X == 5 ou Y < 3
A > 4 e B != 8 ou C > 2
X != Y e Y > 0 ou X > 0
J >= I e nao K < I ou I == J
23
{ Portugol }
programa
{
funcao inicio()
{
inteiro I, J, K
real X, Y, Z
cadeia Nome, Rua
logico ImovelProprio
I = 3
J = 6
K = 4
X = 5.5
Y = 8.0
Z = -4.0
Nome = "Jos da Silva"
Rua = "Rua das Flores, 100"
ImovelProprio = verdadeiro
// Expresso a ser avaliada, neste exemplo,
// item a, ou seja, Nome = Rua
escreva (Nome == Rua)
}
}
Determinar o resultado das expresses a seguir, considerando que cada
um dos itens ser colocado como parmetro da funo escreva:
a)
b)
c)
d)
e)
f)
g)
h)
Nome == Rua
X >= Y e K == J
(K + 2 * J) >= (Z - 3 * X)
((Y / 2) == X) ou ((J * 2) >= (I + K))
nao ImovelProprio
nao J > I e I + K <= 10 ou ImovelProprio != verdadeiro
(K 10) > (Z / 2) ou (K 20) < (Y * 2)
nao K < (I * 10)
24
25
{ Portugol }
programa
{
funcao inicio()
{
escreva("Ol Pessoal!")
}
}
26
27
{ Portugol }
programa
{
funcao inicio()
{
cadeia Nome
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
28
Exerccios
29
30
1.8.1. Se
O comando de seleo se ir executar um bloco de comandos
especfico se a condio testada for verdadeira ou o bloco de comandos
senao, que opcional, quando a condio for falsa. Um bloco de
comandos deve ser entendido como um conjunto de instrues
delimitadas por abrir e fechar chaves {}. Conforme podemos observar na
Figura 1.10, na elaborao do fluxograma utilizaremos o smbolo do
losango para caracterizar o uso da estrutura de seleo:
31
{ Portugol }
se (idade >= 18)
{
escreva ("Maior de idade")
}
senao
{
escreva ("Menor de idade")
}
Quando um bloco de comandos constitudo por uma nica
instruo as chaves passam a ser opcionais podendo ser omitidas. Desta
forma, o mesmo trecho de programa mostrado acima poderia ser
representado da seguinte maneira:
{ Portugol }
se (idade >= 18)
escreva ("Maior de idade")
senao
escreva ("Menor de idade")
Existem outras situaes nas quais possvel omitir a instruo
senao. Considere um problema no qual devemos exibir o valor absoluto
(sem sinal) de um determinado nmero que foi digitado pelo usurio. Se o
nmero for negativo devemos multiplic-lo por (-1), caso contrrio, no
necessrio fazer nada. Ou seja, na prtica, no h instruo para ser
colocada no bloco senao, conforme podemos observar na Figura 1.12.
32
{ Portugol }
se (num < 0)
{
num = num * (-1)
}
Aps esses conceitos iniciais vamos, neste prximo exemplo,
inserindo o conceito de estrutura de seleo dentro de um programa
completo. Vamos considerar um programa no qual o usurio ir digitar o
ano de nascimento e, em seguida, a idade ser calculada e, ao final, ser
informado se o mesmo maior ou menor de idade. Na Figura 1.13
podemos observar a representao da soluo para o clculo da idade
atravs de fluxograma:
33
{ Portugol }
programa
{
funcao inicio()
{
inteiro ano_nasc, idade
escreva ("Digite o ano de nascimento: ")
leia (ano_nasc)
idade = 2015 - ano_nasc
se (idade >= 18)
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
34
35
36
{ Portugol }
programa
{
funcao inicio()
{
inteiro a, b, c
escreva ("Digite o primeiro valor: ")
leia (a)
escreva ("Digite o segundo valor: ")
leia (b)
escreva ("Digite o terceiro valor: ")
leia (c)
se ((a > b) e (a > c))
{
escreva ("O maior : ", a)
}
senao
{
se (b > c)
{
escreva ("O maior : ", b)
}
senao
{
escreva ("O maior : ", c)
}
}
}
}
Com o intuito de reforar esses conceitos vamos desenvolver um
outro exemplo, no qual aplicaremos o comando se para resolver um outro
problema de seleo. Vamos considerar um programa que, a partir de
uma sigla digitada pelo usurio, devemos exibir o nome de um estado
brasileiro. No fluxograma, mostrado na Figura 1.15, importante observar
que faremos a soluo apenas para trs estados, porm, relativamente
simples ampliar a soluo de modo que a mesma suporte vrios estados.
37
{ Portugol }
programa
{
funcao inicio()
{
cadeia est
escreva ("Digite a sigla do estado: ")
leia (est)
se (est == "SP")
escreva ("So Paulo")
senao
se (est == "RJ")
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
38
39
{ Portugol }
programa
{
funcao inicio()
{
inteiro num
escreva ("Digite um nmero: ")
leia (num)
escolha (num)
{
caso 1:
escreva ("Um")
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
40
pare
caso 2:
escreva ("Dois")
pare
caso 3:
escreva ("Trs")
pare
caso contrario:
escreva ("No sei!")
}
}
}
de fundamental importncia salientar que toda soluo que utiliza
escolha caso pode ser realizada com se, conforme ilustrado no programa
a seguir. Por outro lado, o contrrio no verdadeiro, ou seja, muitas
representaes com se no podem ser reescritas utilizando escolha caso.
Ento importante lembrar-se sempre das condies para uso do
comando escolha caso: Este comando somente pode ser empregado
quando a verificao com base em uma mesma expresso e tambm
que a expresso que apresente somente igualdade.
{ Portugol }
programa
{
funcao inicio()
{
inteiro num
escreva ("Digite um nmero: ")
leia (num)
se (num == 1)
{
escreva ("Um")
}
senao
{
se (num == 2)
{
escreva ("Dois")
}
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
41
senao
{
se (num == 3)
{
escreva ("Trs")
}
senao
{
escreva ("No sei!")
}
}
}
}
}
Tambm importante salientar que, quando aplicvel, a
representao com escolha caso torna o cdigo mais legvel e de fcil
entendimento, conforme podemos observar nesta soluo que adotou
apenas o encadeamento de comandos se para resolver o mesmo
problema.
Exerccios
42
Situao
Voc est abaixo do peso ideal
Parabns, voc est em seu peso normal!
Voc est acima de seu peso (sobrepeso)
Obesidade grau I
Obesidade grau II
Obesidade grau III
43
44
10 G
0,01 T
Adotar, como referncia a tabela mostrada a seguir:
Prefixo
Valor (Decimal)
103
k (kilo)
(1000)
106
M (mega)
(1,000,000)
109
G (Giga)
(1,000,000,000)
1012
T (Tera)
(1,000,000,000,000)
15) Utilizando a mesma tabela do exerccio anterior, elaborar uma rotina
na qual o usurio ir digitar o valor, o respetivo prefixo e o prefixo para a
qual deseja representar o valor. Em seguida, o programa dever exibir a
representao do valor, por exemplo:
Entrada:
Digite o valor: 1.000.000
Digite o prefixo: M
Digite o prefixo que deseja visualizar: T
Sada:
Resultado: 1 T
16) A partir de cinco nmeros inteiros, digitados pelo usurio, determinar
e exibir a quantidade de nmeros que so pares.
17) Considerando trs nmeros inteiros, fornecidos pelo usurio, exibi-los
em ordem crescente.
18) Elaborar uma rotina que, a partir de quatro nmeros inteiros que
devero ser digitados pelo usurio, determine e mostre o maior nmero
par.
19) A partir de quatro nmeros inteiros, inseridos pelo usurio, exibir a
quantidade de nmeros que so mltiplos de 5, maiores ou iguais a 100 e
menores do que 200.
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
45
46
Valor do Imposto
5,0% do preo total (bruto)
7,5% do preo total (bruto)
10,0% do preo total (bruto)
Categoria
A, C
B, D, E
F, L
G, H
I, J
47
1.9.1. Enquanto
A estrutura enquanto consiste em uma estrutura de repetio com
o teste no incio, ou sejam neste tipo de estrutura a condio de repetio
verificada antes de entrar no bloco de comandos a serem repetidos.
Enquanto a condio for verdadeira o bloco ser repetido. Com o intuito
de ilustrar esse conceito, vamos considerar um programa no qual o
usurio precisa digitar cinco nmeros inteiros e, aps isso, o programa
dever mostrar a somatria dos valores fornecidos.
Utilizando fluxograma, uma das solues possveis para o problema
encontra-se ilustrada pela Figura 1.17.
48
{ Portugol }
programa
{
funcao inicio()
{
inteiro cont, soma, num
cont = 1
soma = 0
enquanto (cont <= 5)
{
escreva ("Nmero: ")
leia (num)
soma = soma + num
cont = cont + 1
}
escreva ("A soma ", soma)
}
}
Como podemos observar no exemplo e do mesmo modo que j foi
explicado anteriormente, o conjunto de instrues a serem executadas
dentro de uma estrutura de repetio devem estar delimitadas por abrir e
fechar chaves {}, exceto quando apenas uma instruo deve ser repetida,
neste caso, o uso das chaves passa a ser opcional.
49
{ Portugol }
programa
{
funcao inicio()
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
50
1.9.3. Para
O terceiro tipo de estrutura de repetio aquela que utiliza uma
varivel para controle sendo, representada em Portugol, pelo comando
para. Neste tipo de estrutura a varivel de controle define exatamente o
nmero de vezes que um determinado conjunto de comandos dever ser
executado.
Com o intuito de ilustrar o uso do comando para vamos continuar a
utilizar o mesmo exemplo, ou seja, o usurio precisa digitar cinco nmeros
inteiros e, aps isso, o programa dever mostrar a somatria dos valores
fornecidos.
Na Figura 1.19 temos a soluo representada atravs de um
fluxograma observe que, neste caso, utilizaremos um hexgono para
representar a instruo para. Observe que dentro da instruo para
devemos especificar a varivel que ir atuar como contador, em seguida
temos o seu valor incial, o valor final e o passo (incremento).
51
{ Portugol }
programa
{
funcao inicio()
{
inteiro cont, soma, num
soma = 0
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
52
Exerccios
53
Para
Frmula
Fahrenheit F = C 1,8 + 32
Fahrenheit Celsius
C = (F 32) / 1,8
54
Celsius
Kelvin
K = C + 273,15
Kelvin
Celsius
C = K 273,15
Fahrenheit Kelvin
Kelvin
K = (F + 459,67) / 1,8
55
*********
*******
*****
***
*
24) Faa uma rotina que permita calcular o valor da associao em srie
de trs resistores R1, R2 e R3, que sero digitados pelo usurio. O
programa ficar solicitando os valores de R1, R2 e R3 e exibindo o
resultado at que o usurio digite um valor para R1, R2 ou R3 igual a zero.
O valor da associao em srie de trs resistores ser obtido atravs da
frmula: R = R1 + R2 + R3.
25) Faa uma rotina que permita calcular o valor da associao em
paralelo de dois resistores R1 e R2, que sero digitados pelo usurio e
consistem em nmeros reais positivos. O programa ficar solicitando os
valores de R1 e R2 e exibindo o resultado at que o usurio digite um
valor para R1 ou R2 igual a zero. O valor da associao em paralelo de dois
resistores ser obtido atravs da frmula: R = R1 x R2 / (R1 + R2).
26) Elabore um programa que determine quantos nmeros so mltiplos
de 2 e de 3 no intervalo entre 1 e 100.
27) Desenvolva uma rotina que apresente os valores de converso
degraus Celsius em Fahrenheit, de 10 em 10 graus, iniciando a contagem
em 0 Celsius e finalizando em 100 Celsius. A rotina dever exibir tanto o
valor em Celsius quanto em Fahrenheit e a seguinte frmula dever ser
adotada: F = C 1,8 + 32.
28) Desenvolver uma rotina que a partir de 10 letras digitadas pelo
usurio, determine e mostre a quantidade de vogais e tambm a
quantidade de consoantes.
29) Elaborar um programa que apresente a resoluo do seguinte
problema: Determinada loja precisa digitar o nome e o preo de 10
produtos. Aps a digitao dos 10 produtos o programa dever, antes de
encerrar, exibir o nome do produto mais caro.
30) Elaborar um programa que imprima a sequncia a seguir. Ou seja, para
um nmero inteiro n, digitado pelo usurio, exibir at a n-sima linha,
por exemplo:
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
56
1
2 2
3 3 3
4 4 4 4
...
n n n n n n ... n
31) Desenvolver um programa que sorteie um nmero aleatrio entre 0 e
500 e pergunte ao usurio qual o "nmero mgico". O programa dever
indicar se a tentativa efetuada pelo usurio maior ou menor que o
nmero mgico e contar o nmero de tentativas. Quando o usurio
acertar o nmero o programa dever mostrar uma mensagem,
classificando o usurio como:
De 1 a 3 tentativas: muito sortudo;
De 4 a 6 tentativas: sortudo;
De 7 a 10 tentativas: normal;
10 tentativas: tente novamente.
32) Desenvolver uma rotina que a partir de um caractere e uma
determinada quantidade de linhas e colunas, todos fornecidos pelo
usurio, realize a repetio do respectivo carectere na quantidade de
linhas e colunas que foram digitadas. Por exemplo:
Entrada:
Linhas? 3
Colunas? 5
Caractere? X
Sada:
XXXXX
XXXXX
XXXXX
33) Elaborar um programa que a partir de uma determinada quantidade
de linhas e colunas digitadas pelo usurio exiba um retngulo, por
exemplo:
Entrada:
Linhas? 4
Colunas? 6
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
57
Sada:
+----+
|
|
|
|
+----+
58
{ Portugol }
inteiro vetor[5]
Enquanto que a atribuio dos valores devem sempre conter o
ndice da posio que ir receber o valor, ou seja:
{ Portugol }
vetor[0]
vetor[1]
vetor[2]
vetor[3]
=
=
=
=
8
4
5
7
59
vetor[4] = 1
As estruturas de repetio, em especial, o para so ideais para
percorrer os vetores, por exemplo, para exibir os valores armazenados no
vetor podemos utilizar o seguinte pseudocdigo.
{ Portugol }
para (inteiro i = 0; i < 5; i = i + 1)
{
escreva (vetor[i])
}
Desta forma, no programa a seguir podemos unir todos os conceitos
sobre vetores que explicamos at o presente momento. Neste caso, o
vetor declarado, em seguida, os valores so atribudos a cada um dos
elementos e, ao final, utilizamos a funo escreva, dentro da estrutura de
repetio para, que ir exibir os valores armazenados.
{ Portugol }
programa
{
funcao inicio()
{
inteiro vetor[5]
vetor[0]
vetor[1]
vetor[2]
vetor[3]
vetor[4]
=
=
=
=
=
8
4
5
7
1
60
{ Portugol }
programa
{
funcao inicio()
{
inteiro vetor[5] = {8, 4, 5, 7, 1}
para (inteiro i = 0; i < 5; i = i + 1)
{
escreva (vetor[i], ", ")
}
}
}
No prximo exemplo a ser desenvolvido, vamos considerar uma
situao na qual precisamos determinar e, em seguida, exibir o valor da
mdia de cinco nmeros reais digitados pelo usurio. Na Figura 1.23
podemos observar um fluxograma contendo uma das resolues possveis
do problema.
61
{ Portugol }
programa
{
funcao inicio()
{
real v[5], soma, media
soma = 0.0
para (inteiro i = 0; i < 5; i = i + 1)
{
escreva ("Nmero: ")
leia (v[i])
soma = soma + v[i]
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
62
}
media = soma / 5
escreva ("A mdia ", media)
}
}
Estruturas que necessitam de mais que um ndice para identificar os
itens armazenados so conhecidas por matrizes. Ento, uma matriz possui
n dimenses, onde n consiste em um valor maior do que um. Como
exemplo podemos citar uma matriz com dimenso 2, ou seja, uma matriz
que utiliza dois ndices para identificar um elemento. Desta forma, no
exemplo a seguir, as variveis i e j correspondem aos ndices da matriz
nota sendo necessria a utilizao de dois laos para acessar todos os
elementos da matriz.
{ Portugol }
programa
{
funcao inicio()
{
real nota[3][2]
para (inteiro i = 0; i < 3; i++)
{
para (inteiro j = 0; j < 2; j++)
{
escreva ("Elemento ", i, ", ", j, ": ")
leia (nota[i][j])
}
}
}
}
Vamos ilustrar esse conceito a partir de um problema no qual
necessrio armazenar um conjunto de notas de alunos de uma
determinada turma com 10 alunos, na qual, cada aluno possui duas notas.
Em seguida, o programa dever calcular e exibir a mdia final de cada um
dos alunos indicando, caso a mdia seja menor que 6,0 (seis) que o aluno
est reprovado, caso contrrio, deveremos mostrar como aprovado.
63
{ Portugol }
programa
{
funcao inicio()
{
real nota[10][2], media
para (inteiro i = 0; i < 10; i = i + 1)
{
para (inteiro j = 0; j < 2; j = j + 1)
{
escreva ("Aluno ", (i + 1), " - Nota ", (j +
1), ": ")
leia (nota[i][j])
}
}
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
64
{ Portugol }
para (inteiro i = 0; i < 10; i = i + 1)
{
para (inteiro j = 0; j < 2; j = j + 1)
{
escreva ("Aluno ", (i+1), " - Nota ", (j+1), ": ")
leia (nota[i][j])
}
}
Depois, com o intuito de determinar a mdia de cada aluno, iremos
utilizar um lao que ir acessar os dez alunos, realizar o calculo e verificar
a sua situao: aprovado ou reprovado, conforme podemos notar no
trecho de programa mostrado a seguir.
{ Portugol }
para (inteiro i = 0; i < 10; i = i + 1)
{
media = (nota[i][0] + nota[i][1]) / 2
se (media < 6)
65
Exerccios
66
X
O
O
67
1.11. Funes
Na medida em que os programas vo se tornando mais complexos,
torna-se necessrio estruturar o cdigo em partes menores com
funcionalidades especificas. Desta forma, as funes podem ser definidas
como sub-rotinas que executam uma tarefa particular dentro do
programa. Outra vantagem da utilizao das funes consiste em permitir
a reutilizao de parte do programa, evitando assim que um mesmo
trecho do cdigo tenha que ser escrito vrias vezes.
Vamos considerar uma aplicao que implemente uma calculadora
simples, na qual o usurio ir escolher qual das quatro operaes
aritmticas bsicas ser realizada. Em seguida, o programa realizar a
leitura de dois nmeros reais e exibir o resultado da operao escolhida.
68
69
{ Portugol }
funcao vazio somar()
{
real valor1, valor2, resultado
escreva ("Valor 1:
leia (valor1)
escreva ("Valor 2:
leia (valor2)
resultado = valor1
escreva ("Soma: ",
")
")
+ valor2
resultado)
}
Em seguida, devemos realizar a declarao das outras funes que
sero utilizadas no exemplo, ou seja, subtrair, multiplicar e dividir. Neste
caso, vamos apenas especificar a sua estrutura sem nos preocuparmos
com a implementao em si, a qual poder ser realizada posteriormente.
{ Portugol }
funcao vazio subtrair()
{
// Realizar a subtrao de dois nmeros reais
}
funcao vazio multiplicar()
{
// Realizar a multiplicao de dois nmeros reais
}
funcao vazio dividir()
{
// Realizar a diviso de dois nmeros reais
}
70
71
{ Portugol }
programa
{
funcao inicio()
{
inteiro opcao
faca
{
escreva ("\nDigite 1. Somar, 2.
Multiplicar, 4. Dividir ou 0. Sair ? ")
leia (opcao)
Subtrair,
3.
se (opcao == 1)
somar()
senao
se (opcao == 2)
subtrair()
senao
se (opcao == 3)
multiplicar()
senao
se (opcao == 4)
dividir()
} enquanto (opcao != 0)
}
}
72
73
{ Portugol }
programa
{
funcao inteiro fatorial (inteiro n)
{
inteiro r = n
para (inteiro i = 1; i <= (n 1); i = i + 1)
{
r = r * i
}
retorne (r)
}
funcao inicio()
{
inteiro valor, resultado
escreva ("Digite um nmero: ")
leia (valor)
resultado = fatorial(valor)
escreva ("Fatorial: ", resultado)
}
}
74
{ Portugol }
programa
{
inteiro opcao
real valor1, valor2, resultado
funcao vazio somar()
{
escreva ("Valor 1:
leia (valor1)
escreva ("Valor 2:
leia (valor2)
resultado = valor1
escreva ("Soma: ",
}
")
")
+ valor2
resultado)
Subtrair,
3.
75
senao
se (opcao == 2)
subtrair()
senao
se (opcao == 3)
multiplicar()
senao
se (opcao == 4)
dividir()
} enquanto (opcao != 0)
}
}
Por outro lado, as variveis locais so aquelas declaradas dentro de
um procedimento ou funo e so acessveis exclusivamente dentro do
respectivo procedimento ou funo. No exemplo a seguir, as variveis
encontram-se declaradas na funo somar, deste modo, apenas existiram
durante a execuo da funo e tambm no so acessveis pelo
programa principal ou por qualquer outra funo do programa.
{ Portugol }
funcao vazio somar()
{
real valor1, valor2, resultado
escreva ("Valor 1:
leia (valor1)
escreva ("Valor 2:
leia (valor2)
resultado = valor1
escreva ("Soma: ",
")
")
+ valor2
resultado)
Exerccios
76
Para
Frmula
Fahrenheit F = C 1,8 + 32
Fahrenheit Celsius
C = (F 32) / 1,8
Celsius
Kelvin
K = C + 273,15
Kelvin
Celsius
C = K 273,15
Fahrenheit Kelvin
Kelvin
K = (F + 459,67) / 1,8
77
Descrio
11
Televisor
12
Rdio
14
Notebook
15
Bluray Player
Preo
1.900,00
90,00
2.380,00
500,00
{ Portugol }
programa
{
const inteiro MAX = 10
estrutura produto
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
78
{
inteiro codigo
cadeia descricao
real preco
}
estrutura produto prod[MAX]
funcao inicio()
{
}
}
importante observar que um item do vetor representa o conjunto
de caractersticas de um nico produto. Tambm sabemos que os dados se
referem a um mesmo produto, pois o ndice o mesmo. Neste mesmo
exemplo, tambm declararmos uma constante que ir determinar o
tamanho mximo do vetor.
Ou seja, nesta estrutura que definimos temos o armazenamento de
at 10 produtos contendo, cada um deles, o cdigo, a descrio e o preo,
por exemplo, o primeiro item da tabela seria armazenado do seguinte
modo:
{ Portugol }
prod[0].codigo = 10
prod[0].descricao = "Televisor"
prod[0].preco = 1900.00
Observe que agora sempre que precisamos acessar a estrutura de
vetores precisamos referenciar o ndice do produto. Desta maneira, a
entrada de dados, neste tipo de exemplo, pode ser realizada atravs de
um lao.
{ Portugol }
funcao vazio entrada()
{
para (inteiro i = 0;
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
i < MAX; i = i + 1)
79
{ Portugol }
funcao vazio saida()
{
para (inteiro i = 0; i < MAX; i = i + 1)
{
escreva ("Cdigo: ", prod[i].codigo)
escreva ("Descrio: ", prod[i].descricao)
escreva ("Preo: ", prod[i].preco)
}
}
Exerccios
80
Nome
DDD
Telefone
Joo
11
3453-3455
Maria
19
3223-2545
Ana
11
45222300
Jos
15
45343422
Cristina
11
4523-2323
81
82
{ Portugol }
programa
{
funcao inicio()
{
escreva ("Ol Pessoal!")
}
}
Enquanto, atravs de Scratch utilizaramos os seguintes blocos de
montagem para implementar a soluo para o problema (Figura 1.32).
83
org 100h
mov dx,msg
mov ah,9
int 21h
mov ah,4Ch
int 21h
msg db 'Ola Pessoal!',0Dh,0Ah,'$'
Nas dcadas seguintes, com a evoluo e barateamento dos
componentes eletrnicos dos computadores, comeam a surgir linguagens
que passam a apresentar instrues independentes do hardware. Estas
linguagens chamadas de linguagens programao de alto nvel
apresentam, como instrues, palavras utilizadas em lnguas faladas,
normalmente o ingls. A criao de programas de computador torna-se
mais acessvel e no mais necessrio o conhecimento de eletrnica. As
linguagens de programao como Pascal, Cobol, C e Java dentre muitas
outras podem ser citadas como exemplos de linguagens de programao
de alto nvel. A seguir temos o programa desenvolvido em Cobol, observe
uma peculiaridade desta linguagem, onde os comandos devem ser
especificados a partir da oitava coluna, ou seja, necessrio digitar sete
espaos em branco antes de comearmos a escrever um comando.
IDENTIFICATION DIVISION.
PROGRAM-ID. Ola.
PROCEDURE DIVISION.
DISPLAY "Ol Pessoal!".
STOP RUN.
No exemplo a seguir temos o mesmo programa que foi apresentado
anteriormente, porm agora desenvolvido na Linguagem de Programao
C.
#include <stdio.h>
int main ()
{
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
84
Java
public class Exemplo
{
public static void main (String args[])
{
System.out.println (Ol Pessoal!);
}
}
A linguagem de programao Java apresenta uma abordagem
independente de plataforma (Figura 1.34), na qual aps a compilao do
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
85
namespace Exemplo
{
class Program
Lgica de Programao e Algoritmos
Prof. Cludio Lus V. Oliveira
86
{
static void Main(string[] args)
{
Console.WriteLine("Ol Pessoal!");
Console.ReadKey();
}
}
}
Outra categoria de linguagens de programao so as interpretadas.
Neste caso, o cdigo-fonte enviado diretamente a um programa
chamado interpretador que, em tempo de execuo, converte as
instrues em linguagem de mquina e envia ao sistema operacional. A
linguagem de programao Python, tambm abordada nesta obra, um
exemplo de linguagem interpretada e a seguir podemos ver um programa
bem simples que exibe um texto.
Referncias
Oliveira, C.; Lhmann, A. Aprenda Lgica de Programao e Algoritmos
com implementaes em Portugol, Scratch, C, Java, C# e Python. Rio de
Janeiro: Editora Cincia Moderna, 2016*.
Ascencio, A.; Campos, E. Fundamentos da Programao
Computadores: algoritmos, Pascal e C/C++ e Java. Longman, 2007.
de
87