Você está na página 1de 28

ndice

Introduo lgica de programao1 ................................................................................1


1.1.Noes de lgica...................................................................................................................... 1
1.2.Algoritmos.............................................................................................................................. 2
1.3.Linhas de Cdigo de um Algoritmo ou Programa...............................................................5
1.4.Eecu!o do Programa..........................................................................................................5
1.5.Coment"rios............................................................................................................................ #
1.#.Constantes............................................................................................................................... #
1.$.%ari"&eis................................................................................................................................. #
1.'.Estrutura do algoritmo..........................................................................................................(
1.(.)*eradores aritm+ticos........................................................................................................1,
1.1,.)*eradores relacionais......................................................................................................1,
1.11.)*eradores lgicos.............................................................................................................1,
1.12.-egras de *reced.ncia........................................................................................................1,
1.13.Atri/ui!o........................................................................................................................... 11
1.14.Comandos de entrada e sa0da............................................................................................11
1.15.Estruturas de controle.......................................................................................................13
1.1#.Estrutura se12encial..........................................................................................................13
1.1$.Estruturas de sele!o.........................................................................................................13
1.1'.Estruturas de re*eti!o......................................................................................................1'
1.1(.%etores................................................................................................................................ 22
1.2,.3atri4es.............................................................................................................................. 24
Introduo lgica de programao
1

1.1. Noes de lgica
A lgica a ao do pensamento humano para a soluo de problemas do dia-a-dia mas, pode
tambm, ser a origem de outros problemas. a caracterstica do pensamento correto. A lgica busca a
correo do raciocnio, e determinante nas tomadas de decises. Por isso a lgica ensina a colocar
ordem no pensamento. A lgica est presente nas aes da nossa vida: quando falamos ou escrevemos
algo, por exemplo, devemos ordenar as palavras de forma lgica, de modo a expressar corretamente o
que pensamos, o que sentimos e o que queremos.
Exemplo:
O carro est com o pneu vazio.
O macaco e a chave de rodas esto no porta-malas.
Preciso primeiro pegar o macaco e a chave de rodas, para depois tomar outro passo para trocar o
pneu do carro.
1.2. Algoritmos
Algoritmo uma seqncia de aes, organizadas de forma lgica, que visam alcanar um objetivo
bem definido.
Apesar do nome parecer estranho, algoritmos so comuns em nosso cotidiano, como por exemplo
uma receita de bolo. Nela est descrita uma srie de ingredientes necessrios, uma seqncia de
diversos passos (aes) a serem executados para que se consiga fazer determinado tipo de bolo
(objetivo bem definido).
Exemplo: Troca de uma lmpada.
pegue uma escada;
posicione-a embaixo da lmpada;
busque uma lmpada nova
suba na escada;
retire a lmpada velha;
coloque a lmpada nova;
Esse algoritmo tem um objetivo, trocar uma lmpada, e faz isso bem. Mas troca a lmpada mesmo
que ela no esteja queimada.
Podemos melhorar esse algoritmo para que a lmpada no seja trocada caso esteja funcionando,
incluindo um teste.
ligue o interruptor;
se o interruptor no acender, ento:
pegue uma escada;
posicione-a embaixo da lmpada;
busque uma lmpada nova;
suba na escada;
retire a lmpada velha;
coloque a lmpada nova;
Ainda pode ocorrer de a nova lmpada tambm no funcionar, podemos alterar o algoritmo para
que as lmpadas continuem sendo trocadas at que alguma funcione.
ligue o interruptor;
se o interruptor no acender, ento:
pegue uma escada;
posicione-a embaixo da lmpada;
busque uma lmpada nova;
suba na escada;
retire a lmpada velha;
coloque a lmpada nova;
enquanto a lmpada no acender, faa:
retire a lmpada;
coloque outra lmpada;
Exerccios propostos 1
1) Um homem quer atravessar um rio com um barco que pode carregar ele mesmo e apenas mais
uma de suas trs cargas: um lobo, um carneiro e um mao de alfafa. O que o homem deve fazer
para atravessar o rio sem perder nenhuma de suas cargas?
2) Suponha que voc possua um rob e queira faz-lo trocar uma lmpada e depois conferir se a
mesma acende, sendo que o mesmo foi programado para obedecer os seguintes comandos:
pegue <objeto>
largue <objeto>
pressione <objeto>
gire garras 180 graus no sentido horrio (parafusar)
gire garras 180 graus no sentido anti-horrio
mova <objeto> para/at < lugar>
desloque-se para <lugar> O rob ainda capaz de :
perceber quando um comando no mais possvel
(Utilize escada, lmpada, interruptor, abaixo da lmpada, parte superior da escada, lixeira, etc...)
3) Elabore um algoritmo (descrever os passos) que permita mover 3 discos de uma torre de Hani, que
consiste em 3 hastes (a-b-c), uma das quais serve de suporte para os trs discos de tamanhos
diferentes (1-2-3), os menores sobre os maiores. Pode-se mover um disco de cada vez para
qualquer haste, sendo que nunca deve ser colocado um disco maior sobre um menor. O objetivo
transferir os trs discos da haste "a para a haste "c. Mova <disco n> da haste <n1> para haste
<n2>
1.2.1. Formas de Representao de Algoritmos
Existem diversas formas de representao de algoritmos. Algumas formas de representao de
algoritmos tratam os problemas apenas em nvel lgico, abstraindo-se de detalhes de implementao
muitas vezes relacionados com alguma linguagem de programao especfica. Por outro lado, existem
formas de representao de algoritmos que possuem uma maior riqueza de detalhes e muitas vezes
acabam por obscurecer a idia principal, o algoritmo, dificultando seu entendimento.
Dentre as formas de representao de algoritmo mais conhecidas, destacam-se:
A descrio narrativa;
O fluxograma convencional;
O pseudocdigo, tambm conhecido como linguagem estruturada ou Portugol.
1.2.2. Descrio Narrativa
Nesta forma de representao, os algoritmos so expressos em linguagem nativa, como o exemplo
do algoritmo da troca de lmpada, discutido acima.
1.2.3. Fluxograma
Fluxograma uma ferramenta desenvolvida e usada pelos profissionais de anlise de sistemas,
bem como, por alguns profissionais de Organizao, Sistemas e Mtodos. Tem como finalidade
descrever o fluxo, seja manual ou mecnico, especificando os suportes usados para os dados e
informaes. Usa smbolos convencionais, permitindo poucas variaes. Representado por alguns
desenhos geomtricos bsicos, os quais indicaro os smbolos de entrada de dados, do processamento
de dados e da sada de dados, acompanhados dos procedimentos requeridos pelo analista de sistemas
e a serem realizados pelo programador por meio do desenvolvimento do raciocnio lgico, o qual dever
solucionar o problema do programa a ser processado pelo computador. A tabela abaixo mostra alguns
smbolos e seu significado.
a
2
3
1
b c
Smolo Signi!icado
Terminal ndica incio ou fim do fluxo
Operao de entrada e sada. Genrica, sem
indicar dispositivo.
Procedimentos. Comandos simples.
Operao de sada. Vdeo, impressora, etc.
Deciso. ndica que uma ou mais comparaes
sero feitas com a possibilidade de desvio para
outras partes do programa.
Conectores.
Sentido do fluxo.
Exemplo:
ncio

Ler notas
N1 e N2
Med = (N1+N2)/2
No Sim
Se Med >= 7.0
Escreva reprovado Escreva aprovado
Fim
Exerccios propostos 2
1) Elabore um fluxograma para ler duas notas, calcular a mdia semestral e informar ao aluno se ele
est reprovado, em exame ou aprovado. Considerar a mdia para aprovao direta igual ou superior
a 7,0. Para ficar de recuperao (exame), o aluno ter que ter mdia semestral mnima no inferior
a 1,67.
2) Elabore um novo fluxograma a partir do desenvolvido para a questo anterior, informando se o
aluno est aprovado ou no aps o exame. O aluno dever ter mdia semestral no inferior a 5,0
obedecendo ao seguinte clculo: mdia semestral aps exame = (media semestral antes do exame
x 6 + nota do exame x 4)/10. Vide critrios de avaliao da UDESC no semestre 2003.2.
1.2.". Pseudocdigo
A partir deste ponto, iniciaremos o estudo de algoritmos usando pseudocdigo (portugol). Um
modelo de escrita para facilitar o desenvolvimento de algoritmos. O pseudocdigo usado aqui ter uma
organizao (sintaxe) praticamente idntica da linguagem C, com as palavras chave traduzidas para o
portugus e com algumas simplificaes. Este aspecto original, ou seja, no foi baseado em nenhuma
referncia. Preferimos que o algoritmo seja ensinado com a sintaxe semelhante a linguagem C pela
facilidade que se obter com este aspecto quando o C for estudado.
O objetivo de apresentar o pseudocdigo, tornar o aluno familiarizado com a lgica de
programao, atravs de algoritmos simples, antes de efetivamente comear a programar com a
linguagem C. extremamente importante compreender os assuntos aqui abordados pois sero
necessrios quando estivermos programando em C. A lgica de programao # !undamental para
aprender a programar e muito importante para $%rias disciplinas de um curso de ci&ncia da
computao' portanto' apro$eite e estude muito.
1.3. (in)as de *digo de um Algoritmo ou +rograma
Linhas de cdigo nada mais so do que a escrita do programa linha a linha, ou seja, a sintaxe do
programa. Todas as linhas escritas de um programa definem o cdigo de comandos do programa, e,
junto ao cdigo pode-se escrever comentrios sobre ele.
1.". ,xecuo do +rograma
Quando escrevemos um programa, para que ele mostre os efeitos (resultados) do que foi escrito e
solicitado atravs das linhas de comando, necessrio que o programa seja executado. Para tanto
basta que acionemos um comando para essa execuo comear. Em um algoritmo escrito em portugol
ou similar, s possvel a execuo do mesmo a nvel do raciocnio lgico de ns mesmos com o
crebro. Um algoritmo ou programa s executvel por uma mquina (computador) se nele tiver um
outro programa (compilador) que transforme a linguagem usada no cdigo do programa para a
linguagem que o computador entenda. Por isso importante que faamos um bom exerccio mental
colocando o crebro para executar algoritmos. Fazendo assim, aprenderemos a lgica de programao
e consequentemente aprenderemos a programar.
1.-. *oment%rios
Comentrios so anotaes escritas nas proximidades das linhas de cdigo de um algoritmo ou
programa, e so usados para explicar melhor alguma parte do cdigo para evitar confuses de
entendimento na hora de sua anlise. Para podermos identificar um comentrio no cdigo do programa
ou algoritmo usaremos o smbolo /* antes do comentrio e o */ aps terminar o comentrio. Nada do
que for especificado como comentrio valer como cdigo de programa, portanto no interferir na
execuo.
1... *onstantes
Entendemos que uma informao constante quando no sofre nenhuma variao no decorrer do
tempo na execuo do programa. Exemplo: Pi=3,141516. De fato, se o valor da constante Pi for
utilizada em um programa, esta no deve ser modificada, portanto deve ser tratada como constante.
1./. 0ari%$eis
Tem-se como definio de varivel toda informao que sujeita a variaes durante a execuo do
programa ou algoritmo. No programa so requisitados espaos de memria que so alocados para
armazenar o valor inicial da varivel e os demais valores que ela assumir at o fim da execuo do
programa. magine que a memria de um computador um grande armrio com diversas gavetas, onde
cada gaveta pode conter somente um valor. Deve-se concordar que necessrio identificar cada gaveta
para sua utilizao posterior, atravs de um nome.
1./.1. Nomes de variveis
O nome de uma varivel faz referncia ao endereo de memria onde essa varivel se encontra.
Existem algumas regras para a utilizao das variveis:
Nome de varivel pode ter 1 ou mais caracteres.
O primeiro caractere de uma varivel deve ser uma letra ou sublinhado ( _ ).
Nenhuma varivel pode ter espao em branco em seu nome.
Nenhum nome de varivel pode ser uma palavra reservada a uma instruo da linguagem
usada.
Podero ser utilizados somente letras, nmeros e sublinhado;
Procure sempre utilizar variveis que tenham sentido Mnemnico.
1./.2. 1ipos de 2ados 2e!inidos +ara as 0ari%$eis
Para definir uma varivel necessrio dar um nome para ela e definir o tipo de
informao que ela ir guardar. Esse tipo pode ser um valor numrico inteiro, um valor
real ou um caracter ou conjunto de caracter (string).
Inteiro3 toda e qualquer informao numrica que pertena ao conjunto dos nmeros inteiros.
Exemplos: a) 100 b) 9 c) 318 d) 5900

4eal3 toda e qualquer informao numrica que pertena ao conjunto dos nmeros reais.
Exemplos: a) 100.99 b) 0.001 c) 1.5 d) 8.5056
*aractere3 So caracterizadas com as seqncias contendo letras, nmeros e smbolos
especiais, ou seja, qualquer smbolo existente um caracter. Uma seqncia de caracteres
deve ser indicada entre aspas dupla ("aqui 24"), tambm denominada String. Um caracter
deve ser colocado entre aspas simples ('A'). Exemplos: a) "oi mundo! b) "no pise na
grama c) '1' d) 'a' e) ' '
1./.3. 2eclarao de 0ari%$eis
m programa, em muitas ve!es, precisa utili!ar variveis e constantes. ma constante
ser definida no ca"eal#o do programa e, normalmente, no mudar seu valor durante
o processamento$e%ecuo do programa. &s variveis podem ter o seu valor alterado
durante a e%ecuo do programa. &s constantes, para o caso dos algoritmos que vamos
construir sero definidas com letras mai'sculas. &s variveis tero que ser declaradas
logo no in(cio de cada programa.
&s variveis devem ser declaradas antes de serem usadas e no local adequado para seu
funcionamento. ma declarao especifica um tipo, e pode ser seguida por uma ou mais
variveis daquele tipo, separadas por virgulas. ) fim da declarao indicada por ponto
e v(rgula.
Sintaxe:
tipo lista_de_nomes;
E%emplos*
inteiro dia, m+s,
caracter se%o, escol#a,
caracter nome-./0, dia1semana-2/0,
real nota2, nota3, media,
&o declarar variveis do tipo caracter com mais de um caracter, ou outro tipo com o
o"jetivo de guardar mais de um valor, deve4se definir o seu taman#o entre colc#etes,
logo ap5s o nome da varivel, como no e%emplo acima. &"ai%o mostra4se um pequeno
programa e%emplo.
MAX = 80
NOME = Maria
!rograma principal
In"cio
Inteiro idade# ano# me$# dia%
&eal media# notoa1# nota'%
(aracter $e)o%
(aracter nome*80+%
media = ,nota1 - nota'./'%
0im
6o pequeno programa acima, nota4se que MAX e NOME so constantes. &s variveis
declaradas so* idade, ano, me$ e dia como inteiro, media, nota1, nota' como real,
$e)o como caracter de uma letra e nome como caracter de oitenta (./) letras. )"servem
a posio em que cada uma escrita no programa. &s constantes so definidas antes do
in(cio do programa principal. &s variveis so declaradas logo ap5s o in(cio do
programa principal.
Exerccios propostos
1) Determine qual o tipo primitivo de informao presente nas sentenas abaixo:
a) A placa "Pare! tinha dois furos de bala.
b) Josefina subiu 5 degraus para pegar uma ma boa.
c) Alberta levou 3 horas e meia para chegar ao hospital onde concebeu uma garota.
d) Felisberto recebeu sua 18 medalha por ter alcanado a marca de 57,3 segundos nos 100
metros rasos.
e) melhor seguir pela "Rua 'A' .
2a) Assinale os identificadores de tipos vlidos:
a) 'X'
b) U2
c) Ah!
d) "aluno
e) 55
f) km/l
g) UYT
h) Asdrubal
i) AB*C
j) 2.43
k) P{O}
l) B25
2b) Assinale os identificadores de variveis vlidas:
m) 'X'
n) U2
o) Ah!
p) "aluno
q) 55
r) km/l
s) UYT
t) Asdrubal
u) AB*C
v) 2.43
w) P{O}
x) B25
3) Suponha que as variveis NB, NA, NMat, SX sejam utilizadas para armazenar, respectivamente, a
nota do aluno, o nome do aluno, um nmero inteiro para a matrcula e o sexo com uma letra,
declare-as corretamente.
4) Encontre os erros ou inadequao em relao a mnemnicos nas seguintes declaraes de
variveis:
a) inteiro endereo, nFilhos; b) caractere ida de, 1x; c) real cruzeiros, 9xpto, c, peso, out;
5) Se uma varivel armazenar nomes com o mximo de 90 letras, declare uma varivel para guardar
um nome qualquer.
6) Defina uma constante e declare uma varivel para receber o valor da diviso da constante P
(3.141516) por 10.
7) Explique os termos: a) Algoritmos b) Cdigo c) Programa d) Varivel e) Constante
f) Comentrios g) Memria h) Execuo i) Compilao j) Tipos
1.5. ,strutura do algoritmo
Os algoritmos sero estruturados da seguinte maneira:
definio de constantes
/*Definio das funes para tarefas especficas*/
Nome_funo_1(lista de declaraes)
{
declaraes de variveis;
comandos;
.
.
.
retorno(valor);
}
.
.
.
Nome_funo_n(lista de declaraes)
{
declaraes de variveis;
comandos;
.
.
.
retorno(valor);
}
Programa rincial( )
{
declarao de variveis;
comandos! inclusive as c"amadas ara funes! etc;
}
Onde o abrir chaves e o fechar chaves delimitam respectivamente onde o algoritmo comea e onde
este termina. Nas declaraes sero definidos os nomes e os tipos das variveis usadas, no algoritmo.
) corpo do programa conter todas as instru7es que devero ser e%ecutadas. ) n'mero de
m5dulos (fun7es) do programa depender do programador. 8 recomendvel para a
porta"ilidade, clare!a de c5digo e manuteno do algoritmo que os programas sejam feitos em
mdulos e com endenta!o.
1.6. 7peradores aritm#ticos
Os operadores so um conjunto de smbolos que indicam uma determinada operao a ser feita
pelo programa.
7perador Signi!icado
+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Resto de diviso inteira
1.18. 7peradores relacionais
Utilizamos os operadores relacionais para realizar comparaes entre dois valores de mesmo
tipo. Tais valores so representados por constantes, variveis ou expresses aritmticas. Os
operadores relacionais so:
7perador Signi!icado
= = gual a
!=, <>, = Diferente de
> Maior que
>=, < maior ou igual a
< Menor que
<=, > menor ou igual
O resultado obtido sempre um valor lgico.
Exemplo:
2 * 4 = = 24 / 3 (verdadeiro)
8 = = 8 (verdadeiro)
1.11. 7peradores lgicos
Utilizaremos trs operadores bsicos para a formao de expresses lgicas.
Os operadores lgicos so:
7perador Signi!icado
.E., && Operador lgico e
.OU., || Operador lgico ou
! Negao
1.12. 4egras de preced&ncia
Algumas vezes a ordem em que so realizadas as operaes podem alterar o resultado de uma
expresso, essa ordem definida pelas regras de precedncia. A tabela a baixo lista em ordem
decrescente a precedncia dos operadores. Essa ordem pode ser mudada com o uso dos parnteses,
sendo executadas primeiro as operaes dentro dos parnteses mais internos.
Operador Signi!icado
! - Negao e negativo
* / % Multiplicao, diviso e resto da diviso inteira
+ - Adio e subtrao
< > < > Maior que, maior ou igual a, menor que e menor ou igual a
= = = gual e diferente
.E. Operador lgico e
.OU. Operador lgico ou
= Atribuio
Exerccio proposto
Determine os resultados obtidos na avaliao das expresses lgicas seguintes, sabendo que A, B, C, D
e E contm respectivamente 2, 7, 3.5, "noite e "frio:
a) B = = A * C
b) "dia = = D .OU. "frio = "clima
c) B / A < C .OU. (A > C)
d) 3 / 7 * 2 = = 14 / A .OU. (B 3 > C + 0,5)
e) (B + (-2)) = = (((2 * C) * 2) / 10)
1.13. Atriuio
Para atribuir um valor a uma varivel, o tipo do valor fornecido deve ser compatvel com o tipo da
varivel. sso feito da seguinte forma: varivel = expresso;
Exemplo:
inteiro x; /* declara a varivel */
x = 8 + 13; /* x agora guarda 21, o resultado de 8 + 13 */
OBS.: De acordo com a ordem de precedncia dos operadores, a atribuio ser feita por ltimo.
Exerccios propostos
1) Encontre os erros nos seguintes comandos de atribuio:
real B, C;
inteiro D;
D = B;
C + 1 = B + C;
B = 10 + 2 / 9 (15 / (-4 / 2)) > (5 * (-1));
C .E. B = 3.5;
1.1". *omandos de entrada e sada
Na criao de algoritmos precisamos de comandos para entrar com as informaes para o
algoritmo e esperamos que o algoritmo nos retorne uma informao como sada.
1.1".1. Entrada de dados
O comando de entrada, atravs do qual faremos o algoritmo esperar que lhe seja passada alguma
informao ser o leia.
Sintaxe:
leia(parmetro_! parmetro_"! ###! parmetro_n$;
Os parmetros sero variveis que recebero os valores digitados pelo usurio.
1.1".2. Sada de dados
Um algoritmo no teria serventia alguma se no pudesse nos devolver algum resultado. Faremos
os algoritmos retornarem seus resultados atravs do comando escreva.
Sintaxe:
escreva(parmetro_! parmetro_"! ###! parmetro_n$;
Os parmetros podem ser variveis, constantes ou expresses que sero impressas na tela, na
ordem em que aparecem na funo.
Exemplo:
/* programa media */
Programa Principal ( )
{
real valor1, valor2, media;
escreva("entre com os dois valores: );
/* escreve o texto entre aspas na tela */
leia(valor1, valor2);
/* atribui os valores digitados pelo usurio a valor1 e valor 2 */
media = (valor1 + valor2) / 2;
escreva("media: , media);
/* escreve na tela o texto entre aspas seguido do valor contido em media */
}
Exerccios propostos
1) Utilizando o seguinte trecho de algoritmo:
...
inteiro x, y;
real z;
escreva("x: );
leia(x);
escreva(x, " ao cubo = , x*x*x);
escreva("y: );
leia(y);
escreva(x + y);
z = x / y;
escreva(z);
z = z + 1;
x = (y + z) % 2;
escreva(x);
...
Explique o que est acontecendo em cada linha e qual o resultado de cada ao executada.
2) Cite e discorra sobre trs exemplos do seu dia-a-dia nos quais voc encontra explicitados entrada,
sada e processamento.
3) Faa uma analogia de entrada, processamento e sada de dados com o que acontece quando voc
l e sintetiza um livro e quando voc dialoga com outra pessoa.
4) Calcular e exibir a rea de um quadrado, a partir do valor de sua aresta que ser digitado.
5) Calcular e exibir a rea de um quadrado a partir do valor de sua diagonal que ser digitado.
6) A partir dos valores da base e altura de um tringulo, calcular e exibir sua rea.
7) Calcular e exibir a mdia aritmtica de quatro valores quaisquer que sero digitados.
8) Calcular e exibir a tenso de um determinado circuito eletrnico a partir dos valores da resistncia e
corrente eltrica que sero digitados. Utilize a lei de Ohm.
9) Entrar via teclado com o valor de uma temperatura em graus Celsius, calcular e exibir sua
temperatura equivalente em Fahrenheit.
10) Entrar via teclado com o valor da cotao do dlar e uma certa quantidade de dlares. Calcular e
exibir o valor correspondente em Reais (R$).
11) Entrar via teclado com o valor de cinco produtos. Aps as entradas, digitar um valor referente ao
pagamento da somatria destes valores. Calcular e exibir o troco que dever ser devolvido.
1.1-. ,struturas de controle
Atravs das estruturas bsicas de controle do fluxo de execuo seqencial, seleo, repetio
e da combinao delas, poderemos criar um algoritmo para solucionar vrios problemas.
1.1.. ,strutura se9:encial
Aes que sero executadas na ordem em que foram escritas, de cima para baixo e da esquerda
para a direita. O ponto-e-vrgula (;) delimita o fim de um comando.
1.1/. ,struturas de seleo
1.1/.1. Seleo simples
Uma estrutura de seleo permite a escolha de um bloco de comandos a ser executado quando
determinadas condies, representadas por expresses lgicas, so ou no satisfeitas.
Sintaxe:
se (condio)
{
comando_;
comando_";
comando_n;
;
Onde condio uma expresso lgica. Os comandos s sero executados se a condio resultar
verdadeira. As chaves permitem a execuo de todos os comando dentro da estrutura de seleo. Se
houver apenas um comando no necessrio as chaves, e a seleo termina no primeiro ponto e
vrgula.
1.1/.2. Seleo composta
Um segundo bloco de comandos adicionado, estes sero executados somente se a condio
testada for falsa, isto se faz usando a palavra reservada seno. Se a condio resultar verdadeira,
somente os comandos dentro da seleo se sero executados, os comandos dentro do seno no so
executados, passando-se a avaliar a linha logo abaixo do ltimo comando seno.
Sintaxe:
se (condio)
{
comando_;
comando_";
comando_n;
}
seno
{
comando_;
comando_";

comando_n;
}
Exemplo1:
/* programa mdia */
Programa principal( )
{
real n1, n2, n3, n4, media;
escreva("entre com as quatro notas: );
leia(n1, n2, n3, n4);
media = (n1 + n2 + n3 + n4) / 4;
escreva("mdia: , media);
se (media < 7) /* verifica se a mdia maior ou igual a 7 */
escreva("Aluno aprovado); /* escreva executado se o teste resultar verdadeiro */
seno
escreva("Aluno reprovado); /* executado se o teste resultar falso */

}
Se desejarmos escrever mais de um comando dentro da estrutura se<seno, devemos usar as chaves,
como segue:
Exemplo2:
/* programa mdia */
Programa principal( )
{
real n1, n2, n3, n4, media;
escreva("Entre com as quatro notas: );
leia(n1, n2, n3, n4);
media = (n1 + n2 + n3 + n4) / 4;
se (media < 7) /* verifica se a mdia maior ou igual a 7 */
{
escreva("Aluno aprovado); /* escreva executado se o teste resultar verdadeiro */
escreva ("Mdia = ", media);
}
seno
{
escreva("Aluno reprovado); /* executado se o teste da condio resultar falso */
escreva ("Mdia= ", media);
}

}
1.1/.3. Seleo Anin)ada
Estruturas de seleo podem ser aninhadas, ou seja, podemos incluir uma estrutura de seleo
dentro de outra. sso pode ser feito quantas vezes for necessrio. Para melhor compreenso observe a
sintaxe abaixo.
Sintaxe:
se (condio)
{
comando_;
comando_";
comando_n;
}
seno
{
se (condio)
{
comando_;
comando_";
comando_n;
%
seno
&
se (condio$
&
comando_;
comando_";
comando_n;
%
seno
&
#
#
#
%
%
%
Exemplo
/* programa nmero maior menor ou igual a zero*/
Programa principal( )
{
real num;
escreva("Entre com um nmero: );
leia(num);
se(num < 0)
{
escreva("Nmero menor que zero.);
escreva(num);
}
seno
{
se (num = = 0)
{
escreva("Nmero igual a zero.);
escreva(num);
}
seno
{
escreva ("Numero maior que zero.);
escreva (num);
} /* fim do ltimo seno */
} /* fim do penltimo seno */
} /* fim do programa */
1.1/.". Seleo de m=ltipla escol)a
O uso de uma estrutura c)a$e (s>itc)) de mltipla escolha em programao, pode ser feito com
o uso da avaliao de casos em que uma constante?c)a$eadora ou valor de uma varivel dentro da
c)a$e comparado com a constante de cada caso. Se na avaliao do caso resultar em satisfizer a
condio (resultado verdadeiro), normalmente executado o comando de parada pare (rea@) e a
estrutura c)a$e abandonada executando-se os comandos fora da estrutura. Se nenhum dos casos
satisfizer a condio (todos os casos forem falsos), o comando caso?contr%rio (de!ault), se existir, ser
executado. Se o comando caso?contr%rio no existir, o smbolo chaves ( ; ) no programa encontrado
e fechada a estrutura de mltipla escolha saindo da mesma. Vejamos a sintaxe abaixo.
Sintaxe:
c)a$eA constante?c)a$eadora B
C
caso constante?13
comando_1;
comando_2;
.
.
comando_n;
pareD
.
.
.
caso constante?n3
comando_1;
comando_2;
.
.
comando_n;
pareD
.
.
caso?contr%rio3
comando_1;
comando_2;
.
.
comando_n;
;
Exemplo:
Programa principal( )
{
real preo;
inteiro origem;
leia(preo, origem);
c)a$e (origem)
{
caso 13
escreva(preco, " produto do sul);
pareD

caso 23
escreva(preco, " produto do norte);
pareD
caso 33
escreva(preco, " produto do leste);
pareD
caso "3
escreva(preco, " produto do oeste);
pareD
caso -3
escreva(preco, " produto do sudeste);
caso .3
escreva(preco, " produto do centro-oeste);
caso /3
escreva(preco, " produto do nordeste);
caso contr%rio3
escreva(preco, " produto importado);
; /* Fim das escolhas ou chaveamento */
; /* Fim do programa*/
Exerccios propostos
1) Fazer um algoritmo para entrar via teclado com dois valores distintos e exibir o maior deles.
2) Usando a estrutura de escolha de vrios casos (chave caso) fazer um algoritmo para entrar com
dois valores quaisquer e exibir o maior deles, se existir, caso contrrio, enviar mensagem avisando
que os nmeros so idnticos.
3) Fazer um algoritmo para calcular e exibir a rea de um retngulo, a partir dos valores da base e
altura que sero digitados. Se a rea for maior que 100, exibir a mensagem "Terreno grande.
4) Fazer um algoritmo para calcular e exibir a rea de um retngulo, a partir dos valores da base e
altura que sero digitados. Se a rea for maior que 100, exibir a mensagem "Terreno grande, caso
contrrio, exibir a mensagem "Terreno pequeno.
5) Fazer um algoritmo para entrar via teclado com trs valores distintos. Exibir o maior deles.
6) Fazer um algoritmo para, a partir de trs valores que sero digitados, verificar se formam ou no um
tringulo. Em caso positivo, exibir sua classificao: "ssceles, escaleno ou eqiltero. Um tringulo
escaleno possui todos os lados diferentes, o issceles, dois lados iguais e o eqiltero, todos os
lados iguais. Para existir tringulo necessrio que a soma de dois lados quaisquer seja maior que
o outro, isto, para os trs lados.
7) Fazer um algoritmo para verificar se trs valores quaisquer (a, b, c) que sero digitados formam ou
no um tringulo retngulo.
8) Escreva um algoritmo para determinar se um nmero lido do teclado maior, menor, ou igual a zero.
9) Usando a estrutura se<seno aninhada, faa um algoritmo que leia o nome do aluno e suas duas
notas. A partir das informaes lidas:
Calcule e mostre a mdia do aluno;
Verifique qual ser o conceito atribudo ao aluno:
se a mdia for menor que 5: E
se a mdia for maior ou igual a 5 e menor que 6: D
se a mdia for maior ou igual a 6 e menor que 7,5: C
se a mdia for maior ou igual a 7,5 e menor que 9,0: B
se a mdia for maior ou igual a 9 e menor ou igual a 10,0: A
1.15. ,struturas de repetio
So estruturas usadas para repetir um trecho de cdigo, quando a avaliao da condio for
satisfeita, enquanto essa condio for verdadeira os comandos dentro da estrutura ficam se repetindo. A
condio deve, em algum momento, tornar-se falsa ou a estrutura ficar se repetindo infinitamente.
1.15.1. 4epetio com teste no incio
Aqui o teste feito antes de iniciar cada execuo dos seus comandos.
Sintaxe:
enquanto (condio$
{
comando_;
comando_";
#
#
#
comando_n;
}
Os comandos entre chaves so repetidos enquanto a condio lgica entre os parnteses for
verdadeira, sendo que o teste feito antes da execuo dos comandos.
Exemplo:
/* programa mdia 50 calcula a mdia anual para 50 alunos */
Programa principal( )
{
real n1, n2, n3, n4, ma; /* notas bimestrais e mdia anual */
inteiro cont; /* contador */
caracter nome[80];
cont = 0;
en9uanto (cont < 50) /* termina o loop se as mdias dos 50 alunos j foram calculadas */
C
escre$a ("Entre com o nome do aluno);
leia (nome);
escre$a("Entre com suas 4 notas bimestrais);
leia(n1, n2, n3, n4);
ma = (n1 + n2 + n3 + n4) / 4;
escre$a("Nome: ", nome, "Mdia anual: , ma);
se (ma >= 7)
escreva("aluno aprovado);
seno
escreva("aluno reprovado);
cont = cont + 1; /* aumenta em um o nmero de alunos que j tiveram a mdia calculada*/
;
}
1.15.2. 4epetio com teste no !inal
Nesta estrutura de repetio, os seus comandos so executados antes de acontecer o teste, sendo
o resultado do teste verdadeiro o bloco de comandos da estrutura ser executado novamente.
Sintaxe:
faa
{
comando_;
comando_";
comando_n;
}
enquanto (condio$;
O bloco de comandos executado, ento, se a condio for verdadeira, o bloco executado
novamente, at que a condio seja falsa.
Exemplo:
/* programa para calcular a mdia anual de uma turma de 50 alunos */
Programa principal ( )
{
real ma, /* mdia anual de um aluno */
acm, /* acumulador */
mat; /* mdia anual da turma */
inteiro cont; /* contador */
cont = 1;
acm = 0;
faa C
escreva("entre com a mdia anual do aluno: );
leia(ma);
/* acumula as mdias dos alunos */
acm = acm + ma;
/* conta para o prximo aluno */
cont = cont + 1;
; enquanto (con <=50);
/* para de somar depois do 50 aluno */
mat = acm / 50; /*calcula a mdia anual da turma*/
escreva("mdia anual da turma: , mat);
}
1.15.3. 4epetio com $ari%$el de controle
Essa estrutura traz algumas facilidades para ocasies onde o nmero de repeties (iteraes)
definido. Ela permite inicializar a varivel que servir de contador, definir a condio de parada e o
incremento do contador.
Sintaxe:
para (iniciali'ao; condio; controle$
{
comando_;
comando_";
comando_n;
}
Exemplo:
Programa Principal ( )
C
real ma, acm, mat;
inteiro i;
acm = 0;
para (i = 1; i < =50; i = i + 1)
C
escreva("entre com a mdia anual do aluno);
leia(ma);
acm = acm + ma;
;
mat = acm / 50;
escreva("mdia anual da turma: , mat);
;
Este exemplo faz o mesmo que o exemplo anterior, mas usa a estrutura para. Geralmente um
problema pode ser resolvido de vrias maneiras diferentes, cabe ao programador escolher a melhor
opo. No exemplo acima o termo para parece ser mais adequado.
Exerccios propostos
1) Fazer um algoritmo para entrar com dois valores via teclado, onde o segundo dever ser maior que
o primeiro. Caso contrrio solicitar novamente apenas o segundo valor.
2) Fazer um algoritmo para entrar via teclado com dez valores positivos. Verificar a digitao e enviar
mensagem de erro, se necessrio. Aps a digitao, exibir:
a) O maior valor;
b) A soma dos valores;
c) A mdia aritmtica dos valores;
3) Fazer um algoritmo para criar uma rotina de entrada que aceite somente um valor positivo.
4) Fazer um algoritmo para entrar via teclado com o sexo de determinado usurio, aceitar somente "F
ou "M como respostas vlidas.
5) Fazer um algoritmo para exibir a tabuada do nmero cinco no intervalo de um a dez.
6) Fazer um algoritmo para exibir a soma dos nmeros inteiros positivos do intervalo de um a cem.
7) Fazer um algoritmo para exibir os trinta primeiros valores da sequencia de Fibonacci: 1, 1, 2, 3, 5, 8,
13, ...
8) Fazer um algoritmo para entrar via teclado com um valor qualquer. Travar a digitao, no sentido de
aceitar somente valores positivos. Aps a digitao, exibir a tabuada do valor solicitado, no intervalo
de um a dez.
9) Fazer um algoritmo para entrar via teclado com um valor (X) qualquer. Travar a digitao, no sentido
de aceitar somente valores positivos. Solicitar um intervalo (A B) para que o programa possa
calcular a tabuada do valor digitado, sendo que o segundo valor (B), dever ser maior que o primeiro
(A), caso contrrio, digitar novamente somente o segundo. Aps a validao dos dados, exibir a
tabuada do valor digitado, no intervalo decrescente, ou seja, a tabuada de X no intervalo de B para
A.
10) Fazer um algoritmo para calcular o fatorial de um valor que ser digitado. Este valor no poder ser
negativo. Enviar mensagem de erro e solicitar o valor novamente, se necessrio. Perguntar se o
usurio deseja ou no fazer um novo clculo, consistir a resposta em "S ou "N.
11) Fazer um algoritmo para entrar via teclado com "N valores quaisquer. O valor "N (que representa a
quantidade de nmeros) ser digitado, dever ser positivo, mas menor que vinte. Caso a quantidade
no satisfaa a restrio, enviar mensagem de erro e solicitar o valor novamente. Aps a digitao
dos "N valores, exibir:
a) maior valor;
b) menor valor;
c) A soma dos valores;
d) A mdia aritmtica dos valores;
e) A porcentagem de valores que so positivos;
f) A porcentagem de valores negativos;
12) Fazer um algoritmo para aps exibir os dados, perguntar ao usurio se deseja ou no uma nova
execuo do programa. Consistir a resposta no sentido de aceitar somente "S ou "N e encerrar o
programa em funo dessa resposta.
13) O jogo da mega-sena consiste em acertar seis dos sessenta nmeros disponveis em um volante.
Fazer um programa para calcular a quantidade de jogos que temos que fazer, para com certeza
acertar o resultado da mega-sena. Admitindo que faremos jogos de seis nmeros por volante, o
programa dever exibir quais seriam estes nmeros em cada volante, ou seja, exibir todos os
resultados possveis.
1.16. 0etores
At aqui, apresentamos uma forma simples para reservar espao de memria no computador, ou
seja: atravs do artifcio da declarao de variveis simples.
Exemplo de uso simples da memria
Considere o cdigo de declarao abaixo:
inteiro num;
real media;
MEMRA
Conforme se pode observar na figura acima, a memria dividida em clulas. Consideramos que
cada clula constituda de 8 (oito) bits de capacidade e pode armazenar um nico caracter.
Ao declarar a varivel num como inteiro, a mquina reservar uma quantidade dessas clulas para
armazenar um valor numrico inteiro. Como os inteiros so menores que os valores reais, o espao de
memria reservado para este tipo (inteiro) tambm menor que o espao reservado para o tipo real.
Normalmente nas mquinas, para um tipo real armazenado o dobro do espao do tipo inteiro.
Desta forma, se para um inteiro a arquitetura da mquina dispor de 2 clulas e cada clula for
constituda por 8 bits, o inteiro ter capacidade para 16 bits enquanto um valor real ter 32 bits de
capacidade.
Entretanto, a declarao de variveis simples no garante que possamos guardar na memria mais
que um valor ao mesmo tempo. Por exemplo, no problema de clculo de mdia aritmtica de duas notas
de uma turma de alunos, se declararmos uma varivel simples definida como media, esta varivel
somente poder guardar na memria um valor por vez, sendo este valor substitudo pelo prximo e
assim por diante.
num
media
Se desejarmos armazenar vrios valores reais do mesmo nome ao mesmo tempo, como no caso
de vrias mdias de alunos, pode-se determinar que a mquina (computador) reserve espao de
memria referenciada pelo nome mdia mas com vrios campos do tamanho de um valor do tipo real,
colocando um colchetes aps a definio do nome da varivel e o tamanho que se deseja reservar
dentro dos colchetes, conforme mostrado abaixo na declarao da varivel mdia com tamanho para 5
(cinco) mdias de alunos e no mais apenas uma mdia como apresentado anteriormente.
real media[5];
MEMRA
Desta forma, pode-se deduzir, que para armazenar vrios valores correspondentes a mesma
varivel pode-se utilizar vetores para alocao de memria. Entretanto, quando tentarmos armazenar
espao em memria para vrios nomes, bom lembrar que um nico nome j ocupa uma cadeia de
clulas na memria. Devido a isso, para armazenar espao para vrios nomes ficarem armazenados na
memria ao mesmo tempo, necessrio fazermos o uso de um vetor de duas dimenses: uma
dimenso para os caracteres do nome e uma outra para indicar cada nome. Assim, nas colunas ficam
armazenados os caracteres de cada nome e em cada linha reservado o espao para a posio
(endereo) de cada nome. Veja a declarao no cdigo a seguir e o esquema abaixo.
caracter nome[5][10];
MEMRA
Como pode-se observar, no esquema acima est a representao da memria com espao para
cinco nomes de no mximo 10 caracteres cada um.
Exemplo1
Fazer um algoritmo para ler um vetor real de 10 elementos e imprimir os valores maiores ou iguais a
zero.
/* Algoritmo mprimir vetor real maior ou igual a zero */
ncio
real vet [10];
int ;
para ( = 0; <10; = +1)
{
Escreva ("vet[", , "]= ");
Leia (vet [ ]);
media[0]
media[1]
media[2]
media[3]
media[4]
0123456789nome[0]MariaPeranome[1]TiaoSouzanome[2]CacoBomn
ome[3]DarciGol nome[4]MartaSilv
caracteres
Endereo
dos nomes
}
para ( = 0; <10; = +1)
{
Escreva ("vet[", , "]= ");
se (vet [ ] > = 0 )
{
Escreva (vet [ ] );
}
}
Fim
No exemplo acima pode-se escrever o valor de cada elemento do vetor depois de todos os
elementos lidos. Claro, isso feito somente para comprovar que os valores ficam todos armazenados
na memria, seno, para escrever cada valor do vetor poderia ser implementado o comando "se e o
comando "escreva no primeiro lao de repetio logo abaixo da leitura dos valores.
1.28. EatriFes
Uma matriz nada mais que um vetor bidimensional. No exemplo dado acima, com a varivel
nome, na realidade, usamos uma matriz para guardar 5 (cinco) nomes. Desta forma, podemos tambm
reservar espao em memria para uma matriz numrica, seja ela do tipo real ou inteira. O cdigo a
seguir e o esquema de memria abaixo ajudam a compreender o que acontece.
inteiro A[4][5]; /* Matriz A de tamanho 4x5*/
Como pode-se observar acima, o contedo de A[0][0] ocupar a primeira clula, o contedo de A[0]
[1] ocupar a segunda clula, assim por diante at a ltima clula ou o contedo de A[3][4].
Ao estudar uma estrutura como vetores ou matrizes pode-se concluir que qualquer varivel de um tipo
(caracter, inteiro ou real) pode ser definida como uma dessas estruturas. A opo pelo uso delas est na
necessidade para a soluo do problema.
Exemplo2
Fazer um algoritmo para ler uma matriz A e uma outra matriz B de valores inteiros, somar as duas
matrizes e colocar o resultado em uma matriz C. A matriz C dever ser impressa na tela. Considerar a
ordem de todas as matrizes lidas como 2x2.
/* Algoritmo soma de duas matrizes inteiras 2x2 */
ncio
int , J, A [2][2], B[2][2], C[2][2];
para ( = 0; <2; =+1)
{
para (J = 0; J<2; J = J+1)
{
Escreva("A[", , "] [", J, "]= );
Leia (A [][J]);
0 1 2 3 4
0 A[0][0] A[0][1] A[0][2] A[0][3] A[0][4]
1 A[1][0] A[1][1] A[1][2] A[1][3] A[1][4]
2 A[2][0] A[2][1] A[2][2] A[2][3] A[2][4]
3 A[3][0] A[3][1] A[3][2] A[3][3] A[3][4]
Escreva("B[", , "] [", J, "]= );
Leia (B [][J]);
C[][J]= B[][J] + A[][J];
Escreva("C[", , "] [", J, "]= , C[][J]);
}
}
fim
Exerccios propostos
1) Dado o vetor VET, definido por:
inteiro VET[100];
a) preench-lo com o valor 30;
b) preench-lo com os nmeros inteiros 1, 2, 3..., 100;
c) preencher VET[] com 1, se quadrado perfeito, e com 0, nos demais casos.
2) Dado o seguinte vetor:
qual ser a sua configurao depois de executados os comandos:
para ( = 7; >=4; =-1)
{
aux=VET[];
VET[] = VET[7 +1];
VET[7 + 1] = aux;
}
VET[2]=VET[0];
VET[VET[2]] = VET[VET[1]];
3) Escreva um algoritmo em portugol, para um programa que:
a) leia um conjunto A de 100 elementos reais;
b) construa e imprima um outro conjunto B formado da seguinte maneira:
i) os elementos de ordem par so os correspondentes de A divididos por 2;
ii) os elementos de ordem mpar so os correspondentes de A multiplicados por 3.
4) Dado o seguinte vetor de caracteres:
Qual ser a sua configurao aps serem executados os comandos a seguir ?
aux = VET[5];
VET[5]=VET[8];
VET[8]=aux;
para (=0; <=3; =+1)
{
aux = VET[];
VET[]=VET[8 ];
VET[8 ] = aux;
}
VET[5] = VET[1];
5) Escreva um algoritmo em portugol que:
32412583 VET
VET
TRXSEOBA!
a) Leia um conjunto A de 20 elementos do teclado;
b) calcule e imprima o valor de S, onde:
S = (A1 A20)2 + (A2 A19)2 + ......+ (A10 A11)2
10
ou seja, S = (Ai A21-i)2
i = 1
6) Fazer um algoritmo para ordenar um vetor de nmeros em ordem crescente. O vetor ordenado
dever ser impresso na tela.
7) Escreva um algoritmo que leia dois vetores de 10 posies e faa a multiplicao dos elementos de
mesmo ndice, colocando o resultado em um terceiro vetor. Mostre o vetor resultante.
8) Escreva um algoritmo que leia um vetor de 20 posies e mostre-o. Em seguida, troque o primeiro
elemento com o ltimo, o segundo com o penltimo, o terceiro com o antepenltimo, e assim
sucessivamente. Mostre o novo vetor depois da troca.
9) Escreva um algoritmo que leia um vetor de 80 elementos inteiros. Encontre e mostre o menor
elemento e sua posio no vetor.
10) Escrever um algoritmo que l 2 vetores X(10) e Y(10) e os escreve. Crie, a seguir, um vetor Z que
seja
a) a unio de X com Y;
b) a diferena entre X e Y;
c) a soma entre X e Y;
d) o produto entre X e Y;
e) a interseco entre X e Y.
Escreva o vetor Z a cada clculo.
11) Faa um algoritmo que leia um vetor de 500 posies de nmeros inteiros e divida todos os seus
elementos pelo maior valor do vetor. Mostre o vetor aps os clculos.
12) Uma locadora de vdeos tem guardada, em um vetor de 500 posies, a quantidade de filmes
retirados por seus clientes durante o ano de 1993. Agora, esta locadora est fazendo uma promoo
e, para cada 10 filmes retirados, o cliente tem direito a uma locao grtis. Faa um algoritmo que
crie um outro vetor contendo a quantidade de locaes gratuitas a que cada cliente tem direito.
13) Escrever um algoritmo para a gerao da seguinte matriz:
14) Dada a matriz MAT abaixo:
Qual ser a configurao de MAT depois de executado o algoritmo?
incio
inteiro , J;
caracter aux;
1 1 1 1 1 1
1 2 2 2 2 1
1 2 3 3 2 1
1 2 3 3 2 1
1 2 2 2 2 1
1 1 1 1 1 1
a b c
d e f
g h i
1 2 1
3 1 4
1 3
2 1
1 4
caracter MAT [4][4];
para (=0; <=3; =+1)
{
para (J=+1; J<=3; J=J+1)
{
aux = MAT[][J];
MAT[][J]=MAT[J][];
MAT[J][]=aux;
}
}
aux=MAT[1][1];
MAT[1][1]=MAT[4][4];
aux=MAT[2][2];
MAT[2][2]=MAT[3][3];
MAT[3][3]=aux;
fim
15) Descreva o que ser produzido depois de executados os comandos abaixo se:
A =
C=
para (=0; <2; =+1)
{
para (J=0; J<2; J=J+1)
{
para (k=0; k<=2; k=k+1)
{
escreva(A[][k] + C[k][j]);
}
}
}
16) Fazer um algoritmo para multiplicar duas matrizes de mesma ordem. A matriz produto dever ser
impressa na tela.
17) Escreva um algoritmo que l uma matriz M(5x5) e calcula as somas:
a) da linha 4 de M
b) da coluna 2 de M
c) da diagonal principal
d) da diagonal secundria
e) de todos os elementos da matriz M
Escrever essas somas e a matriz.
18) Escrever um algoritmo que l uma matriz M(10x10) e a escreve. Troque, a seguir:
a) a linha 2 com a linha 8
b) a coluna 4 com a coluna 10
c) a diagonal principal com a diagonal secundria
d) a linha 5 com a coluna 10.
Escreva a matriz assim modificada.
19) Escrever um algoritmo que l uma matriz M(5x5) e cria 2 vetores SL(5) e SC(5) que contenham,
respectivamente, as somas das linhas e das colunas de M. Escrever a matriz e os vetores criados.
5i/liogra6ia
"Lgica de programao de Forbellone e Eberspcher
"Algoritmos e Estruturas de Dados de Guimares/Lages.
Exerccios cedidos pelas professoras:
Luciana Rita Guedes Guisleri
Janine Kniess
7ser$ao3
Por favor, ao encontrar algum erro/falha no material favor entrar em contato pelo e-mail:
david@joinville.udesc.br
nformando a pgina e o erro. Ficaremos muito agradecido por voc ajudar a construir um material
didtico melhor para os alunos da UDESC de Joinville Universidade Pblica de qualidade e gratuita.