You are on page 1of 32

Introduo lgica de programao.

Lgica
Lgica: tcnica ou habilidade de encadear pensamentos e aes para se chegar a um objetivo. Na programao, so encadeados comandos compreendidos pelo computador para que este chegue a um objetivo e realize alguma ao. Computador por si s burro, no faz nada.

Seqncia Lgica
Os pensamentos e comandos podem ser descritos como uma seqncia de instrues que devem ser seguidas para se chegar a um objetivo. Seqncia lgica nada mais do que o conjunto de passos executados para se atingir um objetivo ou soluo de um problema.

Instrues.
Instrues - um conjunto de regras ou normas definidas para a realizao e/ou utilizao de algo. Em informtica, uma instruo corresponde a informao que indica ao computador uma ao elementar que ele deve executar. Para realizar uma tarefa, entretanto, deve-se encadear um conjunto de instrues, que devem ser organizadas de forma lgica. Uma instruo executada de forma isolada no tem sentido na execuo de uma tarefa. Exemplo, fritar um ovo. Instrues so um conjunto de regras ou normas definidas para realizar algo. Em informtica, o que indica ao computador uma ao a ser executada.

Algoritmo
Um algoritmo uma seqncia finita de passos que levam a execuo de uma tarefa. uma seqncia de instrues para se chegar a um fim. Como uma receita. Essas tarefas devem ser claras e especficas para que o objetivo seja alcanado. Alguns exemplos bem simples de algoritmos do cotidiano. Chupar uma bala: pegar a bala retirar o papel chupar a bala jogar o papel no lixo Somar dois nmeros: Escreva o primeiro nmero no retngulo A Escreva o segundo nmero no retngulo B Some o nmero do retngulo A com o nmero do retngulo B e coloque o resultado no retngulo C

Programas
Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina, no caso um computador. Notem que dada esta interpretao rigorosa, um programa por natureza muito especfico e rgido em relao aos algoritmos da vida real.

Desenvolvendo algoritmos
Pseudocdigo
Os algoritmos so descritos em uma linguagem chamada pseudocdigo. Este nome uma aluso posterior implementao em uma linguagem de programao, ou seja, quando formos programar em uma linguagem, por exemplo Visual Basic, estaremos gerando cdigo em Visual Basic. Por isso os algoritmos so independentes das linguagens de programao. Ao contrrio de uma linguagem de programao no existe um formalismo rgido de como deve ser escrito o algoritmo. O algoritmo deve ser fcil de se interpretar e fcil de codificar. Ou seja, ele deve ser o intermedirio entre a linguagem falada e a linguagem de programao.

Regras para construo do Algoritmo


Para escrever um algoritmo precisamos descrever a seqncia de instrues, de maneira simples e objetiva. Para isso utilizaremos algumas tcnicas: Usar somente um verbo por frase Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica Usar frases curtas e simples Ser objetivo Procurar usar palavras que no tenham sentido dbio

Fases
No captulo anterior vimos que ALGORITMO uma seqncia lgica de instrues que podem ser executadas. importante ressaltar que qualquer tarefa que siga determinado padro pode ser descrita por um algoritmo, como por exemplo: COMO FAZER ARROZ DOCE ou ento CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais.

Onde temos: ENTRADA: So os dados de entrada do algoritmo PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final SADA: So os dados j processados

Exemplo de Algoritmo
Imagine o seguinte problema: Calcular a mdia final dos alunos da 3 Srie. Os alunos realizaro quatro provas: P1, P2, P3 e P4. Onde: Mdia Final = (P1 + P2 + P3 + P4) / 4 Para montar o algoritmo proposto, faremos trs perguntas: a) Quais so os dados de entrada? R: Os dados de entrada so P1, P2, P3 e P4 b) Qual ser o processamento a ser utilizado? R: O procedimento ser somar todos os dados de entrada e dividi-los por 4 (quatro) (P1 + P2 + P3 + P4) / 4 c) Quais sero os dados de sada? R: O dado de sada ser a mdia final Algoritmo Receba a nota da prova1 Receba a nota de prova2 Receba a nota de prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso

Teste de Mesa
Aps desenvolver um algoritmo ele dever sempre ser testado. Este teste chamado de TESTE DE MESA, que significa, seguir as instrues do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou no. Veja o exemplo: Nota da Prova 1 Nota da Prova 2 Nota da Prova 3 Nota da Prova 4 Utilize a tabela abaixo:

EXERCCIOS
1) Identifique os dados de entrada, processamento e sada no algoritmo abaixo Receba cdigo da pea Receba valor da pea Receba Quantidade de peas Calcule o valor total da pea (Quantidade * Valor da pea) Mostre o cdigo da pea e seu valor total 2) Faa um algoritmo para Calcular o estoque mdio de uma pea, sendo que ESTOQUEMDIO = (QUANTIDADE MNIMA + QUANTIDADE MXIMA) /2 3) Teste o algoritmo anterior com dados definidos por voc.

3 Diagrama de Bloco
3.1 O que um diagrama de bloco?
O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento.

3.2 Simbologia
Existem diversos smbolos em um diagrama de bloco. No decorrer do curso apresentaremos os mais utilizados. Veja no quadro abaixo alguns dos smbolos que iremos utilizar:

Dentro do smbolo sempre ter algo escrito, pois somente os smbolos no nos dizem nada. Veja no exemplo a seguir: Exemplos de Diagrama de Bloco

Veja que no exemplo da bala seguimos uma seqncia lgica somente com informaes diretas, j no segundo exemplo da mdia utilizamos clculo e exibimos o resultado do mesmo.

EXERCCIOS
1) Construa um diagrama de blocos que: Leia a cotao do dlar Leia um valor em dlares Converta esse valor para Real Mostre o resultado 2) Desenvolva um diagrama que: Leia 4 (quatro) nmeros Calcule o quadrado para cada um Somem todos e Mostre o resultado 3) Construa um algoritmo para pagamento de comisso de vendedores de peas, levando-se em considerao que sua comisso ser de 5% do total da venda e que voc tem os seguintes dados: Identificao do vendedor Cdigo da pea Preo unitrio da pea Quantidade vendida E depois construa o diagrama de blocos do algoritmo desenvolvido, e por fim faa teste de mesa.

4 Constantes, Variveis e Tipos de Dados


Variveis e constantes so os elementos bsicos que um programa manipula. Uma varivel um espao reservado na memria do computador para armazenar um tipo de dado determinado. Variveis devem receber nomes para poderem ser referenciadas e modificadas quando necessrio. Um programa deve conter declaraes que especificam de que tipo so as variveis que ele utilizar e as vezes um valor inicial. Tipos

podem ser por exemplo: inteiros, reais, caracteres, etc. As expresses combinam variveis e constantes para calcular novos valores.

4.1 Constantes
Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica, lgica e literal.

4.2 Variveis
Varivel a representao simblica dos elementos de um certo conjunto. Cada varivel corresponde a uma posio de memria, cujo contedo pode se alterado ao longo do tempo durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um valor a cada instante

4.3 Tipos de Variveis


As variveis e as constantes podem ser basicamente de quatro tipos: Numricas, caracteres, Alfanumricas ou lgicas. Numricas Especficas para armazenamento de nmeros, que posteriormente podero ser utilizados para clculos. Podem ser ainda classificadas como Inteiras ou Reais. As variveis do tipo inteiro so para armazenamento de nmeros inteiros e as Reais so para o armazenamento de nmeros que possuam casas decimais. Caracteres Especficas para armazenamento de conjunto de caracteres que no contenham nmeros(literais). Ex: nomes. Alfanumricas Especficas para dados que contenham letras e/ou nmeros. Pode em determinados momentos conter somente dados numricos ou somente literais. Se usado somente para armazenamento de nmeros, no poder ser utilizada para operaes matemticas. Lgicas Armazenam somente dados lgicos que podem ser Verdadeiro ou Falso.

4.4 Declarao de Variveis

As variveis s podem armazenar valores de um mesmo tipo, de maneira que tambm so classificadas como sendo numricas, lgicas e literais.

EXERCCIOS
1) O que uma constante? D dois exemplos. 2) O que uma varivel? D dois exemplos.

Operadores
Os operadores so meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos trs tipos de operadores: Operadores Aritmticos Operadores Relacionais Operadores Lgicos

5.1 Operadores Aritmticos


Os operadores aritmticos so os utilizados para obter resultados numricos. Alm da adio, subtrao, multiplicao e diviso, podem utilizar tambm o operador para exponenciao. Os smbolos para os operadores aritmticos so:

Hierarquia das Operaes Aritmticas 1 ( ) Parnteses 2 Exponenciao 3 Multiplicao, diviso (o que aparecer primeiro) 4 + ou (o que aparecer primeiro) Exemplo

5.2 Operadores Relacionais


Os operadores relacionais so utilizados para comparar String de caracteres e nmeros. Os valores a serem comparados podem ser caracteres ou variveis. Estes operadores sempre retornam valores lgicos (verdadeiro ou falso/ True ou False) Para estabelecer prioridades no que diz respeito a qual operao executar primeiro, utilize os parnteses. Os operadores relacionais so:

Exemplo: Tendo duas variveis A = 5 e B = 3 Os resultados das expresses seriam:

Smbolo Utilizado para comparao entre expresses

5.3 Operadores Lgicos


Os operadores lgicos servem para combinar resultados de expresses, retornando se o resultado final verdadeiro ou falso. Os operadores lgicos so:

E / AND Uma expresso AND (E) verdadeira se todas as condies forem verdadeiras OR/OU Uma expresso OR (OU) verdadeira se pelo menos uma condio for verdadeira NOT Um expresso NOT (NO) inverte o valor da expresso ou condio, se verdadeira inverte para falsa e vice-versa. A tabela abaixo mostra todos os valores possveis criados pelos trs operadores lgicos (AND, OR e NOT)

Exemplos:

Suponha que temos trs variveis A = 5, B = 8 e C =1 Os resultados das expresses seriam:

5.4 EXERCCIOS
1) Tendo as variveis SALARIO, IR e SALLIQ, e considerando os valores abaixo. Informe se as expresses so verdadeiras ou falsas.

2) Sabendo que A=3, B=7 e C=4, informe se as expresses abaixo so verdadeiras ou falsas.

3) Sabendo que A=5, B=4 e C=3 e D=6, informe se as expresses abaixo so verdadeiras ou falsas.

6 Operaes Lgicas
Operaes Lgicas so utilizadas quando se torna necessrio tomar decises em um diagrama de bloco. Num diagrama de bloco, toda deciso ter sempre como resposta o resultado VERDADEIRO ou FALSO. Como no exemplo do algoritmo CHUPAR UMA BALA. Imaginemos que algumas pessoas no gostem de chupar bala de Morango, neste caso teremos que modificar o algoritmo para: Chupar uma bala. Pegar a bala A bala de morango? Se sim, no chupe a bala Se no, continue com o algoritmo Retirar o papel Chupar a bala Jogar o papel no lixo Exemplo: Algoritmo Chupar Bala utilizando diagrama de Blocos

6.1 EXERCCIOS
1) Elabore um diagrama de blocos que leia um nmero. Se positivo armazene-o em A, se for negativo, em B. No final mostrar o resultado 2) Ler um nmero e verificar se ele par ou mpar. Quando for par armazenar esse valor em P e quando for mpar armazen-lo em I. Exibir P e I no final do processamento. 3) Construa um diagrama de blocos para ler uma varivel numrica N e imprimi-la somente se a

mesma for maior que 100, caso contrrio imprimi-la com o valor zero 4) Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo que calcule seu peso ideal, utilizando as seguintes frmulas: Para homens: (72.7*h) - 58 Para mulheres: (62.1*h) - 44.7 (h = altura) 5) Faa um teste de mesa do diagrama apresentado abaixo, de acordo com os dados fornecidos:

Teste o diagrama com os dados abaixo:

Dados de Sada:

Memria

6.1 EXERCCIOS
1) Elabore um diagrama de blocos que leia um nmero. Se positivo armazene-o em A, se for negativo, em B. No final mostrar o resultado 2) Ler um nmero e verificar se ele par ou mpar. Quando for par armazenar esse valor em P e quando for mpar armazen-lo em I. Exibir P e I no final do processamento. 3) Construa um diagrama de blocos para ler uma varivel numrica N e imprimi-la somente se a mesma for maior que 100, caso contrrio imprimi-la com o valor zero 4) Tendo como dados de entrada a altura e o sexo de uma pessoa, construa um algoritmo que calcule seu peso ideal, utilizando as seguintes frmulas: Para homens: (72.7*h) - 58 Para mulheres: (62.1*h) - 44.7 (h = altura) 5) Faa um teste de mesa do diagrama apresentado abaixo, de acordo com os dados fornecidos:

Teste o diagrama com os dados abaixo:

Dados de Sada:

Memria

Estrutura de Deciso e Repetio


Como vimos no captulo anterior em Operaes Lgicas, verificamos que na maioria das vezes necessitamos tomar decises no andamento do algoritmo. Essas decises interferem diretamente no andamento do programa. Trabalharemos com dois tipos de estrutura. A estrutura de Deciso e a estrutura de Repetio

Comandos de Deciso
Os comandos de deciso ou desvio fazem parte das tcnicas de programao que conduzem a estruturas de programas que no so totalmente seqenciais. Com as instrues de SALTO ou DESVIO pode-se fazer com que o programa proceda de uma ou outra maneira, de acordo com as decises lgicas tomadas em funo dos dados ou resultados anteriores. As principais estruturas de deciso so: Se Ento, Se ento Seno e Caso Selecione

SE ENTO / IF ... THEN


A estrutura de deciso SE/IF normalmente vem acompanhada de um comando, ou seja, se determinada condio for satisfeita pelo comando SE/IF ento execute determinado comando. Imagine um algoritmo que determinado aluno somente estar aprovado se sua mdia for maior ou igual a 5.0, veja no exemplo de algoritmo como ficaria. SE MEDIA >= 5.0 ENTO ALUNO APROVADO Em diagrama de blocos ficaria assim:

Em Visual Basic IF MEDIA >= 5 Then Text1 = APROVADO ENDIF Em Object Pascal IF MEDIA >= 5 Then begin Text1 := APROVADO; END;

7.1.2 SE ENTO SENO / IF ... THEN ... ELSE


A estrutura de deciso SE/ENTO/SENO, funciona exatamente como a estrutura SE, com apenas uma diferena, em SE somente podemos executar comandos caso a condio seja verdadeira, diferente de SE/SENO pois sempre um comando ser executado independente da condio, ou seja, caso a condio seja verdadeira o comando da condio ser executado, caso contrrio o comando da condio falsa ser executado. Em algoritmo ficaria assim: SE MDIA >= 5.0 ENTO ALUNO APROVADO SENO ALUNO REPROVADO Em diagrama

Em Visual Basic IF MEDIA >= 5 Then Text1 = APROVADO ELSE Text1 = REPROVADO ENDIF Em Object Pascal: IF MEDIA >= 5 Then Begin Text1 := APROVADO end ELSE Begin Text1 := REPROVADO; END;

No exemplo acima est sendo executada uma condio que, se for verdadeira, executa o comando APROVADO, caso contrrio executa o segundo comando REPROVADO. Podemos tambm dentro de uma mesma condio testar outras condies. Como no exemplo abaixo:

Em Visual Basic: IF MEDIA >= 5 Then IF MEDIA >= 7.0 then Text1 = Aluno APROVADO ELSE Text1 = Aluno Necessita fazer outra Avaliao ENDIF ELSE Text1 = Aluno REPROVADO ENDIF Em object Pascal: IF MEDIA >= 5 Then begin IF MEDIA >= 7.0 then begin Text1 := Aluno APROVADO; END ELSE begin Text1 := Aluno Necessita fazer outra Avaliao END END ELSE begin Text1 := Aluno REPROVADO END

procedure TForm1.Button1Click(Sender: TObject); var N1, N2, N3 : integer; begin N1 := strtoint(edit1.text) ; N2 := strtoint(edit2.text) ; if N1 >= N2 then begin N3 := N1 - N2; end else begin N3 := N1 + N2; end; edit3.Text := inttostr(N3); end; end.

Blocos Delimitam um conjunto de comandos com uma funo bem definida. incio <comandos> fim Estruturas de Repetio Quando um conjunto de aes executado repetidamente enquanto uma determinada condio permanece vlida. Para Usamos a estrutura Para, quando precisamos repetir um conjunto de comandos um nmero pr-definido de vezes. Utiliza uma varivel de controle, que incrementada em 1 unidade de um valor inicial at um valor final. para varControle ValInicial at ValFinal faa <comando 1>; <comando 2>; <comando n>; fim-para; Quando o programa encontra a instruo fim-para, incrementa a varivel varControle em 1 unidade. Cada vez que o programa passa pela linha de instruo para, ele testa se varControle menor ou igual a ValFinal. Se no for, o comando abandonado. Obs: O valor da varivel varControle no pode ser alterado no interior da estrutura para...fim-para. para aux 1 at 10 faa resultado 5 * aux; fim-para Enquanto Utilizada quando no sabemos o nmero de repeties e quando possumos uma expresso que deve ser avaliada para que os comandos da estrutura sejam executados. Assim, enquanto o valor da <condio> for verdadeiro, as aes dos comandos so executadas. Quando for falso, a estrutura abandonada, passando a execuo para a prxima linha aps o comando. Se j da primeira vez o resultado for falso, os comandos no so executados nenhuma vez. enquanto <condio> faa <comando 1>; <comando 2>; <comando n>; fim-enquanto; aux 1; enquanto (aux <= 10) faa resultado 5 * aux; aux aux + 1; escrever resultado; fim-para Repita ... At que Utilizada quando no sabemos o nmero de repeties e quando os comandos devem ser executados pelo menos uma vez, antes da expresso ser avaliada. Assim, o programa entra na estrutura Repita...At que e executa seus comandos pelo menos uma vez. Ao chegar no fim da estrutura, a expresso ser avaliada. Se o resultado da expresso for verdadeiro, ento o comando abandonado. repita <comando 1>; <comando 2>; <comando n>; at que <condio>; aux 1; repita resultado 5 * aux; escrever resultado;

aux aux + 1; at que (aux > 10); Resultado do algoritmo: 5 10 15 20 25 30 35 40 45 50 Estrutura de Mltipla Escolha Utilizada quando temos muitas possibilidades para uma determinada situao, onde a aplicao da estrutura se...ento...seno...fim-se, tornaria o algoritmo muito complexo. escolha <expresso> caso valor1 : <comando 1>; caso valor2 : valor5 : <comando 2>; ... seno <comando n>; fim-escolha; Exemplo: ler(Numero); escolha Numero caso 1: Extenso Um; caso 2: Extenso Dois; caso 3: Extenso Trs; caso 4: Extenso Quatro; caso 5: Extenso Cinco; caso 6: Extenso Seis; caso 7: Extenso Sete; caso 8: Extenso Oito; caso 9: Extenso Nove; seno: Extenso Erro; fim-escolha;

Dicas para desenvolvimento de algoritmos 01. Faa uma leitura de todo o problema at o final, a fim de formar a primeira impresso. A seguir, releia o problema e faa anotaes sobre os pontos principais. 02. Verifique se o problema foi bem entendido. Questione, se preciso, ao autor da especificao sobre suas dvidas. Releia o problema quantas vezes for preciso para tentar entend-lo. 03. Extraia do problema todas as suas sadas. 04. Extraia do problema todas as suas entradas. 05. Identifique qual o processamento principal. 06. Verifique se ser necessrio algum valor intermedirio que auxilie a transformao das entradas em sadas. Esta etapa pode parecer obscura no incio, mas com certeza no desenrolar do algoritmo, estes valores aparecero naturalmente. 07. Teste cada passo do algoritmo, com todos os seus caminhos para verificar se o processamento est gerando os resultados esperados. Crie valores de teste para submeter ao algoritmo. 08. Escolha nomes de variveis significativos, todavia evite nomes muito longos. Ex: Prefira SalBruto ou SalarioBruto ao invs de SB ou VAR1 Prefira TotAlunosAprovDireta ao invs de TotalAlunosAprovacaoDireta 09. Destaque as palavras-chave das estruturas de controle e comandos com sublinhado. 10. Utilize espaos e linhas em branco para melhorar a legibilidade. 11. Coloque apenas um comando por linha. Vrios comandos em uma linha causa ilegibilidade e dificulta a depurao. 12. Utilize parnteses para aumentar a legibilidade e prevenir-se de erros. 13. Use identao nos comandos de acordo com o nvel que estejam, ou seja, alinhe comandos de mesmo nvel e desloque comandos de nvel inferior. Ex.: incio comando 1; se condicao1 ento comando2; comando3; seno comando4; comando5; fim-se comando6; fim 14. Reveja o algoritmo, checando as boas normas de criao. Conselho: S tente conseguir o timo, depois de realizar o bom.

IDENTIFICADORES
As variveis, funes e procedimentos que usamos em nossos algoritmos precisam receber um nome (rtulo). Estes nome so chamados de Identificadores e possuem algumas regras de formao: - O primeiro caractere deve ser, obrigatoriamente, uma letra. - Do segundo caractere em diante so permitidos nmeros e letras. O smbolo de underscore ( _ ) pode ser usado para separar nomes compostos. Portanto, no so permitidos espaos, caracteres acentuados e smbolos especiais na composio do nome de um identificador; - Palavras reservadas (em ingls ou portugus) no podem ser usadas com identificadores. (Exemplo: begin, end, for, var, inicio, fim, para, etc...) - No h distino entre maisculo e minsculo, na forma como os identificadores so escritos;

Exemplos de nomes de identificadores: SalarioBruto Preco_Unitario BuscaValor NOTA1 Nota1

COMENTRIOS
Comentrios devem ser inseridos no algoritmo a fim de esclarecer o desenvolvimento do mesmo. Os comentrios so inseridos entre { e }. { Texto de comentrio delimitado por chaves }

COMANDO DE ATRIBUIO
Ao criarmos uma varivel, partimos do princpio que em algum momento ou vrios momentos dentro do nosso algoritmo, ela receber valores, ou seja, armazenaremos dados na memria atravs de nossas variveis. Para atribuirmos um valor ou uma expresso a uma varivel, utilizamos o comando de atribuio . Assim, a sintaxe do comando : identificador expresso ;

Exemplo: Salario 1000 Nome Ana

COMANDOS DE ENTRADA E SADA


Para atingirmos os objetivos de um algoritmo, necessitamos receber dados do mundo externo e precisamos exteriorizar as informaes produzidas. No momento do desenvolvimento de um algoritmo, no nos interessa saber se os dados viro via teclado, ou pela leitura de um arquivo de dados ou por qualquer outro meio. Para obtermos e exteriorizarmos esses dados, utilizamos os seguintes comandos de entrada e sada, LER, ESCREVER e IMPRIMIR. O comando ler espera receber um determinado dado (sem importar a origem). O comando escrever mostra a informao produzida no vdeo. O comando imprimir faz a impresso em papel da informao produzida. Veja a sintaxe dos comandos: ler (varivel1, varivel2, ... , varivel n); escrever (lista de constantes, variveis e/ou expresses ); imprimir (lista de constantes, variveis e/ou expresses ); PROCEDIMENTOS E FUNES

No final dos anos 60, vrias empresas se depararam com o aumento crescente dos custos para a elaborao de programas de computador. Isso gerou a chamada Crise do Software. Essa crise foi tambm decorrente do descompasso entre a tecnologia de desenvolvimento dos Softwares. Sem metodologias avanadas para a elaborao de programas, a probabilidade de aparecimentos de bugs (falhas, erros) nos Softwares era quase inevitvel. Isso tornava a manuteno dos sistemas de informaes cada vez mais onerosa. Para tentar resolver esses problemas, uma srie de estudos foi iniciada e surgiram vrios tipos de programao. Um deles, o mais utilizado, a Programao Estruturada. A caracterstica dessa programao a utilizao de tcnicas que decompem a soluo de um problema em blocos que interagem com um bloco principal. Isso possvel por meio da tcnica de refinamentos sucessivos e da modularizao dos algoritmos. A Programao Estruturada tem como objetivo desenvolver Programas/Algoritmos confiveis, legveis, de fcil entendimento, flexveis e de fcil manuteno; para isso, ela utiliza as tcnicas a seguir. 1) Desenvolvimento de algoritmos por etapas/refinamentos sucessivos. 2) Nmero limitado de estruturas de controle de fluxo. 3) Mudanas de etapas/refinamentos de alta complexidade ou tamanho em mdulos. MODULARIZAO Tcnica para desenvolver algoritmos, por meio de refinamentos sucessivos, em que podem ser utilizados mdulos. MDULO Conjunto de comandos que constitui uma parte de um algoritmo principal e que tem uma tarefa bem definida e independente em relao ao resto do Algoritmo. Fazendo uma analogia, imagine o corao como um mdulo do corpo humano. Esse mdulo desempenha um conjunto de operaes especficas, tem uma tarefa bem definida e independente em relao boa parte dos outros rgos (tanto assim, que pode ser transplantado para outro corpo). Veja a seguir as caractersticas da tcnica da modularizao. 1) A independncia do mdulo permite uma manuteno mais simples e evita efeitos colaterais em outros pontos do algoritmo. 2) A elaborao do mdulo pode ser feita independentemente e em poca diferente do restante do algoritmo. 3) Testes correes dos mdulos podem ser feitas separadamente. 4) Um mdulo pode ser utilizado em outros algoritmos que requerem o mesmo processamento por ele executado.
PROCEDIMENTO E FUNO

Para inserir mdulos em um algoritmo existem os comandos Procedimento e Funo. As aes de procedimento e funo esto hierarquicamente subordinadas a um algoritmo principal, geralmente, chamado de Mdulo Principal. Dentro de um procedimento ou uma funo, pode haver o chamamento de outros procedimentos ou funes. Cada procedimento ou funo pode utilizar os objetos (constantes e varveis) do mdulo principal, definir os seus prprios, ou ainda utilizar os dois tipos

VARIVEL GLOBAL Varivel que pode ser utilizada no mdulo em que foi declarada ou em um mdulo interno ao mdulo do algoritmo no qual foi declarada. VARIVEL LOCAL Varivel que s pode ser utilizada no mdulo do algoritmo no qual foi declarada e que no possui qualquer significado fora desse mdulo. Observao: Todo mdulo (Procedimento ou Funo) criado por meio de declaraes e executado por meio de um comando de chamada. DIFERENA ENTRE PROCEDIMENTO E FUNO A diferena entre Procedimento e Funo que o Procedimento executa uma tarefa e no retorna valores para o mdulo que o chamou, j a Funo tambm executa uma tarefa, mas obrigatoriamente dever retornar um resultado para o mdulo que a chamou. A chamada de um procedimento feita como uma linha de comando normal, repassando ou no parmetros (argumentos); j a chamada de uma funo sempre deve ser por atribuio a uma varivel ou por um teste condicional, tambm repassando ou no parmetros (argumentos). PROCEDIMENTOS COM PARMETROS Parmetros (argumentos) Na tcnica de modularizao podem ser utilizados pontos de comunicao entre os mdulos. Esses pontos, chamados Parmetros, classificam-se em formais e reais. PARMETROS FORMAIS So os parmetros declarados com o mdulo (Procedimento ou Funo). So os que recebem os valores enviados pelo mdulo que chamou o Procedimento ou a Funo. PARMETROS REAIS So os parmetros que substituem os parmetros formais, no procedimento ou funo. So os que enviam valores do mdulo principal para o mdulo (procedimento ou funo) que foi chamado. PASSAGEM DE PARMETROS PASSAGEM DE PARMETROS POR VALOR Quando passamos parmetros por valor, na verdade estamos enviando uma cpia do valor original da varivel. Portanto, se no Procedimento ou Funo este valor for alterado, no modificar o contedo da varivel cujo valor foi repassado. PASSAGEM DE PARMETROS POR REFERNCIA Quando repassamos parmetros por referncia, na realidade estamos enviando no uma cpia do valor, mas, sim, o endereo de memria onde est armazenado o valor. Logo, qualquer alterao deste valor no Procedimento ou Funo implica alterar o contedo da varivel que repassou o parmetro. Observao: Existe diferena no padro (Default) de repasse de parmetros entre as linguagens. Exemplo: No Visual Basic o Padro (Default) de repasse por referncia, j no Delphi o padro (Default) por valor.

EXEMPLOS DE SINTAXE No Visual Basic: Na declarao do tipo: Procedimento (x), o repasse de x por referncia (Padro). Se quisermos repassar o parmetro por valor, a declarao tem que ser: Procedimento (By val x). No Delphi Na declarao do tipo: Procedimento (x), o repasse de x por valor (Padro). Se quisermos repassar o parmetro por referncia, a declarao tem que ser: Procedimento (Var x). Observao: Em algumas linguagens possvel elaborar um arquivo contendo diversos Procedimentos e Funes e compilar este arquivo como uma DLL, ficando, portanto todos os procedimentos e funes contidos nele disponveis para todos os programas do sistema. EXEMPLOS DE PROCEDIMENTO E FUNO PROCEDIMENTO Ler o estado civil de uma pessoa como valor numrico, sendo 1 para solteiro, 2 para casado e 3 para outros. Escrever o estado civil em caracteres.

FUNO Ler a base e altura de um tringulo, calcular a rea. Escrever a base, a altura e a rea calculada.

VETORES
Os vetores so estruturas de dados que permitem o armazenamento de um conjunto de dados de mesmo tipo. Por este motivo, so chamadas de estruturas homogneas. Os vetores so unidimensionais, pois cada elemento do vetor identificado por um ndice. Similarmente, podemos definir vetores como posies de memria, identificadas por um mesmo nome, individualizadas por ndices e cujo contedo de mesmo tipo. Para acessarmos um elemento de um vetor, referimo-nos ao nome do vetor acompanhado pelo seu ndice que vir entre colchetes ( [ e ] ). Pense num prdio com 120 apartamentos. Para enviar uma correspondncia a um determinado apartamento, devemos colocar no endereo de destinatrio, o nmero do prdio mais o nmero do apartamento. O vetor funciona de forma similar. Veja a sintaxe da declarao de um vetor: Nome do vetor : vetor [ n de elementos ] de <tipo bsico do vetor > Para fazermos referncia a um elemento do vetor, colocamos: Nome do vetor [ elemento ] Cada elemento de um vetor tratado como se fosse uma varivel simples.

Exemplo:

Supondo que pedssemos para criar um algoritmo para ler o nome de 5 pessoas, e mostrasse esses nomes na ordem inversa de leitura. A princpio, vocs pensariam em cinco variveis: nome1, nome2, nome3, nome4 e nome5. Veja como ficaria a soluo, nesse caso: declare nome1, nome2, nome3, nome4, nome5 : caracter; incio escrever(Informe o nome de 5 pessoas: ); ler(nome1); ler(nome2); ler(nome3); ler(nome4); ler(nome5); escrever(Ordem Inversa de Leitura ); escrever(nome5); escrever(nome4); escrever(nome3); escrever(nome2); escrever(nome1); fim

Assim, na memria teramos ... Nome1 Nome2 Nome3 Nome4 Nome5

ANA

PAULA

CRISTINA

GUSTAVO

ANTONIO

Todavia, se alterssemos esse algoritmo para ler o nome de 100 pessoas, a soluo anterior se tornaria invivel. Para casos como este, podemos fazer uso de vetores. Se tivssemos criado 100 variveis, teramos que declarar e usar: nome1, nome2, nome3, ... , nome99, nome100. Com o vetor passamos a ter: nome[1], nome[2], nome[3], nome[99], nome[100], onde a declarao do vetor se limita linha: nome : vetor[1..100] de caracter. Veja que para todos os elementos nos referimos ao mesmo nome de vetor. Assim, veja a soluo do algoritmo anterior com o uso de vetores: declare nome : vetor[5] de caracter; aux : inteiro; incio para aux 1 at 5 faa escrever (Informe o Nome , aux); ler (nome[aux]); fim-para; escrever(Ordem Inversa de Leitura ); para aux 5 at 1 faa escrever (nome[aux]); fim-para fim Veja a representao da memria: Nome[1] ANA Nome[2] PAULA Nome[3] CRISTINA Nome[4] GUSTAVO Nome[5] ANTONIO

MATRIZES
As matrizes so estruturas de dados que permitem o armazenamento de um conjunto de dados de mesmo tipo, mas em dimenses diferentes. Os vetores so unidimensionais, enquanto as matrizes podem ser bidimensionais (duas dimenses) ou multidimensionais. Similarmente podemos conceituar matrizes como um conjunto de dados referenciado por um mesmo nome e que necessitam de mais de um ndice para ter seus elementos individualizados. Para fazer referncia a um elemento da matriz sero necessrios tantos ndices quantas forem as dimenses da matriz. Veja a sintaxe da declarao de uma matriz: Nome da matriz : matriz [ li1: ls1, li2:ls2, ... , lin:lsn ] de <tipo bsico da matriz > onde:

li limite inferior ls limite superior

li1: ls1, li2:ls2, ... , lin:lsn so os limites dos intervalos de variao dos ndices da matriz, onde cada par de limites est associado a um ndice. tipo tipo a que pertencem todos os campos do conjunto.

Para fazermos referncia a um elemento da matriz, colocamos: Nome da matriz [ linha, coluna ] O nmero de dimenses de uma matriz pode ser obtido pelo nmero de vrgulas (,) da declarao mais 1. O nmero de elementos pode ser obtido atravs do produto do nmero de elementos de cada dimenso. Obs: Quando voc desejar percorrer uma matriz, linha por linha, crie uma estrutura de repetio, fixando a linha e variando a coluna. Para percorrer uma matriz, coluna por coluna, fixe a coluna e varie a linha. Vamos pensar numa estrutura onde as colunas representem os cinco dias teis da semana, e as linhas representem as trs vendedoras de uma loja. Na interseo de cada linha x coluna, colocaremos o faturamento dirio de cada vendedora. ( Segunda ) COLUNA 1 ( SANDRA ) LINHA 1 ( VERA ) LINHA 2 ( MARIA ) LINHA 3 1050,00 785,00 1658,00 ( Tera ) COLUNA 2 950,00 1540,00 1245,00 ( Quarta ) COLUNA 3 1241,00 1400,00 1410,00 ( Quinta ) COLUNA 4 2145,00 546,00 245,00 ( Sexta ) COLUNA 5 1256,00 0,00 1546,00

A representao desta tabela em forma de matriz, seria: VendasDiarias : matriz [ 3, 5 ] de real; Indicando a declarao de uma matriz com 3 linhas e 5 colunas, cujos valores sero do tipo real. Veja como ficaria o algoritmo para ler esses valores: Algoritmo LeVendasDiarias; declare VendasDiarias : matriz[3,5] de real; indLinha, indColuna : inteiro; incio { Variando o nmero de linhas - Vendedoras} para indLinha 1 at 3 faa escrever (Vendedora :, indLinha); { Variando o nmero de colunas Dias da Semana} para indColuna 1 at 5 faa escrever (Faturamento do Dia : , indColuna); ler (VendasDiarias[indLinha, indColuna]);

fim-para; fim-para; fim

Poderamos melhorar o algoritmo acima, trabalhando com um vetor que contivesse os nomes dos dias da semana e das vendedoras. Assim, a comunicao do programa com o usurio ficaria mais clara. Veja: Algoritmo LeVendasDiariasVersao2; declare VendasDiarias : matriz[3,5] de real; Vendedoras : vetor[3] de caracter; DiasSemana : vetor[5] de caracter; indLinha, indColuna : inteiro; incio Vendedoras[1] Sandra; Vendedoras[2] Vera; Vendedoras[3] Maria; DiasSemana[1] DiasSemana[2] DiasSemana[3] DiasSemana[4] DiasSemana[5] Segunda; Tera; Quarta; Quinta; Sexta;

{ Variando o nmero de linhas - Vendedoras} para indLinha 1 at 3 faa escrever (Vendedora : , Vendedoras[indLinha]); { Variando o nmero de colunas Dias da Semana} para indColuna 1 at 5 faa escrever (Faturamento do Dia DiasSemana[indColuna]); ler (VendasDiarias[indLinha, indColuna]); fim-para; fim-para; fim

Um algoritmo que apenas l e nada faz com esses resultados, no serve para grande coisa, certo?! Por isso, vamos melhorar esse algoritmo e apresentar como resultado o faturamento dirio de todas as vendedoras. Algoritmo LeVendasDiariasVersao3; declare VendasDiarias : matriz[3,5] de real; Vendedoras : vetor[3] de caracter; DiasSemana : vetor[5] de caracter; indLinha, indColuna : inteiro; FaturaDia : real; incio

Vendedoras[1] Vendedoras[2] Vendedoras[3] DiasSemana[1] DiasSemana[2] DiasSemana[3] DiasSemana[4] DiasSemana[5]

Sandra; Vera; Maria; Segunda; Tera; Quarta; Quinta; Sexta;

{ Variando o nmero de linhas Vendedoras } para indLinha 1 at 3 faa escrever (Vendedora : , Vendedoras[indLinha]); { Variando o nmero de colunas Dias da Semana} para indColuna 1 at 5 faa escrever (Faturamento do Dia DiasSemana[indColuna]); ler (VendasDiarias[indLinha, indColuna]); fim-para; fim-para;

{ Vamos comear variando a coluna, para poder obter o faturamento de cada dia da semana } para indColuna 1 at 5 faa { A cada novo dia, a varivel que recebe o faturamento zerada } FaturaDia 0; { Vamos variar a linha, para obter os valores faturados de cada vendedora } para indLinha 1 at 3 faa FaturaDia FaturaDia + VendasDiarias[indLinha, indColuna]; fim-para escrever(Faturamento de : , DiasSemana[indColuna]); escrever(FaturaDia); fim-para; fim At agora, est fcil, certo ?! Ento vamos complicar um pouquinho. Na matriz anterior, estamos controlando o faturamento de apenas uma semana. Todavia, as vendedoras trabalham o ms todo. E o correto seria termos uma planilha para cada semana do ms, que vamos considerar que sejam quatro semanas.

Exemplo:

SEMANA 1 SEMANA 4 ( Tera ) ) ( Quarta ) ) ( Quinta ) ) ( Sexta ) ( Segunda ) ( Segunda )) ( Tera ( Quarta ( Quinta ( Sexta COLUNA 1 COLUNA 1 2 COLUNA 2 3 COLUNA 3 4 COLUNA 4 5 COLUNA 5 COLUNA COLUNA COLUNA COLUNA ( SANDRA ) ( SANDRA ) 1050,00 950,00 1241,00 2145,00 1256,00 1050,00 950,00 1241,00 2145,00 1256,00 LINHA 1 LINHA 1 ( VERA ) ( VERA ) 785,00 1540,00 1400,00 546,00 0,00 785,00 1540,00 1400,00 546,00 0,00 LINHA 2 LINHA 2 ( MARIA ) ( MARIA ) 1658,00 1245,00 1410,00 245,00 1546,00 1658,00 1245,00 1410,00 245,00 1546,00 LINHA 3 LINHA 3

SEMANA 3 SEMANA 2 ( Quarta ) ( Segunda ) ( Tera ) ( Quinta ) ( Sexta ) COLUNA 1 ( Tera ) COLUNA 2 ( Quarta ) COLUNA 3 ( Quinta ) COLUNA 4 ( Sexta ) COLUNA 5 ( Segunda ) ( SANDRA COLUNA 1 COLUNA 2 COLUNA 3 COLUNA 4 COLUNA 5 ) 1050,00 950,00 1241,00 2145,00 1256,00 LINHA 1 ( SANDRA ) 1050,00 950,00 1241,00 2145,00 1256,00 ( VERA LINHA 1 ) 785,00 1540,00 1400,00 546,00 0,00 LINHA ( VERA ) 2 785,00 1540,00 1400,00 546,00 0,00 ( MARIA ) LINHA 2 1658,00 1245,00 1410,00 245,00 1546,00 LINHA ( MARIA ) 3 1658,00 1245,00 1410,00 245,00 1546,00 LINHA 3

A representao deste conjunto de planilhas em forma de matriz, seria: VendasDiarias : matriz [ 3, 5, 4 ] de real; Indicando a declarao de uma matriz com 3 linhas e 5 colunas, repetidas em 4 faces, cujos valores sero do tipo real. Assim, vejamos como fica o algoritmo para lermos os faturamentos dirios por semana. Algoritmo LeVendasDiariasVersao4; declare VendasDiarias : matriz[3,5,4] de real; Vendedoras : vetor[3] de caracter; DiasSemana : vetor[5] de caracter; indLinha, indColuna, indFace : inteiro; incio Vendedoras[1] Sandra; Vendedoras[2] Vera; Vendedoras[3] Maria; DiasSemana[1] DiasSemana[2] DiasSemana[3] DiasSemana[4] DiasSemana[5] Segunda; Tera; Quarta; Quinta; Sexta;

{ Variando o nmero de faces Semanas do ms } para indFaces 1 at 4 faa escrever (Semana do Ms : ,indFaces); { Variando o nmero de linhas Vendedoras } para indLinha 1 at 3 faa escrever (Vendedora : , Vendedoras[indLinha]); { Variando o nmero de colunas Dias da Semana }

para indColuna 1 at 5 faa escrever (Faturamento do Dia : , DiasSemana[indColuna]); ler (VendasDiarias[indLinha, indColuna, indFaces]); fim-para; fim-para; fim-para; fim