Você está na página 1de 33

FLP (Fundamentos de Introduo a Informtica)

Tcnicas de Desenvolvimento da Lgica

S UMRIO
Sumrio.................................................................................................................................................................3 Introduo..............................................................................................................................................................4 As dificuldades de programar................................................................................................................5 A metodologia de aprendizagem...........................................................................................................6 Variveis x Dados..................................................................................................................................................7 Uso das Variveis no Algoritmo.............................................................................................................8 Escolhendo o TIPO do Identificador da Varivel....................................................................................9 Tipo inteiro.............................................................................................................................9

Tipo real.................................................................................................................................9 Tipo Literal.............................................................................................................................9 Tipo Lgico..........................................................................................................................10 Tamanho das Variveis.......................................................................................................................10 Declarao de Variveis......................................................................................................................10 Comando DECLARE...........................................................................................................10 Operadores..........................................................................................................................................11 Operadores Numricos........................................................................................................11 Operadores Relacionais .....................................................................................................11 Operadores Lgicos............................................................................................................12 Entendendo Representaes de Sintaxes...........................................................................................................13 Atribuio de Valores a Variveis........................................................................................................13 Estruturao do Algoritmo...................................................................................................................................14 Entrada e Sada de Dados...................................................................................................................14 Comando LEIA....................................................................................................................14 Comando ESCREVA (lista informaes no vdeo)..............................................................15 Manipulaao de valores.......................................................................................................................................16 Conceitos Fundamentais.....................................................................................................................................17 Contador x Acumulador.......................................................................................................................17 Percentuais..........................................................................................................................................17 Maior Valor..........................................................................................................................................18 Menor Valor.........................................................................................................................................19 Estruturas Condicionais.......................................................................................................................................19 Estrutura Condicional SE (Simples).....................................................................................................20 Estrutura Condicional SE (Composta).................................................................................................20 Estrutura Condicional SE (Encadeada)...............................................................................................21 Exerccios de Aprendizagem...............................................................................................................22 Estruturas de Repetio......................................................................................................................................25 Comando ENQUANTO........................................................................................................................25 Comando PARA..................................................................................................................................26 Exerccios de Aprendizagem...............................................................................................27 Tcnicas de Algoritmizao.................................................................................................................................29 Dicas sobre Resoluo de Algoritmos.................................................................................................29 Tcnica para extrair os dados de um enunciado.................................................................................29 Desafios Resolvidos............................................................................................................................................31

I NTRODUO

rogramar um computador no uma tarefa to difcil. Difcil programar as nossas cabeas. O computador, na realidade, uma rplica bastante simplificada de nossa mente, com apenas uma diferena essencial: a AUTO-PROGRAMAO.

Ao longo de nossas vidas, aprendemos coisas a partir de alguns elementos fundamentais como cores, smbolos, sons, cheiros, e sentimentos. Esses elementos vo se combinando atravs de um processo conhecido como aprendizado. O processo de aprendizado nada mais do que uma autoprogramao de nossas mentes. Algum diz para nosso crebro o que ele tem que fazer ao se deparar com uma situao especfica, tal como: dobrar uma esquina, parar ao perceber o sinal vermelho, escovar os dentes ao acordar, em fim - tudo o que fazemos regido por programas que, um dia, ns mesmos desenvolvemos. Ora, se somos capazes de desenvolver programas para um aparelho to complexo e genial como o nosso crebro, por que no um simples computador? Este o nosso desafio. Desenvolver as tcnicas necessrias para conseguirmos codificar programas em um computador digital.

AS

D IF ICULDADES DE P R OGR AMAR

Programar um computador, assim como a nossa mente, requer duas exigncias bsicas:
Conhecer a linguagem na qual se vai programar; Estruturar o raciocnio de forma, a saber, combinar os comandos desta linguagem, dentro de uma seqncia lgica, ou seja, de modo a atingirmos o objetivo perseguido.

A linguagem de programao utilizada pelas nossas mentes composta de comandos (olhe, escute, memorize, decida, sinta, ame, odeie...), elementos (cores, tipos de cheiros, notas musicais, smbolos sonoros, smbolos visuais...) e capaz de reconhecer e utilizar os recursos disponveis no organismo (olho, ouvido, crebro, nariz, boca...), sem os quais se torna impossvel a execuo de um programa. A linguagem de programao utilizada pelos computadores composta tambm por comandos (receba, escreva, some, multiplique...) e elementos (nmeros, palavras e smbolos), e tambm capaz de reconhecer e utilizar os recursos disponveis no computador e perifricos (impressora, monitor de vdeo, mouse, teclado, memria...).

Ao aprendermos uma receita de bolo, colocamos uma poro de comandos em nossa mente. Estes comandos so gravados de uma forma analgica e, logo em seguida, consolidamos o processo de aprendizagem atravs da execuo daquele programa. Claro, da primeira vez que fazemos algo podemos cometer erros, que so automaticamente ajustados pela nossa mente para que, da prxima vez, no voltem a acontecer. Da mesma maneira, sempre que um programador desenvolve a primeira verso de seu programa, h uma fase de testes, quando os erros aparecem e so ajustados necessidade do usurio. A esta fase damos o nome de DEPURAO.

MET ODOLOGIA DE AP R ENDIZAGEM

Como vemos, a programao de computadores bastante semelhante programao de nossas mentes, o que torna suas dificuldades e caractersticas tambm similares. Aplicaremos as tcnicas e recursos existentes aos elementos inerentes a computadores, interagindo com variveis de memria, comandos de entrada e sada de dados, alm de comandos que controlaro a repetio de blocos de comandos. Estruturas como vetores, matrizes, listas, filas, pilhas, rvores, entre outras, sero ministrados em outras disciplinas. Para representar as aes (comandos), utilizaremos uma linguagem no comercial - o pseudocdigo, conhecido como Algoritmo. Uma linguagem que lhe poupe de comandos em ingls, e que no apresente grandes sofisticaes. A linguagem de programao experimental que utilizaremos para exercitar a lgica de programao ser na nossa prpria linguagem: a lngua portuguesa. Para facilitar o processo de aprendizagem, os temas que abordaremos podero ser convertidos para a linguagem Pascal, que tem em suas origens, o objetivo de ensinar os alunos a interagirem com o computador de forma prtica.

V ARIVEIS

D ADOS
Varivel o local de memria onde sero armazenados os dados de forma temporria. Em nossos algoritmos no nos preocuparemos com o endereo real dessas variveis, pois a maioria das linguagens de programao torna estes endereos transparentes ao programador. Para exemplificarmos a diferena entre dados (constantes) e variveis, bem como entender melhor o endereamento de variveis, podemos citar o exemplo de uma estante de prateleiras, onde esto guardados livros ou quaisquer outros objetos (veja figura). Os livros e objetos podem ser chamados de dados, contedo das variveis. Para nos referenciarmos varivel necessrio darmos um nome mesma, pois no trabalharemos com endereo de memria propriamente dito, e sim com identificadores. aconselhvel que o nome da varivel expresse o que vai ser armazenado dentro dela, p.e. nomeAluno, quantidade_alunos. As variveis podem ainda ser simples ou compostas. As variveis simples so aquelas que recebem um nico dado por vez, enquanto que as compostas podem armazenar vrios

dados de uma s vez, porm, esta ltima no objeto de nossa apostila. Quando declaramos uma varivel, temos que associar a ela algumas caractersticas: NOME ou IDENTIFICADOR TIPO do dado

Como dissemos anteriormente, o endereo fsico da varivel no precisa ser declarado, a menos que estejamos programando em alguma linguagem de baixo nvel, como o ASSEMBLER. As linguagens de alto nvel procuram espaos livres na memria do computador para associarem bytes varivel declarada.

U SO

D AS

V AR IVEIS

NO

A L GOR IT MO

O nome a ser associado varivel (ex.: X, Y, KTI34), no importante para o computador, pois este servir apenas como uma mera referncia. Entretanto para outros programadores que possam vir a analisar os seus programas, ou at para voc mesmo aps algum tempo, necessrio que esses nomes sejam expressivos, simples e objetivos. Vejamos agora alguns exemplos de identificadores:
SALARIO CONT TOTAL DATANASC
Um bom nome para varivel que ir armazenar um valor salarial; Um bom nome para varivel que ir registrar uma contagem; Um bom nome para variveis acumuladoras de somas; Um bom nome para variveis usadas para armazenar uma data de nascimento.

Devemos evitar nomes do tipo: X, K, C1, ABC, etc... a menos que eles expressem algo real. Nomes de varivel, na maioria das linguagens, NO devem: Iniciar por nmeros: 1C2, 9ANOS, 100, 4CANTOS, etc...

Ser descontnuos: DATA NASC, FONE COMERC, etc... Outros requisitos podem aparecer dependendo de cada linguagem. O COBOL, por exemplo, permite nomes longos para variveis, j o CLIPPER, com apenas 10 bytes. O COBOL permite separadores como hfens, barras, entre outros. Linguagens derivadas do DBASE permitem apenas o UnderLine (Nome_Aluno) como caractere separador. A maioria das linguagens apresenta certas restries livre escolha dos nomes das variveis. A mais evidente a impossibilidade da utilizao de palavras reservadas da prpria linguagem. Por exemplo, a palavra MOVE representa um comando para o COBOL. No possvel utilizarmos este nome como identificador de qualquer varivel nesta linguagem. J para o CLIPPER, o MOVE pode ser um identificador.

Outras vezes, a linguagem traz consigo algumas variveis reservadas. Trata-se de algumas variveis que so automaticamente declaradas pela linguagem. Normalmente elas registram a data e a hora do sistema operacional, ou algumas informaes internas como cdigos de perifricos, endereos de memria para buffers, etc.

E SCO LHENDO

TIPO

DO

I DEN T IFICAD OR

DA

V AR IVEL

O segundo argumento presente na declarao de uma varivel o seu tipo. O tipo de uma varivel define que tipos de dados podero ser armazenados nela. A declarao (definio das variveis) ser feita no incio do algoritmo.

TIPO

INTEIRO

Sinaliza que o contedo ser de nmeros e que no ter a parte decimal em sua composio. Ex.: 1200; -12; 0; etc

TIPO

REAL

Sinaliza que o contedo ser de nmeros e que permitida a digitao da parte decimal. Ex.: 1200,00; -12,88; 0; etc

TIPO LITERAL
Sinaliza que o contedo aqui armazenado ser toda a rede de caracteres alfanumricos e os ditos caracteres especiais. Os contedos destas variveis SEMPRE sero demonstrados entre aspas (simples ou dupla, dependendo da linguagem);

So variveis que aceitam contedos de qualquer natureza, portanto: nmeros, letras e smbolos em geral, no podendo estes nmeros ser utilizados para operaes aritmticas. Ex.: "MARIA JOSE"; "Recife"; "123"; "NOMES" Observaes: a) No confundir os valores numricos com os literais ou entre os literais. Vejamos os casos a seguir. Caso 1. 42 (inteiro) diferente de 42 (literal) Os tipos so diferentes, logo, seus valores em memrias so diferentes; Caso 2. 01(literal) diferente de 1 (literal) Os tipos so iguais, mas a representao em memria diferente.

TIPO LGICO
Este tipo de varivel no permite o registro de dados numricos ou literais. Uma varivel lgica s armazena um entre dois valores: VERDADEIRO ou FALSO. Em nossa disciplina, no nos ateremos ao como exatamente, o computador registra esta informao na memria. Pode ser por bytes zerados e no zerados, pelas letras V ou F, ou por um outro mecanismo qualquer. O que nos interessa de fato que este tipo de varivel no registra outro tipo de informao exceto Verdadeiro ou Falso. Para efeito de representao, diremos que o contedo de uma varivel lgica ser representado pelas letras V e F, representando respectivamente, Verdadeiro e Falso:

T AMAN HO

DAS

V AR IVEIS
Quando declaramos uma varivel no precisamos delimitar o byte inicial e final que esta ir ocupar na memria do computador, entretanto imprescindvel entendermos que elas ocupam um espao na memria e que os tipos de dados trazem definies sobre as variveis, inclusive o que pode armazenar e os seus limites. Outros tipos de variveis tambm so tratados por novas linguagens, tais como: HORA, MEMORANDO, OBJETO. Entretanto aqui s trataremos os tipos mencionados anteriormente, ou seja: Literal, Inteiro, Real e Lgico.

D EC LAR A O

DE

V AR IVEIS
TODAS as variveis que o programa vier a utilizar tm que existir antes de serem referenciadas. Por esse motivo, necessitamos declarar estas. Como fazer isso? Atravs do comando DECLARE.

C OM A N D O DECLARE
DECLARE <Nome da varivel>[,<Nome da varivel>]: <tipo>;

<Nome da varivel> Nome ou identificador da varivel <Tipo> Exemplos: Tipo da varivel definida: Literal, Inteiro, Real e Lgico. DECLARE NOME : Literal; DECLARE IDADE : Inteiro; DECLARE ALTURA: Real; DECLARE DEPENDENTE: LOGICO;

Podemos declarar diversas variveis utilizando apenas um comando DECLARE.


Exemplos: DECLARE NOME : Literal; IDADE : Inteiro; ALTURA: Real;

10

DEPENDENTE, LOGICO;

Ou ainda, em uma mesma linha, desde que sejam do mesmo tipo de dados.
Exemplo: DECLARE IDADE, CONTADOR:inteiro; (obs.: tipo e tamanho iguais} Observao: As vezes substitumos o comando Declare por Var ou Defina, dependendo da linguagem que estamos querendo nos aproximar. Outros comandos podero sofrer variaes. Cabendo ao professor da disciplina fazer os ajustes baseados no direcionamento que queira dar disciplina.

O P ERADOR ES

A Podemos atribuir a uma varivel o resultado de uma expresso : numrica. Atribui uma ao que as linguagens possuem e = que representa o ato de preencher o espao da varivel com um contedo, conforme o tipo de dado (veremos mais detalhadamente em tpico especfico). Entendemos por 2 expresso numrica um conjunto de operaes aritmticas combinadas entre operandos e operadores. Mas alm das expresses numricas, existem expresses que exigem * tratamentos particulares, como veremos a seguir.

OPE RA D OR E S NU M RI C OS
So elementos (smbolos) utilizados para representar uma 6 operao de cunho aritmtico.
+ * / indica SOMA indica SUBTRAO indica MULTIPLICAO indica DIVISO

3 Relembrando um pouco a matemtica elementar, a ordem de execuo de uma expresso aritmtica segundo as prioridades de operaes :
Parntesis: Multiplicao e Diviso: Soma e Subtrao: + , Obs.: Caso existam numa mesma sentena operadores de mesma ordem de prioridade, a execuo ser feita da esquerda para direita. ( ) *, /

OPE RA D OR E S REL AC I ON AI S

1 So elementos (smbolos) utilizados para realizarmos operaes 2 de comparaes, recebendo como resposta o valor verdadeiro ou falso.
< menor que <= menor ou igual a = igual a <> diferente

> maior que >= maior ou igual a

11

= igual a Exemplos: Dados A = 3, B = 2, C = Jose , D = Jose, NOME = JOSE A>B C=D NOME = "JOSE" NOME = D Retorna V Retorna V Retorna V (Est sendo comparado o contedo da varivel NOME com a string JOSE. Retorna F (esto sendo comparados os contedos das variveis NOME e D).

4 Os operadores relacionais incidem sobre dados e variveis numricas e caracteres. Assim sendo, podemos comparar no apenas nmeros, mas tambm palavras. Neste sentido, a comparao respeitar a ordem alfabtica das iniciais de cada uma.
Retorna V

Exemplos: "MARIA" > "ANA" "MARIA" < "MARIO" Retorna V observao: as comparaes s podem ser feitas com elementos dos mesmos tipos.

O P E R A D O R E S L G I C O S
Estes elementos so necessrios quando voc deseja realizar comparaes entre resultados lgicos obtendo como resposta outro valor lgico. Estranho, no? Mas exatamente isso que ocorre. Por exemplo: se voc ler um anuncio sobre emprego que tenham as seguintes solicitaes: Precisa-se de pessoas do sexo feminino e com idade mxima 40 anos. O que voc consegue extrair deste anuncio? A resposta seria: duas exigncias, a saber, o SEXO da pessoa deve ser igual a feminino (F) e a IDADE deve ser menor ou igual a 40 anos. Logo, estamos diante de duas sentenas, que, dependendo do que seja colocado como dados na comparao, poderemos ter a possibilidade do resultado ser falso ou verdadeiro. Se o SEXO for igual a M (masculino), a primeira sentena ser falsa. Para voc poder ocupar a vaga oferecida, necessrio que sejas do sexo feminino e sua idade esteja na faixa etria solicitada. Para o programa, o raciocnio exatamente igual. Para que gerenciarmos esta etapa da lgica, utilizaremos os operadores a seguir: Operador OU (Opcionalidade) E (Simultaneidade) NO (Negao) Detalhamento A sentena que contiver este operador ser verdadeira se pelo menos uma das expresses nela contida retornar valor verdadeiro. A sentena que contiver este operador ser verdadeira se as expresses nela contida resultarem valores verdadeiros. Quando queremos inverter (negar) o resultado de uma condio ou expresso lgica. Prioridade de execuo 3

Observao: caso sejam colocados os parnteses na sentena, a prioridade de execuo ser alterada iniciando-se pelos elementos contidos dentro destes. Caso exista mais de uma sentena nesta condio, observar-se, alm do exposto acima, a execuo dos comandos da esquerda para a direita da expresso.
Vejamos a TABELA VERDADE a seguir para entendermos melhor. E V F V V V F V F F OU V F V V V F V V V

12

F Exemplos: X = 90 E Z = 100 A >= 67 OU A <= 200

NOME <> "ANA" E NAO (NOME = "MARIA") (NOME <> "ANA") E (NAO (NOME="MARIA") OU (NOME="PEDRO"))

E NTENDENDO R EPRESENTAES

DE

S INTAXES

Agora que voc j aprendeu o primeiro comando de nossa linguagem algortmica, importante aprender a forma sinttica de se representar um comando. Note que, ao enunciarmos o comando DECLARE, ns utilizamos algumas nomenclaturas e simbologias que voc, certamente, encontrar em qualquer livro sobre quaisquer linguagens. Assim, vamos elucidar algumas delas: Repetindo o comando,
DECLARE <Nome da varivel>[,<Nome da varivel>]: <tipo>;

< > [ ]

Delimita o espao reservado para inserirmos um parmetro do comando. A maioria dos comandos das linguagens possui parmetros. Delimita o espao reservado para inserirmos um parmetro opcional do comando, ou seja, tudo o que vier entre colchetes nem sempre precisar ser especificado no comando. DECLARE SOMA : Inteiro; DECLARE SOMA, QUANTIDADE_ALUNOS:inteiro;

Ex:

Observe ainda que os colchetes [ ] e os delimitadores maior/menor < > podem acumular-se entre si, ou seja, dentro de um grupo de parmetros opcionais [ ], poderemos ter outros [ [..] ], dependendo apenas da caracterstica do comando.

A TR IB UI O

DE

V ALOR ES

V AR IVEIS

At agora, vimos conceitos e exemplos de variveis. Agora vamos aprender a utiliz-las em algoritmos. Representaremos o comando de atribuio pela combinao de dois smbolos do teclado, que so dois pontos e o sinal de igual, sem espaos entre eles(:=). Este smbolo representar a atribuio de um dado a uma varivel.
<varivel> := <dado a ser armazenado>

Exemplos: NOME := "JOO"; Dados Literal tm que vir entre aspas

13

IDADE := 25; ALTURA := 1,67; DEPENDE := F;

Dados Inteiros no precisam de aspas Dados tipo Real, possuem uma vrgula como delimitador entre a parte decimal e a parte inteira (linguagens comerciais adotam o ponto). Dados LOGICO devem vir entre pontos

Tambm podemos atribuir, a uma varivel, o valor de outra:


Exemplo: ALTURA := IDADE; a varivel ALTURA recebe o valor de IDADE

Tambm podemos atribuir o resultado de uma expresso numrica, ou de outro tipo, a uma varivel: SOMA := QUOEF * (VALOR + 10) / DIVISOR;

E STRUTURAO

DO

A LGORITMO

Existem alguns formatos para organizar um algoritmo, porm adotaremos o mais global, facilitando assim o aprendizado. Vejamos a seguir:
Algoritmo <nome do programa>; Declare {Local para declarao das variveis} Incio {Local para inicializao das variveis / mensagens montando a tela} {Local para receber dados, processar dados e dar sada nos dados / mensagens} Fim

E N TR ADA

S A DA

DE

D ADOS

At aqui ns vimos como atribuir um valor a uma varivel dentro de um programa. Mas este valor foi atribudo pelo prprio programa, no ? Mas como fazer com que um programa, em um dado momento, receba um valor digitado pelo usurio? Como receber este dado atravs do teclado? Como exibir o resultado de uma operao qualquer no monitor? Existem nas linguagens de programao, comandos de entrada e sada de dados. No caso do algoritmo, estes comandos so os seguintes: Leia (entrada), Escreva (sada - tela).

C O M A N D O LEIA
Leia <varivel>; Ou Leia (<varivel>);

<varivel> Algoritmo Declare

Varivel que receber os dados digitados pelo usurio.

wnome:literal;

14

Widade:Inteiro; Inicio Leia wnome; Leia widade; <seqncia de comandos>; Fim

A execuo do comando LEIA provoca uma pausa na execuo do programa. O programa fica em estado de espera, aguardando a digitao de algo que deva ser atribudo s variveis especificadas na sintaxe do comando. bom deixar claro que o LEIA, permite um preenchimento por vez. Se voc desejar digitar vrias informaes referente a mesma varivel, ter que utilizar uma estrutura de repetio (veremos mais adiante) e fazer com que o fluxo do programa passe pelo mesmo local onde o LEIA est posicionado No exemplo acima, veja que o computador aguarda que o usurio digite dois valores distintos atravs do teclado. Estes dois valores iro ocupar, respectivamente, as variveis NOME e IDADE.

C O M A N D O ESCREVA ( L I S T A
Ou

I N F OR M A E S N O V D E O )

Escreva <string>[, <varivel>][, <operao>];

Escreva (<string>[, <varivel>][, <operao>] );

Importante! Pelo menos um dos parmetros deve ser informado quando da utilizao deste comando. <string> <varivel> <operao> Texto que est sendo encaminhado para tela. Qualquer varivel utilizada no programa. Algum clculo executado durante a exibio. Neste caso o processador realiza a operao de clculo e depois libera o resultado para a exibio na tela.

Por dentro dos termos: string = conjunto de caracteres dentro de uma mesma varivel. Exemplo: Algoritmo exemplo; Declare wnome:Literal; INICIO ESCREVA NOME ..:; LEIA wnome; ESCREVA "Seu nome ", FIM;

NOME;

Quando estudamos lgica algortmica no nos preocupamos em que coordenada ou posio a informao ser exibida, mas sim com o fato de que deve ser dado o comando de sada dos dados. No exemplo acima, teremos o contedo da varivel NOME exibido no vdeo logo aps a mensagem Seu nome , como mostra a ilustrao abaixo.

15

NOME ..: Karla Silva Seu nome Karla Silva

M ANIPULAAO
1)

DE VALORES

Dados 2 nmeros digitados via teclado, faa um algoritmo capaz de exibir a soma deles no vdeo. Algoritmo soma; Declare X:Inteiro; Y:Inteiro; SOMA:Inteiro; Inicio Leia X; Leia y; SOMA := X + Y; Escreva SOMA; Fim Comentrio Na soluo acima, declaramos 3 variveis de memria. X e Y foram criadas para armazenar os dois nmeros que seriam digitados pelo usurio, e SOMA serviu para armazenar o resultado final da operao com essas duas variveis.

Mas quase sempre existe mais de uma maneira de solucionarmos um problema, no ? Com algoritmos no diferente. Tente repensar o algoritmo acima utilizando apenas 2 variveis, em vez de 3 ! Como voc pode observar, existem no mnimo duas solues para este problema:
Algoritmo soma; Declare X:Inteiro; Y:Inteiro; SOMA:Inteiro; Inicio Leia X; Leia y; X := X + Y; Escreva X; Fim

Ou ainda:
Algoritmo soma; Declare X:Inteiro; Y:Inteiro; SOMA:Inteiro; Inicio Leia X; Leia y; Y := X + Y; Escreva Y; Fim

Qual a soluo mais eficiente das duas? Somente o fato de economizar uma varivel torna qualquer uma dessas solues bem mais eficiente que a primeira. O mesmo caso, sem precisar utilizar as variveis para guardar o resultado, agiliza ainda mais o processamento. Mas este caso

16

deve ser utilizado s quando voc no precisar do valor resultante da operao.

Algoritmo soma; Declare X:Inteiro; Y:Inteiro; SOMA:Inteiro; Inicio Leia X; Leia y; Escreva (X+Y); Fim

C ONCEITOS F UNDAMENTAIS
C ON T ADOR
X

A C UMULADOR
Estes nomes so dados a expresses que realizam adio de dados, porm, no primeiro caso, CONTADOR, a expresso de adio que contabiliza valores fixos e predeterminados. No segundo caso, ACUMULADOR, a expresso de adio que contabiliza valores variveis. Exemplo de Contador: QtdFem := QtdFem + 1 (note que o valor adicionado a quantidade de femininos ser sempre 1) Exemplo de Acumulador: SomaIdade := SomaIdade + Idade (note que o valor adicionado a soma das idades ser varivel) Observao: na maioria das vezes, estes elementos so iniciados com o 0 (zero).

P ER CENTUAIS
Encontramos algumas dificuldades quando tratamos estes temas. Aqui daremos algumas regras bsica para que voc se sinta a vontade no momento do clculo. Encontrando um valor percentual: Veja esta continha simples 50 bolas 25 bolas 100 % x % (50 = Todo) (25 = Parte do Todo)

Chegaremos a concluso: X % = 25 x 100 / 50

Estas informaes nos levam a frmula:

17

<perc> := < Parte do Todo>

* 100 / < Todo>

Encontrando um valor final aps aplicao do percentual: <Novo valor> := <valor anterior> percentual>; * 1,<valor do

Ex.: adicionar 5 % sobre o salrio e informar o valor do novo salrio. Nsal := Salario * 1,05; Encontrando um valor adicionado percentualmente a uma varivel: <Novo valor> := <valor anterior> percentual>; * 0,<valor do

Ex.: adicionar 5 % sobre o salrio e informar o valor acrescido ao salrio. Reajuste := Salario * 0,05; Observao: quando voc no sabe o valor a ser aplicado pois vem dentro de uma varivel, no podemos fazer a aplicao literal do que explicamos neste tpico, mas precisamos traduzir em termos de programa este processo. Vamos fazer os mesmos exemplos anteriores, mas imaginando que o percentual vir em variveis. a) Nsal := Salario * (1 + perc / 100); b) Nsal := Salario * (perc / 100);

M AI OR V A LOR
Existiro momentos em que voc sentir necessidade de identificar o maior elemento dentro de um conjunto de dados processados. S existe uma forma de sabermos qual o maior valor: comparando as grandezas do conjunto. Para descobrirmos qual ser o maior elemento, inicializaremos uma varivel, que armazenar o maior valor do conjunto, com um valor bem pequeno para a situao, e, cada dado existente no conjunto iremos comparar com esta dita varivel. Caso o valor encontrado seja superior, este ser colocado como contedo da varivel maior, j que este novo dado representa a maior grandeza neste momento do processamento. Encontrando o maior valor dentro de um conjunto: Obs.: para entender melhor esse exemplo, bom estar familiarizado com a estrutura de repetio comentada mais adiante.
Algoritmo maior; Declare MAIOR_ID:Inteiro;

18

Idade:Inteiro; Cont:Inteiro; Inicio MAIOR_ID := 0; Para cont := 1 at 10 Faa Inicio Leia Idade; Se Idade > MAIOR_ID ento Inicio MAIOR_ID := Idade; Fim Fim Escreva A maior idade , MAIOR_ID; Fim

M EN OR V A LOR
De igual forma iremos trabalhar para encontrar o elemento que possui o menor valor. Para tanto, iremos inicializar uma varivel, que armazenar o menor valor do conjunto, com um valor bem alto adequado para a situao, e, cada dado existente no conjunto iremos comparar com esta dita varivel. Caso o valor encontrado seja inferior, este ser colocado como contedo da varivel menor, j que este novo dado representa a menor grandeza neste momento do processamento. Encontrando o menor valor dentro de um conjunto:
Algoritmo Menor; Declare menor_ID:Inteiro; Idade:Inteiro; Cont:Inteiro; Inicio menor_ID := 999; Para cont := 1 at 10 Faa Inicio Leia Idade; Se Idade < Menor_ID ento Inicio menor_ID := Idade; Fim Fim Escreva A menor idade , Menor_ID; Fim

E STRUTURAS C ONDICIONAIS
Sabemos que as linhas de um programa estruturado so executadas de cima para baixo de forma seqencial (na orientao ao objeto, apenas os mtodos seguem este conceito). Mas freqentemente precisamos mudar este curso natural de acordo com decises a serem tomadas. Por exemplo, imagine se dentro de um conjunto de alunos voc desejasse verificar a quantidade de homens. S existiria uma forma para sabermos o resultado: fazendo uma pergunta sobre se os dados processados continham na varivel SEXO o contedo igual a M.

19

O comando que realiza esta pergunta o SE, que possui trs situaes bem definidas dentro da programao: Estrutura Condicional Simples, Composta ou Encadeadas(Ninhos de SEs).

E ST R UTURA C ONDICIONAL SE (S I MP LES )


Se <condio> ento inicio <sequncia de comandos>; Fim

<condio> -

Expresso lgica qualquer.

<sequncia de comandos> So comandos que sero executados caso o resultado da expresso lgica seja verdadeira. Esses comandos devem ser escritos entre as delimitaes da gerncia do comando, ou seja, entre as palavras Incio e fim.

Em tempo de execuo, se a expresso lgica retornar verdadeiro ento a seqncia de comandos ser executada. Para fixar esta idia, tente depurar o seguinte algoritmo:
Algoritmo DECLARE exemploSE1; Idade, Numrico, 3 Nome, Caracter , 35 Sexo, Caracter , 1

Inicio Leia Nome; Leia Sexo; Leia Idade; Se Sexo = M ento Inicio Escreva "A idade de ", Nome, , Idade; Fim Escreva "Fim da transao"; Fim

E ST R UTURA C ONDICIONAL SE (C O MP OSTA )


Se <condio> ento Inicio <sequncia de comandos 1>; Fim seno inicio <sequncia de comandos 2>; Fim

Onde:

20

<condio> -

Expresso lgica qualquer.

<sequncia de comandos 1> So comandos quaisquer que sero executados caso o resultado da expresso lgica seja verdadeira (V). <sequncia de comandos 2> So comandos quaisquer que sero executados caso o resultado da expresso lgica seja falsa (F) Seno Variao do comando, para atender o tratamento de informao que no foi contemplada na <condio>, por ser falso o resultado. S deve ser utilizado para otimizar ou se precisar tratar a negativa da <condio>.

Para fixar esta idia, tente depurar o seguinte algoritmo:


Algoritmo DECLARE exemploSE2; Idade: Inteiro; Nome : Literal; Sexo : Literal;

Inicio Leia Nome; Leia Sexo; Leia Idade; Se Sexo = M ento Inicio ESCREVA "A idade de ", Nome, , Idade, Sexo Masculino; Fim seno Inicio SE Sexo = F ENTAO Inicio ESCREVA "A idade de ", Nome, , Idade, Sexo Feminino; Fim Fim Escreva "Fim da transao"; Fim

E ST R UTURA C ONDICIONAL SE (E N CAD EAD A )


Aqui vale comentar que esta estrutura no algo preestabelecido, mas sim, uma estrutura formada de vrias condies, separando informaes e dando os tratamentos de acordo com a necessidade da questo. Abaixo segue um modelo hipottico de uma estrutura SE (Encadeada).

Se <condio 1> ento Inicio <sequncia de comandos 1>; Se <condio 2> ento Inicio <sequncia de comandos 2> ; Fim Fim Seno Inicio Se <condio 3> ento Inicio <sequncia de comandos 3> ; Fim Seno Inicio <sequncia de comandos 4> ; Fim <sequncia de comandos 5>;

21

Fim Fim

Para exemplificarmos melhor, vejamos o exemplo: 1) Receber dois nmeros (Num1 e Num2). 2) Realize a soma dos dois valores. 2.1) Caso a soma seja maior que zero, mostrar na tela o valor da soma e a mensagem: valor positivo; 2.2) Caso contrrio, verifique: 2.2.1) se o valor calculado igual a zero. Se for, informar "valor igual a zero", seno; 2.2.2) informar, "valor negativo". (De qualquer maneira, em 2.2, exibir os dois nmeros envolvidos na soma).
Algoritmo Declare PositivoNegativo; Num1:Inteiro; Num2:Inteiro; SOMA:Inteiro;

Inicio Leia Num1, Num2; SOMA:= Num1 + Num2; Se SOMA > 0 ENTAO Inicio Escreva SOMA, Valor Positivo; Fim Seno Inicio Escreva num1, num2; SE SOMA = 0 ento Inicio Escreva "Valor Igual a Zero"; Fim Seno Inicio Escreva "Valor Negativo"; Fim Fim Fim

Sobre esta soluo, importante salientar o seguinte:


Note que a esttica, apesar de no influenciar no resultado da execuo do programa, de extrema importncia para o bom entendimento do mesmo. Perceba que todos os comandos subordinados ao primeiro SE ficam descolados na mesma margem. Apenas a clusula SENAO fica na mesma margem do SE. O mesmo ocorre com o segundo SE e com todos os que vierem. A isto damos o nome de EDENTAO. Veja que o comando Escreva num1, num2 executado independente da condio do segundo SE. por isto que eles foram escritos aps o SENO do primeiro SE.

E X ER CCIOS

DE

A P R ENDIZAGEM

1) Dados 2 nmeros digitados via teclado, faa um algoritmo capaz de exibir no vdeo o maior deles. Algoritmo maior; Declare X:Inteiro;

22

Y:Inteiro; Inicio Leia X; Leia Y; Se X > Y Ento Inicio Escreva X; Fim Seno Inicio Escreva Y; Fim Fim

2) Dados 3 nmeros distintos, digitados via teclado, faa um algoritmo capaz de exibir no vdeo o maior deles. Algoritmo maior; Declare X:Inteiro; Y:Inteiro; Z:Inteiro; Inicio Leia X; Leia Y; Leia Z; Se (X > Y) E (X > Z) Ento Inicio Escreva X; Fim Seno Inicio Se (Y > Z) E (Y > X) Ento Inicio Escreva Y; Fim Seno Inicio Escreva Z; Fim Fim Fim Comentrio: Note que, para descobrirmos qual o maior entre trs nmeros, precisamos codificar 2 comandos SE encadeados. Se fossem 4 variveis, seriam 3 SEs.

3) Dados 2 nmeros distintos digitados via teclado, faa um algoritmo capaz de exibi-los em ordem crescente. Algoritmo Ordenacao; Declare A:Inteiro; B:Inteiro; Inicio Leia A; Leia B; SE A > B Ento Inicio Escreva B, A; Fim Seno Inicio Escreva A, B;

23

Fim Fim

Como voc solucionaria este problema se tivssemos de utilizar apenas um comando ESCREVA ? A primeira imagem que nos vem mente que seria impossvel, tendo em vista que uma informao ao ser colocada em uma varivel simples ir ocupar o lugar da informao j existente na outra varivel. Mas em informtica podemos utilizar todas as tcnicas disponveis para solucionarmos um problema, evitando solues extensas ou complicadas. O recurso que vamos dispor nesse momento a utilizao de uma varivel auxiliar. Varivel auxiliar aquela que ns utilizamos como apoio. Veja que para realizar a troca de dados exposta a seguir, s com esse recurso.
Algoritmo troca; Declare A:Inteiro; B:Inteiro; X:Inteiro; Inicio Leia A; Leia B; Se A > B Ento Inicio X := A; A := B; B := X; Fim Escreva A , B; Fim Comentrio: Para economizarmos comandos ESCREVA, observe que invertemos os valores de A e B toda vez que a varivel A fosse maior que B. Assim, independente dos valores de A e B, sempre exibiremos A e B nesta ordem. Para propiciar esta inverso utilizamos uma varivel auxiliar X.

Se voc no entendeu muito bem o porqu da varivel X ter sido utilizada no algoritmo acima, preste bastante ateno agora: Deseja-se trocar os valores de duas variveis: A e B, por exemplo. A B

Se fizermos simplesmente A := B, apagaremos o valor original de A colocando o contedo de B em seu lugar. Assim, as variveis ficariam com o valor 15. Para viabilizar o processo da troca, temos que recorrer a uma varivel auxiliar que conter provisoriamente o valor de uma das variveis a fim de devolvlo para a outra.

24

2 p a s s o 1 p a s s o

3 p a s s o

E STRUTURAS

DE

R EPETIO
Algumas vezes, sentimos necessidade de escrevermos repetidamente o mesmo comando. Em alguns casos, a quantidade de vezes que temos de escrever indeterminada ou depende de uma condio. Existem algumas formas de definir as estruturas de repeties. Algumas lembram at esta ou aquela linguagem. Em nosso curso iremos no ater a duas estruturas, as quais podemos representar tranqilamente em qualquer ambiente de programao. As estruturas so: Enquanto e Para. Cada uma delas possui uma caracterstica que lhe peculiar. normal ouvir a pergunta: quando iremos utilizar esta ou aquela estrutura?. A resposta simples, pois depende da habilidade de cada um. Existem momentos que podemos resolver a mesma questo com todas as duas formas, mas existem momentos que no possvel. Por isso o segredo encontra-se no exercitar. Bem, vamos desmistificar estas estruturas.

C OMAN DO ENQUANTO
O comando ENQUANTO prende um trecho do programa a um lao (looping), ou seja, podemos determinar que um certo bloco de comandos seja executado repetidamente enquanto uma condio for verdadeira. .
Enquanto <condio> Faa Inicio < comandos >; Fim { se<condio> for verdadeira} { sero executados os comando deste bloco}

25

Esta estrutura possui duas formas de aplicao dentro de uma lgica:

a) b)

Testando sempre uma condio de sada no prprio comando, ou; Deixando este controle de sada da estrutura por conta de uma condio executada internamente.

1o.

Caso
S entra no lao de repetio, se e somente se, a condio for verdadeira. Para sair da repetio, a condio tem que ser satisfeita. Enquanto <condio> Faa incio < comandos > ; Fim

2o.

Caso
Entra no lao independente da condio, mas para sair, a condio 2 tem que ser verdadeira. Caso a condio no seja satisfeita, dizemos que o programa entrou em loop.

Enquanto <condio> Faa incio Se < condio 2 > Ento Incio sair Fim < comandos > ; Fim;

C OMAN DO PARA
O comando PARA executa um bloco de comandos, gerenciando esta execuo em cima de uma contagem. Enquanto ela no for satisfeita, ou seja, o valor final no for ultrapassado, os comandos do bloco sero repetidos a cada nova verificao da condio e obteno de resultado falso;

Para <var> := <valor_inicial> Faa Inicio < comandos > ; Fim

at

<Valor_final> incr[+/- <valor>]

Se voc utilizar este comando, ir poupar a inicializao da varivel, pois esta assumir como valor inicial o declarado como <valor_inicial>; no precisar contar a quantidade de vezes que o lao foi executado, pois esta estrutura tem

26

como uma de suas caractersticas, o adicionar um determinado valor a varivel <var> baseado no valor utilizado como incremento (+) ou decremento (-) utilizado no parmetro incr[...] estabelecendo uma contagem at que o valor declarado como <valor_final> seja alcanado e realizando a ltima execuo dos comandos existentes entre o Inicio e o Fim. Se o parmetro Incr [ +/- valor] for omitido, o programa assumir por Default sempre o incremento de + 1. Vamos utilizar um exemplo para esclarecer cada uma dessas instrues dentro de suas respectivas estruturas de repeties. Digamos que temos de fazer o computador escrever o somatrio de 5 idades informadas na tela. Usaremos os comandos aprendidos at agora. Com a estrutura ENQUANTO

Algoritmo Declare widade:Inteiro; Wcont:Inteiro; Wsomaid:Inteiro; Inicio Wcont := 0; Wsomaid := 0; Leia widade; Enquanto wcont < 5 Faa Inicio Wcont := wcont + 1; Wsomaid := wsomaid + widade; Leia widade; Fim Escreva O total das idades , wsomaid; Fim

Com a estrutura PARA

Algoritmo Declare widade:Inteiro; Wcont:Inteiro; Wsomaid:Inteiro; Inicio Wsomaid := 0; Para wcont := 1 at 5 Faa Inicio Leia widade; Wsomaid := wsomaid + widade; Fim Escreva O total das idades , wsomaid; Fim

EXERCCIOS
1)

DE

APRENDIZAGEM
Algoritmo exemplo1; Declare NUMERO:Inteiro; Inicio NUMERO := 1;

Elabore um algoritmo capaz de exibir todos os nmeros inteiros, desde o 1 at o 10.

27

Enquanto NUMERO <= 10 Faa Inicio Escreva NUMERO; NUMERO := NUMERO + 1; Fim Fim Comentrio: Note que, utilizamos uma varivel numrica chamada NUMERO que recebeu, inicialmente, o valor 1, e da em diante foi ciclicamente incrementada de 1 (NUMERO:=NUMERO+1) at que a condio imposta pelo ENQUANTO tornasse falsa.

2)

Elabore um algoritmo capaz de receber um nmero e, em seguida, listar todos os nmeros de 1 at ele. Algoritmo exemplo2; Declare NUMERO:Inteiro; LIMITE:Inteiro; Inicio Leia LIMITE; NUMERO:=1 ENQUANTO NUMERO <= LIMITE FAA Inicio Escreva NUMERO; NUMERO := NUMERO + 1; Fim Fim Comentrio: Este programa similar ao anterior. A nica sofisticao implementada foi a flexibilizao do limite. Isto tornou o algoritmo mais genrico, servindo para listar a seqncia de qualquer nmero, e no apenas a do 10. Para alcanar esta sofisticao, foi necessrio o uso da varivel LIMITE que de fato limitou o lao do Enquanto ao seu contedo, contedo este que fora recebido logo no incio da execuo do programa, com o comando Leia LIMITE.

3)

Sofisticando ainda mais o programa da 3 questo, vamos fazer com que, alm de listar todos os nmeros de 1 at um determinado nmero digitado via teclado, ele mostre a soma de todos esses nmeros no final da listagem. Algoritmo exemplo2; Declare NUMERO :Inteiro; LIMITE :Inteiro; SOMA :Inteiro; Inicio Leia LIMITE; NUMERO := 1; SOMA := 0; Enquanto NUMERO <= LIMITE Faa Inicio Escreva NUMERO; SOMA := SOMA + NUMERO; NUMERO := NUMERO + 1; Fim Escreva SOMA; Fim Comentrio: Perceba que, para acumular varivel NUMERO, precisamos qual chamamos de SOMA. acrescentamos ao valor de (SOMA :=SOMA+NUMERO). os valores parciais assumidos pela lanar mo de uma outra varivel, a Assim, a cada ciclo do Enquanto SOMA o novo valor de NUMERO

Observe tambm que ao declaramos SOMA, na prtica das linguagens, temos que tomar o cuidado dela ter capacidade de absorver o resultado da expresso. fcil entender por que! Como SOMA ser um Acumulador dos valores de NUMERO,

28

ela sempre ter valores maiores que NUMERO, podendo seu montante, exceder a capacidade definida em NUMERO.

T CNICAS

DE

A LGORITMIZAO
Como dissemos anteriormente, no h qualquer receita de bolo para resolvermos um determinado problema atravs da algoritmizao. Cada caso um caso bem particular. Entretanto, alguns procedimentos sistemticos podem auxiliar a elucidao de alguns problemas.

D IC AS

SOB RE

R E SOLU O

DE

A LGOR IT MOS

Nunca d um algoritmo por encerrado antes de testar todas as possibilidades condicionais. S o teste garante a eficcia do programa. Teste sempre as situaes extremas. Em algoritmos utilize diversas condies; teste ao menos uma situao que se enquadre em cada condio prevista pelo algoritmo. No tente decorar algoritmos. Cada caso um caso, por mais que se assemelhem. H sempre uma forma melhor de fazer a mesma coisa. Aps o ZERO ERRO, examine se o seu algoritmo eficiente, isto , se ele no usa variveis demais, se ele facilmente compreendido por uma terceira pessoa, se os nomes de variveis so autoexpressivos, se o usurio no ter dificuldade em utiliz-lo, e se o computador no passar muito tempo para process-lo (performance). No tente arquitetar, ainda que mentalmente, a soluo de um problema sem antes entender perfeitamente o que pede no enunciado. No inicie a algoritmizao sem ter claramente a soluo arquitetada na sua cabea. No deixe a curiosidade afetar a sua criatividade. Durante o desenvolvimento do seu algoritmo, no pesas orientao sobre o como fazer, sem antes ter chegado a algum resultado, ainda que errado. Nunca desista de uma soluo. Conclu-a. Chegue at o fim. Teste-a, e somente quando os testes sinalizarem a sua ineficcia, tente modific-la ou refaz-la.

T CN ICA

P AR A E XTR AIR O S DAD OS D E UM EN UN CIAD O

29

Quando nos deparamos com um enunciado pequeno, nos sentimos a vontade para resolve-lo pois os dados existentes neste so poucos. Porm, quando nos deparamos com um enunciado mais complexo, existe a tendncia natural de pensarmos que algo muito difcil de resolver. Mas, por incrvel que parea, o maior problema encontra-se em nosso lidar com o desafio e o encarar friamente. Justamente para melhor lhe capacitar a interpretar um texto que estamos te dando esta dica. Todos os programas possuem 3 fases bem definidas e nestas, os seus dados necessrios. Quando voc tiver domnio sobre estas trs fases, o algoritmo fluir naturalmente. Procure identificar a 1 fase que a da identificao dos dados de entrada; a 2 fase e a que verifica os dados relativos ao processamento (condies de encerramento, clculos, mensagens, etc; a 3 fase aquela aonde voc descobre quais os dados de sada, ou seja, aps o processamento, aonde iro ser colocado estes dados? Vamos exemplificar. Elaborar um algoritmo que receba a matrcula, o nome e o salrio de 50 funcionrios, imprimindo ao final, o somatrio dos salrios e a mdia salarial. Vamos por em prtica nosso aprendizado. 1 fase (Dados de Entrada) Ser lido na tela a MATRICULA, NOME E SALRIO; Leia Matricula; Leia Nome; Leia Salrio; 2 fase (Processamentos) Sero processados dados de 50 funcionrios. (isto implica dizer que precisaremos de uma varivel para contabilizar e gerenciar este processo); O melhor comando para gerenciar um valor predefinido o PARA. Cada elemento que for processado, ser acumulado o valor do salrio (somatrio dos salrios). AcumSal := AcumSal + Salrio; Observe que para clculo da mdia salarial necessrio sabermos o somatrio dos salrios e dividir o mesmo pela quantidade de pessoas que os possuem. Como sabemos que existiro 50 pessoas, para encontrar a mdia super simples. Calcular a mdia dos salrios. Media := AcumSal / 50;

30

3 fase (Dados de Sada) Dar sada no valor da mdia calculada. Escreva A mdia salarial , Media;

Montando o Algoritmo

Algoritmo exemplo; Declare AcumSal:Real; Cont :Inteiro; Salrio: Real; Media :Real; Nome :Literal; Inicio AcumSal := 0 Para cont := 1 at 50 faa Inicio Leia Matricula; Leia Nome; Leia Salrio; AcumSal := AcumSal + Salrio; Fim Media := AcumSal / 50; Escreva A mdia Salarial , Media; Fim

Faclimo, no!

Com estas competncias adquiridas nesse mdulo, voc deve exercitar e chegar num estgio de habilidade que lhe permitir obter sucesso nas demais competncias que sero ministradas a voc em sala de aula. Lembre-se: Os exerccios que esto na apostila dedicada s para este fim, devem ser praticados e esgotados, pois isto o far crescer em situaes as mais adversas dentro do mundo da programao. Sucesso a todos!

D ESAFIOS R ESOLVIDOS
Como fazer para descobrir a quantidade de elementos iguais ao maior do conjunto? Simples. Primeiro, voc dever encontrar o maior;

31

Em segundo lugar, verificar quais os elementos so iguais a este maior encontrado. Aqui damos uma dica. Ao encontrar um elemento cujo valor seja superior quele que representa o maior, temos duas tarefas a fazer. Uma atribuir o valor do elemento para ser o maior e em seguida inicializar a quantidade com o numeral 1 (um). Mas porque 1 (um)? Pelo fato de que acabamos de encontrar um nmero maior e com certeza, nesse momento ele nico. Como fazer para contabilizar todos os iguais? A prpria pergunta j a resposta: cada vez que voc encontrar algum valor igual ao maior, contabilizaremos mais um. Vamos ao Exemplo? Elaborar um algoritmo que receba idade de 50 pessoas e informe ao final, a maior delas e quantas pessoas a possuem.
Algoritmo resolvidos1; Declare Ma_idade:Inteiro; Qt_maid :Inteiro; Cont :Inteiro; Widade :Inteiro; Inicio Ma_idade := 0; Qt_maid := 0; Para cont := 1 at 50 faa Inicio Leia widade; Se widade > Ma_idade ento Inicio Ma_idade := widade; Qt_maid := 1; Fim Seno Inicio Se widade = Ma_idade ento Inicio Qt_maid := Qt_maid + 1; Fim Fim Fim Escreva A maior idade ..........................: , Ma_idade; Escreva Quantidade de pessoas com a maior idade...: , Qt_maid; Fim

Como fazer para descobrir a quantidade de elementos iguais aos dois maiores elementos do conjunto? Agora ficou mais fcil. Precisamos atentar para um pequeno detalhe: quando encontrarmos um elemento que superior ao primeiro, este ltimo passa a ser o segundo maior. Para no perdermos o contedo original do maior, passaremos seus contedos para as respectivas variveis e depois procederemos naturalmente colocando o elemento maior no seu referido lugar. Vejamos parte do cdigo a seguir.

32

Ma_idade2 Qt_maid2 Ma_idade1 Qt_maid1

:= := := :=

Ma_idade1; Qt_maid1; widade; 1;

Percebeu como simples? Isso fazemos em todos os momentos em que queremos verificar o maior e o segundo maior. No demais tomar cuidado com o segundo maior, pois apesar do valor as vezes, ser inferior ao primeiro, nada garante que ele o seja em relao ao segundo. Desta forma, precisamos fazer a comparao para termos certeza. Vamos ao Exemplo? Elaborar um algoritmo que receba idade de 50 pessoas e informe ao final, as duas maiores idades e quantas pessoas as possuem.

Algoritmo Declare

Ma_idade1:Inteiro; Ma_idade2:Inteiro; Qt_maid1 :Inteiro; Qt_maid2 :Inteiro; Cont :Inteiro; Widade :Inteiro;

Inicio Ma_idade1 := 0; Ma_idade2 := 0; Qt_maid1 := 0; Qt_maid2 := 0; Para cont := 1 at 50 faa Inicio Leia widade; Se widade > Ma_idade1 ento Inicio Ma_idade2 := Ma_idade1; Qt_maid2 := Qt_maid1; Ma_idade := widade; Qt_maid := 1; Fim Seno Inicio Se widade = Ma_idade1 ento Inicio Qt_maid1 := Qt_maid1 + 1; Fim Seno Inicio Se widade > Ma_idade2 ento Inicio Ma_idade2 := widade; Qt_maid2 := 1; Fim Seno Inicio Se widade = Ma_idade2 ento Inicio Qt_maid2 := Qt_maid2 + 1; Fim Fim

33

Fim Fim Fim Escreva Escreva Escreva Escreva Fim A maior idade ..........................: Quant. de pessoas com a maior idade.......: A segunda maior idade ..................: Quant. de pessoas com Seg. maior idade....: , , , , Ma_idade1; Qt_maid1; Ma_idade2; Qt_maid2;

34

Você também pode gostar