Algoritmos e Logica de Programacao
Algoritmos e Logica de Programacao
Algoritmos e Logica de Programacao
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Faculda<strong>de</strong> FORTIUM<br />
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong><br />
Programação<br />
Prof. Giselle Barbosa Gomes Machado
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
1- INTRODUÇÃO<br />
A automatização <strong>de</strong> tarefas é um aspecto marcante da socieda<strong>de</strong> mo<strong>de</strong>rna. O<br />
aperfeiçoamento tecnológico alcançado, com respeito a isto, teve como elementos<br />
fundamentais a análise e a obtenção <strong>de</strong> <strong>de</strong>scrições da execução <strong>de</strong> tarefas em termos <strong>de</strong><br />
ações simples o suficiente, tal que pu<strong>de</strong>ssem ser automatizadas por uma máquina<br />
especialmente <strong>de</strong>senvolvida para este fim, O COMPUTADOR.<br />
Em Ciência da Computação houve um processo <strong>de</strong> <strong>de</strong>senvolvimento simultâneo e<br />
interativo <strong>de</strong> máquinas (hardware) e dos elementos que gerenciam a execução<br />
automática (software) <strong>de</strong> uma dada tarefa. E essa <strong>de</strong>scrição da execução <strong>de</strong> uma tarefa,<br />
como consi<strong>de</strong>rada acima, é chamada algoritmo.<br />
O objetivo <strong>de</strong>ssa matéria é a Lógica <strong>de</strong> Programação dando uma base teórica e<br />
prática, suficientemente boa, para que, o aluno domine os algoritmos e esteja habilitado a<br />
apren<strong>de</strong>r uma linguagem <strong>de</strong> programação. Será mostrado também um grupo <strong>de</strong><br />
algoritmos clássicos para tarefas cotidianas, tais como: or<strong>de</strong>nação e pesquisa.<br />
2- DEFINIÇÕES DE ALGORITMO<br />
• "O conceito central da programação e da Ciência da Computação é o conceito <strong>de</strong><br />
algoritmos, isto é, programar é basicamente construir algoritmos."<br />
• É a <strong>de</strong>scrição, <strong>de</strong> forma lógica, dos passos a serem executados no cumprimento<br />
<strong>de</strong> <strong>de</strong>terminada tarefa.<br />
• "O algoritmo po<strong>de</strong> ser usado como uma ferramenta genérica para representar a<br />
solução <strong>de</strong> tarefas in<strong>de</strong>pen<strong>de</strong>nte do <strong>de</strong>sejo <strong>de</strong> automatizá-las, mas em geral está<br />
associado ao processamento eletrônico <strong>de</strong> dados, on<strong>de</strong> representa o rascunho<br />
para programas (Software)."<br />
• "Serve como mo<strong>de</strong>lo para programas, pois sua linguagem é intermediária à<br />
linguagem humana e às linguagens <strong>de</strong> programação, sendo então, uma boa<br />
ferramenta na validação da lógica <strong>de</strong> tarefas a serem automatizadas."<br />
• "Um algoritmo é uma receita para um processo computacional e consiste <strong>de</strong> uma<br />
série <strong>de</strong> operações primitivas, interconectadas <strong>de</strong>vidamente, sobre um conjunto <strong>de</strong><br />
objetos. Os objetos manipulados por essas receitas são as variáveis."<br />
• Como qualquer mo<strong>de</strong>lo, um algoritmo é uma abstração da realida<strong>de</strong>. A abstração é<br />
o processo <strong>de</strong> i<strong>de</strong>ntificar as proprieda<strong>de</strong>s relevantes do fenômeno que esta sendo<br />
mo<strong>de</strong>lado. Usando o mo<strong>de</strong>lo abstrato, po<strong>de</strong>mos nos centrar unicamente nas<br />
proprieda<strong>de</strong>s relevantes para nós, <strong>de</strong>pen<strong>de</strong>ndo da finalida<strong>de</strong> da abstração, e<br />
ignorar as irrelevantes.<br />
• É a forma pela qual <strong>de</strong>screvemos soluções <strong>de</strong> problemas do nosso mundo, <strong>de</strong><br />
forma que possam ser implementadas utilizando os recursos do mundo<br />
computacional. Como o mundo computacional possuí severas limitações em<br />
relação ao nosso mundo, é necessário que sejam impostas algumas regras<br />
básicas na forma <strong>de</strong> solucionar os problemas, para que possamos utilizar os<br />
recursos <strong>de</strong> hardware e software disponíveis. <strong>Algoritmos</strong> apesar <strong>de</strong> servirem para<br />
representar a solução <strong>de</strong> qualquer problema, no caso do Processamento <strong>de</strong><br />
Dados, eles <strong>de</strong>vem seguir as regras básicas <strong>de</strong> programação para que sejam<br />
compatíveis com as linguagens <strong>de</strong> programação.<br />
~ 1 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
*** ATENÇÃO ***<br />
Algoritmo não é a solução <strong>de</strong> um problema, pois, se assim fosse, cada problema<br />
teria um único algoritmo. Algoritmo é um caminho para a solução <strong>de</strong> um problema, e em<br />
geral, os caminhos que levam a uma solução são muitas.<br />
O aprendizado <strong>de</strong> algoritmos é como apren<strong>de</strong>r a jogar futebol, não se consegue a<br />
não ser através <strong>de</strong> muitos exercícios.<br />
<strong>Algoritmos</strong> não se apren<strong>de</strong>m:<br />
- Copiando <strong>Algoritmos</strong><br />
- Estudando <strong>Algoritmos</strong><br />
<strong>Algoritmos</strong> só se apren<strong>de</strong>m:<br />
- Construindo <strong>Algoritmos</strong><br />
- Testando <strong>Algoritmos</strong><br />
2.1- Fases <strong>de</strong> um Algoritmo<br />
Quando temos um problema e vamos utilizar um computador para resolvê-lo<br />
inevitavelmente temos que passar pelas seguintes etapas:<br />
a) Definir o problema.<br />
b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) <strong>de</strong> resolver<br />
o problema.<br />
c) Terminada a fase <strong>de</strong> estudo, utilizar uma linguagem <strong>de</strong> programação para<br />
escrever o programa que <strong>de</strong>verá a princípio, resolver o problema.<br />
d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi<br />
encontrada, <strong>de</strong>verá ser retornado para a fase <strong>de</strong> estudo para <strong>de</strong>scobrir on<strong>de</strong> está a<br />
falha.<br />
2.2- Conceitos<br />
Algoritmo<br />
É uma seqüência finita <strong>de</strong> ações que <strong>de</strong>screvem como um problema po<strong>de</strong> ser resolvido.<br />
Instrução<br />
São frases que indicam as ações a serem executadas. São compostas <strong>de</strong> um verbo no<br />
imperativo/infinitivo mais um complemento.<br />
Ex. Bata(bater) duas claras em neve<br />
Ligue os faróis<br />
Abra a porta<br />
Programa<br />
Ações <strong>de</strong> um algoritmo obe<strong>de</strong>cendo à sintaxe <strong>de</strong> uma linguagem <strong>de</strong> programação.<br />
~ 2 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
2.3- Como Construir um algoritmo<br />
a) Análise Preliminar<br />
Entenda o problema, i<strong>de</strong>ntifique os dados envolvidos e os resultados esperados.<br />
b) Solução<br />
Desenvolver algoritmo para resolver o problema<br />
c) Teste <strong>de</strong> qualida<strong>de</strong> (Teste <strong>de</strong> mesa)<br />
I<strong>de</strong>al testar o algoritmo com o máximo <strong>de</strong> combinações possíveis<br />
d) Alteração<br />
Caso o resultado do algoritmo não seja satisfatório, altere-o e submeta a um novo teste.<br />
e) Produto Final<br />
Algoritmo concluído e testado.<br />
2.4- Decomposição (Top-Down)<br />
Dividir o problema em problemas menores.<br />
Exemplo.<br />
1. Troque o pneu furado.<br />
1. Pegue o material necessário (Inicio)<br />
2.Troque o pneu furado (Meio)<br />
3.Guar<strong>de</strong> o material (Fim)<br />
Abra o porta-malas<br />
Retire o macaco, o estepe e a chave em cruz e o sinalizador<br />
Coloque o sinalizador atrás do carro<br />
Afrouxe as porcas do pneu furado<br />
Coloque o macaco na posição correta<br />
Levante o carro<br />
Retire as porcas<br />
Retire o pneu<br />
Coloque o estepe<br />
~ 3 ~<br />
Detalhamento<br />
Pequeno<br />
Operações<br />
Detalhadas<br />
Um pouco mais<br />
<strong>de</strong> Detalhes
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Coloque as porcas<br />
Desça o carro<br />
Retire o macaco<br />
Aperte as porcas do pneu trocado<br />
Guar<strong>de</strong> o macaco, o pneu furado , o sinalizador e a chave em cruz.<br />
Feche o porta-malas<br />
Obs. Algumas instruções po<strong>de</strong>riam ser dividas mais uma vez.<br />
2.5- Desenvolvimento Estruturado<br />
São técnicas que permitem sistematizar e ajudar no <strong>de</strong>senvolvimento <strong>de</strong> algoritmos para<br />
a resolução <strong>de</strong> gran<strong>de</strong>s e complexos problemas computacionais.<br />
Objetivos <strong>de</strong>stas técnicas<br />
- Facilitar o <strong>de</strong>senvolvimento do algoritmo<br />
- Facilitar o seu entendimento pelos humanos<br />
- Antecipar a comprovação <strong>de</strong> sua correção<br />
- Facilitar a sua manutenção e modificação<br />
- Permitir que o seu <strong>de</strong>senvolvimento possa ser empreendido simultaneamente por uma<br />
equipe <strong>de</strong> pessoas<br />
2.6- Formas <strong>de</strong> representação<br />
a) Descrição Narrativa<br />
Ex. Cálculo da média <strong>de</strong> um aluno:<br />
– Obter as notas da primeira e da segunda prova<br />
– Calcular a média aritmética entre as duas<br />
– Se a média for maior ou igual a 7, o aluno foi aprovado, senão ele foi reprovado<br />
~ 4 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
b) Fluxograma<br />
Representação gráfica <strong>de</strong> algoritmos, ou seja, das instruções e/ou módulos do<br />
processamento. Conhecido também como diagrama <strong>de</strong> blocos utiliza mo<strong>de</strong>lagem visual<br />
para especificar o conjunto <strong>de</strong> instruções através <strong>de</strong> formas geométricas, facilitando a<br />
compreensão da lógica utilizada pelo profissional. Existem atualmente vários padrões<br />
para <strong>de</strong>finir as formas geométricas a serem utilizadas para as diversas instruções<br />
(passos) a serem seguidos pelo sistema, o padrão utilizado nesta disciplina, será <strong>de</strong>finido<br />
pelo professor durante as aulas.<br />
Abaixo, veja alguns símbolos que são utilizados no fluxograma:<br />
.V.<br />
SÍMBOLO DESCRIÇÃO<br />
Inicio Fim<br />
Ida<strong>de</strong><br />
“A ida<strong>de</strong> é”,<br />
Ida<strong>de</strong><br />
Ida<strong>de</strong><br />
>= 18<br />
.F.<br />
Nasc
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Observe como ficaria este fluxograma:<br />
• A princípio marcamos o início do fluxograma;<br />
• Em seguida, armazenamos em uma posição <strong>de</strong> memória (variável), o resultado do<br />
cálculo 360,00 dividido por 30;<br />
• Em seguida, apresentamos a frase “O valor diário é” seguido do valor constante na<br />
posição <strong>de</strong> memória (variável) VlrDia<br />
O valor diário é: 32,00<br />
• Em seguida, finalizamos o fluxo.<br />
c) Pseudocódigo, também conhecido como Linguagem Estruturada ou Portugol.<br />
A representação <strong>de</strong> um algoritmo na forma <strong>de</strong> pseudocódigo é a seguinte:<br />
Algoritmo Nome_Do_Algoritmo<br />
Variáveis<br />
Declaração das variáveis<br />
Procedimentos<br />
Declaração dos procedimentos<br />
Funções<br />
Declaração das funções<br />
Início<br />
Corpo do Algoritmo<br />
Fim<br />
Inicio<br />
VlrDia
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Exemplo.<br />
Algoritmo “Média”<br />
Variáveis<br />
Início<br />
Fim.<br />
N1, N2, Média: real<br />
Escreva (“informe o primeiro valor”)<br />
Leia (N1)<br />
Escreva (“informe o segundo valor”)<br />
Leia (N2)<br />
Média = 7 Então<br />
Senão<br />
Fim se<br />
Escreva (“Aprovado!!”)<br />
Escreva (“Reprovado!!)”<br />
A i<strong>de</strong>ntação (<strong>de</strong>slocamento para a direita) <strong>de</strong> uma instrução significa que tais instruções<br />
estão subordinadas a instrução anterior e facilita em muito a compreensão e manutenção<br />
do algoritmo e dos códigos fontes em uma linguagem <strong>de</strong> programação.<br />
~ 7 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
2.7- Tipos <strong>de</strong> processamento<br />
a) Processamento Seqüencial<br />
As instruções do algoritmo são executadas uma após a outra, sem que haja <strong>de</strong>svio na<br />
seqüência das instruções, sendo cada instrução executada uma única vez.<br />
Ex. Obter a média aritmética das quatro notas<br />
1. Inicio<br />
6. Fim<br />
2. Some as duas primeiras notas<br />
3. Some a terceira nota com o resultado da instrução 2<br />
4. Some a Quarta nota com o resultado da instrução 3<br />
5. Divida resultado da instrução 4 por 4<br />
Se as quatro notas são 10,5,8,1 a execução das instruções ficara da seguinte forma<br />
1. Inicio<br />
6.Fim<br />
2. 10+5 = 15<br />
3. 15+8 =23<br />
4. 23+1 =24<br />
5. 24 / 4=6<br />
b) Processamento Condicional<br />
Um conjunto <strong>de</strong> instruções (po<strong>de</strong> ser apenas uma instrução) é executado ou não<br />
<strong>de</strong>pen<strong>de</strong>ndo <strong>de</strong> uma condição. Se a condição que estiver sendo testada tiver resposta<br />
afirmativa, o conjunto <strong>de</strong> instruções é executado.<br />
Ex. Obter a média aritmética das quatro notas. Se a média for maior ou igual a sete, o<br />
aluno está aprovado, caso contrário, está reprovado.<br />
~ 8 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
1. Inicio<br />
10.Fim<br />
2. Some as duas primeiras notas<br />
3. Some a terceira nota com o resultado da instrução 2<br />
4. Some a Quarta nota com o resultado da instrução 3<br />
5. Divida resultado da instrução 4 por 4<br />
6. Se o resultado da instrução 5 for maior ou igual a 7<br />
7. Aprove o aluno<br />
8. Se o resultado da instrução 5 for menor que 7<br />
9. Reprove o aluno<br />
Se as quatro notas são 10,5,8,1 a execução das instruções ficara da seguinte forma<br />
1. Inicio<br />
6. Fim<br />
2. 10+5 = 15<br />
3. 15+8 =23<br />
4. 23+1 =24<br />
5. 24 / 4=6<br />
6. Resposta negativa<br />
7. Resposta afirmativa resultado < 7<br />
então aluno reprovado<br />
Note que a instrução 6 foi executada. Como a resposta foi negativa (a média foi inferior a<br />
sete), o aluno foi reprovado não sendo executada a instrução sete.<br />
c) Processamento com repetição<br />
Conjunto <strong>de</strong> instruções (po<strong>de</strong> ser apenas uma) que é executado um <strong>de</strong>terminado número<br />
<strong>de</strong> vezes.<br />
Sendo <strong>de</strong>terminada uma condição <strong>de</strong> parada.<br />
~ 9 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Ex. Obter a média aritmética das quatro notas <strong>de</strong> todos os alunos da sala.<br />
1. Inicio<br />
2. Para cada aluno da sala<br />
7. Fim<br />
3. Some as duas primeiras notas<br />
4. Some a terceira nota com o resultado da instrução 3<br />
5. Some a Quarta nota com o resultado da instrução 4<br />
6. Divida o resultado da instrução 5 por 4<br />
Se existem dois alunos na sala e suas notas são: 10, 5, 8, 1 e 4, 6, 7, 3 a execução das<br />
instruções ficará da seguinte forma<br />
3. 10+5 = 15<br />
4. 15+8 =23<br />
5. 23+1 =24<br />
6. 24/4 = 6<br />
3. 4+6 = 10<br />
4. 10+7=17<br />
5. 17+3=20<br />
6. 20/4 = 5<br />
Observe que um laço <strong>de</strong> repetição necessita sempre <strong>de</strong> uma condição <strong>de</strong> parada<br />
que seja válida, caso contrário o programa entrará em um “laço” infinito.<br />
~ 10 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
2.8- Tipos <strong>de</strong> dados<br />
Os dados são representados pelas informações a serem processadas por um<br />
computador. Estas informações estão caracterizadas por quatro tipos <strong>de</strong> dados: inteiros,<br />
reais, caracteres e lógicos.<br />
a) Tipo Inteiro<br />
Dados numéricos positivos ou negativos, excluindo-se qualquer número fracionário.<br />
Ex. 35, 0, -56<br />
b) Tipo Real<br />
Dados numéricos positivos, negativos e números fracionários.<br />
Ex. 1.2, -45.897<br />
c) Tipo Caractere<br />
São do tipo caractere as seqüências contendo letras, números e símbolos especiais. Uma<br />
seqüência <strong>de</strong> caracteres <strong>de</strong>ve ser indicada entre aspas. Sendo também conhecido como:<br />
alfanumérico, string, literal ou ca<strong>de</strong>ia.<br />
Ex. “PROGRAMAÇÃO”, “Rua Alfa, 52 apto 1”, “7”, “249-4455”<br />
d) Tipo Lógico<br />
São do tipo lógico ou booleano os dados com valores verda<strong>de</strong>iro/true (.T.) e falso/false<br />
(.F.), sendo que este tipo po<strong>de</strong>rá representar um dos dois valores.<br />
2.9- Variáveis (i<strong>de</strong>ntificadores)<br />
Po<strong>de</strong>mos imaginar uma variável como sendo um local on<strong>de</strong> se po<strong>de</strong> colocar qualquer<br />
valor do conjunto <strong>de</strong> valores possíveis para o tipo <strong>de</strong>finido para a variável.<br />
Toda variável possui um Nome, um Tipo e um valor associado.<br />
O nome <strong>de</strong> uma variável é utilizado para sua i<strong>de</strong>ntificação e posterior uso <strong>de</strong>ntro <strong>de</strong> um<br />
programa, sendo assim, é necessário estabelecer algumas regras <strong>de</strong> utilização das<br />
mesmas.<br />
O nome <strong>de</strong> uma variável po<strong>de</strong> conter um ou mais caracteres;<br />
O primeiro caractere do nome <strong>de</strong> uma variável <strong>de</strong>ve ser sempre uma letra;<br />
~ 11 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Não po<strong>de</strong> possuir espaços em branco;<br />
Não po<strong>de</strong> ser uma palavra reservada a uma instrução <strong>de</strong> programa;<br />
Não po<strong>de</strong>rão ser utilizados outros caracteres que não sejam letras e números.<br />
Os nomes escolhidos <strong>de</strong>vem explicitar seu conteúdo.<br />
Qualquer caminho seguido no diagrama abaixo levara a um nome <strong>de</strong> variável valido:<br />
On<strong>de</strong>:<br />
Letra: Qualquer letra do alfabeto [a..z, A..Z]<br />
Digito: Dígitos <strong>de</strong> [0..9]<br />
São i<strong>de</strong>ntificadores válidos:<br />
NOMEUSUARIO, FONE1, X, DELTA25, Z4, Ida<strong>de</strong>, X1, mODELoDeVeiculo,<br />
São i<strong>de</strong>ntificadores inválidos:<br />
*nome, 2Fone, NOME/USUARIO, mODELO-DE-VEICULO, Nota do Aluno<br />
2.10- Declaração <strong>de</strong> variáveis<br />
Para que os programas manipulem valores, estes <strong>de</strong>vem ser armazenados em variáveis e<br />
para isso, <strong>de</strong>vemos <strong>de</strong>clará-las <strong>de</strong> acordo com a sintaxe:<br />
NomeVariável : Tipo<br />
Ex.: VARIÁVEIS<br />
SalMes, Inss: REAL<br />
Nome: CARACTER[30] // Ca<strong>de</strong>ia <strong>de</strong> caracteres<br />
Sexo: CARACTER // Caractere<br />
Nesta <strong>de</strong>finição, <strong>de</strong>veremos seguir as regras seguintes:<br />
~ 12 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
• VARIÁVEIS é a palavra chave, que <strong>de</strong>verá ser utilizada uma única vez na <strong>de</strong>finição<br />
das variáveis e antes do uso das mesmas;<br />
• Variáveis <strong>de</strong> tipos diferentes <strong>de</strong>verão ser <strong>de</strong>claradas em linhas diferentes;<br />
• Em uma mesma linha, quando quisermos <strong>de</strong>finir variáveis <strong>de</strong> mesmo tipo, <strong>de</strong>veremos<br />
usar o símbolo <strong>de</strong> vírgula (,) para separar as mesmas.<br />
2.11- Constantes<br />
Tudo aquilo que é fixo ou estável<br />
Ex. o valor do - 3.14159<br />
EXERCÍCIOS:<br />
1 - I<strong>de</strong>ntifique os atributos e <strong>de</strong>clare variáveis para um objeto automóvel<br />
2 - I<strong>de</strong>ntifique os Atributos e <strong>de</strong>clare variáveis para um objeto Pessoa<br />
3 - I<strong>de</strong>ntifique os atributos e <strong>de</strong>clare variáveis para um objeto Eleitor<br />
4 - Assinale com C os nomes corretos <strong>de</strong> variável e com I os incorretos. Explique o que<br />
está errado nos nomes incorretos.<br />
(a) ( ) certo (b) ( ) *oi<br />
(c) ( ) oi! (d) ( ) 'Lucio'<br />
(e) ( ) soda# (f) ( ) i123453<br />
(g) ( ) Nota do Aluno (h) ( ) o<br />
(i) ( ) arquivox11 (j) ( ) 1ate<br />
5 - Classifique os dados especificados abaixo <strong>de</strong> acordo com seu tipo, assinalando com I<br />
os dados do tipo inteiro, com R os reais, com C os caracteres (literais), com B os lógicos<br />
(booleanos), e com N aqueles para os quais não é possível <strong>de</strong>finir o tipo <strong>de</strong> dado.<br />
(a) ( ) -988786,987 (b) ( ) "34,50"<br />
(c) ( ) "Casa do Titio" (d) ( ) .F.<br />
(e) ( ) site (f) ( ) -33<br />
(g) ( ) ".V". (h) ( ) 0,5<br />
(i) ( ) .'V'. (j) ( ) ".F."<br />
(l) ( ) 12,89 (m) ( ) 215333<br />
~ 13 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
2.12- Operações Básicas:<br />
a) Expressões<br />
Na lógica <strong>de</strong> programação uma expressão tem o mesmo objetivo/conceito do termo<br />
expressão da matemática comum, ou seja, um conjunto <strong>de</strong> variáveis e constantes que se<br />
relacionam por meio <strong>de</strong> operadores aritméticos. Este conjunto <strong>de</strong> expressão e operadores<br />
aritméticos (soma por exemplo), formam uma fórmula que, após solucionada fornecem<br />
um resultado em específico.<br />
Observe o gráfico a seguir:<br />
Neste caso, a fórmula para se calcular a área <strong>de</strong> um retângulo é igual ao produto <strong>de</strong> sua<br />
altura por sua base, po<strong>de</strong>remos então montar a fórmula como se segue:<br />
AREA
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Assim como classificamos os operadores, po<strong>de</strong>mos também classificar as expressões<br />
quanto ao seu tipo, conforme mostra a lista a seguir:<br />
• Expressão aritmética: quando o resultado <strong>de</strong> sua avaliação for um número, po<strong>de</strong>ndo<br />
este ser positivo ou negativo assim como inteiro ou real;<br />
• Expressão lógica: quando o resultado <strong>de</strong> sua avaliação for um valor lógico, ou seja,<br />
verda<strong>de</strong>iro (.T.) ou falso (.F.);<br />
• Expressão literal: quando o resultado <strong>de</strong> sua avaliação for um valor literal.<br />
Cada uma das expressões vistas acima possui seus operadores em específico. A seguir,<br />
vamos mostrar uma tabela contendo esses operadores:<br />
b) Operadores<br />
Na solução da gran<strong>de</strong> maioria dos problemas é necessário que as variáveis tenham seus<br />
valores consultados ou alterados e para isto <strong>de</strong>vemos <strong>de</strong>finir um conjunto <strong>de</strong><br />
OPERADORES, sendo eles:<br />
• OPERADOR DE ATRIBUIÇÃO:<br />
NomeDaVariavel ← Valor ou Expressão Atribuída.<br />
ATENÇÃO!!<br />
Em nossa disciplina usaremos o símbolo ← para atribuição.<br />
• OPERADORES ARITMÉTICOS:<br />
+ Adição a Div b Divisão Inteira<br />
* Multiplicação a Resto b Resto da divisão <strong>de</strong> inteiros<br />
- Subtração ou inversor do sinal. ^ Exponenciação a b (^ ou **)<br />
/ Divisão<br />
• FUNÇÕES PRIMITIVAS: SEN(x); COS(x); TG(x); ABS(x); INT(x); Raizq(x).<br />
• OPERADORES RELACIONAIS:<br />
São utilizados para relacionar variáveis ou expressões, resultando num valor lógico<br />
(Verda<strong>de</strong>iro ou Falso), sendo eles:<br />
= - igual (==) - diferente (!=)<br />
< - menor > - maior<br />
= - maior ou igual<br />
~ 15 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
• OPERADORES LÓGICOS:<br />
São utilizados para avaliar expressões lógicas, sendo eles:<br />
.E. - e lógico ou conjunção.<br />
.Ou. - ou lógico ou disjunção.<br />
Não - negação.<br />
A B A .E. B A .OU. B<br />
VERDADEIRO/TRUE/.T./.V./1 VERDADEIRO/TRUE/.T./.<br />
V./1<br />
~ 16 ~<br />
VERDADEIRO/TRUE/.T./.V.<br />
/1<br />
VERDADEIRO/TRUE/.T./.V./<br />
1<br />
VERDADEIRO/TRUE/.T./.V./1 FALSO/FALSE/.F./0 FALSO/FALSE/.F./0 VERDADEIRO/TRUE/.T./.V./<br />
1<br />
FALSO/FALSE/.F./0 VERDADEIRO/TRUE/.T./.<br />
V./1<br />
FALSO/FALSE/.F./0 VERDADEIRO/TRUE/.T./.V./<br />
1<br />
FALSO/FALSE/.F./0 FALSO/FALSE/.F./0 FALSO/FALSE/.F./0 FALSO/FALSE/.F./0<br />
Tabela verda<strong>de</strong> dos operadores .E. e .OU.<br />
APROVADO??<br />
(Media >= 60) .E. (Frequencia > 0.75)<br />
REPROVADO??<br />
(Media < 60) .OU. (Frequencia < 0.75)<br />
TABELA VERDADE DO OPERADOR .E.<br />
A B A .E. B<br />
1 1 1<br />
1 0 0<br />
0 1 0<br />
0 0 0<br />
TABELA VERDADE DO OPERADOR .OU.<br />
A B A .OU. B<br />
1 1 1<br />
1 0 1<br />
0 1 1<br />
0 0 0<br />
TABELA VERDADE DO OPERADOR .Não.<br />
A Não(A)<br />
1 0<br />
0 1
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
PRIORIDADE DE OPERADORES:<br />
Durante a execução <strong>de</strong> uma expressão que envolve vários operadores, é necessário a<br />
existência <strong>de</strong> priorida<strong>de</strong>s, caso contrário po<strong>de</strong>remos obter valores que não representam o<br />
resultado esperado.<br />
A maioria das linguagens <strong>de</strong> programação utiliza as seguintes priorida<strong>de</strong>s <strong>de</strong> operadores:<br />
1º - Efetuar operações embutidas em parênteses "mais internos"<br />
2º - Efetuar Funções<br />
3º - Efetuar multiplicação e/ou divisão<br />
4º - Efetuar adição e/ou subtração<br />
5º - Operadores Relacionais<br />
6º - Operadores Lógicos<br />
OBS: O programador tem plena liberda<strong>de</strong> para incluir novas variáveis, operadores ou<br />
funções para adaptar o algoritmo as suas necessida<strong>de</strong>s, lembrando sempre, que estes<br />
<strong>de</strong>vem ser compatíveis com a linguagem <strong>de</strong> programação a ser utilizada.<br />
Exercícios:<br />
Na expressão A*B-C, qual será a seqüência <strong>de</strong> execução?<br />
Na expressão (A*B)-C, qual será a seqüência <strong>de</strong> execução?<br />
Na expressão A*(B-C), qual será a seqüência <strong>de</strong> execução?<br />
Na expressão ( A*(B-C*(D/E))), qual será a seqüência <strong>de</strong> execução?<br />
A lógica para se montar uma expressão é ponto <strong>de</strong>terminante na questão do resultado ser<br />
ou não verda<strong>de</strong>iro, ou seja, <strong>de</strong> ser o resultado esperado.<br />
2.13- Primeiras instruções<br />
Após dominarmos os assuntos anteriormente tratados, passaremos a estudar as<br />
instruções primitivas, ou seja, comandos básicos que executam tarefas consi<strong>de</strong>radas<br />
essenciais para a execução <strong>de</strong> qualquer programa <strong>de</strong> computador. Um exemplo <strong>de</strong>ste<br />
tipo <strong>de</strong> instrução são aquelas responsáveis pela comunicação do operador com o<br />
computador por meio do teclado (entrada <strong>de</strong> dados) ou ainda a impressão <strong>de</strong> um relatório<br />
(saída <strong>de</strong> dados “sem contar com a parte estética do relatório, alinhamento <strong>de</strong> colunas,<br />
etc...).<br />
Toda linguagem <strong>de</strong> programação tem por obrigação possuir instruções primitivas, pois<br />
sem estas não existiria comunicação com os periféricos.<br />
Antes <strong>de</strong> qualquer coisa, você saberia diferenciar periféricos <strong>de</strong> entrada e <strong>de</strong> saída <strong>de</strong><br />
dados? A resposta é simples, periféricos <strong>de</strong> entrada são aqueles responsáveis pela<br />
~ 17 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
passagem <strong>de</strong> dados do mundo externo para a memória do computador, como por<br />
exemplo, o teclado, unida<strong>de</strong> <strong>de</strong> CD-ROM, etc... Já os periféricos <strong>de</strong> saída recebem os<br />
dados do computador para outro equipamento externo, como por exemplo, o monitor <strong>de</strong><br />
ví<strong>de</strong>o, impressora, etc...<br />
Toda instrução, primitiva ou não possui uma sintaxe, ou seja, uma regra que <strong>de</strong>verá ser<br />
seguida para a construção <strong>de</strong> seu código e caso esta não seja obe<strong>de</strong>cida, o seu<br />
programa po<strong>de</strong> simplesmente não funcionar.<br />
Devemos saber também que o conjunto <strong>de</strong> ações que serão realizadas pelo computador<br />
após a execução <strong>de</strong> um <strong>de</strong>terminado comando é conhecida como semântica.<br />
EXERCÍCIOS:<br />
1) Quais os valores das expressões a seguir:<br />
2 + 3 * 6<br />
12 / 3 * 2 – 5<br />
31 / 4<br />
31 div 4<br />
31 Resto 4<br />
9 ** (3-1)<br />
3 ** 3<br />
2) Consi<strong>de</strong>re o seguinte trecho do algoritmo:<br />
Algoritmo “Exercicio2”<br />
Variaveis<br />
Pig,Vari, Total, A, I : Inteiro<br />
ValorA, X : Real<br />
Inicio<br />
Vari ← 2<br />
Total ← 10<br />
ValorA ← 7.0<br />
A ← -4<br />
I ← 80<br />
X ← 4.0<br />
X ← Total / Vari<br />
X ← X + 1<br />
A ← A + I<br />
Pig ← 10<br />
A ← I div Pig<br />
A ← A + I Resto 6<br />
ValorA ← Pig * ValorA + X<br />
Fim<br />
~ 18 ~<br />
Pig<br />
Vari<br />
Total<br />
A<br />
I<br />
ValorA<br />
X<br />
Mostre quais os valores armazenados em cada uma das variáveis após a execução<br />
<strong>de</strong> cada um dos comandos do algoritmo acima.
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
3) Consi<strong>de</strong>rando o conteúdo das variáveis conforme a seguir, diga qual o valor <strong>de</strong><br />
cada uma das expressões:<br />
Nome Apelido Qquer Aux Resp K Karol<br />
“ANA” “flor” “ana” 10 .F. 3 2<br />
a) Nome == Apelido<br />
b) (Nome == Qquer) .E. (Nome “ANa”)<br />
c) Nome == “Nome”<br />
d) (K >= Karol + 1) .OU. (Qquer == “ana”)<br />
e) Não Resp<br />
f) (Não Resp) .E. (K < Aux)<br />
g) (Aux Karol + (K – Karol)<br />
i) ((Não Resp .E. Resp) .OU. (Não Resp)) .E. (Resp .OU. (Não Resp))<br />
4) Faça o teste <strong>de</strong> mesa do algoritmo a seguir:<br />
Algoritmo “exercicio4”<br />
Variaveis<br />
Q, W, R : inteiro<br />
Ex : Real<br />
Inicio<br />
Q ← 10<br />
Q ← 10 + 30<br />
W ← -1<br />
W ← W + Q<br />
Q ← Q Resto W<br />
Q ← W div (Q + 4)<br />
Ex ← 2 * Q / W<br />
R ← 0<br />
R ← R + 1<br />
R ← R + 1<br />
Fim<br />
5) Consi<strong>de</strong>rando as variáveis abaixo, indique o resultado <strong>de</strong> cada uma das<br />
expressões a seguir:<br />
X Y Z W Q<br />
.V. 2 4 1,50 “PROVA”<br />
a) (2 * (5 resto 3) + Y + W * 2) > Z .OU. (Y < Z -1) .E. não((Z * (Y – 1) + Y) < 100) ( )<br />
b) (X .OU. .V.) .OU. (Z * 2 div Y < W * Y) ( )<br />
c) .F. .E. X = não(.V.) .OU. Y < Z ( )<br />
d) Y + 4 * (Z RESTO 3 + 1) ( )<br />
e) (3 + W – (Y + 1) / 2) + 1,5 ( )<br />
~ 19 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
6) Dada a <strong>de</strong>claração <strong>de</strong> variáveis:<br />
variáveis<br />
I1, I2, I3 : inteiro<br />
R1, R2, R3 : real<br />
L1, L2 : literal<br />
B1, B2 : lógico<br />
Para as variáveis <strong>de</strong>claradas acima, às quais são dados os valores seguintes:<br />
I1 ← 9 R3 ← 6.0<br />
I2 ← 7 L1 ← 'Olá'<br />
I3 ← 6 L2 ← 'A1'<br />
R1 ← 5.5 B1 ← .V.<br />
R2 ← 3.92 B2 ← .V.<br />
Determine o resultado da avaliação das expressões abaixo. Se caso não for<br />
possível resolver a expressão responda “Expressão Inválida”:<br />
(a) (I1+I2) > 10 .OU. (I1+I2) = (I3+R1)<br />
(b) (I1^2) + (I3^ 2)<br />
(c) L1 L2<br />
(d) (I1+I2) > 10 .OU. (I1+I2) = (I3+R1) .E. (I1>=I3) .E. (R1 >= I3)<br />
(e) (R1 * I1) / (R3^B1) - B2<br />
(na sintaxe do VisuAlg)<br />
7) Faça o teste <strong>de</strong> mesa do algoritmo a seguir:<br />
algoritmo "horas"<br />
var<br />
ht:inteiro<br />
sm,a,a1,b,c,d:real<br />
inicio<br />
escreval("informe o salario minimo:")<br />
leia(sm)<br />
escreval("informe as horas trabalhadas:")<br />
leia(ht)<br />
a
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
8) Faça o teste <strong>de</strong> mesa do algoritmo a seguir:<br />
algoritmo "peso"<br />
var<br />
ida<strong>de</strong>,pesi<strong>de</strong>al,altura:real<br />
sexo:caracter<br />
inicio<br />
escreval("Informe o sexo: ")<br />
leia(sexo)<br />
escreva("Informe a altura: ")<br />
leia(altura)<br />
se sexo = "M"entao<br />
pesi<strong>de</strong>al
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
3- COMANDOS DE ENTRADA E SAÍDA:<br />
No algoritmo é preciso representar a troca <strong>de</strong> informações que ocorrerá entre o<br />
mundo da máquina e o nosso mundo, para isso, <strong>de</strong>vemos utilizar comandos <strong>de</strong> entrada e<br />
saída. Em nível <strong>de</strong> algoritmo esses comandos representam apenas a entrada e a saída<br />
da informação, in<strong>de</strong>pen<strong>de</strong> do dispositivo utilizado (teclado, discos, impressora,<br />
monitor,...), embora nas linguagens <strong>de</strong> programação essa in<strong>de</strong>pendência não existe, ou<br />
seja, nas linguagens <strong>de</strong> programação temos comandos específicos para cada tipo <strong>de</strong><br />
unida<strong>de</strong> <strong>de</strong> Entrada/Saída.<br />
Comando <strong>de</strong> Entrada <strong>de</strong> Dados<br />
Leia (variável_1, variável_2,...)<br />
Comando <strong>de</strong> Saída <strong>de</strong> Dados<br />
Escreva (expressão_1, expressão_2,...)<br />
Algoritmo “media”<br />
Variáveis<br />
quilometragem,litros,media: REAL<br />
Inicio<br />
ESCREVA (“Entre com a quilometragem inicial e a Quantida<strong>de</strong> <strong>de</strong> litros gastos”)<br />
LEIA (quilometragem)<br />
LEIA (litros)<br />
Media ← quilometragem/litros<br />
ESCREVA (“A média é:”, media)<br />
Fim.<br />
Observe que no pseudocódigo, quando queremos enviar uma expressão como saída, a<br />
mesma é colocada <strong>de</strong>ntro <strong>de</strong> aspas, porém quando queremos enviar o conteúdo <strong>de</strong> uma<br />
variável, esta <strong>de</strong>verá estar fora <strong>de</strong> aspas.<br />
EXERCÍCIOS:<br />
01 - Construa o fluxograma e o algoritmo que receba um número, calcule o seu quíntuplo<br />
e mostre o número recebido e o resultado.<br />
02 - Construa o fluxograma e o algoritmo que receba um número, calcule a sua meta<strong>de</strong>,<br />
mostre o resultado.<br />
03 - Construa o fluxograma e o algoritmo que receba dois números, calcule o produto<br />
entre eles, mostre o resultado e os números recebidos.<br />
04 - Construa o fluxograma e o algoritmo que receba três números, calcule a diferença do<br />
primeiro pelo segundo, o resultado <strong>de</strong>ve ser multiplicado pelo terceiro número e mostre os<br />
resultados obtidos.<br />
~ 22 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
05 - Construa o fluxograma e o algoritmo que receba dois números, calcule: a divisão, a<br />
multiplicação, a soma, a diferença entre eles e mostrar os resultados.<br />
06 - Construa o fluxograma e o algoritmo que receba, a ida<strong>de</strong> <strong>de</strong> três pessoas, calcule e<br />
mostre a média das ida<strong>de</strong>s.<br />
07 - Construa o fluxograma e o algoritmo que receba a matrícula, o nome e o salário-base<br />
<strong>de</strong> um funcionário, calcule o salário líquido a receber e o total do <strong>de</strong>sconto, sabendo que:<br />
o imposto a ser <strong>de</strong>scontado é <strong>de</strong> 12% sobre o salário-base. Mostre os resultados e os<br />
dados do funcionário.<br />
08 - Uma Empresa <strong>de</strong> Energia Elétrica calcula o valor da conta <strong>de</strong> luz <strong>de</strong> acordo com o<br />
consumo em Kw/h. Faça o fluxograma e o algoritmo que receba o número da conta, a<br />
leitura anterior e a leitura atual, calcule o valor a ser pago, sabendo que a tarifa do Kw/h é<br />
<strong>de</strong> 0.20725. Mostre o número da conta, o valor da conta e o consumo <strong>de</strong> luz <strong>de</strong> um<br />
usuário.<br />
09 - Faça o fluxograma e o algoritmo que receba a matrícula e três notas do aluno, calcule<br />
a sua média sabendo que a primeira nota tem peso dois, a segunda peso três e a terceira<br />
peso quatro. Mostre a matrícula e a média do aluno.<br />
10 -. Uma loja está ven<strong>de</strong>ndo os seus produtos a prazo com juros <strong>de</strong> 10% e a vista com<br />
<strong>de</strong>sconto <strong>de</strong> 5%. Faça o fluxograma e o algoritmo que receba o valor da compra, calcule o<br />
valor à vista, a prazo e mostre os resultados.<br />
11 - Faça o fluxograma e o algoritmo que receba a matrícula, o nome e o salário-base <strong>de</strong><br />
um funcionário, calcule os <strong>de</strong>scontos com vale transporte (vt) 3% e vale refeição (vr) 5%.<br />
Mostre o nome, a matrícula e os valores <strong>de</strong>scontados separadamente.<br />
12 - Um comércio está ven<strong>de</strong>ndo os seus produtos com um <strong>de</strong>sconto <strong>de</strong> 25%. Faça o<br />
fluxograma e o algoritmo que calcule e mostre o valor do <strong>de</strong>sconto obtido em uma<br />
<strong>de</strong>terminada compra, valor da compra com e sem <strong>de</strong>sconto.<br />
13 - Uma firma paga a seus ven<strong>de</strong>dores o salário-base e uma comissão <strong>de</strong> 20% sobre o<br />
valor das vendas do mês. Faça o fluxograma e o algoritmo que calcule e mostre, a<br />
comissão e o líquido a receber <strong>de</strong> um ven<strong>de</strong>dor.<br />
14 - Faça o fluxograma e o algoritmo que receba a matrícula, o salário-base <strong>de</strong> um<br />
funcionário, calcule 7% <strong>de</strong> gratificação sobre as vendas da loja, mostre a matrícula, o total<br />
dos vencimentos, a gratificação e o salário-base do funcionário.<br />
15 - O custo ao consumidor <strong>de</strong> um carro novo é a soma do custo <strong>de</strong> fábrica, a<br />
percentagem do distribuidor e a percentagem da concessionária (aplicados ao custo <strong>de</strong><br />
fábrica). Faça o fluxograma e o algoritmo que receba o custo <strong>de</strong> fábrica <strong>de</strong> um carro,<br />
informe o custo ao consumidor. Sabendo que: a percentagem do distribuidor é <strong>de</strong> 28% e a<br />
percentagem da concessionária é <strong>de</strong> 48%. Mostre os valores separadamente.<br />
~ 23 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
16 - Construa o fluxograma e o algoritmo que receba o código, o preço unitário, a<br />
quantida<strong>de</strong> e o <strong>de</strong>sconto em percentual <strong>de</strong> um produto, calcule o valor total, o total a<br />
pagar com <strong>de</strong>sconto e o valor do <strong>de</strong>sconto. Mostre o código do produto e os resultados.<br />
4- COMANDOS DE CONTROLE DE FLUXO:<br />
Para representar a solução <strong>de</strong> um problema <strong>de</strong>vemos escrever o conjunto <strong>de</strong> passos a<br />
serem seguidos, sendo que a maioria dos problemas exige uma dinâmica na sua solução,<br />
impondo assim que os algoritmos executem o conjunto <strong>de</strong> instruções <strong>de</strong> acordo com as<br />
possíveis situações encontradas no problema original. De acordo com a Programação<br />
Estruturada os mecanismos utilizados para esse controle são: Seqüência, Seleção e<br />
Repetição.<br />
• SEQUÊNCIA: usada para executar comandos passo a passo, sabendo que todos<br />
eles serão executados na or<strong>de</strong>m <strong>de</strong> escrita, sem nenhum <strong>de</strong>svio. Uma seqüência<br />
po<strong>de</strong> possuir um ou vários comandos, os quais <strong>de</strong>vem ser <strong>de</strong>limitados pelos<br />
i<strong>de</strong>ntificadores Início e Fim.<br />
Inicio<br />
Comando_1<br />
...<br />
Comando_n<br />
Fim<br />
• SELEÇÃO: usada para tomar <strong>de</strong>cisões, ou seja, <strong>de</strong>sviar a execução do algoritmo<br />
<strong>de</strong> acordo com uma condição, po<strong>de</strong>ndo ser simples ou composta.<br />
Simples Composta<br />
Se (Expressão Lógica) Então<br />
Seqüência_1<br />
Fim se<br />
Se (Expressão Lógica) Então<br />
Seqüência_1<br />
Senão<br />
Seqüência_2<br />
Fim se<br />
Imagine a seguinte situação: em uma empresa, será solicitado o salário <strong>de</strong> um<br />
<strong>de</strong>terminado funcionário para se calcular seu novo salário, sendo que, se este tiver um<br />
salário superior a R$ 1500,00, o reajuste será <strong>de</strong> 5%, caso contrário o reajuste será <strong>de</strong><br />
8%.<br />
Observe que teremos que testar o valor do salário, para saber o índice a ser aplicado.<br />
Vamos criar então um pseudocódigo com este objetivo:<br />
~ 24 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Algoritmo testa_salario<br />
Variáveis<br />
Salario: REAL<br />
Salario_final: REAL<br />
Inicio<br />
Escreva(“Informe o salario”)<br />
Leia (salario)<br />
Se salario
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Observe o trecho do pseudocódigo acima, representado no fluxograma:<br />
salario<br />
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
No fluxograma, o símbolo que representa cada uma das condições acima, é o mesmo que<br />
o símbolo que representa a estrutura <strong>de</strong> <strong>de</strong>cisão. Veja a sintaxe da estrutura <strong>de</strong> <strong>de</strong>cisão<br />
<strong>de</strong> escolha no fluxograma:<br />
False<br />
False<br />
False<br />
Teste1<br />
Teste2<br />
Teste3<br />
True<br />
Vamos imaginar um exemplo parecido, <strong>de</strong> reajuste <strong>de</strong> salário, porém teremos as<br />
seguintes situações para reajuste:<br />
Salários inferiores a R$ 400,00 = reajuste <strong>de</strong> 9%<br />
Salários iguais a R$ 400,00 e inferiores a R$ 800,00 = reajuste <strong>de</strong> 7%<br />
Salários iguais a R$ 800,00 e inferiores a R$ 1000,00 = reajuste <strong>de</strong> 5%<br />
Fora das faixas supracitadas = reajuste <strong>de</strong> 3%<br />
Veja o pseudocódigo do exemplo citado:<br />
Algoritmo testa_salario2<br />
Variáveis<br />
Salário , Salario_final: REAL<br />
Inicio<br />
Ler salario<br />
Faca caso<br />
Caso salario < 400<br />
Salario_final=(salario*1.09)<br />
Caso salario >= 400 .e. salario=800 .e. salario
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Observe que, temos aqui uma novida<strong>de</strong>, ou seja, em uma única condição, estamos na<br />
verda<strong>de</strong> realizando dois testes, isto porque usamos o operador lógico “AND”“. e.”, ou seja,<br />
se salário menor ou igual a 400 e salário menor que 800 faça isso... assim<br />
sucessivamente.<br />
Quando usamos o operador lógico “.e.”, os testes, neste caso dois, que formam o caso,<br />
<strong>de</strong>vem ser verda<strong>de</strong>iros. O outro operador lógico “.ou.”, retorna verda<strong>de</strong>iro caso um dos<br />
testes que formam o conjunto satisfaça a uma <strong>de</strong>terminada condição.<br />
Como exercício, crie o fluxograma do pseudocódigo visto acima. A seguir iremos estudar<br />
as estruturas <strong>de</strong> repetição e <strong>de</strong>senvolver mais exemplos sobre o que estudamos neste<br />
módulo.<br />
EXERCÍCIOS:<br />
Seleção Simples:<br />
01 - Construa o fluxograma e o algoritmo que receba um número e mostre o seu quíntuplo<br />
somente quando o número digitado for maior que trinta.<br />
02 - Construa o fluxograma e o algoritmo que receba um número e mostre a sua meta<strong>de</strong><br />
somente quando ela for maior que cinqüenta.<br />
03 - Construa o fluxograma e o algoritmo que receba um número e mostre o número e o<br />
seu dobro somente quando o número for maior que noventa e menor que cem.<br />
4 - Construa o fluxograma e o algoritmo que receba. um número e mostre a sua quinta<br />
parte somente quando ela for menor que cinqüenta ou maior que mil.<br />
05 - Construa o fluxograma e o algoritmo que receba um número e mostre o seu sêxtuplo<br />
somente quando o resultado não for menor que trezentos.<br />
06 - Construa o fluxograma e o algoritmo que receba um número e mostre o número e o<br />
sêxtuplo somente quando o número for maior que noventa.<br />
07 - Construa o fluxograma e o algoritmo que receba dois números e mostre a diferença<br />
somente quando o primeiro for maior que o segundo.<br />
08 - Construa o fluxograma e o algoritmo que receba um número e mostre o número<br />
somente quando o número for par.<br />
09- Construa o fluxograma e o algoritmo que receba um número e mostre o número se ele<br />
estiver entre quinze(inclusive) e quarenta.<br />
10 - Construa o fluxograma e o algoritmo que receba um número e mostre o número<br />
somente se ele estiver entre trinta e duzentos e oitenta e um (inclusive).<br />
~ 28 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
11 - Faça o fluxograma e o algoritmo que receba nome, ida<strong>de</strong> e a altura, exiba somente o<br />
nome da pessoa com 1, 70m e ida<strong>de</strong> acima <strong>de</strong> 17 anos.<br />
12 - Faça o fluxograma e o algoritmo que receba o código, o valor unitário e a quantida<strong>de</strong><br />
<strong>de</strong> mercadoria adquirida. Calcule 6% <strong>de</strong> <strong>de</strong>scontos somente para o total da compra que<br />
ultrapassar a R$ 100,00. Ao final mostre o código, o total a pagar com, sem <strong>de</strong>sconto e o<br />
valor do <strong>de</strong>sconto.<br />
13 - Faça o fluxograma e o algoritmo que receba o número da conta, o nome, o en<strong>de</strong>reço<br />
e o consumo em kw/h, informe o número da conta, o nome e o en<strong>de</strong>reço da conta <strong>de</strong> luz<br />
em que o consumo for inferior a 100 kw/h.<br />
14 - Faça o fluxograma e o algoritmo que receba Nome, Turma e Três Notas do aluno.<br />
Calcule a média pon<strong>de</strong>rada consi<strong>de</strong>rando: primeira nota peso um, segunda nota peso<br />
dois e terceira nota peso três, informar o nome, a turma e a média do aluno que a média<br />
for inferior a sete.<br />
15 - Construa o fluxograma e o algoritmo que receba um número e mostre se o número<br />
recebido é ímpar.<br />
16 - Faça o fluxograma e o algoritmo que receba o salário <strong>de</strong> um funcionário, calcule e<br />
mostre o novo salário, sabendo-se que este sofreu um aumento <strong>de</strong> 25%. Este aumento é<br />
válido para os funcionários com mais <strong>de</strong> cinco anos <strong>de</strong> serviço.<br />
17 - Faça o fluxograma e o algoritmo que receba o salário <strong>de</strong> um funcionário, calcule e<br />
mostre o salário a receber, sabendo-se que esse funcionário tem gratificação <strong>de</strong> 5% sobre<br />
o salário-base. Pagará imposto <strong>de</strong> 7% sobre o salário, o funcionário cujo salário mais a<br />
gratificação ultrapassar a R$1.000,00.<br />
Seleção Composta:<br />
01 - Construa um algoritmo que receba dois números e mostre quando o primeiro for<br />
maior e quando for menor que o segundo.<br />
02 - Construa um algoritmo que receba dois números e mostre quando o primeiro for<br />
maior, quando for menor e quando for igual ao segundo.<br />
03 - Construa um algoritmo que receba três números e mostre quando o número estiver<br />
na situação <strong>de</strong> maior número digitado.<br />
04 - Faça um algoritmo que receba dois números e informe a diferença do maior pelo<br />
menor.<br />
05 - Faça um algoritmo que receba a matrícula e duas notas do aluno. Calcular a média e<br />
mostrar a matrícula do aluno com as seguintes mensagens <strong>de</strong> acordo com a tabela<br />
abaixo:<br />
média> 7,0 - "Aluno Aprovado"<br />
média = 7,0 - "Aluno em Recuperação"<br />
média < 7,0 -" Aluno Reprovado"<br />
~ 29 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
06 - Faça um algoritmo que receba o código, o preço e o tamanho da camiseta. Sabe-se<br />
que <strong>de</strong> acordo com o tamanho há um <strong>de</strong>sconto conforme tabela abaixo. Informar o<br />
código, e o valor do <strong>de</strong>sconto.<br />
tamanho "G" - 1 0%<br />
tamanho "M" - 20%<br />
tamanho "P" - 30%<br />
07 - Faça um algoritmo que receba o nome e o salário do funcionário, calcule os<br />
<strong>de</strong>scontos conforme a tabela e informe o nome, o salário a receber e os <strong>de</strong>scontos<br />
(separados) do funcionário.<br />
SALARIO INSS IR<br />
Até 500,00 3,00% 2,00%<br />
500,01 a 950,00 5,00% 4,00%<br />
Acima <strong>de</strong> 950,00 7,00% 6,00%<br />
08- Faça um algoritmo que receba o código e o total <strong>de</strong> vendas do ven<strong>de</strong>dor, calcule a<br />
comissão conforme a tabela e informe o código e a comissão do ven<strong>de</strong>dor.<br />
TOTAL DAS VENDAS COMISSÃO<br />
Até 100,00 0,00%<br />
Acima 100,00 até 350,00 5,00%<br />
Acima 350,00 10,00%<br />
09 - Faça um algoritmo que receba a matrícula e o salário do funcionário, calcule a<br />
gratificação conforme a tabela e informe a matrícula, salário a receber e o valor da<br />
gratificação do funcionário.<br />
SALÁRIO GRATIFICAÇÃO<br />
até 500,00 15,00%<br />
500,01 a 1.000,00 10,00%<br />
Acima 1.000,00 5,00%<br />
10 - Faça um algo ritmo que receba um número e informe quando ele for maior e menor<br />
que o número 100.<br />
11 - Faça um algoritmo que receba dois pesos e mostre quando o primeiro peso for maior<br />
que o segundo peso.<br />
~ 30 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
12 - Faça um algoritmo que receba duas ida<strong>de</strong>s e mostre quando a primeira ida<strong>de</strong> for<br />
maior, quando for igual e quando for menor que a segunda ida<strong>de</strong> (mostrar<br />
separadamente)<br />
13 - Faça um algoritmo que receba três alturas e informe quando a altura quando ela<br />
estiver na situação <strong>de</strong> maior altura.<br />
14 - Faça um algoritmo que receba o nome e o sexo <strong>de</strong> uma pessoa. Informar o nome<br />
quando masculino e quando feminino.<br />
15 - Faça um algoritmo que receba a matrícula e o salário do funcionário. Sabe-se que <strong>de</strong><br />
acordo com o salário há uma gratificação conforme tabela abaixo. Informar a matrícula e a<br />
gratificação.<br />
Acima <strong>de</strong> R$300,OO - 5%<br />
Abaixo <strong>de</strong> R$ 300,00 - 10%<br />
R$ 300,00 - 6%<br />
~ 31 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
5- ESTRUTURAS DE REPETIÇÃO<br />
Vamos falar um pouco sobre as estruturas <strong>de</strong> repetição, ou seja, uma parte do código que<br />
<strong>de</strong>verá ser executada n vezes.<br />
Em linguagem <strong>de</strong> programação, as estruturas <strong>de</strong> repetição são conhecidas como laços<br />
(loops).<br />
Trabalhamos basicamente com dois tipos <strong>de</strong> estruturas <strong>de</strong> repetição:<br />
1. LAÇOS CONTADOS: Quando se tem, <strong>de</strong> forma prévia, o número <strong>de</strong> vezes que uma<br />
<strong>de</strong>terminada seqüência <strong>de</strong> comandos será executada.<br />
2. LAÇOS CONDICIONAIS: Aqueles que não possuem um número pré-<strong>de</strong>terminado <strong>de</strong><br />
vezes que a estrutura <strong>de</strong> comandos será executada, porém este número estará vinculado<br />
a uma <strong>de</strong>terminada condição.<br />
Laços Contados (PARA):<br />
Em pseudocódigo, utilizamos a seguinte sintaxe para laços contados:<br />
Para = até Passo faca<br />
<br />
Fim para<br />
On<strong>de</strong>: A variável é aquela que irá receber a contagem. Os valores iniciais e finais<br />
representam on<strong>de</strong> começa e termina a contagem da repetição. O número <strong>de</strong> Passo<br />
(incremento) estipula a forma da contagem, como por exemplo, incrementos <strong>de</strong> 1 em 1, 2<br />
em 2 .... e após , a seqüência <strong>de</strong> comandos que será executada durante o laço.<br />
No fluxograma, utilizamos a seguinte sintaxe para representar laços contados:<br />
~ 32 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
A lógica <strong>de</strong> trabalho do laço contado é apresentada a seguir:<br />
1. No inicio da leitura do código/fluxo, o valor inicial é atribuído à variável;<br />
2. O valor da variável é comparado ao valor final;<br />
3. Se o valor da variável for maior que o valor final, a seqüência <strong>de</strong> comandos que faz<br />
parte do laço não é executado e o controle do processo passa para a próxima linha após<br />
o final do laço (FIM PARA) ou para o símbolo ao lado (no caso <strong>de</strong> fluxograma);<br />
4. Se o valor da variável for menor ou igual ao do valor final, a seqüência <strong>de</strong> comandos é<br />
executada e, ao final do último comando, o valor do incremento é adicionado a variável<br />
e retorna-se à comparação entre variável e valor_final, repetindo todo o processo anterior.<br />
Vale lembrar que o incremento não é <strong>de</strong> <strong>de</strong>claração obrigatória, e, caso não seja<br />
<strong>de</strong>clarado, assume automaticamente o valor 1.<br />
laços Condicionais ENQUANTO/REPITA ATE:<br />
Já os laços condicionais são aqueles cujo conjunto <strong>de</strong> comandos em seu interior é<br />
executado até que uma <strong>de</strong>terminada condição seja satisfeita.<br />
ENQUANTO:<br />
O pseudocódigo mais comum utilizado neste sentido (enquanto) é o apresentado a seguir:<br />
Enquanto Faça<br />
<br />
Fim enquanto<br />
A sintaxe <strong>de</strong> execução <strong>de</strong>ste é:<br />
~ 33 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
1. No inicio da execução do enquanto, a condição é testada;<br />
2. Se o resultado do teste for verda<strong>de</strong>iro, a seqüência <strong>de</strong> comandos é executada e ao<br />
término <strong>de</strong>sta, retorna-se ao teste da condição;<br />
3. Sendo a condição falsa, o controle da aplicação passa para a próxima linha após o<br />
Fim_enquanto.<br />
No fluxograma, po<strong>de</strong>remos representar este tipo <strong>de</strong> operação da forma que segue:<br />
Em resumo, neste tipo <strong>de</strong> operação, a execução somente abandonará o laço quando a<br />
condição for falsa e neste caso a condição <strong>de</strong> parada <strong>de</strong>ve ser elaborada com todo o<br />
cuidado para evitar laços infinitos na execução do algoritmo.<br />
REPITA ATE:<br />
Outro tipo <strong>de</strong> laço condicional é o REPITA ATE, apresentado a seguir:<br />
Repita<br />
<br />
Ate <br />
A sintaxe <strong>de</strong> execução <strong>de</strong>ste é:<br />
1.Executa a primeira iteração do laço;<br />
~ 34 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
2.Se o resultado do teste for verda<strong>de</strong>iro, a seqüência <strong>de</strong> comandos é executada e ao<br />
término <strong>de</strong>sta, retorna-se ao teste da condição;<br />
3.Se a condição for falsa, executa nova iteração do laço, se a condição <strong>de</strong> parada for<br />
verda<strong>de</strong>ira encerra a execução do laço<br />
No fluxograma, po<strong>de</strong>remos representar este tipo <strong>de</strong> operação da forma que segue:<br />
Veja um exemplo a seguir, utilizando-se <strong>de</strong> pseudocódigo, on<strong>de</strong> iremos apresentar a<br />
soma <strong>de</strong> uma contagem <strong>de</strong> números <strong>de</strong> 1 à 5:<br />
Algoritmo soma<br />
Variáveis<br />
Soma: REAL // Acumulador<br />
Contador: INTEIRO // Contador<br />
Inicio<br />
Soma = 0<br />
Escrever“A soma dos números <strong>de</strong> 1 à 10 é igual a”<br />
Para contador = 1 até 10 faca<br />
Soma = soma + contador<br />
Fim para<br />
Escrever soma<br />
Fim.<br />
No exercício acima, teremos como resultado a expressão :<br />
~ 35 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
A soma dos números <strong>de</strong> 1 à 10 é igual a 55<br />
Desenhe o fluxograma do pseudocódigo acima <strong>de</strong>scrito.<br />
EXERCÍCIOS:<br />
Laços contados:<br />
01 - Construa um algoritmo que receba trinta números e mostre a soma total dos números<br />
recebidos.<br />
02 - Construa um algoritmo que receba cinqüenta números e mostre a média dos<br />
números que foram digitados.<br />
03 - Construa um algoritmo que receba a ida<strong>de</strong> <strong>de</strong> cem pessoas e mostre a média das<br />
ida<strong>de</strong>s <strong>de</strong>stas pessoas.<br />
04 - Construa um algoritmo que leia cem números e mostre qual o maior número que foi<br />
lido.<br />
05 - Construa um algoritmo que leia cinqüenta números e mostre qual o menor número<br />
lido.<br />
06 - Construa um algoritmo que leia cento e cinqüenta números e mostre qual o maior e o<br />
menor número lido.<br />
07 - Construir um algoritmo que receba cem números e informe a média e a soma entre<br />
os números positivos.<br />
08 - Construa um algoritmo que receba quinze números quaisquer e informe qual o maior<br />
e o menor entre os números que foram lidos.<br />
09 - Escrever um algoritmo que receba 100 números, e contar quantos <strong>de</strong>les estão no<br />
intervalo [10,20] e quantos <strong>de</strong>les estão fora do intervalo, escrevendo estas informações.<br />
10 - Faça um algoritmo que receba o peso, a ida<strong>de</strong> e a altura <strong>de</strong> cem pessoas, calcule e<br />
informe os valores <strong>de</strong>: maior peso, menor peso, maior altura, menor altura, maior ida<strong>de</strong> e<br />
menor ida<strong>de</strong> <strong>de</strong>ste grupo.<br />
11 - Escrever um algoritmo que lê 50 números e informar quantos <strong>de</strong>stes valores são<br />
negativos.<br />
~ 36 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
12 - Uma loja tem 150 clientes cadastrados e <strong>de</strong>seja mandar uma correspondência a cada<br />
um <strong>de</strong>les anunciando um bônus especial. Escreva um algoritmo que leia o nome, o<br />
en<strong>de</strong>reço do cliente e o valor <strong>de</strong> suas compras e calcule um bônus <strong>de</strong> 10% se o valor das<br />
compras for menor ou igual a 500.000 e <strong>de</strong>15 %, se superior a este valor.<br />
13 - Faça um algoritmo que receba o salário-base dos1200 funcionário <strong>de</strong> uma fábrica,<br />
calcular os <strong>de</strong>scontos com vale transporte (vt) 2% e vale refeição (vr) 3%.Mostrar o total<br />
dos <strong>de</strong>scontos efetuados separadamente.<br />
14 - Faça um algoritmo que receba o número do apartamento e o consumo em kw/h dos<br />
setenta e dois apartamentos <strong>de</strong>ste edifício. Informe os apartamentos com. o consumo<br />
inferior ou igual a 100 kw/h(inclusive} e os que ultrapassaram este consumo..<br />
15 - Faça um algoritmo que receba o tamanho <strong>de</strong> 500 camisetas existente no<br />
almoxarifado e ao final informe quantas camisetas <strong>de</strong> cada tamanho P, M, G, GG.<br />
Laços condicionais:<br />
1 - Construa um algoritmo para somar os números recebidos. O algoritmo encerra quando<br />
digitado o número zero.<br />
2 - Construa um algoritmo que leia vários números e mostre quantos números foram lidos.<br />
O algoritmo encerra quando digitado o número O.<br />
3 - Faça um algoritmo que receba vários números e mostre a média dos números<br />
recebidos. O final é conhecido pelo número zero.<br />
4 - Faça um algoritmo que receba vários números, calcule e informe a média, a soma e a<br />
quantida<strong>de</strong> <strong>de</strong> números recebidos. O algoritmo encerra quando digitado o número O.<br />
5 - Faça um algoritmo que receba a sigla da cida<strong>de</strong> <strong>de</strong> origem <strong>de</strong> um grupo <strong>de</strong> pessoas,<br />
ao final informe quantas foram digitadas das cida<strong>de</strong>s do Rio <strong>de</strong> Janeiro, Belo Horizonte e<br />
Santa Catarina (separadamente). O algoritmo encerra quando digitado "fim".<br />
6 - Elabore um algoritmo que recebe o sexo dos alunos <strong>de</strong> um <strong>de</strong>terminado colégio e<br />
informe o número <strong>de</strong> alunas e alunos separados e o número <strong>de</strong> digitações inválidas. O<br />
algoritmo encerra quando digitado o sexo "fim".<br />
7 - Construa um algoritmo que receba o estado civil (cl sI v) <strong>de</strong> um grupo <strong>de</strong> pessoas,<br />
calcular e informar a quantida<strong>de</strong> <strong>de</strong> solteiros, casados, viúvos, o número <strong>de</strong> digitações<br />
válidas e inválidas. O algoritmo encerra quando digitado o estado civil "Fim"<br />
8 - Foi feita uma pesquisa entre os habitantes <strong>de</strong> uma região. Foi coletado o salário <strong>de</strong><br />
cada habitante. Calcule e informe:<br />
a) a média <strong>de</strong> salário;<br />
b) o maior e o menor salário:<br />
Encerre a entrada <strong>de</strong> dados quando for digitado o salário O.<br />
~ 37 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
9 - Foi realizada uma pesquisa <strong>de</strong> algumas características físicas da população <strong>de</strong> uma<br />
certa região, a qual coletou os seguintes dados referente a cada habitante para serem<br />
analisados:<br />
- sexo (masculino e feminino) - olhos (claros e pretos) - cabelos ( louros, castanhos ou<br />
pretos) Faça um algoritmo que calcule e informe a quantida<strong>de</strong> <strong>de</strong> pessoas do sexo<br />
feminino, com olhos claros e cabelos louros. O final do conjunto <strong>de</strong> habitantes é<br />
reconhecido pelo sexo em branco" "<br />
10 - Faça um algoritmo que receba a ida<strong>de</strong> e a altura <strong>de</strong> um conjunto <strong>de</strong> pessoas. Calcule<br />
e informe média <strong>de</strong> altura e da ida<strong>de</strong> das pessoas. Para encerrar a entrada <strong>de</strong> dados,<br />
digite a ida<strong>de</strong> igual a O.<br />
11 - Construa um algoritmo que receba o peso dos bois <strong>de</strong> uma <strong>de</strong>terminada Fazenda.<br />
Calcular e informar a quantida<strong>de</strong> <strong>de</strong> bois, o maior peso e o menor peso. Encerra quando<br />
digitado o peso o.<br />
12 - Faça um algoritmo que receba a altura <strong>de</strong> um grupo <strong>de</strong> pessoas. Calcule e informe a<br />
maior altura e a menor altura.<br />
13 - Foi feita uma pesquisa <strong>de</strong> audiência <strong>de</strong> canal <strong>de</strong> televisão em várias casas <strong>de</strong> uma<br />
<strong>de</strong>terminada cida<strong>de</strong>. Será fornecido o número da casa e o do canal <strong>de</strong> televisão que<br />
estiver ligado no momento, caso a televisão estiver <strong>de</strong>sligada é fornecido o número zero,<br />
bem como para a residência fechada. Calcular e informar: A quantida<strong>de</strong> <strong>de</strong> residências<br />
fechadas, televisões <strong>de</strong>sligadas e a quantida<strong>de</strong> <strong>de</strong> residências com a televisão<br />
sintonizada no canal dois. Encerra a pesquisa quando fornecido para o número da<br />
residência um valor negativo.<br />
~ 38 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
6- ANINHAMENTOS<br />
Vamos falar sobre aninhamentos, ou seja, ter um conjunto <strong>de</strong> comandos <strong>de</strong> outra<br />
construção <strong>de</strong>ntro <strong>de</strong> qualquer um dos tipos <strong>de</strong> construções apresentadas até este<br />
momento, para isso, terá que ter a construção interna embutida <strong>de</strong>ntro da construção<br />
externa.<br />
O conjunto <strong>de</strong> comandos é um conjunto <strong>de</strong> comandos simples, po<strong>de</strong>m ser inclusive <strong>de</strong><br />
instruções primitivas.<br />
Por exemplo, temos uma <strong>de</strong>terminada situação:<br />
Vamos testar a região na qual um <strong>de</strong>terminado cliente tem o seu domicílio e, <strong>de</strong>ntro do<br />
estado na qual este cliente resi<strong>de</strong> naquela região, teremos uma tarifa <strong>de</strong> postagem<br />
diferenciada.<br />
Na verda<strong>de</strong>, teremos testes <strong>de</strong>ntro <strong>de</strong> testes e cada um com um <strong>de</strong>terminado<br />
procedimento.<br />
Vamos passar então para os exercícios propostos.<br />
• Exercício 001 :<br />
Escreva um pseudocódigo que irá receber a entrada <strong>de</strong> dois números e irá retornar como<br />
saída a entrada (número) <strong>de</strong> maior valor.<br />
• Exercício 002 :<br />
Escreva um pseudocódigo na qual o usuário irá ter a oportunida<strong>de</strong> <strong>de</strong> entrar com 5<br />
números e o sistema irá gerar como resultado a soma dos 5 números entrados pelo<br />
usuário.<br />
• Exercício 003 :<br />
Uma empresa irá oferecer um reajuste salarial, cujo percentual será <strong>de</strong>cidido através das<br />
seguintes situações:<br />
• Funcionários do sexo masculino com tempo <strong>de</strong> casa superior ou igual a 10 anos terão<br />
direito a um reajuste <strong>de</strong> 5%;<br />
• Funcionários do sexo masculino com tempo <strong>de</strong> casa inferior a 10 anos terão direito a<br />
um reajuste <strong>de</strong> 3%;<br />
• Funcionários do sexo feminino com tempo <strong>de</strong> casa superior ou igual a 8 anos terão<br />
direito a um reajuste <strong>de</strong> 5%;<br />
• Funcionários do sexo feminino com tempo <strong>de</strong> casa inferior a 8 anos terão direito a um<br />
reajuste <strong>de</strong> 3%;<br />
• Funcionários em qualquer uma das situações acima, porém com mais <strong>de</strong> um<br />
<strong>de</strong>pen<strong>de</strong>nte terá ainda um reajuste <strong>de</strong> 2% sobre o salário reajustado anteriormente.<br />
~ 39 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
• Exercício 004 :<br />
Escreva um fluxograma na qual o usuário dará a entrada <strong>de</strong> 10 números e ao final o<br />
sistema irá exibir o maior número informado pelo usuário.<br />
~ 40 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
7- ESTRUTURAS DE DADOS COMPOSTAS<br />
O tema <strong>de</strong>ste módulo será o das variáveis in<strong>de</strong>xadas. Com uso frequente na<br />
programação convencional, variável in<strong>de</strong>xada é um conjunto <strong>de</strong> variáveis do mesmo tipo,<br />
referenciadas pelo mesmo nome e que armazenam valores distintos.<br />
A sua distinção se dá pela divisão da variável, possuindo esta uma posição <strong>de</strong><br />
armazenamento <strong>de</strong>ntro <strong>de</strong> seu conjunto, sendo que a alteração ou a leitura do seu valor é<br />
realizada por meio <strong>de</strong> índices, daí o nome in<strong>de</strong>xada. Existem dois tipos <strong>de</strong> variáveis<br />
in<strong>de</strong>xadas:<br />
• Vetor: quando a variável in<strong>de</strong>xada possui um único índice (uma dimensão);<br />
• Matriz: quando a variável in<strong>de</strong>xada possui dois índices (duas dimensões –<br />
X,Y/Coluna,Linha)<br />
O número <strong>de</strong> índices <strong>de</strong>ntro <strong>de</strong> uma variável é <strong>de</strong>nominado dimensão.<br />
Para se <strong>de</strong>finir uma variável in<strong>de</strong>xada, utilizamos a seguinte sintaxe:<br />
Tipos<br />
tipo Nome_tipo = Vetor[numero <strong>de</strong> elementos] : tipo <strong>de</strong> dado<br />
Variáveis<br />
Nome_variável_Vetor : Nome_tipo<br />
...<br />
...<br />
Veja a seguir alguns exemplos <strong>de</strong> <strong>de</strong>finição <strong>de</strong> variáveis in<strong>de</strong>xadas:<br />
Tipos<br />
tipo V = vetor[5] : CARACTER[30]<br />
Variáveis<br />
Nome : V<br />
No exemplo acima, criamos na verda<strong>de</strong> cinco variáveis nomes, porém elas estão divididas<br />
da seguinte forma:<br />
Nome[1], Nome[2], Nome[3], Nome[4], Nome[5]<br />
Sendo que cada uma das dimensões, po<strong>de</strong>rá armazenar um valor diferenciado para uma<br />
ca<strong>de</strong>ia <strong>de</strong> caracteres <strong>de</strong> 30 posições.<br />
Tipos<br />
tipo V = vetor[5] : REAL<br />
Variáveis<br />
Salario : V<br />
A variável Salario é um vetor <strong>de</strong> 5 posições do tipo Real, assim como a variável Nome.<br />
~ 41 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Os exemplos acima são do tipo Vetor, abaixo veremos uma variável in<strong>de</strong>xada do tipo<br />
matriz:<br />
Tipos<br />
tipo M = vetor[3,10] : Inteiro<br />
Variáveis<br />
CodigoProduto : M<br />
No exemplo anterior, teremos a variável CodigoProduto, dividida nas seguintes<br />
dimensões:<br />
CodigoProduto[1,1] CodigoProduto[2,1] CodigoProduto[3,1]<br />
CodigoProduto[1,2] CodigoProduto[2,2] CodigoProduto[3,2]<br />
CodigoProduto[1,3] CodigoProduto[2,3] CodigoProduto[3,3]<br />
CodigoProduto[1,4] CodigoProduto[2,4] CodigoProduto[3,4]<br />
CodigoProduto[1,5] CodigoProduto[2,5] CodigoProduto[3,5]<br />
CodigoProduto[1,6] CodigoProduto[2,6] CodigoProduto[3,6]<br />
CodigoProduto[1,7] CodigoProduto[2,7] CodigoProduto[3,7]<br />
CodigoProduto[1,8] CodigoProduto[2,8] CodigoProduto[3,8]<br />
CodigoProduto[1,9] CodigoProduto[2,9] CodigoProduto[3,9]<br />
CodigoProduto[1,10] CodigoProduto[2,10] CodigoProduto[3,10]<br />
Quando estamos trabalhando com variáveis in<strong>de</strong>xadas, temos que obrigatoriamente<br />
especificar o índice da variável na qual queremos trabalhar. Nos exemplos acima, não<br />
po<strong>de</strong>ríamos nos referir apenas à variável NOME, mas sim a NOME[n], on<strong>de</strong> o “n” seria<br />
uma dimensão válida, neste caso <strong>de</strong> 1 à 5.<br />
Vamos fazer um pequeno exercício:<br />
Seja a seguinte variável in<strong>de</strong>xada bidimensional A:<br />
A<br />
1 175 225 10 9000 3,7 4,75<br />
2 9,8 100 363 432 156 18<br />
3 40 301 30,2 6381 1 0<br />
4 402 4211 7213 992 442 7321<br />
5 21 3 2 1 9000 2000<br />
1 2 3 4 5 6<br />
a) Quantos elementos fazem parte do conjunto?<br />
b) Qual o conteúdo do elemento i<strong>de</strong>ntificado por A [4,5] ?<br />
c) Qual o conteúdo <strong>de</strong> X após a execução do comando X := A [3,2] + A [5,1] ?<br />
d) O que aconteceria caso fosse referenciado o elemento A [6,2] no programa?<br />
e) Somar os elementos da quarta coluna: A [1,4] + A [2,4] + A [3,4] + A [4,4] + A [5,4];<br />
f) Somar os elementos da terceira linha: (A [3, 1] + A [3,2] + A [3,3] + A [3,4]).<br />
~ 42 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Agora vamos exibir um exemplo <strong>de</strong> algoritmo on<strong>de</strong> iremos preencher os valores para a<br />
variável Nome em suas diversas dimensões e em seguida listar os mesmos:<br />
Algoritmo Nomes<br />
Tipos<br />
tipo V = vetor[5] : caracter[30]<br />
Variáveis<br />
Nome : V<br />
Conta , Lista: INTEIRO<br />
Inicio<br />
Para conta = 1 até 5 passo 1faca<br />
Ler Nome[conta]<br />
Fim para<br />
Fim.<br />
Para lista = 1 até 5 passo 1 faca<br />
Escrever Nome[lista]<br />
Fim para<br />
Exercício 001: Escreva um pseudocódigo que irá ler e armazenar em variável in<strong>de</strong>xada<br />
10 números e após o final da leitura, irá exibir a soma dos 10 números armazenados nas<br />
<strong>de</strong>z posições da variável in<strong>de</strong>xada.<br />
Exercício 002: Escreva um pseudocódigo que irá ler e armazenar em variável in<strong>de</strong>xada<br />
50 números e após o final <strong>de</strong> leitura, irá apresentar o número da posição e o valor<br />
armazenado na posição <strong>de</strong> variável in<strong>de</strong>xada que conterá o maior valor lido.<br />
Quando trabalhamos com variáveis in<strong>de</strong>xadas, po<strong>de</strong>remos entre outros criar “índices”, ou<br />
seja, or<strong>de</strong>nar os vetores para que eles sejam apresentados em uma <strong>de</strong>terminada or<strong>de</strong>m.<br />
Este procedimento, também é conhecido, em sua forma mais simples como “Bolha <strong>de</strong><br />
Classificação”. Sua lógica consiste na leitura <strong>de</strong> todos os elementos <strong>de</strong> um vetor,<br />
comparando-se os valores <strong>de</strong> seus elementos vizinhos, e neste momento é empregada a<br />
seguinte seqüência:<br />
1. Serão realizadas varreduras a menos do total <strong>de</strong> elementos do vetor;<br />
2. Na primeira varredura, verificamos que o elemento do vetor já se encontra em seu<br />
<strong>de</strong>vido lugar;<br />
3. Na segunda varredura, o procedimento é análogo à primeira varredura e vai até o<br />
último elemento;<br />
4. Ao final do procedimento, o vetor estará classificado segundo o critério escolhido.<br />
Vamos à prática, no exemplo a seguir, iremos realizar a leitura <strong>de</strong> 5 números e em<br />
seguida classificá-los em or<strong>de</strong>m crescente:<br />
Algoritmo classificação<br />
~ 43 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Tipos<br />
tipo V = vetor[50] : inteiro<br />
Variáveis<br />
numero : V<br />
A,B: INTEIRO<br />
Aux: REAL<br />
Inicio<br />
Para A = 1 até 50 faça<br />
Ler numero[A]<br />
Fim para<br />
B=50<br />
Enquanto B > 1 faça<br />
Para A = 1 até ( B-1 ) faça<br />
Se numero[A] > numero[A+1}<br />
Então<br />
Aux=numero[A]<br />
numero[A]=numero[A+1]<br />
numero[A+1]=Aux<br />
Fim se<br />
Fim para<br />
B=B-1<br />
Fim enquanto<br />
Escrever “Abaixo, a listagem or<strong>de</strong>nada dos números entrados”<br />
Para A <strong>de</strong> 1 até 50 faça<br />
Escrever numero[A]<br />
Fim para<br />
Fim.<br />
Outro processo que po<strong>de</strong>rá ser utilizado em programação é a pesquisa seqüencial, ou<br />
seja, serão verificados todos os componentes <strong>de</strong> um vetor, para verificar se nestes estão<br />
armazenados um <strong>de</strong>terminado valor. Exemplo:<br />
Iremos efetuar a leitura <strong>de</strong> 100 nomes, em seguida, será solicitado um nome qualquer e,<br />
iremos verificar se, <strong>de</strong>ntre os 100 nomes entrados, existe o nome na qual foi solicitada a<br />
pesquisa. Veja este algoritmo a seguir:<br />
Algoritmo pesquisa<br />
Tipos<br />
tipo V1 = vetor[100] : caracter[30]<br />
Variáveis<br />
nome : V1<br />
pesquisado : CARACTER[30]<br />
contador : INTEIRO<br />
encontrado : LOGICO<br />
Inicio<br />
Para contador = 1 até 100 faça<br />
Ler nome[contador]<br />
Fim para<br />
Ler pesquisado<br />
~ 44 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Fim.<br />
Escrever “Aguar<strong>de</strong> ... pesquisando no banco <strong>de</strong> dados”<br />
contador=1<br />
encontrado=.F.<br />
Enquanto (contador
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
7 - Escreva um algoritmo que receba e armazene em um vetor, quinze números. Ao final<br />
mostre todos os números pares do vetor e sua respectiva posição.<br />
8 - Fazer um algoritmo em que sejam carregados dois vetores <strong>de</strong> 25 números inteiros:<br />
a) intercale os elementos <strong>de</strong>stes dois vetores formando um novo vetor <strong>de</strong> 50 elementos;<br />
b) exiba os números do novo vetor.<br />
9 - Fazer um algoritmo que:<br />
a) leia um vetor A com 30 valores numéricos:<br />
b) leia um outro vetor B com 30 valores numéricos;<br />
c) leia o valor <strong>de</strong> uma variável X;<br />
d) verifique qual o elemento <strong>de</strong> A que é igual a X;<br />
e) exiba o elemento <strong>de</strong> B <strong>de</strong> posição correspon<strong>de</strong>nte à do elemento <strong>de</strong> A igual a X, se<br />
existir.<br />
10 - Dada uma matriz quadrada P, <strong>de</strong> or<strong>de</strong>m 10:<br />
Some os quadrados dos elementos da 1 a coluna;<br />
Some os elementos da 2 a linha;<br />
Some os elementos da diagonal principal;<br />
Some todos os elementos;<br />
Some os elementos <strong>de</strong> índice ímpar da 2 a linha.<br />
11 - Dadas as variáveis in<strong>de</strong>xadas A e B abaixo;<br />
A B<br />
7 8 4 9 6 9 11 15<br />
2 1 7 3 32 19 3 4<br />
Calcular o conjunto C = A + B.<br />
12 – Construa um fluxograma e o algoritmo que carregue 100 números inteiros positivos<br />
(<strong>de</strong>ve ser feito o teste para garantir a não inclusão <strong>de</strong> números inválidos – utilize o laço<br />
“repita até” neste teste). O programa <strong>de</strong>ve calcular a média dos números do vetor, e ao<br />
final mostrar todos os números que são maiores que a média.<br />
13 – Faça o fluxograma e o algoritmo que carregue um vetor com 50 nomes, or<strong>de</strong>ne e<br />
mostre o vetor or<strong>de</strong>nado.<br />
14 – Faça o fluxograma e o algoritmo que carregue um vetor com 50 nomes, <strong>de</strong>pois<br />
solicite ao usuário um nome e verifique se o mesmo existe no vetor ou não (mostrar o<br />
nome e a posição no vetor caso exista e uma mensagem indicativa, caso não exista). A<br />
solicitação <strong>de</strong>ve ser repetida ate que o usuário digite a palavra “fim”.<br />
15 – Faça o fluxograma e o algoritmo que carregue um vetor com 100 números inteiros,<br />
verifique cada número, se este for par, multiplique por 3 e atualize o seu valor no vetor. Ao<br />
final, mostre todos os elementos do vetor.<br />
~ 46 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
16 – Faça o fluxograma e o algoritmo que carregue um vetor com 150 números inteiros,<br />
gere um segundo vetor com todos os números do primeiro vetor multiplicados por 2.<br />
mostre ambos os vetores.<br />
17 – Faça o fluxograma e o algoritmo que carregue uma matriz <strong>de</strong> dimensão 5x5, calcule<br />
e mostre a soma <strong>de</strong> todos os elementos e uma listagem com cada um dos elementos da<br />
matriz.<br />
18 – Faça o fluxograma e o algoritmo que carregue duas matrizes <strong>de</strong> dimensão 6x6. Gere<br />
uma terceira matriz com a soma das duas anteriores e mostre seus valores.<br />
19 – Faça o fluxograma e o algoritmo que carregue um vetor com 60 posições, calcule e<br />
mostre a soma <strong>de</strong> todos os elementos das posições pares e impares do vetor.<br />
20 – Faça o fluxograma e o algoritmo que carregue uma matriz <strong>de</strong> dimensão 10x10,<br />
calcule e mostre a soma <strong>de</strong> cada uma das linhas e <strong>de</strong> cada uma das colunas da matriz.<br />
21 - Faça um fluxograma e o algoritmo que:<br />
O usuário preencha com quaisquer valores inteiros um vetor <strong>de</strong> trinta posições. Calcule a<br />
média <strong>de</strong>les. Os valores menores que a média <strong>de</strong>vem ser copiados em outro vetor, o qual<br />
<strong>de</strong>ve ficar em or<strong>de</strong>m crescente. Liste os dados do primeiro vetor e tantos quantos<br />
houverem no segundo vetor. Use mensagens claras para o usuário tomar conhecimento<br />
dos passos sendo executados.<br />
22 - Faça um fluxograma e o algoritmo que:<br />
O usuário preencha com quaisquer valores inteiros um vetor <strong>de</strong> trinta posições. Calcule a<br />
média <strong>de</strong>les. Os valores maiores que a média <strong>de</strong>vem ser copiados em outro vetor, o qual<br />
<strong>de</strong>ve ficar em or<strong>de</strong>m crescente. Liste os dados do primeiro vetor e tantos quantos<br />
houverem no segundo vetor. Use mensagens claras para o usuário tomar conhecimento<br />
dos passos sendo executados. O fluxograma e o portugol <strong>de</strong>vem ser entregues passados<br />
a limpo. Consulte apenas o seu material.<br />
23 - Faça um Fluxograma e o algoritmo que:<br />
O usuário insere em um vetor “N” 40 números negativos, seguido da digitação <strong>de</strong><br />
outros 40 números maiores que zero em um “P” (faça o teste para permitir somente a<br />
entrada <strong>de</strong> valores válidos). Faça um vetor “V”, <strong>de</strong> tal forma que cada elemento seu seja a<br />
soma dos elementos <strong>de</strong> “P” e “N”, <strong>de</strong> mesma i-ésima posição, e caso a soma seja<br />
negativa transforme-a em positivo. Liste “V”, mostre a média, o maior e o menor valor do<br />
mesmo. Apresente ao usuário a opção <strong>de</strong> pesquisar um valor qualquer em “V”,<br />
informando a localização do mesmo ou <strong>de</strong>clarando que não existe tal valor no vetor.<br />
Repetir o procedimento <strong>de</strong> consulta, até que o usuário <strong>de</strong>cida encerrar a execução do<br />
algoritmo.<br />
24 - Faça um fluxograma e o algoritmo que leia um vetor <strong>de</strong> 20 valores numéricos e<br />
or<strong>de</strong>ne esse vetor em or<strong>de</strong>m crescente. O programa também <strong>de</strong>ve ler um número K e<br />
imprimir, antes e <strong>de</strong>pois da or<strong>de</strong>nação, o K-ésimo termo da variável composta.<br />
~ 47 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
25 - Faça um fluxograma e o algoritmo que leia e armazene 30 valores reais positivos,<br />
<strong>de</strong>termine a sua média e gere um segundo vetor, no qual cada elemento é calculado a<br />
partir do elemento correspon<strong>de</strong>nte do primeiro vetor mais 30% caso seja menor que a<br />
média, senão mais 20% do mesmo. Mostre os dois vetores. O calculo <strong>de</strong> 30%<br />
correspon<strong>de</strong> a multiplicar por 1.3 e 20% por 1.2.<br />
26 - Faça um fluxograma e o algoritmo que leia e armazene 70 valores reais positivos,<br />
<strong>de</strong>termine a sua média e mostre-a. Gere um segundo vetor, no qual cada elemento é<br />
calculado a partir do elemento correspon<strong>de</strong>nte do primeiro vetor subtraído da média<br />
<strong>de</strong>terminada para o primeiro vetor. Calcule o somatório dos valores negativos do segundo<br />
vetor e mostre . Mostre os dois vetores.<br />
~ 48 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
8- MODULARIZANDO ALGORITMOS – PROCEDIMENTOS E FUNÇÕES<br />
Em <strong>de</strong>terminadas situações, <strong>de</strong>vido à complexida<strong>de</strong> <strong>de</strong> alguns algoritmos, é necessária a<br />
divisão do mesmo em diversas partes, para que assim, o sistema tenha uma operação<br />
precisa. Essa divisão <strong>de</strong> tarefas é <strong>de</strong>nominada <strong>de</strong> “Subalgoritmos”. Os subalgoritmos<br />
nada mais são do que rotinas que possuem uma função específica.<br />
A modularização consiste num método para facilitar a construção <strong>de</strong> gran<strong>de</strong>s<br />
programas, através <strong>de</strong> sua divisão em pequenas etapas, que são: módulos, rotinas, subrotinas<br />
ou sub-programas. Permitindo o reaproveitamento <strong>de</strong> código, já que po<strong>de</strong>mos<br />
utilizar um módulo quantas vezes forem necessárias, eliminando assim a necessida<strong>de</strong> <strong>de</strong><br />
escrever o mesmo código em situações repetitivas.<br />
Vamos imaginar a seguinte situação:<br />
Em um sistema comercial, em várias etapas temos que verificar se o número do CPF do<br />
cliente foi digitado <strong>de</strong> forma correta. Imaginando que tal situação se repete por 38 vezes<br />
no sistema. Teríamos que escrever 38 vezes o mesmo trecho <strong>de</strong> código? Não, para isso<br />
teríamos uma rotina “subalgoritmo” que teria esta função. Este subalgoritmo teria um<br />
nome e, sempre que fosse necessária a verificação do CPF, bastaria invocar “chamar”<br />
este subalgoritmo.<br />
De um modo geral, os subalgoritmos são importantes <strong>de</strong>vido aos seguintes aspectos:<br />
Estruturação <strong>de</strong> algoritmos, facilitando assim a <strong>de</strong>tecção <strong>de</strong> erros. Imagine se a<br />
rotina <strong>de</strong> verificação do CPF do cliente tiver um erro lógico. Em uma primeira<br />
hipótese, teríamos que corrigir a mesma em 38 pontos diferentes do sistema,<br />
porém utilizando subalgoritmo, teríamos apenas que realizar uma correção em um<br />
ponto do sistema;<br />
Modularização <strong>de</strong> sistemas, que justamente é utilizada para a reutilização <strong>de</strong><br />
rotinas “subalgoritmos” em vários pontos do algoritmo principal;<br />
Subdivisão <strong>de</strong> algoritmos extensos, facilitando assim a sua compreensão.<br />
O esquema <strong>de</strong> um algoritmo e seus subalgoritmos po<strong>de</strong> ser observado a seguir:<br />
Algoritmo (nome do algoritmo)<br />
Variáveis<br />
Definição das variáveis globais<br />
<br />
Inicio<br />
<br />
Fim.<br />
Quando o sistema está executando o algoritmo principal e é invocado algum subalgoritmo<br />
(através do nome dado ao mesmo), a execução <strong>de</strong>ste é interrompida e o sistema passa a<br />
executar os comandos constantes do subalgoritmo. Ao final <strong>de</strong>sta execução, o sistema<br />
retorna automaticamente para o algoritmo principal a partir do ponto on<strong>de</strong> foi realizada a<br />
chamada do subalgoritmo.<br />
~ 49 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Um subalgoritmo é composto por:<br />
Cabeçalho: on<strong>de</strong> é <strong>de</strong>finido o nome do subalgoritmo e as variáveis que serão<br />
utilizadas pelo mesmo;<br />
Corpo: on<strong>de</strong> são especificadas as instruções do subalgoritmo.<br />
Os subalgoritmos po<strong>de</strong>m ser <strong>de</strong> dois tipos:<br />
Funções;<br />
Procedimentos.<br />
O subalgoritmo tipo função é aquele na qual um valor é calculado com base em outros<br />
valores, normalmente passado pelo algoritmo principal.<br />
O subalgoritmo tipo procedimento é aquele que retorna zero ou mais valores ao<br />
algoritmo que o invocou, sendo que, ao contrário das funções, esses valores não são<br />
explícitos, ou seja, a chamada <strong>de</strong> procedimentos nunca é realizada ao meio <strong>de</strong><br />
expressões é só é realizada em comandos isolados <strong>de</strong>ntro do algoritmo, como instruções<br />
<strong>de</strong> entrada e saída <strong>de</strong> dados.<br />
Veja a seguir um algoritmo e seu subalgoritmo para se calcular a raiz quadrada <strong>de</strong> um<br />
<strong>de</strong>terminado número:<br />
(Por causa da didática <strong>de</strong> variáveis globais e locais, vamos manter uma estrutura um<br />
pouco diferente do que temos mostrado até agora, vamos nos aproximar uma pouco da<br />
estrutura do PASCAL)<br />
Algoritmo Raiz_quadrada<br />
Variáveis<br />
num1, num2 : real<br />
Função Raiz(numero:real) : real<br />
Var<br />
calc : real<br />
Inicio<br />
Calc = SQR(numero)<br />
Retorne Calc<br />
Fim<br />
Inicio<br />
Escreva “Numero para Raiz Quadrada”<br />
Leia num1<br />
Num2 = Raiz(num1)<br />
Escreva “Raiz quadrada é igual a:”, num2<br />
Fim<br />
Com certeza, teria sido mais fácil executar o cálculo <strong>de</strong> raiz quadrada diretamente no<br />
algoritmo principal, porém o fizemos assim para que você tenha uma idéia <strong>de</strong> como<br />
funciona um subalgoritmo, ou seja, a passagem <strong>de</strong> valores <strong>de</strong> uma rotina principal, para<br />
uma rotina secundária e o retorno do valor resultante <strong>de</strong>ste processamento.<br />
~ 50 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
No módulo passado nos referíamos aos subalgoritmos. Aqui vamos falar um pouco sobre<br />
variáveis globais e locais.<br />
Como o próprio nome diz, uma variável global po<strong>de</strong> ser utilizada em qualquer parte do<br />
algoritmo ou em seus subalgoritmos, ou seja, elas são visíveis em todo o procedimento<br />
que engloba o processamento. Ao contrário, as variáveis locais são <strong>de</strong>finidas<br />
exclusivamente <strong>de</strong>ntro <strong>de</strong> um subalgoritmo e sua vida se restringe ao uso <strong>de</strong>ntro do<br />
próprio subalgoritmo on<strong>de</strong> foi <strong>de</strong>clarada.<br />
Imagine a seguinte situação:<br />
- Um “avião” foi fabricado pela Embraer, porém este po<strong>de</strong>rá voar em qualquer parte<br />
do mundo. Este avião po<strong>de</strong>ria ser comparado a uma variável global.<br />
- O “elevador” do edifício “ABC”, foi implantado naquele edifício e sua vida, ou seja,<br />
sua utilida<strong>de</strong> está apenas naquele edifício. Este elevador po<strong>de</strong>ria ser comparado a<br />
uma variável local.<br />
Veja o algoritmo utilizado no módulo anterior:<br />
Algoritmo Raiz_quadrada<br />
Var num1, num2 : real<br />
Função Raiz(numero:real) : real<br />
Var calc : real<br />
Inicio<br />
calc = SQR(numero)<br />
Retorne Calc<br />
Fim<br />
Inicio<br />
Escreva “Numero para Raiz Quadrada”<br />
Leia num1<br />
Num2 = Raiz(num1)<br />
Escreva “Raiz quadrada é igual a:”, num2<br />
Fim<br />
Observe que as variáveis NUM1 e NUM2 utilizadas no processo foram <strong>de</strong>claradas no<br />
inicio do algoritmo principal, ou seja, estas são variáveis globais. Já a variável CALC,<br />
<strong>de</strong>finida <strong>de</strong>ntro da função RAIZ é uma variável local, ou seja, operável apenas <strong>de</strong>ntro<br />
daquela função.<br />
Pelo que observamos até este ponto, um subalgoritmo é um nome dado a um<br />
<strong>de</strong>terminado trecho do algoritmo principal, que na maioria das vezes é responsável pela<br />
execução <strong>de</strong> uma única tarefa <strong>de</strong>ntro do contexto do sistema. Estudamos que existem<br />
dois tipos <strong>de</strong> subalgoritmos:<br />
1. Funções: que retornam um único valor para o algoritmo que a invocou;<br />
2. Procedimentos: que retornam mais <strong>de</strong> um valor ou nenhum valor ao algoritmo que<br />
o invocou.<br />
Nas funções e procedimentos, temos as variáveis globais, <strong>de</strong>finidas no início <strong>de</strong> um<br />
algoritmo e que po<strong>de</strong>m ser utilizadas por todos os subalgoritmos assim como pelo<br />
~ 51 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
algoritmo principal e as variáveis locais, que são <strong>de</strong>finidas <strong>de</strong>ntro <strong>de</strong> um subalgoritmo e só<br />
po<strong>de</strong>m ser utilizadas <strong>de</strong>ntro <strong>de</strong>ste.<br />
Para completar o nosso quebra-cabeça, temos também o que chamados <strong>de</strong> parâmetros,<br />
ou seja, as portas pelas quais se realiza a comunicação bidirecional entre o algoritmo<br />
principal e seus subalgoritmos e vice e versa. Possuímos dois tipos <strong>de</strong> parâmetros:<br />
1. Parâmetros formais: são aqueles que, <strong>de</strong> forma automática substituem<br />
parâmetros <strong>de</strong>terminados por “nomes simbólicos” por valores passados durante a<br />
execução do processo. Veja o exemplo a seguir:<br />
Função Raiz(numero:real) : real<br />
Variáveis<br />
calc : real<br />
Inicio<br />
Calc = SQR(numero)<br />
Retorne Calc<br />
Fim<br />
Na verda<strong>de</strong>, o parâmetro formal “número” será substituído por um parâmetro real, ou seja,<br />
um valor numérico para o calculo da raiz quadrada <strong>de</strong> um <strong>de</strong>terminado número.<br />
2. Parâmetros reais: quando não temos parâmetros formais e sim valores pré<br />
estabelecidos que não serão alterados durante o processamento.<br />
Através <strong>de</strong>sta lógica, <strong>de</strong>vemos saber que, durante o processamento dos dados, quando<br />
são substituídos parâmetros formais por valores reais, os parâmetros reais são calculados<br />
e os parâmetros formais recebem uma cópia dos valores resultantes do processamento.<br />
Seguindo esta lógica, iremos enten<strong>de</strong>r que os parâmetros formais não afetam os<br />
parâmetros reais.<br />
~ 52 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
9- ALGORÍTMOS DE PESQUISA<br />
A capacida<strong>de</strong> <strong>de</strong> armazenar informações foi um passo <strong>de</strong>cisivo na evolução da<br />
ciência da computação e para o nível generalizado <strong>de</strong> utilização do computador. Com<br />
isso, a capacida<strong>de</strong> <strong>de</strong> recuperar informações, para posterior processamento, assume<br />
papel <strong>de</strong> suma importância na utilização cotidiana do computador, existindo para isto<br />
inúmeros exemplos, como: recuperação <strong>de</strong> dados <strong>de</strong> dados <strong>de</strong> transações bancárias <strong>de</strong><br />
um cliente através <strong>de</strong> um número <strong>de</strong> conta, no cadastro <strong>de</strong> cliente/operações <strong>de</strong> um<br />
banco. Portanto, algoritmos <strong>de</strong> pesquisa <strong>de</strong>vem ser projetados <strong>de</strong> forma a garantir a<br />
confiabilida<strong>de</strong> e eficiência exigidas pela importância das aplicações existentes.<br />
A pesquisa <strong>de</strong> dados po<strong>de</strong> ser efetuada tanto em unida<strong>de</strong>s <strong>de</strong> memória<br />
secundárias (disco rígido, disquetes, fita), quanto na memória principal do computador.<br />
PESQUISA SEQUENCIAL<br />
O método mais simples <strong>de</strong> <strong>de</strong>terminar a presença, ou não, <strong>de</strong> um elemento numa<br />
seqüência, é percorrê-la a partir do seu início, efetuando comparações, até que o<br />
elemento seja encontrado ou o fim da seqüência seja alcançado. Este método é chamado<br />
<strong>de</strong> pesquisa seqüencial.<br />
Dados :<br />
vetor <strong>de</strong> n elementos (n conhecido)<br />
elemento a ser pesquisado no vetor<br />
Resultado:<br />
Se o elemento existe, mostra-se a sua posição ou o total <strong>de</strong> ocorrências <strong>de</strong>ste no vetor.<br />
Se o elemento não existe, mostra-se uma mensagem <strong>de</strong> falha.<br />
As consi<strong>de</strong>rações que po<strong>de</strong>m ser feitas sobre os dados <strong>de</strong> entrada (vetor), são do<br />
tipo: o vetor esta ou não or<strong>de</strong>nado; o elemento ocorre uma única vez (pesquisa única) ou<br />
repetidas vezes no vetor (pesquisa múltipla). Isso acarreta os seguintes tipos <strong>de</strong> pesquisa:<br />
a. Desor<strong>de</strong>nada Única<br />
b. Desor<strong>de</strong>nada Múltipla<br />
c. Or<strong>de</strong>nada Única<br />
d. Or<strong>de</strong>nada Múltipla<br />
Pesquisa Binária<br />
O método <strong>de</strong> pesquisa seqüencial é fácil <strong>de</strong> escrever e é razoavelmente eficiente<br />
para seqüências com poucos elementos. Entretanto, para seqüências <strong>de</strong> tamanho<br />
consi<strong>de</strong>rável, que ocorrem na maioria das aplicações existentes, a utilização do método<br />
torna-se inviável. Uma estratégia interessante e eficiente é utilizada no método <strong>de</strong><br />
pesquisa binária.<br />
Descrição Geral do Método:<br />
Definir intervalo inicial (i, f) <strong>de</strong> busca<br />
~ 53 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Determinar a posição média do intervalo(m = (i+f) div 2)<br />
Comparar o elemento da posição média (v[m]) com o elemento E:<br />
Caso sejam iguais então terminou as pesquisa<br />
Caso contrário <strong>de</strong>finir o novo intervalo <strong>de</strong> busca<br />
• Aplicar sucessivamente o passo anterior até encontrar E ou não existir mais o intervalo<br />
<strong>de</strong> busca<br />
São aspectos fundamentais do método:<br />
• vetor <strong>de</strong> entrada tem que estar or<strong>de</strong>nado<br />
• intervalo <strong>de</strong> busca inicial é (i,f) = (1,n)<br />
• intervalo <strong>de</strong> busca, consi<strong>de</strong>rado a cada iteração, é <strong>de</strong>finido do seguinte modo:<br />
(i,m-1), se (E < v[m])<br />
(m+1,f), se (E > v[m])<br />
tendo a meta<strong>de</strong> do tamanho do intervalo original<br />
• O teste <strong>de</strong> repetição é (i
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
efetuadas, sendo que a cada vez que esta estratégia é aplicada, uma nova seqüência é<br />
gerada pela eliminação do menor elemento da seqüência original.<br />
Algoritmo SelectionSort (vet : vetor; n : inteiro);<br />
{or<strong>de</strong>nado crescente}<br />
var<br />
i, j, pmin : inteiro;<br />
begin<br />
para I <strong>de</strong> 1 até (n-1) faça<br />
pmin
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
c. Insertion Sort<br />
Este método baseia-se no seguinte processo <strong>de</strong> inserção controlada:<br />
Com o primeiro elemento da seqüência forma-se uma seqüência <strong>de</strong> tamanho 1,<br />
or<strong>de</strong>nada.<br />
Cada elemento restante da seqüência original é inserido na seqüência, <strong>de</strong> modo<br />
que esta permaneça or<strong>de</strong>nada. Isto é feito através <strong>de</strong> uma pesquisa na seqüência<br />
or<strong>de</strong>nada que <strong>de</strong>termina a posição que o novo elemento <strong>de</strong>verá ser inserido.<br />
Quando um elemento é inserido a frente <strong>de</strong> outro, estes <strong>de</strong>verão ser <strong>de</strong>slocados<br />
<strong>de</strong> uma posição.<br />
11- RECURSIVIDADE<br />
Recursão é um método geral para resolver problemas reduzindo-os a problemas<br />
mais simples do mesmo tipo. A estrutura geral <strong>de</strong> uma solução recursiva <strong>de</strong> um problema<br />
é assim:<br />
Resolva <strong>de</strong> forma recursiva um problema.<br />
• Se o problema é trivial, faça o obvio (resolva-o)<br />
• Simplifique o problema<br />
• Resolva <strong>de</strong> forma recursiva (um problema mais simples)<br />
• Combine (na medida do possível) a solução do(s) problemas mais simples em uma<br />
solução do problema original<br />
Um subprograma recursivo chama a si próprio constantemente, cada vez em uma<br />
situação mais simples, até chegar ao caso trivial, quando pára. Devemos lembrar que<br />
recursivida<strong>de</strong> <strong>de</strong>ve ser utilizada na solução <strong>de</strong> problemas que tenham a natureza<br />
recursiva.<br />
Exemplos :<br />
a. Somatório <strong>de</strong> inteiros - Se n =1; Somatório = 1. Caso contrário<br />
Somatório = n + Somatório(n-1)<br />
b. Fatorial - Se n=0 ou n=1 ; Fatorial = 1. Caso contrário Fatorial =<br />
n*Fatorial(n-1)<br />
c. MDC - Se b divi<strong>de</strong> a, então o MDC é b. Caso contrário, MDC(a,b)<br />
= MDC(b,a div b)<br />
d. N-ésimo termo da série <strong>de</strong> Finonacci . 1 e 2 = 1 e n-ésimo = (n-<br />
1)+(n-2)<br />
e. Torre <strong>de</strong> hanoi<br />
Bibliografia<br />
INTRODUÇÃO AO DESENVOLVIMENTO DE ALGORITMOS<br />
WILSON SILVA PINTO<br />
ALGORITMOS<br />
JOSE AUGUSTO MANZANO - JAYR FIGUEIREDO OLIVEIRA<br />
~ 56 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
ALGORITMOS E ESTRUTURAS DE DADOS<br />
NIKLAUS WIRTH<br />
ALGORITMOS E ESTRUTURAS DE DADOS<br />
ANGELO DE MOURA GUIMARAES - NEWTON A C LAGES<br />
ALGORITMOS ESTRUTURADOS<br />
H FARREL - C G BECKER - E C FARIA e MATOS, H F<br />
PROJETO DE ALGORITMOS<br />
NIVIO ZIVIANI<br />
~ 57 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
ALGORITMO x LINGUAGEM C<br />
TIPO DE DADOS<br />
ALGORITMO LINGUAGEM C-ANSI<br />
Inteiro int<br />
Real float<br />
double<br />
Caractere char<br />
Lógico (Não existe o tipo lógico em C, e sim<br />
expressões lógicas)<br />
Tipo Tamanho Intervalo Uso<br />
char 1 byte -128 a 127 número muito pequeno e caracter ASCII<br />
int 2 bytes -32768 a 32767 contador, controle <strong>de</strong> laço<br />
float 4 bytes 3.4e-38 a 3.4e38 real (precisão <strong>de</strong> 7 dígitos)<br />
double 8 bytes 1.7e-308 a 1.7e308 científico (precisão <strong>de</strong> 15 dígitos)<br />
DECLARAÇÃO DE VARIÁVEIS<br />
ALGORITMO LINGUAGEM C-ANSI<br />
Variáveis i<strong>de</strong>ntificadores : nome do tipo tipo lista <strong>de</strong> i<strong>de</strong>ntificadores<br />
EX:<br />
Variáveis código : inteiro<br />
Variáveis nota, CPF : real<br />
Variáveis nome : caractere[30]<br />
Variáveis altura[30] : inteiro<br />
Variáveis peso[30,5] : real<br />
~ 58 ~<br />
EX:<br />
int codigo;<br />
float nota;<br />
double CPF;<br />
char nome[30]; //string ou vetor <strong>de</strong> caracteres<br />
int altura[30];<br />
float peso[30][5];<br />
DEFINIÇÃO DE CONSTANTES<br />
ALGORITMO LINGUAGEM C-ANSI<br />
<strong>de</strong>fina variáveis valor<br />
#<strong>de</strong>fine PI 3.14159<br />
#<strong>de</strong>fine ON 1<br />
EX:<br />
#<strong>de</strong>fine OFF 0<br />
<strong>de</strong>fina PI 3,14159<br />
#<strong>de</strong>fine ENDERECO 0x378<br />
COMENTÁRIOS<br />
ALGORITMO LINGUAGEM C-ANSI<br />
<strong>de</strong>limitado por chaves { } ou // ou /* */ <strong>de</strong>limitado por // ou /* */<br />
EX:<br />
Variáveis nota inteiro {nota do aluno}<br />
Variáveis nota inteiro //nota do aluno<br />
EX:<br />
float nota; /* nota do aluno */<br />
float nota; // nota do aluno
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
EXPRESSÕES ARITMÉTICAS<br />
ALGORITMO LINGUAGEM C-ANSI<br />
adição: +<br />
subtração: -<br />
multiplicação: *<br />
divisão: /<br />
radiciação: √n Raiz(n)<br />
potenciação: n y +<br />
-<br />
*<br />
/<br />
sqrt(valor)<br />
Exp(n,y)<br />
pow(n,y)<br />
quoc. da divisão: A Div B<br />
A / B<br />
resto da divisão: A Resto B<br />
A % B<br />
ATRIBUIÇÃO:<br />
EX:<br />
nota ← 10<br />
~ 59 ~<br />
ATRIBUIÇÃO:<br />
EX:<br />
nota = 10;<br />
EXPRESSÕES LÓGICAS<br />
ALGORITMO LINGUAGEM C-ANSI<br />
igual a: =<br />
==<br />
diferente <strong>de</strong>: <br />
!=<br />
maior que: ><br />
><br />
menor que: <<br />
<<br />
maior ou igual a: >=<br />
>=<br />
menor ou igual a:
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
Leia (nota)<br />
COMANDOS DE SAÍDA DE DADOS<br />
scanf(“%d”, ¬a);<br />
ALGORITMO LINGUAGEM C-ANSI<br />
Escreva ( textos + variáveis )<br />
printf(“textos + código <strong>de</strong><br />
formatação”,variáveis)<br />
EX:<br />
Escreva (“A nota do aluno foi:”, nota)<br />
~ 60 ~<br />
EX:<br />
printf(“A nota do aluno foi %d”, nota);<br />
CÓDIGO DE FORMATAÇÃO (Usado no<br />
scanf e printf)<br />
FORMATOS<br />
%c caractere (apenas um - char)<br />
%d ou %i inteiro (int)<br />
%f real (float)<br />
%e real (double)<br />
%s String (ca<strong>de</strong>ia <strong>de</strong> caracteres)<br />
%p ponteiro<br />
CONTROLE / CARACTER (Usado no printf) SEQUENCIA DE ESCAPE<br />
nulo (null) \0<br />
campainha (bell) \a<br />
retrocesso (backspace) \b<br />
tabulacao horizontal \t<br />
nova linha (new line) \n<br />
tabulacao vertical \v<br />
alimentacao <strong>de</strong> folha (form feed) \f<br />
retorno <strong>de</strong> carro (carriage return) \r<br />
aspas (") \"<br />
Apostrofo (') \'<br />
interrogacao (?) \?<br />
barra invertida (\) \\
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
ESTRUTURA BÁSICA DE PROGRAMAS EM C<br />
1- Declarações das Bibliotecas<br />
As bibliotecas em C, são arquivos que normalmente se localizam no diretório<br />
inclu<strong>de</strong>. Essas bibliotecas contém funções e comandos pré-<strong>de</strong>finidos na linguagem.<br />
Ex:<br />
#inclu<strong>de</strong> <br />
#inclu<strong>de</strong> <br />
2- Declarações <strong>de</strong> Variáveis Globais<br />
As variavéis aqui <strong>de</strong>claradas são reconhecidas em todas as funções.<br />
3- Funções Auxiliares<br />
São módulos criados com funções <strong>de</strong>finidas pelo programador. É “chamada” Por<br />
outras funções para ser executada. Tem a finalida<strong>de</strong> <strong>de</strong> retornar um valor ou apenas executar<br />
blocos <strong>de</strong> comandos.<br />
4- Função Principal<br />
Função obrigatório em TODOS os programas criados na linguagem C. É apartir<br />
<strong>de</strong>ssa função que o programa começa a ser executado.<br />
Ex:<br />
main()<br />
{ //início da função<br />
<strong>de</strong>claração <strong>de</strong> variáveis locais;<br />
…<br />
comandos;<br />
…<br />
} //fim da função<br />
~ 61 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
ESTRUTURA SEQUENCIAL<br />
ALGORITMO LINGUAGEM C-ANSI<br />
#inclu<strong>de</strong> <br />
Algoritmo cálculo<br />
#inclu<strong>de</strong> <br />
Variáveis a, b, c : inteiro<br />
main ()<br />
Início<br />
{ //início do algoritmo (main)<br />
Escreva (“Digite dois numeros: “)<br />
int a, b, c;<br />
Leia (a, b)<br />
printf(“Digite o primeiro numero: ”);<br />
c ← (a + b) * b<br />
scanf(“%d”,&a);<br />
Escreva (a, b, c)<br />
printf(“Digite o segundo numero: ”);<br />
Fim<br />
scanf(“%d”,&b);<br />
c = (a+b)*b;<br />
printf(“A=%d, B = %d, C = %d”,a,b,c);<br />
getch();<br />
} //fim do algoritmo (main)<br />
ESTRUTURA CONDICIONAL<br />
ALGORITMO LINGUAGEM C-ANSI<br />
#inclu<strong>de</strong> <br />
Algoritmo menor<br />
#inclu<strong>de</strong> <br />
Variáveis a, b c, menor : inteiro<br />
main ()<br />
Início<br />
{<br />
Escreva (“Digite tres numeros: “)<br />
int a, b, c, menor;<br />
Leia (a, b, c)<br />
printf(“Digite o primeiro numero:”);<br />
Se ( (a > b) .E. (a < c) )<br />
scanf(“%d”,&a);<br />
Então menor ← a<br />
printf(“Digite o segundo numero:”);<br />
Senão Se (b < c)<br />
scanf(“%d”,&b);<br />
Então menor ← b<br />
printf(“Digite o terceiro numero:”);<br />
Senão menor ← c<br />
scanf(“%d”,&c);<br />
Fim se<br />
if ((a < b) && (a < c))<br />
Fim se<br />
{ //início do então<br />
Escreva (“o menor valor é:”,menor)<br />
menor = a;<br />
Fim<br />
} //fim do então<br />
else<br />
{ //início do senão<br />
if (b < c)<br />
{ //início do então<br />
menor = b;<br />
} //fim do então<br />
else<br />
{ //início do senão<br />
menor = c;<br />
} //fim do senão<br />
} //fim do senão<br />
printf(“O menor valor e: %d”,menor);<br />
system(“pause”);<br />
~ 62 ~
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
ESTRUTURA DE REPETIÇÃO – 1ª FORMA: Número <strong>de</strong>finido <strong>de</strong> repetições<br />
ALGORITMO LINGUAGEM C-ANSI<br />
Estrutura: PARA<br />
Estrutura: FOR<br />
for(inicialização;condição;incremento ou<br />
<strong>de</strong>cremento)<br />
{<br />
... //comandos a serem repetidos<br />
}<br />
Ex:<br />
Algoritmo soma<br />
Variáveis i : inteiro<br />
Início<br />
Para i <strong>de</strong> 1 até 100 passo 1 faça<br />
Escreva (“O número é:”,i)<br />
Fim para<br />
Fim<br />
}<br />
~ 63 ~<br />
Ex:<br />
#inclu<strong>de</strong> <br />
#inclu<strong>de</strong> <br />
main()<br />
{<br />
int i;<br />
for (i = 1; i
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
ESTRUTURA DE REPETIÇÃO – 2ª FORMA: Número in<strong>de</strong>finido <strong>de</strong> repetições e teste no início<br />
ALGORITMO LINGUAGEM C-ANSI<br />
Estrutura: ENQUANTO<br />
Estrutura: WHILE<br />
while(condição)<br />
{<br />
... //comandos a serem repetidos<br />
}<br />
Ex(1):<br />
Algoritmo soma<br />
Variáveis i : inteiro<br />
Início<br />
Enquanto (i
Curso <strong>de</strong> Sistemas <strong>de</strong> Informação<br />
<strong>Algoritmos</strong> e Lógica <strong>de</strong> Programação<br />
_______________________________________________________________________________________________________________________<br />
}<br />
system(“pause”);<br />
}<br />
Obs: Enquanto a condição for verda<strong>de</strong>ira repete os comandos da estrutura <strong>de</strong> repetição<br />
(while).<br />
ESTRUTURA DE REPETIÇÃO – 3ª FORMA: Número in<strong>de</strong>finido <strong>de</strong> repetições e teste no final<br />
ALGORITMO LINGUAGEM C-ANSI<br />
Estrutura: REPITA<br />
Estrutura: DO WHILE<br />
do{<br />
... //comandos a serem repetidos<br />
}while(condição);<br />
Ex:<br />
Algoritmo soma<br />
Variáveis i : numérico<br />
Início<br />
i ← 1<br />
Repita<br />
Escreva (“O número é:”,i)<br />
i ← i + 1<br />
Até (i > 100)<br />
Fim<br />
~ 65 ~<br />
Ex:<br />
#inclu<strong>de</strong> <br />
#inclu<strong>de</strong> <br />
main()<br />
{<br />
int i = 0;<br />
do{ //início do repita(do while)<br />
printf(“O numero e: %d”,i);<br />
i++; // i=i+1<br />
} while (i