Você está na página 1de 12

Algoritmos

Existem muitas formas de se representar algoritmos, utilizando-se linguagens de programao, linguagem formal, formas geomtricas, diagramas, e muitas outras. Algumas destas formas se tornaram especiais pela eficcia de sua representao nas diversas reas do conhecimento. Neste texto de maneira sucinta so apresentadas trs destas formas, porm dando-se mais nfase a duas delas. importante salientar que o estudo de algoritmos exige do estudante um esforo quanto realizao de exerccios, de modo que no se pode aprend-lo apenas lendo textos. Sendo assim, procurem realizar os exerccios que so passados em sala de aula.

Conceito de Algoritmo
- Algoritmo a especificao de uma sequncia ordenada de passos que deve ser seguida com o intuito de realizar uma tarefa, garantindo a sua repetibilidade. Obs.: repetibilidade permite que esta sequncia possa ser repetida toda vez que a tarefa tiver que ser realizada. - Algoritmo um conjunto finito de regras bem definidas para a soluo de um problema, em um tempo finito, e com um nmero finito de passos. Para que um computador possa desempenhar uma tarefa necessrio que esta seja detalhada passo a passo, numa forma compreensvel pela mquina, utilizando aquilo que se chama de programa. Neste sentido, um programa de computador nada mais que um algoritmo escrito numa forma compreensvel pelo computador.

Formas de Algoritmos
Existem diversas formas possveis de se representar um algoritmo. Para a Informtica, algumas das formas mais conhecidas so: - Descrio Narrativa - Fluxograma - Pseudocdigo

>> Descrio Narrativa:


Nesta forma os algoritmos so expressos diretamente em linguagem coloquial, descrevendo-se em passos a sequncia de aes a serem realizadas. Exemplo: >> Troca de um pneu furado: Passo 1 Afrouxar ligeiramente as porcas Passo 2 Suspender o carro Passo 3 Retirar as porcas e o pneu Passo 4 Colocar o pneu reserva Passo 5 Apertar as porcas Passo 6 Abaixar o carro Passo 7 Dar o aperto final nas porcas Um exemplo bastante comum de um Algoritmo em forma de Descrio Narrativa o texto de um Manual que ensine a utilizao de um determinado aparelho. Nele so descritos passos que devem ser seguidos para se realizar as possveis aes daquele aparelho. O nvel de detalhamento destas descries deve ser tal que permita que toda vez que o Usurio pretenda realizar aquela ao, basta seguir aqueles passos na sequncia correta para se ter o xito esperado.

>> Fluxograma ou Diagrama de Blocos:


uma representao grfica de algoritmos, onde formas geomtricas diferentes implicam em aes (instrues ou comandos) distintas. Esta forma facilita o entendimento das idias contidas nos algoritmos. De modo geral, o fluxograma so smbolos dispostos em uma determinada sequncia, em que h um nico caminho orientado a ser seguido, representando a sequncia de execuo daquelas instrues. Dos diversos smbolos existentes que podem ser utilizados em um Fluxograma, os que sero necessrios para o curso apresentado neste texto, so: = Incio e final do fluxograma = Seta do Fluxo de Dados = Operaes de entrada de dados via teclado = Operaes de sada de dados em vdeo (monitor) = Processo ou Processamento, como operaes de atribuio = Deciso - utilizado nas estruturas condicionais ("Se..ento..seno") = Conector utilizado quando preciso particionar o diagrama = Preparao utilizado em laos de repetio do tipo "Para..de..at..faa"

>> Pseudocdigo:
Esta forma de representao de algoritmos, tambm conhecida como Portugus Estruturado ou Portugol, bastante rica em detalhes e, por assemelhar-se bastante forma em que os programas so escritos, ser juntamente com o Fluxograma, a forma de representao de algoritmos a ser adotada nesta disciplina. Estrutura de Um Algoritmo na Forma de Pseudocdigo Algoritmo <nome_do_algoritmo> Var <declarao_de_variveis> Incio <corpo_do_algoritmo> Fim. "Algoritmo" uma palavra que indica o incio da definio do algoritmo em forma de pseudocdigo. "<nome_do_algoritmo>" no lugar deste, deve ser colocado o nome simblico do algoritmo, o que ir distingui-lo dos demais. "<declarao_de_variveis>" parte do algoritmo onde devem ser declaradas as variveis utilizadas no algoritmo. Esta parte ser detalhada mais adiante. "Incio" e "Fim." so respectivamente as palavras que delimitam o incio e o trmino do conjunto de instrues do corpo do algoritmo.

Exemplo de um Algoritmo que calcula a mdia de duas notas, que devem ser digitados pelo Usurio ao executar o programa, e ao final mostra se houve aprovao ou no, segundo um critrio estabelecido. Algoritmo Media Var N1, N2, Media: Real; Incio Leia (N1, N2); Media = (N1+N2)/2; Se Media >= 7 Ento Escreva ("Aprovado"); Seno Escreva ("Reprovado"); Fim_se Fim.

Tipos de Dados
Todo o trabalho realizado por um computador baseado na manipulao das informaes contidas em sua memria. Estas informaes podem ser classificadas em dois tipos: As instrues, que comandam o funcionamento da mquina e determinam a maneira como devem ser tratados os dados. Os dados propriamente ditos, que correspondem poro das informaes a serem processadas pelo computador. Para que sejam manipulados pelo processador, os dados devem ser declarados no incio do programa, a fim de que o compilador conhea os tipos e os nomes das variveis que contemplaro estes dados.

>> Tipos Inteiros:


So os dados numricos positivos ou negativos excluindo-se destes qualquer nmero fracionrio. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, 234, -56, 1024 entre outros.

>> Tipos Reais:


So os dados numricos positivos e negativos, incluindo-se os nmeros fracionrios. Como exemplo deste tipo de dado, tem-se os valores: 35, 0, -56, 1.2, 234.18, -45.8987 entre outros.

>> Tipos Caracteres:


So as seqncias contendo letras, nmeros e smbolos especiais. Uma seqncia de caracteres deve ser indicada entre aspas (""). Este tipo de dado tambm conhecido como Alfanumrico, String, Literal ou Cadeia. Como exemplo deste tipo de dado, tem-se os valores: "Programao", "Rua Alfa, 52 Apto 1", "Fone 574-9988", "04387-030", " ", "7" entre outros.

>> Tipos Lgicos:


So os dados com valor "verdadeiro" ou "falso", sendo que este tipo de dado poder representar apenas um dos dois valores. Ele conhecido tambm por tipo "booleano", devido contribuio do filsofo e matemtico ingls George Boole na rea da lgica matemtica.

Conceito e Utilidade de Variveis


Basicamente, uma varivel possui trs atributos: um nome, um tipo de dado associado mesma, e um valor por ela guardado. Toda varivel possui um nome que tem a funo de diferenci-la das demais. Cada linguagem de programao estabelece suas prprias regras de formao de nomes de variveis.

Adotaremos para os algoritmos, as seguintes regras para nome de varivel: - deve necessariamente comear com uma letra; - no deve conter nenhum smbolo especial, exceto o "underline" (_); - no deve conter nenhum espao em branco; - no deve ser uma palavra acentuada; - no poder ser uma palavra reservada a uma instruo de programa. Obviamente interessante adotar nomes relacionados s funes que sero exercidas pela varivel dentro de um programa. Outro atributo caracterstico de uma varivel o "tipo" do dado que ela pode armazenar. Este atributo define a natureza das informaes contidas na varivel. Por ltimo h o atributo "valor", que nada mais do que a informao til contida na varivel. Uma vez definidos os atributos "nome" e "tipo de dado" de uma varivel, estes no podem ser alterados, e assim permanecem durante toda a sua existncia no programa. Por outro lado, o atributo "valor" est constantemente sujeito a mudanas de acordo com o fluxo de execuo do programa (por ser uma "varivel"). Em resumo, o conceito de varivel foi criado para facilitar a vida dos programadores, permitindo acessar informaes na memria dos computadores por meio de um nome, em vez do endereo de uma clula de memria.

Declarao de Variveis em Algoritmos


Todas as variveis utilizadas em algoritmos devem ser declaradas antes de serem utilizadas. Isto se faz necessrio para permitir que o compilador reserve um espao na memria para as mesmas. Nos algoritmos, todas as variveis utilizadas sero declaradas no incio do mesmo, por meio de um comando que pode ser escrito em uma das seguintes formas: VAR <nome_da_varivel> : <tipo_da_varivel>; ou <lista_de_variveis> : <tipo_das_variveis>; Observaes: - numa mesma linha podero ser definidas uma ou mais variveis do mesmo tipo. Se forem vrias, estas devem estar separadas por vrgulas; - variveis de tipos diferentes devem ser declaradas em linhas diferentes.

Operadores
Operadores so elementos fundamentais que atuam sobre operandos e produzem um determinado resultado. Por exemplo, a expresso 3 + 2 relaciona dois operandos (os nmeros 3 e 2) por meio do operador (+) que representa a operao de adio. Pode-se classificar os operadores levando-se em considerao o tipo de dado de seus operandos, e do valor resultante de sua avaliao. Sendo assim, dividem-se em Operadores "de Atribuio", "Aritmticos", "Relacionais", "Lgicos" e "Literais".

>> Operador de Atribuio:


Um operador de atribuio serve para atribuir um valor a uma varivel. Neste curso o operador de atribuio ser o "sinal de igual": = Sendo assim, a sintaxe de um comando de atribuio ser: NomeDaVarivel = expresso;

A expresso localizada no lado direito do sinal de igual avaliada, e seu valor resultante armazenado na varivel que est esquerda.
"O nome da varivel que recebe o valor deve aparecer sempre sozinho, no lado esquerdo do sinal de igual deste comando."

Exemplos: a = 3; nota1 = 8.5; media = (nota1 + nota2) / 2; v = v0 + a * t; salFinal = sal * perc / 100;

>> Operadores Aritmticos:


Os operadores aritmticos relacionam as operaes aritmticas bsicas, conforme a tabela abaixo: Operador + * / DIV MOD ** Operao adio subtrao multiplicao diviso parte inteira de uma diviso resto de uma diviso potenciao (ou exponenciao) Prioridade 3 3 3 3 2 2 1

Obs.: A prioridade (ou hierarquia) entre operadores define a ordem em que os mesmos sero avaliados (e executados) dentro de uma mesma expresso.

>> Operadores Relacionais:


Os operadores relacionais so operadores binrios que "devolvem" os valores lgicos "verdadeiro" e "falso". Obs.: a palavra "devolvem" indica que uma operao com Operadores Relacionais tem como possveis resultados apenas 2 valores: "verdadeiro" ou "falso". Operador < > <= >= != == Operao menor que maior que menor ou igual a maior ou igual a diferente de igual a

Estes valores so somente usados quando se deseja efetuar comparaes. Comparaes s podem ser feitas entre objetos de mesma natureza, isto , variveis do mesmo tipo de dado. Por exemplo, digamos que a varivel inteira "num" contenha o valor 7(sete). Assim as expresses a seguir fornecem cada uma, um valor lgico, sendo falso a primeira, e verdadeiro a segunda: num <= 5 num > 5 Operaes que utilizam operadores relacionais so como perguntas, cuja resposta ser sempre "No" ou "Sim"; "Falso" ou "Verdadeiro"; "0" ou "1". Ex.: se num for igual a 7(sete), ento: num <= 5 ? ... No (Falso) num > 5 ? ... Sim (Verdadeiro)

>> Operadores Lgicos:


Os operadores lgicos ou booleanos so usados para combinar expresses relacionais. Tambm devolvem como resultado valores lgicos "verdadeiro" ou "falso".

Operador OU E NO Fornecendo dois valores ou expresses lgicas, representadas por expresso1 e expresso2, podemos descrever as quatro operaes lgicas a seguir: expresso1 E expresso2 verdadeiro somente se ambas, expresso1 e expresso2, forem verdadeiras. Se uma for falsa, ou se ambas forem falsas, a operao "E"como um todo tambm ser falsa. expresso1 OU expresso2 verdadeiro se tanto a expresso1 como a expresso2 forem verdadeiras. As operaes "OU" s resultam em valores falsos se ambas, expresso1 e expresso2, forem falsas. NO expresso1 verdadeiro se expresso1 for falsa; de modo contrrio, a expresso "NO expresso1" resultar em falso, se expresso1 for verdadeira. Ou seja, a expresso NO expresso1 resulta na negao da expresso1. Tabela Verdade: A 0U B AEB NO A V V F V F F V F V F F V

A V V F F

B V F V F

NO

F V F V

>> Operadores Literais:


So os operadores que atuam sobre caracteres. Eles variam muito de uma linguagem para outra. O operador mais comum, e mais usado, o operador que faz a concatenao (unio) de strings: ou seja, tomando-se duas strings e unindo-se (concatenando-se) a segunda ao final da primeira. Podem-se utilizar dois operadores que fazem esta operao de unio de caracteres: o "sinal de mais", ou a "vrgula". Por exemplo, a concatenao das strings "ALGO" e "RITMO" pode ser representada por: "ALGO" + "RITMO" ou "ALGO", "RITMO" ...e o resultado de sua avaliao : "ALGORITMO" Nesta Apostila ser adotada a "vrgula" como operadora de concatenao.

Funes Matemticas
Abaixo, esto enumeradas algumas Funes Matemticas que podero ser abordadas e utilizadas em exerccios neste curso: ABS (x) SEN (x) COS (x) TAN (x) EXP (x) LN (x) PI Retorna Retorna Retorna Retorna Retorna Retorna Retorna o o o o o o o valor absoluto (positivo) de uma expresso valor do seno valor do cosseno valor da tangente valor exponencial (ex - sendo "e" o no de Euler) logaritmo natural (logaritmo neperiano) valor de PI (3.1415...)

Exemplos de expresses que utilizam estas funes matemticas: val1 = SEN (4*x); val2 = ABS (val1); val3 = PI * SEN (x + 1); val4 = 2 * a * EXP (x + TAN (y)); val5 = LN (x ** 2) + 3 * COS (x 2);

Expresses
O conceito de "expresso", em termos computacionais, est intimamente ligado ao conceito de expresso ou frmula matemtica, onde um conjunto de variveis e constantes numricas relacionase por meio de operadores aritmticos compondo uma frmula que, uma vez avaliada, resulta num valor. Expresses aritmticas so aquelas cujo resultado da avaliao do tipo numrico, seja ele inteiro ou real. Somente o uso de funes, operadores aritmticos, variveis numricas e parnteses permitido em expresses deste tipo.
"Toda expresso aritmtica deve estar linearizada, ou seja, representada inteiramente em apenas uma linha."

As seguintes regras so essenciais para a correta avaliao de expresses: 1. Deve-se observar a prioridade dos operadores, conforme mostrado nas tabelas de operadores: (obs.: operadores de maior prioridade devem ser avaliados primeiro. Se houver empate com relao precedncia, ento a avaliao se faz da esquerda para a direita). 2. Os parnteses usados em expresses tem o poder de "roubar" a prioridade dos demais operadores, forando a avaliao da subexpresso em seu interior, independente de qual seja. 3. Entre os quatro principais grupos de operadores existentes, a saber, aritmtico, lgico, literal e relacional, h uma certa prioridade de avaliao: os aritmticos e literais devem ser avaliados primeiro; a seguir, so avaliadas as sub-expresses com operadores relacionais e, por ltimo so avaliados os operadores lgicos.

Comandos de Entrada de Dados


Os comandos de entrada de dados so o meio pelo qual as informaes dos usurios so transferidas para a memria dos computadores, para que possam ser usadas nos programas. No diagrama de blocos o comando de entrada de dados representado por: = Operaes de entrada de dados via teclado Em Portugus Estruturado h duas sintaxes possveis para esta instruo: LEIA (<varivel>) Ex: LEIA (X) LEIA (<lista_de_variveis>) Ex: LEIA (nome, endereco, cidade) Obs.: A lista_de_variveis um conjunto de um ou mais nomes de variveis separados por vrgulas. No diagrama, as variveis que devem receber os valores devem ser descritas dentro do smbolo:
X nome, endereco, cidade

OU

Comandos de Sada de Dados


Os comandos de sada de dados so o meio pelo qual informaes contidas na memria dos computadores so colocadas nos dispositivos de sada, para que os usurios possam apreci-las. No diagrama de blocos o comando de sada de dados representado por: = Operaes de sada de dados em vdeo (monitor) Em Portugus Estruturado h quatro sintaxes possveis para esta instruo: ESCREVA (<varivel>); Ex: ESCREVA (X); ESCREVA (<lista_de_variveis>); Ex: ESCREVA (nome, endereco, cidade); ESCREVA (<literal>); Ex: ESCREVA ("Algoritmo o mximo!"); ESCREVA (<literal>, <varivel>, ... ,<literal>, <varivel>); Ex: ESCREVA ("Meu nome : ", nome, "e meu endereo : ", endereco); No Fluxograma, os valores que devem ser mostrados na tela devem ser descritos dentro do smbolo:
X "Valor da mdia: ", media

OU Uma <lista_de_variveis> um conjunto de nomes de variveis separados por vrgulas. Um literal simplesmente um dado do tipo literal (string ou cadeia de caracteres) delimitado por aspas. H ainda a possibilidade de se misturar nomes de variveis com literais na lista de um mesmo comando. O efeito obtido bastante til e interessante: a lista lida da esquerda para a direita e cada elemento da mesma tratado separadamente; se um nome de varivel for encontrado, ento o valor da mesma colocado no dispositivo de sada; no caso de um literal, o mesmo escrito diretamente no dispositivo de sada (na tela). Exemplo: algoritmo que calcula o preo total de acordo com a quantidade de produto comprada. Algoritmo exemplo_comando_de_entrada_de_dados Var preco_unit, preco_tot : Real; quant : Inteiro; Incio Leia (preco_unit, quant); preco_tot = preco_unit * quant; Escreva (preco_tot); Fim.

Estruturas Condicionais:
(Comandos de Deciso) Neste tipo de estrutura o fluxo de instrues a ser seguido escolhido em funo do resultado da avaliao de uma ou mais condies. Uma condio uma expresso lgica. A classificao das estruturas de deciso feita de acordo com o nmero de condies que devem ser testadas para que se decida qual o caminho a ser seguido. Segundo esta classificao, tm-se 3 tipos de estruturas de deciso: - Estrutura de Deciso Simples (Se..ento..fim_se) - Estrutura de Deciso Composta (Se..ento..seno..fim_se) - Estrutura de Deciso Mltipla (Se..ento..seno se..ento ... fim_se) Uma Estrutura de deciso inicia-se na palavra reservada "SE" (inicial), e termina na palavra reservada "FIM_SE".

>> Estruturas de Deciso Simples (Se..ento..fim_se)


Nesta estrutura uma nica condio (expresso lgica) avaliada. Dependendo do resultado desta avaliao, um comando ou conjunto de comandos sero executados (se a avaliao for verdadeira) ou no sero executados (se a avaliao for falsa). No diagrama de blocos a estrutura para instruo "Se..ento..fim_se" representado por:

FALSA CONDIO

VERDADEIRA

INSTRUES

Sintaxe em Portugus Estruturado de uma estrutura de deciso simples: SE <condio> ENTO <instrues>; FIM_SE A semntica desta construo a seguinte: a condio avaliada: Se ela for verdadeira, ento o conjunto de instrues delimitado pelas palavras-reservadas "ENTO" e "FIM_SE" ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps a palavra-reservada "FIM_SE". No caso da condio ser falsa, o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando APS a palavra-reservada "FIM_SE", sem executar o conjunto de instrues entre as palavras-reservadas "ENTO" e "FIM_SE".

Exemplo de algoritmo que l um nmero e escreve se o mesmo maior que 10: Algoritmo exemplo_estrutura_de_deciso_simples Var X : Inteiro; Incio Escreva ("Digite um valor"); Leia (X); Se X > 10 Ento Escreva ("X maior que 10"); Fim_se Fim.

>> Estruturas de Deciso Compostas (Se..ento..seno..fim_se):


Nesta estrutura uma nica condio (expresso lgica) avaliada. Se o resultado desta avaliao for "verdadeiro", um conjunto de instrues ser executado. Caso contrrio, ou seja, quando o resultado da avaliao for "falso", um outro conjunto de instrues ser executado. No diagrama de blocos a estrutura para instruo "Se..ento..seno..fim_se" representado por:

FALSA CONDIO

VERDADEIRA

INSTRUES_2

INSTRUES_1

Sintaxe em Portugus Estruturado de uma estrutura de deciso composta: SE <condio> ENTO <instrues_1>; SENO <instrues_2>; FIM_SE A semntica desta construo a seguinte: a condio avaliada: Se ela for verdadeira, ento o conjunto de "instrues_1" delimitado pelas palavras-reservadas "ENTO" e "SENO" ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps a palavra-reservada "FIM_SE". No caso da condio ser falsa, ento o conjunto de "instrues_2" delimitado pelas palavrasreservadas "SENO" e "FIM_SE" ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps a palavrareservada "FIM_SE".

Exemplo de algoritmo que l um nmero e escreve se o mesmo , ou no, maior que 100: Algoritmo exemplo_estrutura_de_deciso_composta Var X : Inteiro; Incio Leia (X); Se X > 100 Ento Escreva ("X maior que 100"); Seno Escreva ("X no maior que 100"); Fim_se Fim.

>> Estruturas de Deciso Mltiplas (Se..ento..seno se..ento ... fim_se)


Nesta estrutura vrias condies (expresses lgicas) so avaliadas. Se o resultado de uma destas avaliaes for "verdadeiro", apenas o conjunto de instrues daquela condio ser executado. No diagrama de blocos a estrutura para instruo "Se..ento..seno se..ento ... fim_se" representado por:

VERDADEIRA CONDIO_1 INSTRUES_1 FALSA VERDADEIRA nome, INSTRUES_2 nome, VERDADEIRA nome, FALSA INSTRUES_3 nome,

CONDIO_2 FALSA

INSTRUES_N nome,

Sintaxe em Portugus Estruturado de uma estrutura de deciso mltipla: SE <condio_1> ENTO <instrues_1>; SENO SE <condio_2> ENTO <instrues_2>; SENO SE <condio_3> ENTO <instrues_3>; ... SENO <instrues_N>; FIM_SE

A semntica desta construo a seguinte: a 1a condio avaliada. Se ela for verdadeira, ento o conjunto de "instrues_1" ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps a palavra-reservada "FIM_SE". No caso da 1a condio ser falsa, ento a 2a condio avaliada. Se ela for verdadeira, ento o conjunto de "instrues_2" ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps a palavra-reservada "FIM_SE". No caso desta condio ser falsa, ento as seguintes condies so avaliadas em sequncia, at encontrar alguma "verdadeira". Se nenhuma das condies existentes for "verdadeira", o conjunto de "instrues_N" delimitado pelas palavras-reservadas "SENO" e "FIM_SE" ser executado. Ao trmino de sua execuo o fluxo do algoritmo prossegue pela instruo seguinte construo, ou seja, o primeiro comando aps a palavra-reservada "FIM_SE". OBS.: No obrigatria a existncia do conjunto de "instrues_N" delimitado pelas palavrasreservadas "SENO" e "FIM_SE". Exemplo de algoritmo que l um nmero e escreve se o mesmo menor que: 10, 20, 30, ou 40: Algoritmo exemplo_estrutura_de_deciso_multipla Var X : Inteiro; Incio Leia (X); Se X < 10 Ento Escreva ("X menor que 10"); Seno Se X < 20 Ento Escreva ("X menor que 20"); Seno Se X < 30 Ento Escreva ("X menor que 30"); Seno Se X < 40 Ento Escreva ("X menor que 40"); Seno Escreva ("X maior ou igual a 40"); Fim_se Fim.