Вы находитесь на странице: 1из 33

Curso de Algoritmo - Aula I

Por:

Jorge Luiz E. de Souza ( 22/05/2001 )

Introduo Ol, comunidade! Nossa primeira aula ser sobre PORTUGOL, uma forma de escrita estruturada, cuja finalidade : descrever em uma sequncia lgica os passos para a resoluo de um problema. Um detalhe importante do portugol que todas as linhas devem conter uma nica instruo iniciada por verbos no imperativo. O que Algortmo? uma forma estruturada de resolver problemas numa sequncia lgica, passo a passo at obter o resultado desejado. Todo tipo de problema que temos no dia a dia, resolvemos atravs de algoritmos naturais, que muitas vezes no so nem percebidos como tal. Um exemplo: Quando voc chega em sua casa a noite. O que voc faz para entrar em sua casa? Voc deve estar pensando: "O que isto tem a ver com programao?". A resposta : TUDO. Vejamos: Sob o ponto de vista atual (isto , sem conhecer algoritmos estruturados) voc diria: Pense na sua resposta! Sob o ponto de vista de algortmo estruturado:
Abrir o porto Passar para o lado de dentro do terreno Fechar o porto Dirigir-se porta Pegar a chave da porta Abrir a porta da casa Passar para o lado de dentro da casa Fechar a porta da casa

Pronto! Voc est dentro de casa.

Exemplo 1. Sequncia entrar em casa Analisando os passos sequenciais seguidos pelo exemplo 1, vemos que em 8 passos simples podemos demonstrar atravs de instrues simples e bem definidas, uma SOLUO GENRICA para o PROBLEMA: ENTRAR EM CASA. Isto , QUALQUER pessoa que olhar para estas Copyright (C) 1999-2000 Linux Solutions. 1

instrues e segu-las CONSEGUIR ENTRAR EM CASA. Observe que todo incio de linha contm um IMPERATIVO. No por acaso! O computador atende a COMANDOS (instrues diretas que geram uma resposta previsvel e objetiva). Ento, todas as linhas de um PORTUGOL, linguagem bsica para entender os algortmos devem iniciar com IMPERATIVOS. Tente descrever EM PORTUGOL (sequncia de linhas lgicas para resolver um problema, com linhas iniciadas por imperativos) os seguintes problemas (faa algortmos contnuos, ignore os problemas mais detalhados. Por enquanto!):
Trocar o pneu de um carro. Levantar demanh em uma segunda-feira. Danar ao som de uma msica (suponha que o aparelho de som est desligado). Ligar um computador. (se voc no sabe! pesquise!) Acender uma luz em um quarto escuro. (Isto pode ser divertido!) Tomar um banho de piscina em um dia muito quente. (Suponha que a piscina est em um clube e voc na sua casa). Abrir um programa de computador. (Suponha que o computador j est ligado) Escovar os dentes. Colocar um CD no aparelho de som. Ler um livro.

Concluso O PORTUGOL uma linguagem simples que no possui muitas regras para sua escrita. Por isto elucidativa a sua utilizao. De forma clara, podemos enxergar que a partir de sequncias de instrues genricas podemos criar uma soluo para um problema. E esta soluo (reutilizvel) poderia ser usada quantas vezes quizermos, desde que as condies sejam as mesmas. Na aula que vem veremos estruturao do pensamento, desvios condicionais e refinamento de cdigo. At l! Aguardo crticas e sugestes.

Curso de Algoritmo - Aula II


Por:

Jorge Luiz E. de Souza ( 05/06/2001 )

Introduo A aula de hoje sobre estruturao do pensamento. Em primeiro lugar, estruturao do pensamento nada mais do que saber definir qual a ordem de precedncia entre os comandos a serem executados. Noo muito importante na programao. Isto ser til quando estivermos falando em ESCOPO de variveis e do prprio cdigo. Boa aula! Estruturao do pensamento At agora, no pensamos em DETALHES, como por exemplo:

Condies: para fazer algo; isto , antes de fazer uma coisa, tenho que verificar se outra j foi feita; Desvio: se uma coisa j foi feita, no faa isto, faa aquilo.

No pensamento estruturado existem FERRAMENTAS que auxiliam a escrita lgica para tais condies, so elas: SE [CONDIO] ENTO [COMANDO|LISTA DE COMANDOS] Copyright (C) 1999-2000 Linux Solutions. 2

Nota: mais a frente, entraremos em detalhes sobre SINTAXE (forma correta de se escrever comandos). Exemplo 1: Problema ENTRAR EM CASA, refinado. A instruo: Abrir o porto Poderamos REFINAR para:
Pegar chave do porto no bolso SE chave no est no bolso ENTAO Procurar na bolsa SE encontrou chave na bolsa ento ENTAO Abrir o porto SENO Desesperar-se voc est para fora por tempo indeterminado SENO Abir o porto

Exemplo 2: REFINAMENTO da instruo Abrir Porto do problema ENTRAR EM CASA Nota: Para ler o algoritmo, entenda que: cada SE tem duas condies a serem TESTADAS, a primeira o ENTO. Caso o ENTO SEJA SATISFEITO, isto , se voc optar pela condio do ENTO, deve ignorar o SENO correspondente do SE do mesmo nvel. Por exemplo: no caso da instruo "SE chave no est no bolso", voc deve optar por "Procurar na bolsa" (ENTO) a condio SENO correspondente seria "Abrir o porto". "Ai meu Deus... danou-se..." Nada disso! Entendendo: A condio estabelecida : "chave no est no bolso". O ENTO correspondente so instrues a serem seguidas caso ela (a condio) seja VERDADEIRA (chave no est no bolso). E O SENO correspondente, so instrues a serem seguidas quando ela (a condio) for FALSA, isto , chave est no bolso. Entendeu? Creio que com isto, j d para voc ler o resto do Algoritmo. Com este exemplo, temos dois conceitos novos: DESVIO CONDICIONAL e REFINAMENTO DE CDIGO.

Refinamento de cdigo No pensamento estruturado, existe a preocupao de chegar a um resultado a partir de GENERALIZAO/ESPECIALIZAO. Isto , a partir de uma viso MACRO de um problema, chegar aos detalhes e, enfim, resolver o problema. Isto bem mais simples e eficaz do que tentar visualizar todos os detalhes de um problema, a medida que vamos escrevendo o cdigo para resolv-lo. Um exemplo: No refinamento do Exemplo 2, a instruo "Desesperar-se", se pensarmos bem, poderia resultar em "Ligar para a esposa".
O algortmo ficaria assim: Pegar chave do porto no bolso SE chave no est no bolso ENTAO Procurar na bolsa

Copyright (C) 1999-2000 Linux Solutions.

SE encontrou chave na bolsa ento ENTAO Abrir o porto SENO Ligar para a esposa SENO Abir o porto

Ou ento:
SE voc casado ENTO Ligar para Esposa SENO Desesperar-se

O algortmo ficaria assim:


Pegar chave do porto no bolso SE chave no est no bolso ENTAO Procurar na bolsa SE encontrou chave na bolsa ento ENTAO Abrir o porto SENO SE voc casado ENTO Ligar para Esposa SENO Desesperar-se SENO Abir o porto

Ou ainda:
SE voc casado ENTO Ligar para Esposa SENO SE voc mora com algum ENTO Ligar para esta pessoa SENO Desesperar-se

E por a vai! Agora, escreva voc como ficaria o cdigo. O que eu quero mostrar aqui que o refinamento serve para que, a partir de passos "macro", possamos visualizar a soluo parcial de um problema em determinadas condies. Aps termos resolvido o problema em condies ideais, pensaremos em verificar as EXCEES. ENTO, o pensamento estruturado uma tima ferramenta para determinar condies ideais para a soluo de problemas! Desvios condicionais Os desvios condicionais so utilizados para que, ao nos depararmos com determinada condio, tenhamos como contorn-las, de uma forma ou de outra, podendo haver desvios para os desvios e assim por diante. Tenha em mente que tudo tem um limite. E se um desvio no tem limite, est claro que este no o caminho para resolver o problema. Agora, com os conceitos de refinamento, refaa os algoritmos do captulo anterior colocando desvios condicionais onde voc achar prprio e refinando passos que voc acha que podem ser refinados. Nota: Em portugol no existem ainda regras rgidas para a elaborao da sequncia de soluo do problema, ento, sinta-se a vontade para escrever o cdigo de acordo com sua viso do problema. Concluso Estruturao do pensamento consiste na utilizao de ferramentas como refinamento de cdigo e desvios condicionais para a maior consistncia do cdigo. Para a partir de uma viso macro de um problema podermos chegar a uma soluo vivel atravs de refinamentos sucessivos.

Copyright (C) 1999-2000 Linux Solutions.

Para uma fixao do contedo, refaa os exerccios da primeira aula utilizando estas tcnicas (onde voc achar necessrio). Na prxima aula faremos uma introduo algoritmos. Sugestes e crticas so bem vindos!

Curso de Algoritmo - Aula III


Por:

Jorge Luiz E. de Souza ( 19/06/2001 )

Introduo Preparem-se pois esta aula bem G R A N D E! O objetivo dar uma introduo ao algoritmo. Sendo assim, os conceitos bsicos sero todos apresentados, deixando para o decorrer do curso as tcnicas e explicaes detalhadas sobre novos recursos assim que eles se tornarem necessrios. Preparados? Ento vamos l! Algoritmo A construo de algoritmos regida por normas chamadas de: sintaxe de comandos. De acordo com a evoluo no nvel de programao, sero apresentadas a sintaxe de cada comando e a forma correta de utiliz-los. Inicialmente vamos definir o que sintaxe. A boa escrita exige conhecimentos de sintaxe e gramtica por parte do escritor. Se o escritor conhece bem a lngua portuguesa, ir escrever textos claros e concisos. Evitar tambm erros grosseiros que so facilmente percebidos pelo leitor. O computador pode "ler" o cdigo escrito por um programador atravs de um compilador. Um programa especial que converte o que o programador escreve em linguagemm de alto nvel para a linguagem de mquina, a qual entendida pelo computador. Uma breve introduo ao Processamento de Dados A computao um processo simples e consiste em trs passos bsicos. So eles: entrada de dados, processamento dos dados e sada de informao. necessrio entender isto, pois no h sentido em um processamento que no gere informao til ao usurio. Ento, ao se programar, deve-se ter o cuidado de trabalhar os dados a fim de obter um resultado til. Exemplo - um programa para calcular automaticamente a potncia N de um nmero X: Este programa receber duas entradas: o nmero X, e a potncia a qual ser elevado. Produzindo como resultado o valor referente ao processamento da operao matemtica potncia. Um programa assim utilizado em calculadoras cientficas, onde define-se o nmero pressionando, a tecla refernete ao mesmo, a tecla YX e a tecla do nmero relativo potncia. Este um bom exemplo da utilizao dos passos bsicos mencionados anteriormente (relembrando, entrada de dados, processamento, sada de informao). Por que entrada de dados e sada de informao? Se voc ainda est se perguntando isto aps a explicao anterior, a vai a resposta. Entrada de dados: aqui a palavra dados tem o intito de enfatizar que o que est entrando so informaes dispersas, cujo contedo se quer processar. Sada de informao: a palavra informao, aqui, denota que aps o processamento os dados foram ordenados e o processamento extrau o que no era necessrio ou simplesmente foi concludo com xito. Copyright (C) 1999-2000 Linux Solutions. 5

Observe que no exemplo da calculadora a sada de informao se refere ao resultado da potncia mostrado no visor da calculadora, como um resultado til ao usurio que o requisitou. Bem, chega de bl bl bl! Em suma, algoritmos se propem a resolver problemas gerando informao til aps o processamento dos dados de entrada. Convenes de escrita de algoritmos Todas as palavras reservadas so escritas sublinhadas. No utiliza-se acentos e caracteres especiais como o . A escrita de literais deve ser entre apstrofos . Tipos sero escritos em maisculas. O que uma literal? O computador regido por cdigos, somente entendendo estes. Cada letra para o computador um cdigo. Chamaremos letras isoladas de caractere, e um conjunto de letras chamaremos de LITERAL. Obs.: Literal pode conter nmeros, mas nmeros no podem conter caracteres alfa, isto , letras. Tipos: Tipo a definio de um conjunto de valores aceitos por uma vaivel. Tipos pr definidos: caractere, texto, inteiro, real e lgico.

Variveis Uma varivel uma posio de memria que pode conter um valor qualquer em determinado ponto do programa e outro valor em outro ponto do mesmo programa. Da, o nome, varivel. As variveis so definidas utilizando-se a palavra chave declare no incio do algoritmo. toda varivel declarada associado um tipo e esta varivel somente poder conter (receber) valores deste tipo. Assim, se uma varivel declarada do tipo texto, seu contedo no poder ser utilizados para clculos matemticos, visto que no um nmero. Exemplo:
Declare Nome:TEXTO X: INTEIRO Vlido: Nome "Joo da Silva" X 20 No permitido: Nome 50 X "Maria Jos"

Aqui, declaramos as variveis Nome (do tipo texto) e X (do tipo inteiro). Como Nome uma literal, no poder ter seu contedo utilizado por uma expresso matemtica. Comentrios Pode-se escrever frases explicativas tentro de um algoritmo, com fins de organizao e estruturao do pensamento, sem que estas faam parte do cdigo. Isto , no sero executadas como comandos, nem mostradas ao usurio. Servindo somente ao propsito descrito acima. Estas linhas devem comear com duas barras seguidas: //.

Copyright (C) 1999-2000 Linux Solutions.

Exemplo:
A B //Atribuio do valor da varivel B varivel A

Convences para sintaxe (Forma correta de utilizao de um comando) Nota: termos entre [ ] so opcionais. Palavras Reservadas: Algoritmo, Declare, Se, Ento, Seno, Para, Enquanto, faa, at, Leia, Escreva, catactere, texto, inteiro, lgico. Comandos de Atribuio Atribuio de valor varivel diretamente:
Leia (varivel) //Requisio de entrada de valor pelo usurio Comandos de Sada Escreva (Variavel [Texto])

Como comear um algoritmo Todo algoritmo comea com a palavra reservada "Algoritmo", seguida do nome do programa que ser gerado. E finalizado com a expresso literal "Fim Algoritmo". Exemplo:
Algoritmo Soma Declare Lista de variveis (Comandos de entrada) (Procesamento da entrada) (Sada da informao) Fim Algoritmo

Declarao de variveis Variveis so declaradas no incio de um algoritmo e sua sintxe a seguinte:


Declare Variavel : TipoDaVariavel Variavel : TipoDaVariavel... Variavel, Variavel, variavel... : TipoDaVariavel...

Exemplo:
Algoritmo Soma Declare A, B, Soma : INTEIRO (Comandos de entrada) (Procesamento da entrada) (Sada da informao) Fim Algoritmo

Copyright (C) 1999-2000 Linux Solutions.

Implementao de entrada de dados Quanto a este assunto, h algumas consideraes: o que uma entrada de dados? Quando fazer uma requisio de dados ao usurio? Para responder estas perguntas faremos duas implementaes do algoritmo Soma usado acima. Na primeira implementao no ser requisitada nenhuma interao do usurio com o programa. Isto , o programa far a soma de dois nmeros e mostrar na tela somente os nmeros que foram somados e o resultado da soma. Sem que o usurio possa alterar os nmeros. Primeira implementao do algoritmo soma
Algoritmo Soma Declare A, B, Soma : INTEIRO //Comandos de entrada esta linha est aqui a titulo de informao, no faz parte do algoritmo A 20 B 50 //Procesamento da entrada esta linha est aqui a titulo de informao, no faz parte do algoritmo Soma A + B //Sada da informao esta linha est aqui a titulo de informao, no faz parte do algoritmo Escreva ("Primeiro nmero: ", A) Escreva ("Segundo nmero: ", B) Escreva ("Soma= ", A) Fim Algoritmo

Anlise do algoritmo acima No algoritmo acima, temos a declarao de trs variveis do tipo inteiro: A, B e Soma. As linhas:
A 20 B 50

Atribuem s variveis A e B os respectivos valores. A linha:


Soma A + B

Processa a operao matemtica soma com os nmeros atribudos anteriormente s variveis e atribui o resultado da soma varivel Soma. As linhas:
Escreva ("Primeiro nmero: ", A) Escreva ("Segundo nmero: ", B) Escreva ("Soma = ", A)

Respectivamente mostram ao usurio:


Primeiro nmero: 20 Segundo nmero: 50 Soma = 70

Esta a sada do algoritmo Soma, descrito acima. Copyright (C) 1999-2000 Linux Solutions. 8

Concluso Ufa! Voc est meio tonto? ... Com estes novos conceitos na cabea j d para entender um pouco mais sobre o que estamos tratando. Algoritmos so cdigos escritos em uma linguagem acessvel (portugus estruturado), que visa o aprendizado de estruturao e refinamentos sucessivos, bem como a utilizao de SINTAXE de comandos, para uma posterior migrao para uma linguagem de programao. importante frisar aqui o fato de que no existem interpretadores capazes de "ler" um algoritmo e execut-lo no computador. Sendo que o algoritmo utilizado para dar uma noo de como criar um cdigo executvel para o computador. Uma vez pronto o algoritmo, voc deve transform-lo em cdigo, usando uma linguagem de programao de sua escolha. Como por exemplo: Pascal, C, C++ etc. Obs: geralmente as linguagens de programao possuem algumas regras que devem ser observadas na hora da converso do algoritmo para a linguagem, como por exemplo no Pascal, todas as linhas de comando devem terminar com um ";" (ponto e vrgula), entre outras regras prprias da linguagem. Espero que estejam gostando do curso. At a prxima aula!

Curso de Algoritmo - Aula IV


Por:

Jorge Luiz E. de Souza ( 03/07/2001 )

Introduo Neste captulo veremos a resoluo de um problema atravs do uso de Algoritmo. Sero apresentadas novas ferramentas e tcnicas para a resoluo. Estar tudo bem detalhado para que a interpretao e aprendizado seja fcil. Vamos comear! Desenvolvendo Algoritmos Algoritmos so formas de pensamento estruturado, sendo assim, a primeira coisa a fazer, analizar muito bem o problema para identificar todas as possibilidades de soluo possveis. Vejamos o seguinte problema: Problema 1. O Instituto de Pesquisa Tal, deseja utilizar o computador para extrair informaes com base nos dados obtidos com sua ltima pesquisa. Os dados so: Nome, idade, sexo, estado civil (e nmero de filhos caso seja casada) e origem de 3000 pessoas (toda populao de uma pequina cidade). Deseja-se saber: 1. Quantas mulheres existem na cidade; 2. Quantas destas mulheres so casadas e tem mais de 3 filhos; 3. Quantos homens da cidade torcem para o palmeiras. Anlise do Problema

1 Observao: o algoritmo a ser feito dever RECEBER dados digitado pelo usurio. Considerando isto, j clara a necessidade de um comando de leitura para cada item. 2 Observao: h a necessidade da repetio da leitura para cada pessoa (ficha com dados de uma pessoa) entrevistada. Aqui, vemos a necessidade de uma ESTRUTURA DE REPETIO, conceito que ser apresentado neste exemplo. 3 Observao: As palavras QUANTAS, QUANTAS, QUANTOS indicam a necessidade da utilizao de uma tcnica de obteno de dados quantitativos chamada CONTADOR. Que 9

Copyright (C) 1999-2000 Linux Solutions.

tambm ser apresentada neste exemplo. 4 Observao: Deve existir um contador para contar todas as mulheres da cidade. 5 Observao: Existe uma condio para uma mulher entrar na segunda CONTAGEM, esta condio : ser casada e Ter mais de 3 filhos. Isto quer dizer que teremos dois CONTADORES para Mulheres, um para toda e qualquer mulher da cidade e um para as casadas com mais de trs filhos. 6 Observao: Existe tambm uma condio para que um homem entre no TERCEIRO CONTADOR. Que , torcer para o palmeiras.

Todas as condies aqui expostas sero solucionadas utilizando-se de estruturas SE, ENTO e SENO. Apresentarei com este exemplo duas estruturas de repetio: Para e Enquanto, para isto haver duas implementaes de soluo para este mesmo problema.

Primeira implementao do Algoritmo Pesquisa * Utilizando a estrutura de repetio PARA Uma breve introduo estrutura de repetio PARA Sintaxe:
PARA variavel Valor AT ValorFinal FAA { AQUI VO OS COMANDOS A SEREM EXECUTADOS Obs: as chaves utilizadas nesta sintaxe so mais uma forma de se escrever Comentrios (comentrios em BLOCO), isto , tudo o que est Entre as chaves no interpretado como cdigo e sim como texto. } FIMPARA

Entendendo a sintaxe: O PARA uma estrutura de repetio incondicional, isto , uma vez iniciada ser executada quantas vezes estiver estipulada no intervalo entre varivel e valor final. Vejamos:
PARA i 1 at 100 faa Escreva("Este lao ser executado 100 vezes") FIMPARA

Note que, para a utilizao desta estrutura devemos utilizar uma varivel inteira, que deve ser declarada como tal, na rea de declarao de variveis do Algoritmo. Assim sendo:
Algoritmo Exemplo Declare i: inteiro PARA i 1 at 100 faa Escreva(?Este lao ser executado 100 vezes?) FIMPARA FimAlgoritmo

Veremos mais sobre a utilizao desta estrutura em outros exemplos. Resoluo do problema proposto com a estrutura PARA
Algoritmo Pesquisa Declare Nome, EstCiv, TimeQTorce, Origem: texto

Copyright (C) 1999-2000 Linux Solutions.

10

Sexo: caracter i, Idade, contMulher, contMFilhos, ContTPalmeiras: inteiro //incio do algoritmo ContMulher 0 ContMFilhos 0 ContTPalmeiras

PARA i <-- 1 AT 3000 FAA escreva('Digite um nome: ') leia (nome) Escreva('Digite a idade: ') leia(idade) Escreva('Digite o Sexo (F para Feminino, M para Masculino):') leia(Sexo) Escreva('Digite o Estado Civil (Solteiro(a), Casado(a): ') Leia(EstCiv) SE (sexo = 'F') or (sexo = 'f') ENTO ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTO ContMFilhos ContMFilhos + 1 FIMSE FIMSE //fim do ento SENO Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do seno FIMSE Escreva('Digite a Origem (BR,US,UC...): ') leia(Origem) FIMPARA //Escrevendo os resultados Escreva("O nmero de Torcedores do Palmeiras : ", ContTPalmeiras) Escreva("O nmero de Mulheres da Cidade : ",ContMulher) Escreva("O nmero de Mulheres Casadas com mais de trs filhos : ", ContMFilhos) FIMALGORITMO

Concluso Muito bem! Este primeiro contato com um problema e estas novas tcnicas deve ser bem estudada. Pois na prxima aula teremos uma anlise completa deste algoritmo. At l!

Copyright (C) 1999-2000 Linux Solutions.

11

Curso de Algoritmo - Aula V


Por:

Jorge Luiz E. de Souza ( 17/07/2001 )

Introduo Como prometido aqui est a anlise do algoritmo da aula anterior . Vamos entender o cdigo! Anlise da estrutura PARA Primeira anlise: A seo de declarao de variveis
Declare Nome, EstCiv, TimeQTorce, Origem: texto Sexo: caracter i, Idade, contMulher, contMFilhos, ContTPalmeiras: inteiro

A primeira seo de um algoritmo sempre a DECLARAO DE VARIVEIS. Variveis estas, que sero utilizadas no decorrer do algoritmo. necessria a declarao, pois se uma varivel utilizada no corpo do algoritmo no estiver declarada, o algoritmo no ser executado. Provavelmente ocorrer o erro ? vriavel desconhecida ? e o programa ser abortado. Segunda anlise: A inicializao de variveis Quando declaramos uma varivel, simplesmente estamos reservando um espao de memria que poder conter qualquer valor no decorrer do algoritmo. Mas o endereo ao qual a nossa varivel est apontando provavelmente contm informaes deixadas por outros programas ou se tivermos sorte estar vazia. A inicializao de variveis se faz necessria quando devemos conhecer previamente o valor de uma varivel. o caso dos contadores. Precisamos ter certeza de que o valor inicial de um contador 0 (zero). Ento iniciamos seu valor utilizando o comando de atribuio "".
ContMulher 0 ContMFilhos 0 ContTPalmeiras 0

NOTA: Um detalhe muito importante que deve ser observado o nome de uma varivel. Devemos dar preferncia para nomes SIGNIFICATIVOS, isto , ao criar uma varivel, escolha um nome que possibilite a vizualizao de seu contedo simplesmente pela leitura do mesmo. Como no caso acima, onde:

ContMulher a varivel que contar todas as mulheres da pesquisa; ContMFilhos a varivel que contar todas as mulheres casadas e com mais de trs filhos; ContTPalmeiras a varivel que contar todos os torcedores do Palmeiras da pesquisa.

Terceira anlise: A implementao do Para e tudo que se ir repetir em seu escopo


PARA i <-- 1 AT 3000 FAA escreva('Digite um nome: ') leia (nome) Escreva('Digite a idade: ') leia(idade) Escreva(Digite o Sexo (F para Feminino, M para Masculino): ')

Copyright (C) 1999-2000 Linux Solutions.

12

leia(Sexo) Escreva('Digite o Estado Civil (Solteiro(a), Casado(a): ') Leia(EstCiv) SE (sexo = 'F') or (sexo = 'f') ENTO ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTO ContMFilhos ContMFilhos + 1 FIMSE FIMSE //fim do ento SENO Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do seno FIMSE Escreva('Digite a Origem (BR,US,UC...): ') leia(Origem) FIMPARA

Muito bem, observando a estrutura acima, podemos notar: Todas as instrues entre o PARA e o FIMPARA sero executadas 3000 vezes. A estrutura de SE utilizada ser tratada na Quarta anlise. Todo o processamento do programa est dentro do para As primeiras oito linhas aps o PARA so de leitura das variveis (NOME, IDADE, SEXO e ESTCIV). Os comandos Escreva que antecedem cada comando Leia, so para informar o usurio quanto ao que o programa est esperando que ele digite. A posio de implementao dos contadores dentro da estrutura estratgica, e no poderia ser outra. De acordo com a lgica do algoritmo, as leituras que esto dentro dos SE, mais internos, somente ocorrero se a condio de entrada do ENTO ou SENO correspondente forem satisfeitas. Isto , para o nosso algoritmo, se uma mulher no estiver com estado civil "Casada", o algoritmo no ler nmero de filhos para esta mulher. Notamos que alguns valores recebidos no esto servindo para nenhum calculo especial, somente sendo necessrios se, forem ser guardados em um banco de dados.

Quarta anlise: Estrutura SE ENTO SENO encadeadas


SE (sexo = 'F') or (sexo = 'f') ENTO ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTO

Copyright (C) 1999-2000 Linux Solutions.

13

FIMSE

ContMFilhos

ContMFilhos + 1

FIMSE //fim do ento SENO Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do seno FIMSE

Observamos aqui, uma estrutura de SE's encadeados. NOTA: A indentao muito importante na estruturao visual do cdigo para uma melhor leitura e entendimento do mesmo. INDENTAO : Tabulao de elementos semelhantes em um mesmo nvel (COLUNA imaginria). Se voc pegar uma rgua e colocar no incio de um ENTO, encontrar seu SENO correspondente, e assim por diante. Relembrando Uma estrutura SE possui dois caminhos a serem seguidos, de acordo com o resultado da condio estabelecida para o mesmo. Sintaxe:
SE CONDIO ENTO //comandos do ento CASO A CONDIO SEJA VERDADEIRA SENO //comandos do seno CASO A CONDIO SEJA FALSA FIMSE

Ento, se o resultado da condio: SE (sexo = 'F') or (sexo = 'f') , for VERDADEIRA, sero executados todos os comandos que esto dentro do ENTO deste SE.
ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTO ContMFilhos ContMFilhos + 1 FIMSE FIMSE //fim do ento

Caso contrrio, se o resultado da condio for FALSO, sero executados todos os comandos do SENO correspondente.
Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do seno

Copyright (C) 1999-2000 Linux Solutions.

14

E assim para todos os SE's encadeados dentro deste ltimo. Quinta anlise: Comandos de sada (resultado do processamento) Nosso exemplo muito simples, e sua sada no poderia ser diferente. Como utilizamos comente estruturas de contagem (CONTADORES), aps a leitura ser finalizadas, simplesmente escrevemos uma frase elucidativa antes de mostrar o CONTEDO (somatria) das variveis de contagem. Sexta anlise: Comentrio sobre as deficiencias e possveis refinamentos Este cdigo um bom comeo, mas apresenta algumas "falhas". Por exemplo: - Uma vez iniciada a execuo, ser necessrio digitar contnuamente todos as 3000 fichas. Sem interrupo, isto , sem fechar o programa. Agora, imagine se fossem 100.000 entradas! Ento, o PARA uma estrutura falha?! De maneira alguma, uma tima estrutura de repetio, mas devemos pensar muito bem aonde a utilizaremos dentro de um algoritmo. Em nossa prxima implementao de soluo para este mesmo problema, utilizaremos uma estrutura de repetio mais flexvel o ENQUANTO que nos traz mais um conceito importante em programao; as FLAGs. Concluso O algoritmo est certo, mas a estrutura apresentada na resoluo (PARA) no adequada para esta situao (isto foi feito propositalmente, para apresentar a voc a estrutura). Na prxima aula apresentaremos o mesmo algoritmo com a estrutura (ENQUANTO), mais adequada para este problema. Entenda bem a leitura (interpretao) deste cdigo, pois na prxima somente ser analisada a nova estrutura, sendo que o restante do cdigo ser o mesmo. At a prxima!

Curso de Algoritmo - Aula VI


Por:

Jorge Luiz E. de Souza ( 31/07/2001 )

Introduo Como prometido aqui est a nova implementao do algoritmo da aula anterior. Espero que voc tenha entendido a estrutura, pois somente ser analisado aqui a nova estrutura (ENQUANTO). Se voc ainda tem alguma dvida, d uma olhada na aula anterior que possui a anlise completa da estrutura. Vamos aprender mais! A estrutura ENQUANTO
Algoritmo Pesquisa Declare Nome, EstCiv, TimeQTorce, Origem: texto Sexo: caracter i, Idade, contMulher, contMFilhos, ContTPalmeiras: inteiro //incio do algoritmo ContMulher 0 ContMFilhos 0 ContTPalmeiras

escreva('Digite um nome: ') leia (nome)

Copyright (C) 1999-2000 Linux Solutions.

15

ENQUANTO nome <> ?fim? FAA escreva('Digite um nome: leia (nome) Escreva('Digite a idade: leia(idade) Escreva(Digite o Sexo (F leia(Sexo) Escreva('Digite o Estado Leia(EstCiv)

') ') para Feminino, M para Masculino): ') Civil (Solteiro(a), Casado(a): ')

SE (sexo = 'F') or (sexo = 'f') ENTO ContMulher ContMulher + 1 SE EstCiv = 'Casada' ENTO Escreva('Digite o Numero de filhos: ') Leia(NumFilhos) SE NumFilhos > 3 ENTO ContMFilhos ContMFilhos + 1 FIMSE FIMSE //fim do ento SENO Escreva('Digite o Time para o qual Torce: ') Leia(TimeQTorce) SE TimeQTorce = 'Palmeiras' ENTO contTPalmeiras ContTPalmeiras +1 FIMSE //fim do seno FIMSE Escreva('Digite a Origem (BR,US,UC...): ') leia(Origem) escreva('Digite um nome: ') leia (nome) FIMENQUANTO //Escrevendo os resultados Escreva("O nmero de Torcedores do Palmeiras : ", ContTPalmeiras) Escreva("O nmero de Mulheres da Cidade : ",ContMulher) Escreva("O nmero de Mulheres Casadas com mais de trs filhos : ", ContMFilhos) FIMALGORITMO

Anlise do algoritmo Todas as anlises so idnticas resoluo anterior, com exceo dos novos conceitos: FLAG e a estrutura enquanto. Vejamos a estrutura enquanto: Sintaxe:
ENQUANTO [CONDIO] FAA FIMENQUANTO

Copyright (C) 1999-2000 Linux Solutions.

16

A estrutura bsica do ENQUANTO a dada acima, mas uma tcnica para utilizao desta estrutura a FLAG. Uma FLAG uma condio pr-definida que determina o fim do lao ENQUANTO. Para se utilizar flags necessrio determinar qual a melhor varivel deve determinar (com o seu valor no decorrer do algoritmo) a sada do lao. Isto pode variar de problema para problema, mas geralmente usamos a primeira informao, dentro de uma sequncia de informaes digitadas pelo usurio. Sendo assim, se esta primeira informao contiver o valor determinado como FLAG de sada, o lao abortado e o programa continua na primeira linha do algoritmo aps o final da estrutura do lao. Assim temos (no nosso exemplo):
escreva('Digite um nome: ') leia (nome) ENQUANTO nome <> "fim" FAA // comandos a serem executados para um nome diferente de fim escreva('Digite um nome: ') leia (nome) FIMENQUANTO

Notem que estamos "lendo" o nome duas vezes na estrutura. Por qu? A primeira leitura feita FORA do lao, e serve para que o usurio possa ignorar o lao, caso ele deseje isto. Isto , se o usurio digitar "fim" antes de entrar no lao, o lao ser ignorado. Isto garante a flexibilidade do ENQUANTO. J a segunda leitura, est dentro do lao e garante que a(s) prxima(s) interao(es) do lao, saber(o) o valor da FLAG de sada. Isto necessrio, pois caso no leiamos a varivel "nome" dentro do lao, ocorrer um LOOP ETERNO, uma vez que a condio de sada NUNCA ser satisfeita. Isto , se no lemos a varivel nome, no podemos atribuir a ela o valor "fim" que determina a parada do lao. importante notar tambm, que a varivel que est nos servindo como FLAG, dentro do lao, deve ser a ltima instruo a ser lida. Pois aps esta leitura, se a condio de sada for satisfeita os comandos de dentro do lao no devem mais ser executados. Concluso Com isto terminamos o nosso curso bsico de algoritmos. Espero que tenham aproveitado e gostado! Futuramente, em uma segunda parte, falaremos de comandos mais avanados e resoluo de problemas matemticos atravs dos algoritmos. At l!

Curso de Algoritmo - Aula VII


Por:

Jorge Luiz E. Souza ( 11/01/2002 )

Introduo Muito bem, como ficou acertado, veremos a resoluo de exerccios matemticos, para a escrita de algoritmos estruturados. Exemplo 1 Nosso primeiro exerccio ser a resoluo de uma somatria de nmeros. S = 1 + 2 + 3 + 5 + ...

Copyright (C) 1999-2000 Linux Solutions.

17

At um total de 500 dgitos. J ficou estabelecido o nmero de repeties, ento, a melhor estrutura a ser utilizada para a resoluo do problema o PARA. Resoluo
Algoritmo Somatoria Declare S, i : Inteiro //Inicializao da varivel acumuladora S <- 1 PARA i <- 2 AT 500 FAA S <- S + i FIMPARA FIM ALGORITMO

Pronto, a implementao para a soluo deste problema bem simples no?! E demonstra um pouco do poder de clculo dos computadores. Para fazer esta soma, um computador levaria um milsimos de segundo. Aproveitando esta implementao, vejamos uma tcnica para atualizao rpida de estruturas PARA, em algoritmos mais complexos. Esta tcnica muito importante, pois imagine um cdigo com 1500 (mil e quinhentas) linhas, e algumas estruturas PARA espalhadas, utilizando o mesmo valor de repeties. Voc teria que procurar pelo cdigo para encontrar as estruturas PARA e atualizar uma por uma caso o valor de repetio mudasse. A tcnica a seguinte: Ao invs de utilizarmos:
PARA i <- 2 AT 500 FAA

Utilizaremos:
PARA i <- 2 AT VFim FAA

Onde Vfim uma varivel que deve ser inicializada no incio do programa com o valor de finalizao da estrutura de repetio. Ento teriamos:
Algoritmo Somatoria Declare S, Vfim, i : Inteiro //Inicializao da varivel acumuladora S <- 1 Vfim <- 500 PARA i <- 2 AT VFim FAA S <- S + i FIMPARA FIM ALGORITMO

Agora, basta alterar o valor de Vfim, para que a estrutura passe a calcular mais ou menos de 500 dgitos.

Exemplo 2

Copyright (C) 1999-2000 Linux Solutions.

18

Vejamos um algoritmo para resolver o seguinte problema: S <- 2 + 4 + 6 + 8 +... Para um total de 1000 dgitos.
Algoritmo SomatoriaII Declare S, Vfim, i : Inteiro //Inicializao da varivel acumuladora S <- 0 Vfim <- 1000 PARA i <- 1 AT VFim FAA S <- S + (i*2) FIMPARA FIM ALGORITMO

Note que a soluo apresentada aqui, para este segundo exemplo, utiliza a prpria varivel da estrutura PARA, para obter os valores a serem somados. Assim, quando o valor de "i" for: I = 1 ------- S receber seu valor atual (zero) + o valor obtido pela multiplicao de "i" por 2, isto (dois). I = 2 ------- S receber seu valor atual (dois) + o valor obtido pela multiplicao de "i" por 2, isto (quatro). E assim por diante. Observe que foi utilizado parenteses para descrever a ordem de operaes que deve ser seguida. Como na matemtica, o computador, se no especificado, segue a seguinte ordem de operaes matemticas: 1. 2. 3. 4. 5. Raiz quadrada Equaes Multiplicao e diviso Soma e subtrao Operadores lgicos (AND,OR,XOR,NOT)

Para determinar a ordem de uma expresso matemtica utiliza-se os parenteses. Assim, do resultados diferentes: 1. 5*5+15/20 diferente de 5*(5+15)/20 que diferente de (5*5+(15/20)). Concluso Com esta aula, vimos que a implementao de uma somatria pode ser muito simples e rpida para o computador. E como uma tcnica simples pode ajudar na manuteno de estruturas PARA em algoritmos mais complexos. Para exercitar, faa um algoritmo que calcule: S = 1+ 3+ 5 + 7+... Para 20 dgitos

Curso de Algoritmo - Aula VIII


Por:

Jorge Luiz E. Souza ( 18/02/2001 )

Copyright (C) 1999-2000 Linux Solutions.

19

Intorudo Este captulo est direcionado para a resoluo de exerccios, ento, vamos luta! OBS: O estudo detalhado e a resoluo dos exerccios desta aula sero apresentados na aula seguinte. Pois o objetivo desta aula uma avaliao de conhecimento adquirido, ou melhor, uma auto-avaliao, pois voc deve tentar resolver sozinho, para poder comparar com a soluo que eu darei. Boa Sorte! Exerccios Exerccio 1 Fazer um algoritmo que dadas as dimenses de um retngulo, calcule a sua rea e escreva na tela. Exerccio 2 Fazer um algoritmo que para cada nmero digitado pelo usurio, calcule seu fatorial e escreva na tela. Exerccio 3 Fazer um algoritimo para calcular a potncia N de um numero X. Ambos sero digitados pelo usurio. E escreva na tela. Exerccio 4 Dada a expresso:
2*10*2*20*2*30*2*40 1+2+3+4+5+6+7+8

Fazer um algoritmo para mostrar seu resultado. Exerccio 5 Fazer um algoritmo que dados dois nmeros, calcule a razo existente entre eles e monte uma PA de 10 termos e escreva na tela. O calculo da razo o segundo termo menos o primeiro. Exerccio 6 Tendo-se a seguinte expresso matemtica:
Soma = X+Y Mult= X*Y SubTotal = Mult / Soma Expressao = [(X*15)+(Y*25)+(X*35)+(Y*45)+(X*55)]/15 Total= SubTotal + Expressao

Fazer um algoritmo que: 1. Leia os valores X e Y 2. Calcule a soma e a multiplicacao destes valores e armazene em SubTotal 3. Calcule expressao e armazene a ltima operao de soma na varivel Total Ao final do programa, listar na tela os valores, da seguinte maneira:
Exerccio 6 Valores digitados pelo usurio "VALOR DE X"; "VALOR DE Y" Subtotal : "VALOR DO SUBTOTAL"; Expresso: "VALOR DA EXPRESSO"; Total:"Valor total";

Copyright (C) 1999-2000 Linux Solutions.

20

Curso de Algoritmo - Aula IX


Por:

Jorge Luiz E. Sousa ( 29/01/2002 )

Introduo Como prometido aqui esto as solues dos exerccios apresentados na aula anterior . Soluo dos exerccios. Confira! Exerccio 1 Fazer um algoritmo que dadas as dimenses de um retngulo, calcule a sua rea e escreva na tela.
Algoritmo Declare //Inicio do algoritmo //Obtendo os dados do usurio Escreva('Digite o valor da base do retngulo: ') Leia(Base) Escreva('Digite o valor da altura do retngulo: ') Leia(Altura) //Calculando a rea Area <- Base * altura Escreva('A rea : ',Area) FimAlgoritmo

Anlise do algortmo acima: Primeira anlise: Este algoritmo muito simples, sendo necessrio apenas uma frmula para sua soluo. no h o que comentar... qualquer dvida contacte-me. Exerccio 2 Fazer um algoritmo que para cada nmero digitado pelo usurio, calcule seu fatorial e escreva na tela.
Algoritmo Declare //Inicio do algoritmo no //Obtendo dados do usurio para entrar no lao ou

Escreva ('Digite um nmero, ou 0 para sair(o fatorial de 0 1.)')') Leia (Numero) //Inicializando variveis i<- Numero Fatorial<- 1 Enquanto Numero <> 0 faa Para i<- 1 at Numero Faa

Copyright (C) 1999-2000 Linux Solutions.

21

Se i<>0

FimPara Escreva('O fatorial de ',Numero,' ',Fatorial) lao //Obtendo dados do usurio para continuar ou sair do

ento Fatorial<- Fatorial * i i<- i-1

Escreva('Digite um nmero, ou 0 para sair(o fatorial de 0 1.)')') Leia(Numero) FimEnquanto FimAlgoritmo

Anlise do algortmo acima: Primeira anlise. Para se calcular o fatorial de um nmero, necessrio multiplic-lo pelos seus predessessores at se chegar ao 1. Por tanto, o fatorial de 5 5*4*3*2*1. Com base nisto, chega-se a concluso de que uma estrutura PARA resolve o problema, visto que temos o valor inicial e o ponto de parada. Segunda anlise. Como em algoritmo a estrutura PARA somente "anda para frente", devemos utilizar uma varivel auxiliar para decrementar o nmero, assim poderemos chegar ao valor desejado, testando se o decremento chegou a zero por precauo.

Exerccio 3 Fazer um algoritimo para calcular a potncia N de um numero X. Ambos sero digitados pelo usurio. E escreva na tela.
Algoritmo Declare //Inicio do algoritmo //Obtendo os dados do usurio Escreva('Digite a base:') Leia(Base) Escreva('Digite o expoente:') Leia(Expoente) //Inicializando varivel resultado Resultado<- Base //Calculando Se Expoente = 0 ento Resultado<-1 seno Se base = 0 ento Resultado <- 0 seno PARA i<- 1 at (Expoente -1) FAA Resultado<- Resultado * Expoente FimPARA FimSe FimSe

Copyright (C) 1999-2000 Linux Solutions.

22

Escreva('O resultado : ',Resultado) FimAlgoritmo

Anlise do algortmo acima: Primeira anlise O calculo da exponenciao se d como XN de modo que para se obter o resultado final deve-se multiplicar X por ele mesmo N vezes. Ento, conhecemos o valor inicial (1) e o valor final ser dado pelo usurio. A estrutura PARA o mais indicado. Segunda anlise Montar a expresso facil, mas em algoritmo necessrio mostrar todos os passos para a mquina (computador), pois voc o est ensinando a fazer algo. ento, devemos prever todas as situaes possveis. Por isto, testamos a entrada do expoente 0, e base 0.

Exerccio 4 Dada a expresso: 2*10*2*20*2*30*2*40 1+2+3+4+5+6+7+8 fazer um algoritmo para mostrar seu resultado.
Algoritmo Declare //Inicio do algoritmo j<-10 Somar <- 0

PARA i <- 1 at 8 Faa Calcular<- Calcular + (2*j) Somar<- Somar + i j<- j + 10 FimPARA Resultado<- Calcular / Somar Escreva('O resultado : ', Resultado) FimAlgoritmo

Anlise do algortmo acima: Primeira anlise A expresso fixa tendo somente oito elementos no numerador, oito no denominador. A estrutura para a mais indicada para resolver. Segunda anlise So necessrias variveis auxiliares para o calculo, estas so Calcular, j e Somar que fazem respectivamente: 1. Calcular o valor final do numerador, utilizando-se do incremento do j; Copyright (C) 1999-2000 Linux Solutions. 23

2. Calcular o valor do denominador. Exerccio 5 Note que somente os calculos so feitos dentro do lao. o calculo do resultado final foi feito aps o calculo das partes. Fora do lao. Bem como a escrita. Exerccio 5 Fazer um algoritmo que dados dois nmeros, calcule a razo existente entre eles e monte uma PA de 10 termos e escreva na tela. O calculo da razo o segundo termo menos o primeiro.
Algoritmo Declare //Inicio do algoritmo //Obtendo os dados do usurio Escreva('Digite o primeiro nmero') Leia(PTermo) Escreva('Digite o segundo nmero') Leia(STermo) //Calculando a razo Razao<- STermo - PTermo Escreva('Os dez primeiros termos desta PA so:') Escreva(PTermo) Escreva(STermo) TAux<-STermo Para i<-3 at 8 Faa ProxTermo<- TAux + Razao Escreva(ProxTermo) TAux<- ProxTermo FimPara FimAlgoritmo

Anlise do algortmo acima: Primeira anlise Uma PA uma seqncia de nmeros com uma razo entre eles. Para se calcular os termos da PA necessrio conhecer pelo menos um e a razo. No nosso caso, temos os dois primeiros, isto significa que temos a razo tambm. Depois s somar. Segunda anlise No existe somente esta forma para resolver o problema. observe isto. Use este algoritmo como base somente, no como a nica soluo.

Exerccio 6 Tendo-se a seguinte expresso matemtica:


Soma = X+Y Mult= X*Y SubTotal = Mult / Soma Expressao = [ (X*15)+(Y*25)+(X*35)+(Y*45)+(X*55) ] / 15

Copyright (C) 1999-2000 Linux Solutions.

24

Total= SubTotal + Expressao

Fazer um algoritmo que: 1. Leia os valores X e Y 2. Calcule a soma e a multiplicao destes valores e armazene em SubTotal 3. Calcule expresso e armazene a ltima operao de soma na varivel Total Ao final do programa, listar na tela os valores, da seguinte maneira:
Exerccio 6 Valores digitados pelo usurio "VALOR DE X"; "VALOR DE Y" Subtotal : "VALOR DO SUBTOTAL"; Expresso: "VALOR DA EXPRESSO"; Total:"Valor total"; Algoritmo Declare //Inicio do algoritmo //Obtendo os nmeros do usurio Escreva('Digite o primeiro nmero') leia(X) Escreva('Digite o Segundo nmero') Leia(Y) Soma <- X + Y Mult <- X * Y SubTotal <- Mult / Soma Expressao <- 0 i<-15 j<- 1 Enquanto i <= 55 faa Par<- J mod 2 Se (par = 0) Ento Expressao <- Expressao + (X*i) Seno Expressao <- Expressao + (Y*i) FimSe i<- i + 10 Fim Enquanto Expressao<-Expressao/15 Total <- SubTotal + Expressao Escreva('Exercicio1') Escreva('') //isto escreve uma linha vazia Escreva('') //isto escreve uma linha vazia Escreva('Os valores digitados pelo usurio so:X=',X,' Y= ',Y) Escreva('SubTotal= ',SubTotal) Escreva('Expresso= ',Expressao) Escreva('O valor total dos calculos :', Total) FimAlgoritmo

Anlise do algoritmo acima: Primeira anlise O problema apresentado neste exerccio e no anterior, devem ser resolvidos em partes, assim, na sequncia temos a soluo da primeira expresso, da segunda, do subtotal e o calculo da expresso. Segunda anlise Copyright (C) 1999-2000 Linux Solutions. 25

Sobre o calculo da expresso:


Expressao <- 0 i<-15 j<- 1 Enquanto i <= 55 faa Par<- J mod 2 Se (par = 0) Ento Expressao <- Expressao + (X*i) Seno Expressao <- Expressao + (Y*i) FimSe i<- i + 10 Fim Enquanto Expressao<-Expressao / 15

Vejamos: 1. a inicializao da varivel "Expressao" com zero para que ele esteja "limpa" quando receber o primeiro valor. 2. a varivel "i" recebendo 15 servir para o incremento dos valores 15,25,35... 3. a varivel "Par" receber o valor do resto da diviso de j por 2, e definir se o nmero par ou impar. Portanto, quando for inpar multiplicaremos "i" por "X" e quando for par, multiplicaremos por "Y". 4. quando sairmos do lao, a expresso estar pronta para ser dividida por 15. Concluso Com estes exerccios, terminamos este mdulo. No prximo, veremos mais estruturas, ainda no apresentadas, como vetores e matrizes. At mais! Se voc conseguiu fazer todos os exerccios, Parabns! Se no, no fique triste, voc pode revisar as aulas e tentar de novo.

Curso de Algoritmo - Aula X


Por:

Jorge Luiz E. Sousa ( 15/02/2002 )

Introduo Ol, comunidade! Hoje comea uma nova faze do curso, onde veremos algumas estruturas novas e muito importantes para programao. So chamadas VETORES. Definio So estruturas unidimensionais e homogneas capazes de armazenar um nmero determinado de variveis e referencilas utilizando uma estrutura de ndice. De acordo com esta descrio, vejamos um exemplo:
Exemplo de um vetor de 8 (oito) posies 5 15 25 100 0 21 35 50 Exemplo de um vetor de 8 (oito) posies 'JLes' 'Exemplo' 'de' 'VETORES' '' '' '' ''

Observe nas estruturas acima, que:

Copyright (C) 1999-2000 Linux Solutions.

26

No primeiro exemplo temos um vetor numrico No segundo temos um vetor literal Os dois exemplos esto totalmente preenchidos O primeiro vetor foi inicializado com zeros O segundo vetor foi inicializado com '' (espaos/vazio) Ambos so homogneos, isto , seu contedo do mesmo tipo Ambos so unidimencionais, um ndice basta para referenciar as posies do vetor. Sintaxe

Com a explicao acima, concluimos que vetores so variveis com mltiplas posies.

A sintaxe de declarao de variveis para vetores :


Declare <NomeDaVarivel> : Vetor [INI .. FIM] TipoDoVetor

Onde:

Declare a palavra reservada para declarao de variveis (sempre no incio do Algoritmo) <NomeDaVarivel> : o nome dado pelo usurio para a varivel Vetor a palavra reservada para definir que uma varivel do tipo VETOR [INI .. FIM] define a quantidade de tens de um vetor TipoDoVetor define o tipo de varivel que o vetor vai armazenar.

Exemplo:
Declare vetNome : vetor [1..50] literal Declare vetSalario : vetor [1..50] numrico inteiro

Caractersticas

Unidimensionais, Homogneos, Um mesmo indice pode acessar valores em vrios vetores distintos, desde que haja uma relao entre eles e sejam "do mesmo tamanho". Ao tentar acessar uma posio inexistente, ocorrer um erro no programa. Vetores s existem na memria do computador e durante a execuo de um programa ou "PROCEDIMENTO", no sendo estruturas para armazenamento permanente.

Obs.: PROCEDIMENTOS e FUNES sero matria de aulas futuras

Referncia Para acessar uma determinada posio do vetor, ser necessrio informar o nome do vetor e a posio desejada. Exemplo:
NomeAtual <- vetNome[40] SalarioAtual <- vetSalario[40]

Aplicao

Copyright (C) 1999-2000 Linux Solutions.

27

Estas estruturas so utilizadas para armazenar temporriamente vrios valores relacionados. Como mostrado no exemplo anterior, podemos ter vrios vetores de "N" posies, armazenando dados diferentes e relacionados, "SIMULANDO EM MEMRIA", o armazenamento de informaes, para referncia futura. Exemplo Como exemplo, vamos criar uma agenda virtual, que durante sua execuo, armazenar: Nome, Telefone, endereo e e-mail de 100 pessoas.
Algoritmo Declare Nome,Ender,Telefone,EMail: vetor [1..100]literal Indice: numrico inteiro //Incio do algoritmo //Inicializando indice Indice<-1 //Inicializando vetores Parai<- 1 at 100 Faa Nome[i]<-'' Ender[i]<-'' Telefone[i]<-'' EMail[i]<-'' FimPara //Obtendo dados do usurio Para i<- 1 at 100 Faa Escreva('Digite o nome:') Leia(Nome[i]) Escreva('Digite o Endereco') Leia(Ender[i]) Escreva('Digite o Telefone') Leia(Telefone[i]) Escreva('Digite o e-mail') Leia(EMail[i]) FimPara //Listando todos os registros em sequncia Parai<- 1 at 100 Faa Escreva(Nome[i]) Escreva(Ender[i]) Escreva(Telefone[i]) Escreva(EMail[i]) FimPara FimAlgoritmo

Anlise do algoritmo exemplo Primeira Anlise O algoritmo acima contm muitas falhas, mas para uma viso inicial, serve ao propsito. Segunda Anlise Note que a mesma estrutura "PARA" foi utilizada para todos os processos, a saber: Inicializao dos Copyright (C) 1999-2000 Linux Solutions. 28

vetores, obteno dos dados e associao dos mesmos uma mesma pessoa e impresso dos dados. Terceira anlise O algoritmo, por utilizar a estrutura para, quando estiver no segundo lao (obteno dos dados), no vai parar antes de ler todos os 100 registros. Isto pode ser muito cansativo e desagradvel pensar que estes dados sero perdidos assim que se chegar ao fim do algoritmo. Quarta anlise Vetores so estruturas interessantes e teis, mas no para uma agenda. sendo que a melhor utilizao desta estrutura seria, como forma, por exemplo, de guardar os ltimos 100 registros lidos de um banco de dados na memria para acesso imediato. Desta maneira, o acesso a disco (que lento), seria feito "uma vez somente", e os dados seriam acessados a partir da memria, que muito mais eficiente e rpido. Concluso Com o decorrer do curso, utilizaremos este mesmo algoritmo, melhorando-o a cada novo recurso aprendido. Ao final, teremos um algoritmo de agenda completo, com arquivamento em disco e tudo o que mais for de direito de uma agenda, inclusive o Programa codificado em pascal para DOS, utilizando a interface do Delphi para implementao. A prxima aula ser sobre matrizes. Espero que tenham apreciado, Crticas e Sugestes so bem vindas!

Curso de Algoritmo - Aula XI


Por:

Jorge Luiz E. Sousa ( 28/02/2002 )

Introduo Ol Comunidade! Muito bem, estamos aqui novamente para nosso curso, e hoje falaremos sobre matrizes, que so vetores bidimensionais, isto , vetores que possuem dois ndices para acesso a uma posio. Um exemplo bsico seria uma planlha, onde temos linhas e colunas, para referenciar uma clula. Mas note que isto s um exemplo. Matrizes para os programas so estruturas que armazenam dados homogneos (do mesmo tipo), em "clulas" que so acessadas atravs de coordenadas numricas. Assim, uma matriz de 5x15, teria 5 linhas e 15 colunas, sendo que para acessar um elemento de coordenada 5, 5 (como nos vetores, visto aula passada), deveria ser informado o nome da matriz e entre colchetes a coordenada que se quer. Ex.: MatrizExemplo[5,5] Definio So estruturas bidimensionais e homogneas capazes de armazenar um nmero determinado de variveis e referenci-las utilizando uma estrutura de dois ndices. De acordo com esta descrio, vejamos um exemplo:
Exemplo de um vetor de 2 (duas) linhas x 8 (oito) colunas 5 15 25 100 0 21 35 50 5 15 25 100 0 21 35 50 Exemplo de um vetor de 2 (duas) linhas x 8 (oito) colunas

Copyright (C) 1999-2000 Linux Solutions.

29

'JLes' 'Exemplo' 'de' 'MATRIZES' '' '' '' '' 'JLes' 'Exemplo' 'de' 'MATRIZES' '' '' '' ''

Observe nas estruturas acima, que:


No primeiro exemplo temos uma matriz numrica No segundo temos uma matriz literal Os dois exemplos esto totalmente preenchidos O primeiro vetor foi inicializado com zeros O segundo vetor foi inicializado com '' (espaos/vazio) Ambos so homogneos, isto , seu contedo do mesmo tipo (numrico e literal respectivamente) Ambos so bidimencionais, dois ndice sero necessrios para referenciar as posies da matriz.

Com a explicao acima, concluimos que matrizes so "variveis com multiplas posies e duas dimenses (plano carteziano x e y)". Sintxe A sintxe de declarao de variveis para vetores :
Declare <NomeDaVarivel> : Vetor [INI .. FIM, INI .. FIM] TipoDoVetor

Onde:

Declare a palavra reservada para declarao de variveis (sempre no incio do Algoritmo) <NomeDaVarivel> : o nome dado pelo usurio para a varivel Vetor a palavra reservada para definir que uma varivel do tipo VETOR [INI .. FIM, INI .. FIM] define a quantidade de linhas e colunas de um vetor bidimensional (matriz) TipoDoVetor define o tipo de varivel que o vetor vai armazenar.

Exemplo:
Declare vetPessoa : vetor [1..50, 1..2] literal (matriz quadarada 50x50)

Caractersticas Bidimensionais, homogneos, um mesmo indice pode acessar valores em vrios vetores distintos, desde que haja uma relao entre eles e sejam "do mesmo tamanho". Ao tentar acessar uma posio inexistente, ocorrer um erro no programa. Vetores (uni, bi e multi*) s existem na memria do computador e durante a execuo de um programa ou "PROCEDIMENTO", no sendo estruturas para armazenamento permanente. multi* existem linguagens de programao que permitem a criao de vetores multidimensionais. Vetores com 3 indices que seriam refernciados como matrizes sobrepostas, mas no usual. Obs.: PROCEDIMENTOS e FUNES sero matria de aulas futuras

Referncia Para acessar uma determinada posio do vetor, ser necessrio informar o nome do vetor e a posio desejada. Exemplo: Copyright (C) 1999-2000 Linux Solutions. 30

NomeAtual <- vetPessoa[40,1]T TelefoneAtual <- vetPessoa[40,2]

Aplicao Estas estruturas so utilizadas para armazenar temporriamente vrios valores relacionados. Estamos utilizando o mesmo exemplo anterior, somente mostrando a diferena de acesso entre vetores e matrizes (vetores bidimensionais), "SIMULANDO EM MEMRIA", o armazenamento de informaes, para referncia futura. Exemplo Como exemplo, vamos criar uma agenda virtual, que durante sua execuo, armazenar: Nome, Telefone, endereo e e-mail de 100 pessoas.
Algoritmo Declare Pessoa:vetor[1..100, 1..4]literal Indice1, Indice2: numrico inteiro

//Incio do algoritmo //Inicializando indice Indice<-1 //Inicializando vetores Para i <-1 at 100 Faa Para j <-1 at 4 Faa Pessoa[i,j]<-'' FimPara //Obtendo dados do usurio FimPara //Obtendo dados do usurio

j=1;

Para i

<-1 at 100 Faa Escreva('Digite o nome:') Leia(Pessoa[i,j]) Escreva('Digite o Endereco') Leia(Pessoa[i,j+1]) Escreva('Digite o Telefone') Leia(Pessoa[i,j+2]) Escreva('Digite o e-mail') Leia(Pessoa[i,j+3])

FimPara //Listando todos os registros em sequncia

Para i <-1 at 100 Faa Para j <-1 at 4 Faa Escreva(Pessoa[i,j])

Copyright (C) 1999-2000 Linux Solutions.

31

Escreva(Pessoa[i,j]) Escreva(Pessoa[i,j]) Escreva(Pessoa[i,j]) FimPara FimPara FimAlgoritmo

Anlise do algoritmo exemplo Primeira Anlise J est melhorando, observe que na aula anterior sobre vetores unidimensionais, precisamos criar uma estrutura para cada informao a respeito de uma pessoa, a saber: nome, endereo, e-mail e telefone. Com uma matriz, podemos simular um arquivo em memria. Sendo necessria somente uma matriz, para armazenar todos estes dados. Anlogamente um arquivo, as linhas da matriz seriam os registros, e as clulas da matriz seriam os campos. Observe que com este novo conceito a programao se torna mais abstrata, pois voc como programador deve saber em sua mente, que coluna armazeana a informao de que voc precisa. Segunda Anlise Note que a mesma estrutura "PARA" foi utilizada para todos os processos, com uma diferena quando da leitura dos "registros" (linhas da matriz). No "PARA " de leitura, a varivel "j" foi inicializada antes de entrar no lao e utilizada para referenciar as colunas da linha que armazenaro cada informao. NOTE QUE, o j no incrementado em valor, dentro da estrutura, isto seu valor no aumenta, sempre 1. O que fizemos foi "incrementlo" como ndice, sem que ele recebece seu prprio valor incrementado, assim, para cada linha ele continuar sendo "1", mas em cada leitura referenciar uma coluna diferente. Este conceito foi implementado aqui, para lhe dar uma noo de como utilizar os indices, existem vrias outras formas de se fazer isto. Terceira anlise O algoritmo, por utilizar a estrutura para, quando estiver no segundo lao (obteno dos dados), no vai parar antes de ler todos os 100 registros, que agora equivalem a 100 x 4, isto 400 leituras. Isto pode ser muito cansativo e desagradvel pensar que estes dados sero perdidos assim que se chegar ao fim do algoritmo. Quarta anlise Vetores so estruturas interessantes e teis, mas no para uma agenda. sendo que a melhor utilizao desta estrutura seria, como forma, por exemplo, de guardar os ltimos 100 registros lidos de um banco de dados na memria para acesso imediato. Desta maneira, o acesso a disco (que lento), seria feito "uma vez somente", e os dados seriam acessados a partir da memria, que muito mais eficiente e rpido. Concluso Com o decorrer do curso, utilizaremos este mesmo algoritmo, melhorando-o a cada novo recurso aprendido. Ao final, teremos um algoritmo de agenda completo, com arquivamento em disco e tudo o que mais for de direito de uma agenda, inclusive o Programa codificado em pascal para DOS, utilizando a interface do Delphi para implementao.

Copyright (C) 1999-2000 Linux Solutions.

32

Espero que tenham apreciado, Crticas e Sugestes so bem vindas.

Copyright (C) 1999-2000 Linux Solutions.

33

Вам также может понравиться