Académique Documents
Professionnel Documents
Culture Documents
O que nos interessa em uma ao o efeito que ela produz e que possa ser realizada em um perodo de tempo finito.
Um algoritmo pode ser descrito como um padro de comportamento, expresso em termos de um repertrio bem definido e finito de aes primitivas, das quais sabemos que podem ser executadas por um sistema computacional
Algoritmos - resumo
Finitude: Um algoritmo deve sempre terminar aps um nmero finito de passos. Definio: Cada passo de um algoritmo deve ser precisamente definido. As aes devem ser definidas rigorosamente e sem ambiguidades. Entradas: Um algoritmo deve ter zero ou mais entradas, isto , informaes que so lhe so fornecidas antes do algoritmo iniciar. Sadas: Um algoritmo deve ter uma ou mais sadas, isto , resultados que tem uma relao especfica com as entradas. Efetividade: Um algoritmo deve ser efetivo. Isto significa que todas as operaes devem ser suficientemente bsicas de modo que possam ser em princpio executadas com preciso em um tempo finito por um humano usando papel e lpis.
11
Representao de Algoritmos
Linguagem Natural Os algoritmos so expressos diretamente em linguagem natural, como nos exemplos anteriores. Fluxograma Convencional uma representao grfica, que emprega formas geomtricas padronizadas para indicar as diversas aes e decises que devem ser executadas para resolver o problema. Pseudo-linguagem Emprega uma linguagem intermediria entre a linguagem natural e uma linguagem de programao para descrever os algoritmos.
12
Final do domingo.
13
Exemplo de fluxograma
14
Exerccio
Escreva, em linguagem natural, um algoritmo para calcular as razes de uma equao de segundo grau, na forma Ax2 + Bx + C = 0 Para casa: desenhe um fluxograma para a resoluo do mesmo problema
15
Resposta
Algoritmo para clculo de uma equao do segundo grau:
Obter os coeficientes a, b e c; Se o coeficiente a for igual a zero informar que esta no uma equao do segundo grau e terminar o algoritmo; Caso contrrio continue e faa: Calcular delta=b2-4ac ; Se o valor de delta for negativo informar que a equao no tem raizes reais e terminar o algoritmo. Caso contrrio continue e faa:
Calcular a raiz quadrada de delta e guardar o resultado como raiz; Calcular x1=(-b + raiz)/(2a); Calcular x2=(-b - raiz)/(2a); Fornecer como resultado x1 e x2;
Programao Estruturada
A grande dificuldade no desenvolvimento de grandes sistemas de software na enorme complexidade que estes sistemas podem possuir; quanto maior o nmero de tarefas que ele deve desempenhar, maiores as chances de erros serem cometidos em seu desenvolvimento Djikstra foi um dos criadores dos princpios da programao estruturada, que prega os conceitos bsicos para evitar estes problemas, reduzindo a complexidade atravs de trs nveis:
17
Programao Estruturada
Desenvolvimento de programas em diferentes fases por refinamento sucessivo (desenvolvimento top-down) Por exemplo, se estamos desenvolvendo o algoritmo para descascar batatas, uma das operaes :
Traga a cesta com batatas do poro;
S que na verdade, esta operao envolve vrios outros passos, como abrir a porta do poro, acender a luz, descer as escadas, pegar a cesta e outras, mas que sero detalhadas no refinamento sucessivo da instruo
18
Programao Estruturada
Decomposio do programa total em mdulos funcionais, organizados, de preferncia, em um sistema hierrquico
a diviso de tarefas de um programa em subtarefas, cada uma implementando as instrues de uma funcionalidade especfica
Uso dentro de cada mdulo de um nmero muito limitado de estruturas bsicas de fluxo de controle
Desenvolver cada mdulo segundo o conceito de KIS keep it simple (mantenha isto simples)
19
Programao Estruturada
Vantagens do uso da programao estruturada:
Confiabilidade; Manutenibilidade; Flexibilidade.
A programao estruturada ainda contempla a importncia da documentao de sistemas e o fluxo de controle em algoritmos (nunca usar GOTO!)
20
Portugol - Introduo
O Portugol uma pseudo-linguagem de programao, criada a partir de uma combinao do portugus com o Algol e o Pascal Seu objetivo permitir que com um conjunto bsico de comandos seja possvel ao projetista pensar na lgica das instrues para resolver o problema, e no em sua implementao final, mas que no seja muito distante desta
21
Tipos de dados
Os algoritmos iro manipular dados, que normalmente so fornecidos pelos usurios, e ir gerar resultados, que por sua vez devem ser retornados aos usurios. Existem trs tipos bsicos de dados que a linguagem de programao ir manipular:
Dados numricos; Dados alfa-numricos; Dados logicos;
23
Dados numricos
Os dados numricos que os algoritmos podem manipular so de dois tipos:
Dados inteiros Dados reais
O conjunto dos dados inteiros pode ser definido como Z={...,-3,2,0,1,2,...}. O conjunto dos nmeros reais inclui o conjunto dos nmeros inteiros, dos nmeros fracionrios e dos nmeros irracionais. O conjunto dos nmeros fracionrios pode ser formalmente definido como Q={p/q | p,q pertencem a Z}. O conjunto dos nmeros irracionais engloba aqueles que no podem ser representados por uma frao, por exemplo o nmero PI=3.141515... Os nmeros irracionais so armazenados at um certo nmero de casas decimais que o computador consegue representar a partir da as casas decimais so descartadas.
24
Dados alfa-numticos alfaDados alfa-numricos servem para tratamento de textos e normalmente so compostos por uma seqncia de caracteres contendo letras, algarismos e caracteres de pontuao. Nos algoritmos so normalmente representados por uma seqncia de caracteres entre aspas, por exemplo:
"Linguagem de programao" "Qual o seu nome?" "12345"
25
Dados lgicos
Este tipo de dados intensamente aplicado durante o processo de tomada de decises que o computador frequentemente obrigado a fazer. Em muitos textos este tipo de dados tambm chamado de dados booleanos, devido a George Boole, matemtico que deu ao nome lgebra (lgebra booleana) que manipula este tipo de dados. Os dados deste tipo somente podem assumir dois valores: verdadeiro e falso. Computadores tomam decises, durante o processamento de um algoritmo, baseados nestes dois valores.
26
Dados lgicos
Por exemplo, considere a deciso abaixo: Se raiz >= 0 imprima "Existe raiz" caso contrrio imprima "No existe raiz real." Nesta instruo aparece a expresso raiz >= 0, que procura descobrir se o valor de raiz maior que 0. Esta expresso somente pode ter como resultado os valores: verdadeiro ou falso. Nos nossos algoritmos estes valores sero representados por verdadeiro e falso. Mais adiante ficar claro como este tipo de dados ser empregado nos algoritmos.
27
Variveis
Uma varivel pode ser vista como um local onde se pode colocar qualquer valor do conjunto de valores possveis de um dos tipos bsicos listados a seguir. O nome da varivel um identificador para aquela informao A criao de uma varivel corresponde a alocao de um espao na memria principal do sistema computacional, reservado para armazenar um dado, de acordo com o tipo da varivel criada
28
Variveis
Devemos criar somente variveis que sero de fato utilizadas, e do tipo adequado, para no usar memria de forma desnecessria Tipos de variveis do portugol:
Inteiro: qualquer nmero inteiro, negativo, nulo ou positivo. Ex.: -5, 0, 235 Real: qualquer nmero real, negativo, nulo ou positivo. Ex.: -5,7, 0, 60, 43,7 Caracter: qualquer conjunto de caracteres alfanumricos. Ex.: XYZ, Joo, Informtica Lgico: conjunto de valores verdadeiro ou falso em proposies lgicas
29
Variveis
Uma varivel, para existir, deve ser declarada Ao ser declarada, um espao na memria reservado para esta varivel, e podemos utiliz-la para armazenar dados A declarao da varivel feita no comeo de um algoritmo, especificando seu nome e tipo
Exs.: inteiro: X1; real: A, B; caracter: FRASE, NOME; lgico: TEM;
30
Expresses aritmticas
Expresses aritmticas so aquelas que apresentam como resultado um valor numrico que pode ser um nmero inteiro ou real, dependendo dos operandos e operadores. As expresses que podem ser utilizadas dependem da linguagem de programao utilizada, apesar de todas reconhecerem as operaes elementares:
Operador + * / Descrio Soma Subtrao Multiplicao Diviso
31
Expresses lgicas
Expresses lgicas so aquelas cujo resultado pode somente assumir os valores verdadeiro ou falso. As operaes bsicas so:
Operador ou e no Descrio Ou lgico E lgico No lgico
32
Expresses lgicas
Estes operadores e seus dados tambm possuem uma espcie de tabuada que mostra os resultados de operaes bsicas. A Tabela a seguir mostra os resultados da aplicao destes operadores duas variveis lgicas.
A falso falso verdadeiro verdadeiro B falso verdadeiro falso verdadeiro A ou B falso verdadeiro verdadeiro verdadeiro Ae B falso falso falso verdadeiro no A verdadeiro verdadeiro falso falso
33
Operadores relacionais
Frequentemente so utilizados em operaes lgicas; o resultado de sua aplicao ser verdadeiro ou falso
Operador > < >= <= == != (ou <>) Descrio maior que menor que maior ou igual a menor ou igual a igual a diferente de
34
Comandos bsicos
Comandos de atribuio: para atribuir um valor a uma varivel, utilizado o smbolo de atribuio .
Exs.: X1 5; A 3,7; B - 76,1; NOME Joo da Silva; TEM falso;
35
Observaes
Uma maneira comum de exibir valores numricos reais com muitas casas decimais utilizando a letra E, que indica a potncia de 10 que deve multiplicar o nmero que a precede
Ex. 315.21E3 = 315,21 x 10-3 = 0,31521
Toda linguagem de programao possui um conjunto de palavras reservadas, que so identificadores que s podem ser utilizados com um sentido pr-estabelecido pela linguagem, logo, no podem ser utilizadas como nomes de variveis
38
Estruturas de um algortimo
Blocos de comandos: um bloco pode ser definido como um conjunto de comandos com uma funo bem definida. Ele tambm serve para definir os limites onde as variveis declaradas em seu interior so conhecidas. Um bloco apresenta a seguinte estrutura:
algoritmo exemplo <declaraes de variveis> incio <comandos> fimalgoritmo
39
Estruturas de um algortimo
Sequncia simples: um conjunto de comandos, separados por ponto e vrgula (;), que sero executados numa seqncia linear, de cima para baixo.
comando 1; comando 2; comando 3; ...
40
Estruturas de um algortimo
Exemplo:
algoritmo calcula_valores var faltas: inteiro nota1, nota2, media: real nome_do_aluno: caracter passou: logico incio faltas 5; nome_do_aluno Joo da Silva media (nota1 + nota2)/2 passou verdadeiro fimalgoritmo
41
Estruturas de um algoritmo
Condicional: quando a ao a ser executada depender de uma inspeo ou teste, cujos resultados possveis so verdadeiro ou falso, teremos uma alternativa simples ou composta
se < condio > entao
comando 1; comando 2; ...
fim se;
42
Estruturas de um algoritmo
Por exemplo, considere novas instrues para a dona-de-casa descascando batatas:
Se o nmero de batatas insuficiente ento descasque mais uma batata;
Esta instruo do tipo condicional, ou seja, a ao descasque mais uma batata; s ser realizada se a condio se o nmero de batatas insuficiente for verdadeira, caso contrrio, nada feito nesta linha e o fluxo de execuo do algoritmo ir para a prxima linha de instruo do programa
43
Estruturas de um algoritmo
Exemplo:
algoritmo aprova_aluno var nota1, nota2, media: real passou: logico incio media (nota1 + nota2)/2 se (media 6) entao passou verdadeiro fimse fimalgoritmo
44
Estruturas de um algoritmo
Ainda sobre o desvio condicional, caso existam duas possibilidades para uma condio e uma delas falsa, e isto imediatamente faz da outra verdadeira, usada a clusula de seno para a execuo de uma instruo relacionada a outra possibilidade
Exemplo:
se ainda existem mais batatas na cesta ento descasque mais uma batata; seno busque mais batatas no poro; fim-se;
Estruturas de um algoritmo
Condicional composta:
se < condio > entao comando 1 ... senao comando 2 ... fimse;
46
Exemplo
algoritmo teste var A, B: inteiro incio A1 B2 se A > B entao A5 senao A 10 fimse fimalgoritmo
47
Exerccios
1.
2.
3.
Escreva um algoritmo que compare o valor de duas variveis inteiras, x e y, e armazene em uma varivel inteira z o maior dentre os dois valores Escreva um algoritmo que, dado os valores dos catetos a e b de um tringulo retngulo, calcule o valor de sua hipotenusa, c (a, b e c so variveis inteiras) Escreva um algoritmo que a partir de um nmero inteiro armazenado na varivel x, verifique se trata-se de um nmero par ou mpar, armazenando o resultado nas variveis lgicas par ou mpar
48
Respostas exerccio 1
algoritmo verifica_maior var x, y, z: inteiro incio se (x > y) entao zx senao zy fimse fimalgoritmo
49
Respostas exerccio 2
algoritmo pitagoras var a, b: inteiro c: real incio a a*a b b*b c a+b c raizq (c) fimalgoritmo
50
Respostas exerccio 3
algoritmo par_ou_impar var x: inteiro par, impar: logico incio se ( (x mod 2) = 0) entao par verdadeiro impar falso senao par falso impar verdadeiro fimse fimalgoritmo
51
Estruturas de um algoritmo
No caso de um nmero limitado e bem-definido de opes, onde somente uma pode ser verdadeira, podemos usar a estrutura caso, que seleciona uma dentre vrias opes
escolha <varivel>
caso opo 1 comandos... caso opo 2 comandos... ... outrocaso comandos...
fimescolha
52
Estruturas de um algoritmo
O que fazer quando uma mesma instruo deve ser repetida vrias vezes? possvel repetir o mesmo comando muitas vezes, mas no uma forma elegante de se resolver o problema
Traga a cesta com batatas do poro; Traga a panela do armrio; Descasque uma batata; Descasque uma batata; ... Descasque uma batata;
53
Estruturas de um algoritmo
Em algoritmos temos instrues de repetio, que executam uma mesma instruo (ou conjunto de instrues) diversas vezes, at que uma condio seja atendida. Por exemplo:
enquanto o nmero de batatas no for suficiente descasque uma batata; fimenquanto;
54
Exemplo
Algoritmo numeros var A, B, I, C: inteiro inicio A 1 B 1 C 1 enquanto I < 18 faa CA+B BC AB +1 I I+1 fimenquanto fimalgoritmo
55
Estruturas de um algoritmo
O uso do enquanto para repetio apenas uma das opes disponveis. Temos ainda os comandos repita e para ... faa, exemplificados a seguir:
repita comando 1; comando 2; ... at < condio >
56
Estruturas de um algoritmo
Observe que a alterao da condio que controla a repetio dos comandos deve ser alterada pelas instrues do programa e/ou seus respectivos resultados, para que em algum momento da execuo a condio no seja mais atendida e o programa deixe aquela estrutura de repetio Estruturas de repetio que so executadas infinitamente so chamadas de lao (ou loop) e constituem um erro de programao, pois se repetem indefinidamente, consumindo recursos computacionais e no obtendo uma soluo para o problema
57
Estruturas de um algoritmo
H ainda a estrutura de para ... faa, que obedece a sintaxe a seguir:
para <varivel de controle> de <valor inicial> at <valor final> (passo n) faa
comando 1; comando 2;
fimpara;
A varivel de controle apenas uma varivel comum, que a toda interao atualizada e testada para verificar se seu valor ainda est entre o intervalo definido por <valor inicial> e <valor final>
58
Estruturas de um algoritmo
A definio do passo opcional, caso seja realmente usado o incremento padro de +1 a cada iterao. Caso o valor do incremento seja qualquer outro nmero, positivo ou negativo, diferente de 1, necessrio explicit-lo
para i de 1 at 99 passo 2 faa escreval (Nmero mpar:, i) fimpara
No uso do para ... faa, o incremento da varivel de controle feito automaticamente, cabendo ao programador apenas definir o passo, se necessrio
59
Estruturas de um algoritmo
OBS: em algumas linguagens de programao, est disponvel a clusula step seguida de um nmero para a definio do passo, mas no no Pascal. Nele esto disponveis as clusulas to e downto, que fazem, respectivamente, o incremento por +1 e -1
60
Mostrar na tela a mensagem A nota final do aluno e 8, que combina um texto fixo com o valor que a varivel nota armazena naquele instante
62
Os comandos acima exibiro a mensagem Digite o nome do aluno: e em seguida ficar aguardando at que o usurio digite o dado solicitado e aperte a tecla enter; o dado digitado ser armazenado na varivel nome_aluno
63
Exemplo
Algoritmo soma_valores var valor, soma: inteiro inicio soma 0 leia (valor) enquanto valor -1 faa soma soma + valor leia (valor) fimenquanto escreva (o valor da soma e igual a , soma) fimalgoritmo
64
65
Anlise de um algoritmo
Um algoritmo pode ser analisado sob vrios aspectos, dentre os quais so considerados os mais relevantes:
Atinge os objetivos propostos; Est correto; Possui boa documentao; Possui mdulos funcionais corretos O cdigo est inteligvel; Possui bom desempenho.
67
Observaes
Muitos exerccios utilizam os seguintes termos:
Entrada padro: quer dizer que os dados de entrada sero fornecidos atravs de digitao, via teclado Sada padro: significa que os resultados produzidos pelo algoritmo devem ser exibidos na tela do computador Flag: trata-se de um valor (ou texto) que, ao ser gerado, indica o trmino de uma tarefa, por exemplo, a entrada de dados. uma condio de parada
68
Observaes finais
Use sempre que possvel expresses aritmticas pr-definidas pela linguagem de programao, algumas das mais comuns so: A div B: quociente da diviso de A por B A mod B: resto da diviso de A por B sqrt (A): raiz quadrada de A round (A): arrendonda o valor real de A trunc (A): trunca o valor real de A
69
Exerccios
1.
Dado um conjunto de valores inteiros e positivos, perfurados em cartes, determine o valor da soma destes elementos. Um carto perfurado com o valor -1 (flag) indica o fim dos dados, e no deve ser considerado. Dado um conjunto de valores inteiros e positivos, perfurados em cartes, determine qual o menor valor do conjunto. Um carto perfurado com o valor -1 (flag) indica o fim dos dados, e no deve ser considerado.
70
2.
Exerccios
3.
Achar o menor e o maior nmero de uma srie de nmeros positivos fornecidos por cartes (existe pelo menos 1 carto). Um carto perfurado com o valor -1 (flag) indica o fim dos dados, e no deve ser considerado. Dado um conjunto de valores inteiros e positivos, perfurados em cartes, determine a mdia destes valores. Um carto perfurado com o valor -1 (flag) indica o fim dos dados, e no deve ser considerado.
71
4.
Exerccios
5.
Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou no de um novo produto lanado. Para isto, perguntou o sexo do entrevistado e sua resposta (sim ou no). Para uma amostra de 2000 pessoas, escreva um algoritmo que calcule e escreva:
O nmero de pessoas que responderam sim; O nmero de pessoas que responderam no; A porcentagem de mulheres que responderam sim; A porcentagem de homens que responderam no.
72
Exerccios
6.
7.
Escreva um algoritmo que calcule e escreva o nmero de gros de arroz que podem ser colocados em um tabuleiro de xadrez, colocando 1 no primeiro quadrado e nos quadrados seguintes o dobro do quadrado anterior Escreva um algoritmo que calcule o valor do somatrio:
2 2 2 2 S= + + + ... + 50 49 48 1
50
73
Exerccios
8.
Escreva um algoritmo que calcule o fatorial de um nmero inteiro. Uma pesquisa para determinar algumas caractersticas fsicas da populao de uma cidade coletou os seguintes dados:
Sexo (masculino, feminino); Cor dos olhos (azuis, verdes, castanhos, pretos); Cor dos cabelos (louros, castanhos, pretos, ruivos); Idade, em anos;
9.
Para cada habitante, foi digitada uma linha com estes dados e a ltima linha, que indica o fim da entrada de dados, conter o valor de idade igual a -1. Escreva um algoritmo que determine:
74
Exerccios
A maior idade dos habitantes; A porcentagem de cada cor de olhos; A porcentagem de indivduos do sexo feminino cuja idade est entre 18 e 35 anos, inclusive, e que tenham olhos verdes e cabelos louros.
10.
Escreva um algoritmo que, para um determinado nmero inteiro de dias informado, calcule a quantidade de horas, minutos e segundos correspondentes.
75
Exerccios
11.
Escreva um algoritmo que leia a altura das moas inscritas em um concurso de beleza. O flag de trmino de dados ser uma altura igual a zero. Calcule as duas maiores alturas e quantas moas as possuem. Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a massa inicial, em gramas, escreva um algoritmo que determine o tempo necessrio para que esta massa se torne menor do que 0,5 grama. Escreva a massa inicial, a massa final, e o tempo, calculado em horas, minutos e segundos.
76
12.