Sunteți pe pagina 1din 20

Apontamentos

Disciplina Curso Matria

: Algoritmia e Programao (APROG) : Engenharia Electrotcnica e de Computadores - Bolonha : Algoritmia

Dulce Mota 2009/10

Algoritmia

Apresentao
Cada vez mais, a programao uma fonte de desafios para muitas pessoas, um recurso indispensvel para outras e ainda, para um ncleo mais restrito, um objecto de investigao. Os domnios de aplicao abarcam variadssimas reas, desde a Simulao, passando pela Realidade Virtual at Arte Digital. Na programao, independentemente da complexidade de cada problema, importante fazer uma anlise o mais completa possvel sobre o mesmo, passando a seguir construo de um algoritmo eficaz e finalmente traduo deste num programa robusto escrito numa dada linguagem de programao. Nesta algoritmos. disciplina sero estudados os mecanismos bsicos para o

desenvolvimento de programas em C, comeando pelo estudo e construo de

Bibliografia
Principal:

Apontamentos das aulas tericas. Linguagem C. Lus Damas FCA. C How to Program. H. M. Deitel, P. J. Deitel.

Suplementar: Sahni Computer Sciences Press.

Fundamentals of Computers Algorithms. Ellis Horowitz, Sartaj

Dulce Mota DEE ISEP-IPP

Algoritmia

Algoritmo

A palavra algoritmo deriva do nome de um famoso matemtico persa Abu Jfar Muhammad ibn (780-850), cujo nome traduzido para latim Algorismus. Este matemtico autor do primeiro tratado de lgebra: Hisab al-jabr walmuqabala (escrito cerca de 825). -lhe atribudo o processo de construo de regras passo-a-passo para adicionar, subtrair, multiplicar e dividir nmeros decimais. Por volta do ano 400 e 300 a.C., o matemtico grego Euclides inventou um algoritmo para encontrar o mximo divisor comum de dois inteiros positivos. O algoritmo de Euclides considerado o primeiro algoritmo no trivial alguma vez inventado. O conceito de algoritmo s foi formalizado em 1936 por meio da mquina de Turing, concebida pelo matemtico britnico Alain Turing (1912-1954) e pelo Clculo Lambda do matemtico norte-americano Alonzo Church (1903-1995), cientistas de grande relevo na construo das fundaes da Cincia da Computao. Em termos prticos, o conceito de algoritmo pode ser comparado ao conceito de uma receita, pelo que est subjacente a ordenao de um conjunto de aces que levam concretizao de um determinado objectivo. De um modo mais formal, um algoritmo pode ser definido como uma sequncia ordenada de passos, no ambgua, conducente soluo de um problema. Em termos computacionais, um algoritmo pode ainda ser definido como um conjunto finito e ordenado de instrues que transformam um conjunto de dados (input), num conjunto de valores (output).

Dulce Mota DEE ISEP-IPP

Algoritmia

A questo relativa ordem das aces de extrema importncia. Imaginemos um algoritmo simples para descrever a tarefa: fazer um telefonema. Levantar auscultador; Marcar nmero; Falar; Pousar auscultador. A troca, por exemplo, da primeira tarefa com a segunda, levaria de imediato ao insucesso do procedimento. Os algoritmos podem ser descritos em diferentes formalismos. Sero analisados, os trs seguintes formalismos: linguagem natural, linguagem grfica e pseudocdigo. Dependendo da tarefa a resolver, a construo de algoritmos implica a escolha de uma estratgia para descrever as aces a realizar. Uma estratgia muito utilizada na construo de algoritmos Dividir para Conquistar. Esta estratgia consiste em dividir uma tarefa sucessivamente em tarefas mais pequenas. Trata-se de uma abordagem do tipo Top-Down, isto , comeando por uma tarefa geral (topo da hierarquia) vamos criando (sentido descendente na hierarquia) subtarefas fazendo descries cada vez mais detalhadas at a um nvel de profundidade (interior da hierarquia) satisfatrio. O grau de profundidade de detalhe deve ser o necessrio para que o receptor da mensagem a consiga executar com sucesso. No caso do receptor ser uma mquina, tambm a mensagem ter de lhe ser dada com o grau de detalhe exigido, de modo que a mquina consiga resolver a tarefa proposta.

Dulce Mota DEE ISEP-IPP

Algoritmia

Exemplos:
1. Colocar a tbua pequena sobre a grande 2. Rodar a tbua pequena sobre a grande 3. Repetir passo 2 at a tbua pequena fazer um ngulo recto com a grande 4. Encostar o centro da tbua pequena ao cimo da grande 5. Descrever um quadrado para pregar 4 pregos, um prego por vrtice. 6. Repetir para cada prego 6.1 Encostar prego 6.2 Bater com o martelo no prego 6.3 Repetir passo 6.2 at o prego estar bem colocado Algoritmo: Pregar duas tbuas de madeira em T usando 4 pregos (retirado das aulas prticas de APROG,DEE-ISEP). 1. Abrir a porta 2. Aguardar hora de incio de sesso 3. Repetir passo 2 enquanto no for incio de sesso 4. Fechar a porta 5. Aguardar sesso terminar 6. Repetir passo 5 enquanto a sesso no terminar 7. Abrir a porta 8. Aguardar que as pessoas saiam 9. Repetir passo 7 enquanto a sala no estiver vazia 10. Limpar sala 11. Fechar a porta Algoritmo: Utilizao de uma sala de cinema (retirado das aulas prticas de APROG, DEE-ISEP).

Dulce Mota DEE ISEP-IPP

Algoritmia

Formalismos
A construo de programas computacionais implica o conhecimento da sintaxe da linguagem de programao escolhida, da estrutura do programa, do vocabulrio permitido, entre outros aspectos. Mas, este conhecimento serve de pouco se no se conseguir descrever uma sequncia lgica de aces. A metodologia adoptada para a construo dos programas contempla os seguintes passos: Compreenso do problema; Concepo do algoritmo; Implementao do algoritmo; Teste do programa. No primeiro passo, feita a anlise do problema no que respeita definio: Dos dados necessrios ao problema; Dos resultados que se pretendem obter; Das restries, no caso de existirem, a cumprir. No segundo passo, preciso definir a sequncia de aces que levam resoluo do problema. Esta sequncia de aces pode ser concretizada utilizando diversos formalismos. Os formalismos mais comuns usados para descrever os algoritmos so: a Linguagem Natural, a Linguagem grfica, mais especificamente, o fluxograma, e o Pseudocdigo. Na tabela seguinte, apresentado um exemplo de cada (tenta dar a tua interpretao para cada um).

Dulce Mota DEE ISEP-IPP

Algoritmia

1. Levantar o auscultador. 2. Marcar nmero. 3. Se ligao estiver ocupada ento pousar auscultador e voltar a ligar (ir para o passo 1). 4. Falar. 5. No final da conversao pousar auscultador.
Algoritmo escrito em linguagem natural

Algoritmo grfica

escrito

em

linguagem

Algoritmo escrito em pseudocdigo

- Linguagem natural Apesar de nos ser mais familiar, a linguagem natural tem algumas desvantagens na escrita de algoritmos. A principal desvantagem possuir um vastssimo vocabulrio e formas de escrita pouco rgidas. Esta desvantagem traduz-se frequentemente em descries pouco

Dulce Mota DEE ISEP-IPP

Algoritmia

claras. Contudo, este formalismo muito til numa fase inicial do estudo de um problema, uma vez que de fcil leitura e tambm muito acessvel a todos aqueles que no esto muito familiarizados nos domnios da computao. - Linguagem grfica O fluxograma, ou diagrama de fluxos, possui um conjunto restrito de smbolos, cada um com uma funo especfica e inequvoca. A principal desvantagem deste formalismo prende-se com o facto destes diagramas atingirem rapidamente grandes dimenses e o esforo para os desenhar ser tambm proporcionalmente grande. Os smbolos que iremos utilizar na construo de algoritmos so os seguintes:

Os vrios smbolos do diagrama especificam diferentes aces onde o detalhe no a questo mais importante. O incio e o fim do algoritmo so representados com o mesmo smbolo e significam isso mesmo; incio e fim fsico do algoritmo. O smbolo do paralelogramo est associado subtarefa (conjunto de instrues): entrada (leitura) de dados (input). O sentido da entrada de dados de fora para dentro do algoritmo. o algoritmo que procede leitura dos dados. Os dados de

Dulce Mota DEE ISEP-IPP

Algoritmia

entrada podem ser solicitados quer no incio do algoritmo quer durante a sua execuo. Quando solicitados, so indispensveis para que o algoritmo possa executar a sua tarefa. No entanto, nem todos os algoritmos precisam de dados de entrada, o que est muito longe de ser o caso geral. Os dados podem ser introduzidos pelo utilizador, via teclado por exemplo, ou lidos de ficheiros (entre outras possibilidades). O smbolo de sada (escrita) de resultados (output) possui uma forma irregular, muito parecida com uma folha de papel rasgada e significa escrita de informao para perifricos de sada, como por exemplo, ecr, impressora e discos rgidos. O mesmo algoritmo pode escrever informao para um ou mais perifricos de sada. Por sua vez, o losango, smbolo de deciso condicional/repetio, utilizado quando h necessidade do algoritmo tomar decises. As decises podem ser do tipo condicional ou de repetio e ambas permitem alterar o fluxo de execuo, depois de serem validadas uma ou mais condies. Sucintamente, a deciso do tipo condicional traduzida numa estrutura Se <condio> Ento <bloco de aces> Seno <bloco de aces>. A repetio traduzida numa estrutura do tipo Repetir possuindo vrias variantes conforme ser mostrado mais adiante. Estes mecanismos fazem parte dos mecanismos fundamentais para construo de algoritmos. Quanto ao smbolo referente ao processo, utilizado para descrever qualquer outra subtarefa que no possa ser especificada pelos outros smbolos.

Dulce Mota DEE ISEP-IPP

Algoritmia

- Pseudocdigo

O fluxograma e a linguagem natural podem ser considerados formalismos de escrita de mais alto nvel em relao ao pseudocdigo. O pseudocdigo uma linguagem informal e artificial que ajuda os programadores a desenvolver algoritmos. Um algoritmo escrito em pseudocdigo no de fcil leitura por quem no est familiarizado na rea da Algoritmia, uma vez que implica o conhecimento de regras e mecanismos especficos do domnio. Trata-se de uma linguagem simplificada. No linguagem natural e tambm independente das linguagens de programao. No existe uma nica linguagem de pseudocdigo, no entanto, as vrias linguagens traduzem os mesmos mecanismos, inerentes construo de algoritmos, de forma muito semelhante. Estes mecanismos englobam instrues de Leitura, Escrita, Deciso, Repetio e Atribuio. Em relao ao pseudocdigo, que vai ser usado nestes apontamentos, foram adoptadas as seguintes regras de escrita: um algoritmo deve ter um nome seguido de uma breve descrio do que faz. Cada passo pode abarcar uma ou mais aces (i.e. instrues). A numerao dos passos e respectivos comentrios so necessrios para facilitar a manuteno dos algoritmos por parte dos programadores. Finalmente, deve possuir sempre uma sada, o que em termos prticos quer dizer que o algoritmo termina. Na seguinte figura, apresentado um algoritmo escrito segundo as regras acima definidas.

Dulce Mota DEE ISEP-IPP

10

Algoritmia

Comparando os smbolos do fluxograma e do pseudocdigo concluiremos que: o smbolo paralelogramo corresponde instruo Ler; o smbolo que lembra uma listagem, corresponde instruo Escrever; o losango tem correspondncia com um de dois tipos de instrues, designadamente, Se...Ento...Seno e Repetir; o rectngulo abarca qualquer outro tipo de instruo, por exemplo, resoluo de uma expresso aritmtica.

Dulce Mota DEE ISEP-IPP

11

Algoritmia

Caractersticas dos algoritmos


- Propriedades O cientista Donald Knuth listou cinco propriedades que so amplamente aceites como requisitos para a construo de um algoritmo e, por consequncia, todos os algoritmos devem garantir: Finito. Um algoritmo deve terminar ao fim de um conjunto finito de passos. Preciso. Cada passo de um algoritmo deve estar definido sem ambiguidade. A escrita dos passos deve ser rigorosa de modo a no levar a situaes pouco claras durante a execuo de um algoritmo. Entradas. Um algoritmo pode ter zero ou mais entradas de dados. Entradas de dados contemplam dados que so lidos no incio do algoritmo e dados lidos durante a execuo do algoritmo, podendo a leitura ocorrer vrias vezes. Um algoritmo pode no necessitar de dados vindos do exterior. Sadas. Um algoritmo pode ter uma ou mais sadas (lgicas). Eficaz. Um algoritmo deve resolver com sucesso a tarefa para a qual foi criado. A construo de algoritmos implica tambm conhecer o tipo de instrues disponveis que podemos utilizar. Esse conjunto de instrues engloba: Leitura e Escrita. As instrues de leitura e de escrita fazem a ponte do exterior para dentro do algoritmo e do algoritmo para o exterior, respectivamente. Deciso. Trata-se de um mecanismo que permite alterar o fluxo de controlo (ordem pela qual as instrues de um algoritmo so executadas).

Dulce Mota DEE ISEP-IPP

12

Algoritmia

Repetio. Trata-se de um mecanismo de repetio de instrues que tambm permite alterar o fluxo de controlo do algoritmo. Atribuio. Operao elementar que permite alterar o valor de uma varivel.

- Noo de Varivel Em programao, a varivel representa uma entidade na qual possvel guardar temporariamente valores processados durante a execuo de um programa. A analogia entre a varivel e um recipiente (por exemplo, da cozinha) pode servir para uma melhor compreenso deste conceito. Nos recipientes podemos guardar alimentos slidos e lquidos. Existem, conforme sabemos, recipientes apropriados para guardar diferentes tipos de alimentos. Ao longo da sua vida til, um recipiente pode guardar muitos alimentos, mas no desejvel que num preciso momento guarde mais do que um tipo de alimento. Misturar, por exemplo, peixe e carne no mesmo recipiente, seria certamente desastroso. Passando para o domnio da computao, a estrutura mais elementar utilizada para guardar dados a Varivel. A mesma varivel pode guardar vrios valores durante a execuo de um algoritmo, mas somente um valor de cada vez. A execuo de um programa implica, entre outras aces, o armazenamento de todas as instrues de um programa, inclusive as variveis, na memria primria do computador. Fazendo uma analogia entre a memria primria e um armrio de gavetas, uma varivel corresponde a uma ou mais gavetas. Em termos computacionais cada gaveta designada por palavra. Assim, a memria principal dividida num conjunto finito de palavras, isto , posies de memria. Cada palavra possui um endereo de memria.

Dulce Mota DEE ISEP-IPP

13

Algoritmia

Endereo (decimal) Contedo (decimal) . 1100 z 1101 1102 1103 1104 35

Nesta representao da memria, o valor da varivel z 35 o qual est armazenado no endereo 1101. Os dados ou valores no so todos do mesmo tipo e para os programas torna-se necessrio diferenciar os vrios tipos de dados. Os tipos de dados bsicos ou primitivos so: inteiro, real, cadeia de caracteres, lgico e apontador. Por exemplo, uma varivel diz-se do tipo inteiro, se armazena valores do tipo inteiro, do tipo real, se armazena valores do tipo real, e assim por diante.
Dados

Numrico

Cadeia

Lgico

Apontador

Inteiro

Real

Tipo inteiro. Domnio dos valores inteiros. Tipo real. Domnio dos valores reais.

Dulce Mota DEE ISEP-IPP

14

Algoritmia

Tipo cadeia de caracteres. Domnio dos valores alfanumricos (letras, algarismos, espao em branco, entre outros). Tipo lgico. Domnio dos valores booleanos (FALSO e VERDADEIRO). Tipo apontador. Domnio dos endereos de memria. Exemplos: 13 inteiro 5.456 real Joana Maria - cadeia de caracteres 13 - cadeia de caracteres FALSO - Lgico Cada varivel identificada por um nome. Esse nome fica-lhe associado e utilizado para aceder mesma. Existem algumas recomendaes para os nomes das variveis, nomeadamente: O nome de uma varivel deve ter pelo menos um carcter, devendo o primeiro carcter ser uma letra ou o smbolo _ (seguido de pelo menos um carcter) e os restantes caracteres devem pertencer ao conjunto das letras, algarismos, ou mesmo outro carcter do teclado com excepo do espao em branco; Os nomes das variveis devem ser sugestivos. Variveis com o nome MEDIA ou MORADA do uma melhor indicao do tipo de dados que armazenam e, ao mesmo tempo, do significado inerente s mesmas. - Operadores Na Computao, os operadores primitivos vulgarmente especificados so: os aritmticos, os relacionais e os lgicos.

Dulce Mota DEE ISEP-IPP

15

Algoritmia

A cada operador est associada uma prioridade, a qual tem por misso especificar a ordem pela qual as operaes so executadas. Para alm da prioridade, a resoluo de uma expresso de clculo toma em linha de conta a associatividade do operador. Esta necessria quando se torna necessrio sequenciar a ordem das operaes a executar no caso de dois ou mais operadores terem igual prioridade. Na tabela seguinte, apresentado um conjunto dos principais operadores de clculo aritmtico, juntamente com as regras de associatividade. A prioridade diminui medida que se desce na tabela.

Dulce Mota DEE ISEP-IPP

16

Algoritmia

Exemplo:

Operadores relacionais: <= (menor ou igual), >= (maior ou igual), = (igual), (diferente). Operadores lgicos: E (AND), OU (OR), NO (NOT). Do conjunto de operadores primitivos, a operao de atribuio (<-) merece especial destaque no s por ser muito utilizada como tambm pelo seu comportamento particular. Este operador permite substituir o valor corrente de uma varivel por outro valor (operao destrutiva). O valor da varivel fica alterado depois de uma atribuio.

Dulce Mota DEE ISEP-IPP

17

Algoritmia

Em trs momentos diferentes, a varivel X toma sucessivamente os seguintes valores: 0, 2 e 3. As variveis podem fazer parte de expresses. O formato adoptado de escrita das expresses encontra-se exemplificado na figura abaixo, mais especificamente, no lado direito da figura:

12 2 2+3
0 .7 * 8 .5 + 2

(12 2) / (2 + 3)
0 .7 * 8 .5 + 2

X2 + Y

X^2 + Y

Com o objectivo de reduzir o trabalho do programador, os projectistas das linguagens de programao implementam um conjunto vasto e varivel de funes que sendo pr-escritas (buit-in), por exemplo, raiz quadrada (SQRT()), seno (SIN()), podem ser utilizadas num programa sem necessidade de serem implementadas pelo programador. A tabela abaixo, apresenta nomes de funes representativas do conjunto de funes built-in.

Dulce Mota DEE ISEP-IPP

18

Algoritmia

Nome ABS (x) x MOD y SQRT(x) EXP(x) RAND(x) TRUNC(x) ROUND(x) LOG(x) LOG10(x)

Significado Valor absoluto (x= expresso real/inteira) Resto da diviso de x por x Raiz quadrada (x= expresso real/inteira) Exponencial (x= expresso real) Valor aleatrio pertence ao intervalo [0,x] (x= expresso real) Valor truncado (x= expresso real) Valor arredondado (x= expresso real) Logaritmo base e (x= expresso real) Logaritmo base 10 (x= expresso real)

Em seguida, apresentado um algoritmo escrito em pseudocdigo e respectiva traduo para fluxograma.

Dulce Mota DEE ISEP-IPP

19

Algoritmia

Notas complementares: A instruo: Ler(NOTA1,NOTA2,NOTA3) executa a leitura de trs valores (notas de exames, por exemplo) e armazena-os nas variveis NOTA1, NOTA2 e NOTA3, respectivamente. Fornecidos estes valores ao algoritmo, possvel efectuar outras operaes, designadamente, o clculo da mdia, conforme se mostra no passo 20. Onde ser guardado o resultado? Este resultado tem, por sua vez, de ser guardado noutra varivel. A operao neste caso tem de ser a atribuio. Normalmente, os algoritmos so acompanhados de instrues de exibio de mensagens. Neste caso, exibida uma mensagem para um perifrico de sada, por defeito, para o ecr, contendo uma cadeia de caracteres seguida do valor da mdia que foi anteriormente calculado. Para esta operao de escrita recorre-se instruo: Escrever. Os caracteres escritos dentro das plicas fazem parte do texto a ser passado para o perifrico de sada, enquanto que as variveis so substitudas pelos seus contedos. Texto e variveis podem coexistir na instruo de sada mas devem ser separados pelo carcter vrgula.

Dulce Mota DEE ISEP-IPP

20

S-ar putea să vă placă și