18.04.2013 Views

Algoritmos e Logica de Programacao

Algoritmos e Logica de Programacao

Algoritmos e Logica de Programacao

SHOW MORE
SHOW LESS

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”, &nota);<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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!