técnicas de desenvolvimento da lógica

Upload: gustavo-silva

Post on 30-May-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    1/28

    FLP (Fundamentos deIntroduo a Informtica)

    Tcnicas deDesenvolvimento da Lgica

    2

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    2/28

    SumrioSumrio.................................................................................................................................................................3Introduo.............................................................................................................................................................4

    As dificuldades de programar...............................................................................................................4A metodologia de aprendizagem..........................................................................................................5

    Variveis x Dados............................................................................................................................................. ....6

    Uso das Variveis no Algoritmo............................................................................................................6Escolhendo o TIPO do Identificador da Varivel..................................................................................7Tipo inteiro................................................................................................................... .........7Tipo real.............................................................................................................................. ..7Tipo Literal................................................................................................................... .........7Tipo Lgico............................................................................................................................8

    Tamanho das Variveis.................................................................................................................. ......8Declarao de Variveis.......................................................................................................................8

    Comando DECLARE..................................................................................................... .......8Operadores...........................................................................................................................................9

    Operadores Numricos.........................................................................................................9Operadores Relacionais .................................................................................................... ..9Operadores Lgicos............................................................................................................10

    Entendendo Representaes de Sintaxes.............................................................................................. ...........11Atribuio de Valores a Variveis.......................................................................................................11

    Estruturao do Algoritmo...................................................................................................................................11Entrada e Sada de Dados..................................................................................................................12

    Comando LEIA....................................................................................................................12Comando ESCREVA (lista informaes no vdeo).............................................................12

    Manipulaao de valores......................................................................................................................................13Conceitos Fundamentais....................................................................................................................................14

    Contador x Acumulador................................................................................................................ ......14Percentuais................................................................................................................................... ......14Maior Valor..........................................................................................................................................15Menor Valor.........................................................................................................................................16

    Estruturas Condicionais.................................................................................................................................. ....16Estrutura Condicional SE (Smples)...................................................................................................16Estrutura Condicional SE (Composta)................................................................................................17Estrutura Condicional SE (Encadeada)..............................................................................................17

    Exerccios de Aprendizagem..............................................................................................................19Estruturas de Repetio......................................................................................................................................21Comando ENQUANTO.......................................................................................................................21Comando PARA..................................................................................................................................22

    Exerccios de Aprendizagem............................................................................................. .23Tcnicas de Algoritmizao................................................................................................................................24

    Dicas sobre Resoluo de Algoritmos................................................................................................24Tcnica para extrair os dados de um enunciado................................................................................24

    Desafios Resolvidos............................................................................................................................................26

    3

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    3/28

    Introduo

    rogramar um computador no uma tarefa to difcil. Difcil programar as

    nossas cabeas.O computador, na realidade, uma rplica bastante simplificada de nossamente, com apenas uma diferena essencial: a AUTO-PROGRAMAO.PAo longo de nossas vidas, aprendemos coisas a partir de alguns elementos fundamentaiscomo cores, smbolos, sons, cheiros, e sentimentos. Esses elementos vo secombinando atravs de um processo conhecido como aprendizado.

    O processo de aprendizado nada mais do que uma auto-programao de nossasmentes. Algum diz para nosso crebro o que ele tem que fazer ao se deparar comuma situao especfica, tal como: dobrar uma esquina, parar ao perceber o sinalvermelho, 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 egenial 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 dificuldades de programar 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, dentrode 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 osquais torna-se 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 esmbolos), e tambm capaz de reconhecer e utilizar os recursos disponveis nocomputador e perifricos (impressora, monitor de vdeo, mouse, teclado, memria...).Ao aprendermos uma receita de bolo, colocamos uma poro de comandos em nossamente. 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 aacontecer.

    4

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    4/28

    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.

    A metodologia de aprendizagemComo vemos, a programao de computadores bastante semelhante a programao denossas mentes, o que torna suas dificuldades e caractersticas tambmsimilares.Aplicaremos as tcnicas e recursos existentes aos elementos inerentes acomputadores, interagindo com variveis de memria, comandos de entrada e sada dedados, alm de comandos que controlaro a repetio de blocos de comandos.Estruturas como vetores, matrizes, listas, filas, pilhas, rvores, entre outras, seroministrados em outras disciplinas.Para representar as aes (comandos), utilizaremos uma linguagem no comercial - o pseudocdigo, conhecido como Algoritmo. Uma linguagem que lhe poupe de comandosem 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 osalunos a interagirem com o computador de forma prtica.

    5

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    5/28

    Variveis x DadosVarivel o local de memria onde sero armazenados osdados de formatemporria. Em nossos algoritmos no nos preocuparemos com o endereo real dessasvariveis, pois a maioria das linguagens de programao tornam estes endereostransparentes ao programador.

    Para exemplificarmos a diferena entre dados(constantes) e variveis, bem como entender melhor o endereamento de variveis, podemoscitar o exemplo de uma estante de prateleiras,onde esto guardados livros ou quaisquer outrosobjetos (veja figura).Os livros e objetos podem ser chamados de

    dados, contedo das variveis. Para nos referenciarmos varivel necessrio darmosum nome mesma, pois no trabalharemos com endereo de memria propriamentedito, e sim comidentificadores. aconselhvel que onome da varivelexpresse o que vai ser armazenado dentro dela, p.e.nomeAluno, quantidade_alunos.As variveis podem ainda ser simplesoucompostas. As variveis simples so aquelasque 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 dadoComo dissemos anteriormente, o endereo fsico da varivel no precisa ser declarado, amenos que estejamos programando em alguma linguagem de baixo nvel, como oASSEMBLER. As linguagens de alto nvel procuram espaos livres na memria docomputador para associarem bytes varivel declarada.

    Uso das Variveis no AlgoritmoO nome a ser associado varivel (ex.: X, Y, KTI34), no importante para ocomputador, pois este servir apenas como uma mera referncia. Entretanto para outros programadores que possam vir a analisar os seus programas, ou at para voc mesmoaps algum tempo, necessrio que esses nomes sejam expressivos, simples eobjetivos.Vejamos agora alguns exemplos de identificadores:

    SALARIO Um bom nome para varivel que ir armazenar um valor salarial;CONT Um bom nome para varivel que ir registrar uma contagem;TOTAL Um bom nome para variveis acumuladoras de somas;

    6

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    6/28

    DATANASC Um bom nome para variveis usadas para armazenar uma data denascimento.

    Devemos evitar nomes do tipo: X, K, C1, ABC, etc... a menos que eles expressemalgo 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. OCOBOL permite separadores como hfens, barras, entre outros. Linguagens derivadasdo DBASE permitem apenas o UnderLine (Nome_Aluno) como caracter separador. Amaioria das linguagens apresenta certas restries livre escolha dos nomes dasvariveis. A mais evidente a impossibilidade da utilizao de palavras reservadas da prpria linguagem. Por exemplo, a palavra MOVE representa um comando para oCOBOL. No possvel utilizarmos este nome como identificador de qualquer varivelnesta linguagem. J para oCLIPPER , o MOVE pode ser um identificador.Outras vezes, a linguagem traz consigo algumas variveis reservadas. Tratam-se dealgumas variveis que so automaticamente declaradas pela linguagem. Normalmenteelas registram a data e a hora do sistema operacional, ou algumas informaes internascomo cdigos de perifricos, endereos de memria para buffers, etc.

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

    Tipo inteiroSinaliza que o contedo ser de nmeros e que no ter a parte decimal em suacomposio.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 osditos caracteres especiais. Os contedos destas variveis SEMPRE sero demonstrados entreaspas (simples ou dupla, dependendo da linguagem);

    So variveis que aceitam contedos de qualquer natureza, portanto: nmeros, letras esmbolos em geral, no podendo estes nmeros ser utilizados para operaesaritmticas.

    Ex.: "MARIA JOSE"; "Recife"; "123"; "NOMES"

    7

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    7/28

    Observaes:a) No confundir os valores numricos com os literais ou entre os literais. Vejamosos casos a seguir.Caso 1.

    42 (inteiro) diferente de 42 (literal) Os tipos so diferentes, logo, seusvalores em memrias so diferentes;Caso 2.

    01(literal) diferente de 1 (literal) Os tipos so iguais, mas arepresentao em memria diferente.

    Tipo LgicoEste tipo de varivel no permite o registro de dados numricos ou literais. Umavarivel lgica s armazena um entre dois valores: VERDADEIRO ou FALSO.

    Em nossa disciplina, no nos ateremos ao como exatamente, o computador registra estainformao 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 devarivel no registra outro tipo de informao exceto Verdadeiro ou Falso.Para efeito de representao, diremos que o contedo de uma varivel lgica serrepresentado pelas letrasV e F, representando respectivamente, Verdadeiro e Falso:

    Tamanho das VariveisQuando declaramos uma varivel no precisamos delimitar o byte inicial e final queesta ir ocupar na memria do computador, entretanto imprescindvel entendermosque elas ocupam um espao na memria e que ostiposde dados trazem definies sobreas 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 mencionadosanteriormente, ou seja: Literal, Inteiro, Real e Lgico..

    Declarao de VariveisTODAS as variveis que o programa vier a utilizar tm que existir antes de seremreferenciadas. Por esse motivo, necessitamosdeclarar estas. Como fazer isso? Atravsdo comandoDECLARE.

    Comando DECLARE

    DECLARE [,]: ;

    Nome ou identificador da varivel Tipo da varivel definida: Literal, Inteiro, Real e Lgico.Exemplos: 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;

    8

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    8/28

    IDADE : Inteiro;ALTURA: Real;DEPENDENTE, LOGICO;

    Ou ainda, em uma mesma linha, desde que sejam do mesmo tipo de dados.Exemplo:

    DECLAREIDADE, CONTADOR:inteiro; (obs.: tipo e tamanho iguais}Observao: As vezes substitumos o comando Declare por Var ou Defina, dependendo dalinguagem que estamos querendo nos aproximar. Outros comandospodero sofrer variaes. Cabendo ao professor da disciplina fazer osajustes baseados no direcionamento que queira dar disciplina.

    OperadoresPodemos atribuir a uma varivel o resultado de uma expresso numrica. Atribui umaao que as linguagens possuem e que representa o ato de preencher o espao davarivel com um contedo, conforme o tipo de dado (veremos mais detalhadamente emtpico especfico). Entendemos por expresso numrica um conjunto de operaesaritmticas combinadas entreoperandose operadores. Mas alm das expresses

    numricas, existem expresses que exigem tratamentos particulares, como veremos aseguir.

    Operadores NumricosSo elementos (smbolos) utilizados para representar uma operao de cunho aritmtico.

    + indica SOMA- indica SUBTRAO* indica MULTIPLICAO

    / indica DIVISO

    Relembrando um pouco a matemtica elementar, a ordem de execuo de umaexpresso 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.

    Operadores RelacionaisSo elementos (smbolos) utilizados para realizarmos operaes de comparaes,recebendo como resposta o valor verdadeiro ou falso.

    = igual aExemplos:Dados A = 3, B = 2, C = Jose , D = Jose, NOME = JOSEA > B Retorna V C = D Retorna V

    > maior que < menor que = igual a

    >= maior ou igual a

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    9/28

    NOME = "JOSE" Retorna V (Est sendo comparado o contedo da varivel NOME com astring JOSE.

    NOME = D Retorna F (esto sendo comparados os contedos das variveis NOME eD).

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

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

    Operadores LgicosEstes elementos so necessrios quando voc deseja realizar comparaes entre resultadoslgicos obtendo como resposta outro valor lgico. Estranho, no? Mas exatamente isso queocorre. Por exemplo: se voc ler um anuncio sobre emprego que tenham as seguintessolicitaes:Precisa-se de pessoas do sexo feminino e com idade mxima 40 anos. O que vocconsegue extrair deste anuncio? A resposta seria: duas exigncias , a saber, o SEXO dapessoa deve ser igual a feminino (F) e a IDADEdeve ser menor ou igual a 40 anos. Logo,estamos diante de duas sentenas, que, dependendo do que seja colocado como dados nacomparao, poderemos ter a possibilidade do resultado ser falso ou verdadeiro. Se o SEXOfor igual a M (masculino), a primeira sentena ser falsa. Para voc poder ocupar a vagaoferecida, 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 Detalhamento Prioridadede execuo

    OU(Opcionalidade)

    A sentena que contiver este operador ser verdadeira se pelomenos uma das expresses nela contida retornar valor verdadeiro.

    3

    E(Simultaneidade)

    A sentena que contiver este operador ser verdadeira se asexpresses nela contida resultarem valores verdadeiros.

    2

    NO(Negao)

    Quando queremos inverter (negar) o resultado de uma condio ouexpresso lgica.

    1

    Observao: caso sejam colocados os parnteses na sentena, a prioridade de execuo ser alteradainiciando-se pelos elementos contidos dentro destes. Caso exista mais de uma sentenanesta condio, observar-se-, alm do exposto acima, a execuo dos comandos daesquerda para a direita da expresso.

    Vejamos a TABELA VERDADE a seguir para entendermos melhor. E OU

    V V V V V V

    F V F F V V

    V F F V F VF F F F F F

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

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    10/28

    Entendendo Representaes de SintaxesAgora que voc j aprendeu o primeiro comando de nossa linguagem algortmica, importante aprender a forma sinttica de se representar um comando. Note que, aoenunciarmos o comando DECLARE, ns utilizamos algumas nomenclaturas esimbologias que voc, certamente, encontrar em qualquer livro sobre quaisquer linguagens.Assim, vamos elucidar algumas delas:Repetindo o comando,

    DECLARE [,]: ;

    < > Delimita o espao reservado para inserirmos um parmetro do comando. Amaioria dos comandos das linguagens possui parmetros.

    [ ] Delimita o espao reservado para inserirmos um parmetro opcional docomando, ou seja, tudo o que vier entre colchetes nem sempre precisar

    ser especificado no comando.Ex: DECLARE SOMA : Inteiro;DECLARE SOMA, QUANTIDADE_ALUNOS:inteiro;

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

    Atribuio de Valores a VariveisAt agora, vimos conceitos e exemplos de variveis. Agora vamos aprender a utiliz-lasem algoritmos.

    Representaremos o comando deatribuio pela combinao de dois smbolos doteclado, que so dois pontos e o sinal de igual, sem espaos entre eles(:=). Este smbolorepresentar a atribuio de um dado a uma varivel.

    :=

    Exemplos:NOME := "JOO"; Dados Literal tm que vir entre aspasIDADE := 25; Dados Inteiros no precisam de aspasALTURA := 1,67; Dados tipo Real, possuem uma vrgula como delimitador entre a parte

    decimal e a parte inteira (linguagens comerciais adotam o ponto).DEPENDE := F; 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, auma varivel:SOMA := QUOEF * (VALOR + 10) / DIVISOR;

    Estruturao do AlgoritmoExistem alguns formatos para organizar um algoritmo, porm adotaremos o mais global,facilitando assim o aprendizado. Vejamos a seguir:

    11

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    11/28

    Algoritmo ;Declare {Local para declarao das variveis}

    Incio{Local para inicializao das variveis / mensagens montando atela}{Local para receber dados, processar dados e dar sada nos dados/ mensagens}

    Fim

    Entrada e Sada de DadosAt 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. Nocaso do algoritmo, estes comandos so os seguintes: Leia (entrada), Escreva (sada -tela).

    Comando LEIA

    Leia ;Ou

    Leia ();

    - Varivel que receber os dados digitados pelo usurio.

    Algoritmo

    Declare wnome:literal;Widade:Inteiro;Inicio Leia wnome; Leia widade;

    ;Fim

    A execuo do comandoLEIA 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 oLEIA, permite um preenchimento por vez. Se voc desejar digitar vriasinformaes referente a mesma varivel, ter que utilizar uma estrutura derepetio (veremos mais adiante) e fazer com que o fluxo do programa passe pelomesmo local onde oLEIA est posicionado No exemplo acima, veja que o computador aguarda que o usurio digite dois valoresdistintos atravs do teclado. Estes dois valores iro ocupar, respectivamente, asvariveis NOME e IDADE.

    Comando ESCREVA (lista informaes no vdeo)Escreva [, ][, ];

    OuEscreva ([, ][, ] );

    Importante! Pelo menos um dos parmetros deve ser informado quando da utilizao destecomando. - Texto que est sendo encaminhado para tela.

    12

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    12/28

    - 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 natela.

    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 ", NOME;FIM;

    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 comandode sada dos dados. No exemplo acima, teremos o contedo da varivelNOMEexibido no vdeo logo apsa mensagem Seu nome , como mostra a ilustrao abaixo.

    NOME ..: Karla Silva

    Seu nome Karla Silva

    Manipulaao de valores1) 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 paraarmazenar os dois nmeros que seriam digitados pelo usurio, e SOMA serviu paraarmazenar 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 2variveis, 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;

    13

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    13/28

    Fim

    Qual a soluo mais eficiente das duas?Somente o fato de economizar uma varivel torna qualquer uma dessas solues bemmais eficiente que a primeira. O mesmo caso, sem precisar utilizar as variveis para

    guardar o resultado, agiliza ainda mais o processamento. Mas este caso 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

    Conceitos Fundamentais

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

    PercentuaisEncontramos algumas dificuldades quando tratamos estes temas. Aqui daremos algumasregras bsica para que voc se sinta a vontade no momento do clculo.Encontrando um valor percentual:

    Veja esta continha simples50 bolas 100 % (50 = Todo)25 bolas x % (25 = Parte do Todo)Chegaremos a concluso:

    X % = 25 x 100 / 50Estas informaes nos levam a frmula:

    14

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    14/28

    := < Parte do Todo> * 100 / < Todo>Encontrando um valor final aps aplicao do percentual:

    := * 1,;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:

    := * 0,;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 umavarivel, no podemos fazer a aplicao literal do que explicamos neste tpico, masprecisamos 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);

    Maior Valor Existiro momentos em que voc sentir necessidade de identificar o maior elementodentro de um conjunto de dados processados. S existe uma forma de sabermos qual omaior valor: comparando as grandezas do conjunto. Para descobrirmos qual ser omaior elemento, inicializaremos uma varivel, que armazenar omaior valor doconjunto, com um valor bem pequenopara a situao, e, cada dado existente noconjunto iremos comparar com esta dita varivel. Caso o valor encontrado seja superior,este ser colocado como contedo da varivelmaior, j que este novo dado representa amaior 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 derepetio comentada mais adiante.

    Algoritmo maior; Declare MAIOR_ID:Inteiro;

    Idade:Inteiro;Cont:Inteiro;

    InicioMAIOR_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

    15

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    15/28

    Menor Valor De igual forma iremos trabalhar para encontrar o elemento que possui o menor valor.Para tanto, iremos inicializar uma varivel, que armazenar omenor valor do conjunto,com um valor bem altoadequado para a situao, e, cada dado existente no conjuntoiremos comparar com esta dita varivel. Caso o valor encontrado seja inferior, este sercolocado como contedo da varivelmenor, 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;

    Iniciomenor_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

    Estruturas CondicionaisSabemos que as linhas de um programa estruturado so executadas de cima para baixode 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 aquantidade 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 aM.O comando que realiza esta pergunta oSE, que possui trs situaes bem definidasdentro da programao: Estrutura CondicionalSimples, CompostaouEncadeadas(Ninhos de SEs).

    Estrutura Condicional SE (Smples)Se ento

    inicio;

    Fim

    - Expresso lgica qualquer. So comandos que sero executados caso o resultado da

    expresso lgica seja verdadeira. Esses comandos devem ser escritosentre as delimitaes da gerncia do comando, ou seja, entre as palavrasIncio e fim.

    Em tempo de execuo, se a expresso lgica retornar verdadeiro ento a seqncia decomandos ser executada.

    Para fixar esta idia, tente depurar o seguinte algoritmo: Algoritmo exemploSE1;

    16

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    16/28

    DECLARE Idade, Numrico, 3Nome, Caracter , 35Sexo, Caracter , 1

    Inicio Leia Nome; Leia Sexo; Leia Idade; Se Sexo = M ento

    Inicio Escreva "A idade de ", Nome, , Idade; Fim Escreva "Fim da transacao";Fim

    Estrutura Condicional SE (Composta)Se ento

    Inicio;

    Fimseno

    inicio;

    Fim

    Onde:

    - Expresso lgica qualquer. So comandos quaisquer que sero executados caso o

    resultado da expresso lgica seja verdadeira (V) . 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 , por ser falso o resultado. S deve ser utilizado para otimizar ou se precisar tratar a negativa da .

    Para fixar esta idia, tente depurar o seguinte algoritmo: Algoritmo exemploSE2;

    DECLARE 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 transacao";Fim

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

    Se ento

    17

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    17/28

    Inicio;Se ento

    Inicio ;

    Fim Fim Seno

    InicioSe ento

    Inicio ;

    Fim Seno

    Inicio ;

    Fim ;

    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, em2.2, exibir os dois nmerosenvolvidos na soma).

    Algoritmo PositivoNegativo; Declare Num1:Inteiro;

    Num2:Inteiro;SOMA:Inteiro;

    InicioLeia Num1, Num2;SOMA:= Num1 + Num2;Se SOMA > 0 ENTAO

    InicioEscreva SOMA, Valor Positivo;

    Fim Seno

    InicioEscreva 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 comandossubordinados ao primeiro SE ficam descolados na mesma margem. Apenas a clusulaSENAO fica na mesma margem do SE . O mesmo ocorre com o segundo SE e com todos osque vierem. A isto damos o nome de EDENTAO . Veja que o comando Escreva num1, num2 executado independente da condio dosegundo SE . por isto que eles foram escritos aps o SENO do primeiroSE .

    18

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    18/28

    Exerccios de Aprendizagem1) Dados 2 nmeros digitados via teclado, faa um algoritmo capaz de exibir no vdeo o maior deles.

    Algoritmo maior; Declare X:Inteiro;

    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 2comandos 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 ordemcrescente. 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; Fim Fim

    Como voc solucionaria este problema se tivssemos de utilizar apenas umcomandoESCREVA ?

    19

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    19/28

    A primeira imagem que nos vem mente que seria impossvel, tendo em vista queuma informao ao ser colocada em uma varivel simples ir ocupar o lugar dainformao j existente na outra varivel. Mas em informtica podemos utilizar todas astcnicas disponveis para solucionarmos um problema, evitando solues extensas oucomplicadas.

    O recurso que vamos dispor nesse momento a utilizao de uma varivelauxiliar.Varivel auxiliar aquela que ns utilizamos como apoio. Veja que para realizar a trocade 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 Btoda 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 umavarivel auxiliar X.

    Se voc no entendeu muito bem o porque da varivelX ter sido utilizada no algoritmoacima, preste bastante ateno agora:

    Deseja-se trocar os valores de duas variveis: A e B, por exemplo.A B10 15

    Se fizermos simplesmenteA := B, apagaremos o valor original deA colocando ocontedo deB em seu lugar. Assim, as variveis ficariam com o valor 15. Paraviabilizar o processo da troca, temos que recorrer a uma varivel auxiliar que conter provisoriamente o valor de uma das variveis a fim de devolv-lo para a outra.

    X10 15

    10

    20

    1 passo

    2 passo

    3 passo

    X:=A

    A:=B

    B:=X

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    20/28

    Estruturas de RepetioAlgumas 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 atesta 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 momentosque no possvel. Por isso o segredo encontra-se no exercitar.

    Bem, vamos desmistificar estas estruturas.

    Comando ENQUANTO O comandoENQUANTOprende um trecho do programa a um lao (looping), ou seja, podemos determinar que um certo bloco de comandos seja executado repetidamenteenquanto uma condio for verdadeira..

    Enquanto Faa { se for verdadeira}Inicio { sero executados os comando deste bloco}

    < comandos >;Fim

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

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

    internamente.

    1o. CasoS entra no lao de repetio, se e somente se, a condio for verdadeira. Para sair darepetio, a condio tem que ser satisfeita.Enquanto 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 Faaincio Se < condio 2 > Ento Incio

    sair Fim

    < comandos > ;Fim ;

    21

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    21/28

    Comando PARAO comandoPARA executa um bloco de comandos, gerenciando esta execuo em cimade 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 dacondio e obteno de resultado falso;

    Para := at incr[+/- ]Faa

    Inicio< comandos > ;

    Fim

    Se voc utilizar este comando,ir poupar a inicializao da varivel , pois estaassumir como valor inicial o declarado como; no precisar contar aquantidade de vezes que o lao foi executado, pois esta estrutura tem como uma desuas caractersticas, o adicionar um determinado valor a varivelbaseado novalor utilizado como incremento (+) ou decremento (-) utilizado no parmetroincr[...]estabelecendo uma contagem at que o valor declarado comosejaalcanado e realizando a ltima execuo dos comandos existentes entre o Inicio e oFim. Se o parmetro Incr [ +/- valor] for omitido, o programa assumir por Defaultsempre o incremento de + 1.Vamos utilizar um exemplo para esclarecer cada uma dessas instrues dentro de suasrespectivas estruturas de repeties. Digamos que temos de fazer o computador escrever o somatrio de 5 idades informadas na tela. Usaremos os comandos aprendidos atagora.

    Com a estrutura ENQUANTO Algoritmo

    Declare widade:Inteiro;Wcont:Inteiro;Wsomaid:Inteiro;

    InicioWcont := 0;Wsomaid := 0;

    Leia widade;Enquanto wcont < 5 Faa

    InicioWcont := 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;

    InicioWsomaid := 0;

    Para wcont := 1 at 5 Faa Inicio

    Leia widade;Wsomaid := wsomaid + widade;

    22

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    22/28

    Fim Escreva O total das idades , wsomaid;

    Fim

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

    Algoritmo exemplo1; Declare NUMERO:Inteiro;Inicio

    NUMERO := 1; Enquanto NUMERO

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    23/28

    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, ela sempre tervalores maiores que NUMERO, podendo seu montante, exceder a capacidade definidaem NUMERO.

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

    Dicas sobre Resoluo de Algoritmos Nunca d um algoritmo por encerrado antes de testar todas as possibilidadescondicionais. S o teste garante a eficcia do programa. Teste sempre as situaesextremas. Em algoritmos utilize diversas condies; teste ao menos uma situao quese 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, examinese o seu algoritmo eficiente, isto , se ele no usa variveis demais, se ele facilmentecompreendido por uma terceira pessoa, se os nomes de variveis so auto-expressivos,se o usurio no ter dificuldade em utiliz-lo, e se o computador no passar muitotempo para process-lo (performance). No tente arquitetar, ainda que mentalmente, a soluo de um problema sem antesentender 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 seualgoritmo, no pesas orientao sobre o como fazer, sem antes ter chegado a algumresultado, ainda que errado. Nunca desista de uma soluo. Conclu-a. Chegue at o fim. Teste-a, e somente quandoos testes sinalizarem a sua ineficcia, tente modific-la ou refaz-la.

    Tcnica para extrair os dados de um enunciadoQuando nos deparamos com um enunciado pequeno, nos sentimos a vontade pararesolve-lo pois os dados existentes neste so poucos. Porm, quando nos deparamoscom um enunciado mais complexo, existe a tendncia natural de pensarmos que algomuito 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 lhecapacitar a interpretar um texto que estamos te dando esta dica.

    24

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    24/28

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    25/28

    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 numestgio de habilidade que lhe permitir obter sucesso nas demais competncias quesero 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 domundo da programao.Sucesso a todos!

    Desafios ResolvidosComo fazer para descobrir a quantidade de elementos

    iguais ao maior do conjunto?Simples. Primeiro, voc dever encontrar o maior;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 duastarefas a fazer. Uma atribuir o valor do elemento para ser omaior e em seguida inicializar a quantidade com o numeral 1

    (um). Mas porque 1 (um)? Pelo fato de que acabamos deencontrar 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 einforme 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;

    26

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    26/28

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    27/28

    InicioMa_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 Fim Fim Fim Escreva A maior idade ..........................: , Ma_idade1; Escreva Quant. de pessoas com a maior idade.......: , Qt_maid1; Escreva A segunda maior idade ..................: , Ma_idade2; Escreva Quant. de pessoas com Seg. maior idade....: , Qt_maid2;Fim

    28

  • 8/14/2019 Tcnicas de Desenvolvimento da Lgica

    28/28