Você está na página 1de 120

Lgica de Programao

Ricardo Terra
rterrabh@gmail.com

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

1 / 119

Contedo

Introduo Arquitetura de um Sistema de Computador Histrico da Computao Utilizao dos Computadores Lgica Proposicional Algoritmos e Programao Estruturada Portucol Algoritmos com Qualidade

2 3 4 5

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

2 / 119

Introduo
Arquitetura de um Sistema de Computador

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

3 / 119

Introduo Arquitetura de um Sistema de Computador

Nessa seo, veremos: Arquitetura de um sistema de computao


Memria Unidade Central de Processamento (CPU) Perifricos (dispositivos de entrada e sada)
Teclado Mouse Monitor

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

4 / 119

Introduo Arquitetura de um Sistema de Computador Explicando...

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

5 / 119

Introduo Arquitetura de um Sistema de Computador

Perifricos (dispositivos de entrada e sada) Objetivo: prover dados ao computador e obter respostas do processamento Dispositivos Teclado e mouse
Dispositivos de entrada comum. Existe mais algum?

Monitor
Dispositivo de sada comum. Existe mais algum?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

6 / 119

Introduo Arquitetura de um Sistema de Computador

Memria Objetivo: armazenar dados ou programas (sequncias de instrues) em um base temporria ou permanente Dispositivos ROM, RAM, HD... Existe mais algum?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

7 / 119

Introduo Arquitetura de um Sistema de Computador

Unidade Central de Processamento (CPU) Tambm conhecido como processador a parte de um computador que realiza a maior parte do processamento CPU e memria constituem a parte central de um computador, no qual os perifricos sero anexados
Veremos a arquitetura Von Neumann

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

8 / 119

Introduo Arquitetura de um Sistema de Computador

Resumo do que realmente importa Programas residem na memria As instrues de um programa soma, diviso, atribuio, laos de repetio, instrues condicionais etc so executadas pela CPU Os dados necessrios para execuo do programa so obtidos pelos dispositivos de entrada (mouse, teclado, por exemplo) e os resultados so apresentados atravs dos dispositivos de sada (monitor, por exemplo)

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

9 / 119

Introduo
Histrico da Computao

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

10 / 119

Introduo Histrico da Computao

Nessa seo, veremos: Histrico da Computao


Existem mil modos de abordar esse assunto, mas aqui vamos falar o mais relevante ao curso

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

11 / 119

Introduo Histrico da Computao Arquitetura Von Neumann Von Neumann, temtico hngaro, naturalizado norte-americano, props nos anos 40 do sculo XX, um padro de arquitetura de computadores utilizado at os dias de hoje

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

12 / 119

Introduo Histrico da Computao

Necessidade Antigamente, processamentos em geral, como clculos matemticos complexos, folhas de pagamento etc Atualmente, sistemas bancrios, ERP sistemas de gesto, , sistemas web etc Necessidade Enm, o que um computador faz bem?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

13 / 119

Introduo Histrico da Computao

Necessidade Antigamente, processamentos em geral, como clculos matemticos complexos, folhas de pagamento etc Atualmente, sistemas bancrios, ERP sistemas de gesto, , sistemas web etc Necessidade Enm, o que um computador faz bem? REPETIO!

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

13 / 119

Introduo Histrico da Computao Paradigmas de Programao Procedural (imperativo) Antigamente e atualmente


um paradigma de programao que descreve a computao como aes (instrues) que mudam o estado (variveis) de um programa. Muito parecido com o comportamento imperativo das linguagens naturais que expressam ordens, programas imperativos so uma sequncia de comandos para o computador executar

Orientado a objetos Atualmente


um paradigma de programao que utiliza objetos e a interao entre eles para projetar aplicaes e programas de computador. Suas tcnicas de programao podem incluir caractersticas como encapsulamento, polimorsmo e herana. Esse paradigma no era comumente usado no desenvolvimento de aplicaes de grande porte at incio de 1990. Atualmente, vrias linguagens modernas suportam POO
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 14 / 119

Introduo Histrico da Computao

Linguagens Evoluo Assembly Pascal C C++ PHP Java .NET (C#, J#...)

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

15 / 119

Introduo
Utilizao dos Computadores

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

16 / 119

Introduo Utilizao dos Computadores

Nessa seo, veremos: Conceito de programa e sistema Linguagem de alto nvel e baixo nvel Compiladores / Interpretadores Codicao ASCII reas de aplicao dos computadores

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

17 / 119

Introduo Utilizao dos Computadores

Programa x Sistema Programa


Concretizao de um algoritmo em alguma linguagem de programao ou Uma sequncia de instrues que descrevem uma tarefa a ser realizada por um computador

Sistema
Grupo de componentes de hardware e sistemas de software, projetados e montados para executar uma funo especca ou grupo de funes

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

18 / 119

Introduo Utilizao dos Computadores

Nveis de linguagem Representa o nvel de abstrao da linguagem Quanto mais longe do cdigo de mquina (ou, em outras palavras, quanto mais prximo linguagem humana) mais alto o seu nvel Nveis:
Alto: Pascal, COBOL, Java... Mdio: C, C++... Baixo: Assembly...

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

19 / 119

Introduo Utilizao dos Computadores

Compiladores X Interpretadores Interpretador l o cdigo-fonte linha a linha, executando a instruo especca daquela linha Compilador l o programa inteiro, converte-o em um cdigo-objeto (ou cdigo de mquina) de modo que o computador consiga execut-lo diretamente Qual mais rpido?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

20 / 119

Introduo Utilizao dos Computadores

Codicao ASCII Cdigos ASCII representam texto em computadores, equipamentos de comunicao e outros dispositivos que utilizam texto Por exemplo, o computador no sabe o que A, mas se voc informar 65 e dizer que um caractere, ele saber que refere-se ao caractere A
Na verdade, na verdade mesmo, ele nem sabe o que 65, sabe o que 01000001

Veja a tabela ASCII em: http://www.asciitable.com

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

21 / 119

Introduo Utilizao dos Computadores

reas de aplicao de computadores Praticamente TODAS, alguns exemplos:


Sistemas de grande porte Sistemas web Banco de dados Bolsa de valores Processamentos pesados Estatstica ...

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

22 / 119

Contedo

1 2

Introduo Lgica Proposicional Introduo Material Algoritmos e Programao Estruturada Portucol Algoritmos com Qualidade

3 4 5

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

23 / 119

Lgica Proposicional
Introduo

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

24 / 119

Lgica Proposicional Introduo

Introduo Antes de entrarmos com desenvolvimento de algoritmos, interessante aprendermos a organizar nossas ideias e saber como organiz-las Nesse intuito, apresentada um pouco da lgica proposicional para que vocs treinem formalizao em linguagens no naturais
No caso, uma linguagem matemtica No futuro, Portugol e C

Este captulo servir como uma base forte para a nossa disciplina, cujos resultados comearo a logo perceber

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

25 / 119

Lgica Proposicional Introduo

Problema do Bezerro Em uma fazenda existem 20 vacas e seus 21 bezerros. Nenhuma possui dois bezerros. possvel existir tal fazenda?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

26 / 119

Lgica Proposicional Introduo

Paradoxo do Barbeiro Em uma determinada cidade: Todo homem que capaz de se barbear, o faz O barbeiro da cidade faz a barba daqueles e apenas daqueles que no so capazes de se barbear possvel existir tal cidade?
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 27 / 119

Lgica Proposicional Introduo

Problema do Peo e do Cavaleiro


Pees mentem, cavaleiros dizem a verdade. Em um grupo, voc pergunta para a pessoa A: Quantos de vocs so cavaleiros?. A responde, mas voc no entende a resposta. Voc ento pergunta para a pessoa B: O que ele disse? e a resposta : Ele disse que exatamente dois de ns somos pees. Ento, C comenta: "Ele (B) est mentindo". C um cavaleiro ou um peo?
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 28 / 119

Lgica Proposicional
Material

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

29 / 119

Lgica Proposicional Material

Material Iremos utilizar o material do Prof. Dr. Newton Jos Vieiraa , um dos melhores e mais renomados professores da Universidade Federal de Minas Gerais (UFMG) Vejam materiais:
logicaproposicional_apostila.pdf logicaproposicional_slides.pdf

www.dcc.ufmg.br/~nvieira

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

30 / 119

Contedo

1 2 3

Introduo Lgica Proposicional Algoritmos e Programao Estruturada Conceitos Importantes Portucol Algoritmos com Qualidade

4 5

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

31 / 119

Algoritmos e Programao Estruturada


Conceitos Importantes

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

32 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Nessa seo, veremos: Algoritmos e Programao Estruturada


Algoritmo Estrutura de dados Programao estruturada

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

33 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Algoritmo Um algoritmo a descrio de um padro de comportamento, expressado em termos de um repertrio bem denido e nito de aes primitivas, das quais damos por certo que elas podem ser executadas. ou Um algoritmo , em outras palavras, uma norma executvel para estabelecer um certo efeito desejado, que na prtica ser geralmente a obteno de uma soluo a um certo tipo de problema.

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

34 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Exemplo Algoritmo para descascar as batatas para o jantar


" traga a cesta com batatas do poro " ; " pegue a panela no armrio " ; se ( " saia clara " ) { " coloque avental " ; } enquanto ( " nmero de batatas i n s u f i c i e n t e " ) { " descasque uma batata " ; } " devolva a cesta ao poro " ;

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

35 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Estrutura de dados Representam as informaes do problema a ser resolvido A formulao do algoritmo e a denio das estruturas de dados esto intimamente ligadas Enm decises sobre a estruturao de dados no podem ser feitas sem conhecimento dos algoritmos aplicados a eles e a estrutura e a escolha dos algoritmos depende muitas vezes fortemente da estrutura dos dados

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

36 / 119

Algoritmos e Programao Estruturada Conceitos Importantes Estrutura de dados

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

37 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Qual das estruturas de dados anteriores melhor para: retornar os elementos ordenados? pesquisar um elemento? acrescentar um elemento? inserir um elemento? remover um elemento? alterar o valor de um elemento?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

38 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Programa Programas so formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especcas de dados Programar basicamente construir algoritmos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

39 / 119

Algoritmos e Programao Estruturada Conceitos Importantes Programao Estruturada Basicamente, uma metodologia de projeto de programas visando:
Facilitar a escrita dos programas Facilitar a leitura (o entendimento) dos programas permitir a vericao a priori dos programas facilitar a manuteno e modicao dos programas

Todos os programas podem ser reduzidos a apenas trs estruturas:


sequncia deciso iterao
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 40 / 119

Algoritmos e Programao Estruturada Conceitos Importantes Programao Estruturada Exemplo


1

principal ( ) { i n t e i r o i = 1 ; / Declarando um i n t e i r o / imprima ( " Nmeros pares at 100: " ) ; enquanto ( i <= 100) { se ( i mod 2 == 0) { imprima ( i ) ; } i = i + 1; } }

Observaes Observe a sequncia, a deciso e a iterao No se preocupe com sintaxe, veremos o PortuCol logo
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 41 / 119

Algoritmos e Programao Estruturada Conceitos Importantes

Exerccios Propostos Escreva um algoritmo para:


Ler um nmero e dizer se par ou mpar Ler dois nmeros x e y e imprimir xy Ler um caractere e dizer se vogal ou consoante

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

42 / 119

Algoritmos e Programao Estruturada Conceitos Importantes Exerccio Proposto

Dada a modelagem acima, pense em um algoritmo para: descobrir o menor caminho entre duas cidades (Dijsktra) resolver o problema do caixeiro viajante
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 43 / 119

Contedo

1 2 3 4

Introduo Lgica Proposicional Algoritmos e Programao Estruturada Portucol Introduo Comandos Bsicos Arranjos Funes Algoritmos com Qualidade

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

44 / 119

Portucol
Introduo

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

45 / 119

Portucol Introduo

Nessa seo, veremos: Portucol


Introduo linguagem (adaptao do Portugol para C) Sintaxe e semntica dos comandos bsicos Leitura e escrita de algoritmos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

46 / 119

Portucol Introduo

Portucol Pseudolinguagem de programao inspirada no conhecido Portugol Objetivo:


Obter uma notao para algoritmos a ser utilizada na denio, na criao, no desenvolvimento e na documentao de um programa

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

47 / 119

Portucol Introduo

Regras Bsicas Os comandos devem ser escritos sempre em caixa baixa Ao nal de cada comando dever ser colocado um ponto e vrgula (;) Os nomes das variveis e identicadores devem:
ser compostos por letras (caixa baixa) e nmeros, mas devem comear com uma letra Ex: idade, nome, a4...

O algoritmo deve ser escrito de forma estruturada e indentada

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

48 / 119

Portucol Introduo Tipos de Dados Inteiro


qualquer nmero inteiro, negativo, nulo ou positivo Ex: -5, 0, 12 ...

Real
qualquer nmero real, negativo, nulo ou positivo Ex: -5, 30.5, 0, 40.1, -5.2 ...

Caractere
um caractere alfanumrico, exemplo: A, a, 0 ...

String
conjunto de caracteres alfanumricos Ex: Lgica, LP, Carnaval ...

Lgico
verdadeiro ou falso
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 49 / 119

Portucol Introduo

Declarao de variveis inteiro idade; real preco; caractere inicial; String nome; lgico flag;

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

50 / 119

Portucol Introduo Comentrios recomendado e muito importante inserir comentrios em seus cdigos Os comentrios devem estar entre /* e */ Exemplo
2

10

principal ( ) { i n t e i r o i = 1 ; / Declarando um i n t e i r o / imprima ( " Nmeros pares at 100: " ) ; enquanto ( i <= 100) { se ( i mod 2 == 0) { / se o r e s t o f o r 0 par / imprima ( i ) ; } i = i + 1 ; / incrementa contador / } } / fim da funo p r i n c i p a l /

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

51 / 119

Portucol Introduo Operadores = atribuio + soma - subtrao * multiplicao / diviso % resto (pode ser mod tambm) Funes mais comuns sqrt raiz quadrada ex: sqrt(4) pow exponenciao ex: pow(3,2) (equivale a 32 )
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 52 / 119

Portucol Introduo Operadores Relacionais == comparao != diferente <= menor ou igual >= maior ou igual > < maior menor

Operadores Lgicos e ou conjuno disjuno

no negao
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 53 / 119

Portucol Introduo

Precedncia
1

( ) funes * / + ==, !=, <, <=, >, >= no e ou

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

54 / 119

Portucol Introduo

Comando de entrada leia


Faz a leitura de qualquer varivel Ex: leia(x)

imprima
Faz a impresso de qualquer varivel e texto Exemplos:
imprima(x); imprima(O valor digitado foi $x)

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

55 / 119

Portucol
Comandos Bsicos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

56 / 119

Portucol Comandos Bsicos

Comandos condicionais - se Sintaxe do comando se


se ( condicao ) { comando1; comando2; comando3; }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

57 / 119

Portucol Comandos Bsicos

Observaes: Os parnteses que envolvem a condio so OBRIGATRIOS A condio dever retornar um tipo lgico Os comandos somente sero executados se a condio for verdadeira

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

58 / 119

Portucol Comandos Bsicos Comandos condicionais - se O uso dos braos NO obrigatrio caso seja apenas um nico comando Porm, a boa prtica recomenda a utilizao de braos independente do nmero de comandos
Melhor indentao do cdigo
se ( verdade ) comando;

equivale a:
se ( verdade ) { comando; }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

59 / 119

Portucol Comandos Bsicos Comandos condicionais - se Como fao o conhecido: se verdade ento . . . seno . . .
se ( condicao ) { comando1; comando2; comando3; } seno { comando4; comando5; comando6; }

Pergunta-se Quais comandos sero executados se a condio for verdadeira? E se for falsa?
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 60 / 119

Portucol Comandos Bsicos

Comandos condicionais - se
1

principal ( ) { i n t e i r o a, b; l e i a (a ) ; l e i a (b ) ; se ( a >= b ) { imprima ( " $a e maior ou i g u a l a $b ! " ) ; } seno { imprima ( " $a e menor que $b ! " ) ; } }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

61 / 119

Portucol Comandos Bsicos

Comandos condicionais - se Comando se podem ser aninhados


1

11

13

principal ( ) { i n t e i r o nota ; l e i a ( nota ) ; se ( nota >= 90 ) { imprima ( " Nota A" ) ; } seno se ( nota >= 80 ) { imprima ( " Nota B " ) ; } seno se ( nota >= 70 ) { imprima ( " Nota C" ) ; } seno { imprima ( " Reprovado " ) ; } }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

62 / 119

Portucol Comandos Bsicos

Exemplo se
2

10

principal ( ) { caractere op ; l e i a (op ) ; se (op == + ou op == ) { imprima ( " Operador de Baixa Prioridade " ) ; } seno se (op == / ou op == ) { imprima ( " Operador de Alta Prioridade " ) ; } seno { imprima ( " Operador I n v l i d o " ) ; } }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

63 / 119

Portucol Comandos Bsicos

Exerccio de Fixao 01 Crie um algoritmo que leia dois nmeros inteiros e imprima a soma, a subtrao, a multiplicao, a diviso e o resto da diviso entre esses dois nmeros. Observe que o valor do segundo nmero no deve ser 0, portanto faa um se para evitar isto.

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

64 / 119

Portucol Comandos Bsicos

Exerccio de Fixao 02 Crie um algoritmo que leia os dois catetos de um tringulo (nmeros reais a e b) e calcule a hipotenusa: h2 = a 2 + b2

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

65 / 119

Portucol Comandos Bsicos

Comandos repetio (enquanto, faa...enquanto e para) Comandos de repetio so utilizados para repetir um bloco de cdigo Veremos trs comandos de repetio:
enquanto faa...enquanto para

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

66 / 119

Portucol Comandos Bsicos

Comandos repetio - enquanto O comando enquanto utilizado para repetir um bloco de acordo com uma condio considerado um loop de pr-teste
Isto , testa a condio antes de executar o bloco

Sintaxe:
enquanto ( condicao ) { comando1; comando2; comandoN; }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

67 / 119

Portucol Comandos Bsicos

Comandos repetio - enquanto


1

principal ( ) { inteiro i = 0; enquanto ( i < 10 ) { imprima ( i ) ; i = i + 1; } }

Pergunta-se Qual a sada?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

68 / 119

Portucol Comandos Bsicos

Exerccio de Fixao Faa um algoritmo que liste todos os nmeros de 0 a 100 divisveis por 3

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

69 / 119

Portucol Comandos Bsicos

Comandos repetio - faa...enquanto O comando faa...enquanto semelhante ao enquanto, contudo um comando de repetio de ps-teste
Isto , somente ao nal da execuo do bloco que se verica a condio

Geralmente, utilizado quando se deseja testar a condio somente a partir da segunda iterao
Por exemplo, uma leitura da opo de um menu. Pede para digitar uma primeira vez. Somente se no digitar uma opo vlida que pede para digitar novamente

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

70 / 119

Portucol Comandos Bsicos

Sintaxe:
faa { comando1; comando2; comandoN; } enquanto ( condicao ) ;

Observe o ponto-e-vrgula aps os parnteses da condio. No o esquea!

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

71 / 119

Portucol Comandos Bsicos

Comandos repetio - faa...enquanto


principal ( ) { inteiro i = 0; faa { imprima ( i ) ; } enquanto ( 1 ! = 1 ) ; }

Pergunta-se Qual a sada?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

72 / 119

Portucol Comandos Bsicos

Exemplo
principal ( ) { inteiro i ; faa { imprima ( " D i g i t e um numero entre 0 e 1 0 : " ) ; leia ( i ) ; } enquanto ( i < 0 ou i > 10 ) ; imprima ( " " Numero digitado : $ i " ) ; }

Pergunta-se Qual a sada?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

73 / 119

Portucol Comandos Bsicos

Exerccio de Fixao Faa um algoritmo que estipule um nmero mgico (entre 0 e 100) e pea para o usurio digitar nmeros at que ele acerte. Quando no acertar, diga se o nmero mgico menor ou maior que o nmero que ele digitou. Por exemplo: Nmero mgico estipulado: 7 1a tentativa: 90 (nmero mgico menor) 2a tentativa: 4 (nmero mgico maior) 3a tentativa: 7 (parabns!)

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

74 / 119

Portucol Comandos Bsicos Comandos de repetio - para Comando de repetio mais poderoso do Portucol composto por:
Inicializao: executado uma nica vez no incio do loop Condio: executado sempre antes de cada iterao. Se verdadeira, o bloco executado. Se falsa, nalizado Operao : executado sempre ao trmino de cada iterao

Sintaxe
para ( i n i c i a l i z a c a o ; condicao ; operacao ) { comando1; comando2; ... comandoN; }
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 75 / 119

Portucol Comandos Bsicos

Exemplo
2

principal ( ) { inteiro i ; para ( i = 0 ; i < 1 0 ; i = i +1) { imprima ( i ) ; } }

Pergunta-se Qual a sada?

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

76 / 119

Portucol Comandos Bsicos Sintaxe No lao para, a inicializao, condio e operao so todas opcionais Exemplo
1

principal ( ) { inteiro i ; para ( ; ; ) { imprima ( i ) ; } }

Pergunta-se Qual a sada?


Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 77 / 119

Portucol Comandos Bsicos

Comandos de repetio - para Podemos ter um para dentro de outro, e outro dentro de outro, e outro dentro de outro...
1

principal ( ) { inteiro i , j ; para ( i = 0 ; i <= 2 ; i = i +1) { para ( j = 0 ; j < 2 ; j = j +1) { imprima ( " $ i $ j " ) } } }

Pergunta-se Qual a sada?


Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 78 / 119

Portucol Comandos Bsicos

Comandos de repetio - para Um comando para pode ter vrias inicializaes, uma condio complexa e vrias operaes Exemplo
1

principal ( ) { inteiro i , d; para ( i = 1 , d = 2 i ; i <= 10 ou d == 2 2 ; i = i +1 , d = i 2) { imprima ( " $ i $d " ) ; } }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

79 / 119

Portucol Comandos Bsicos Comando abandone Inserido dentro de um bloco de repetio (pode tambm ser enquanto ou faa...enquanto) Caso seja executado, o bloco de repetio nalizado Exemplo
1

principal ( ) { inteiro i = 0; para ( ; i < 1 0 ; i = i + 1) { se ( i == 3) { abandone ; } imprima ( i ) ; } }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

80 / 119

Portucol Comandos Bsicos Comando continue Inserido dentro de um bloco de repetio Caso seja executado, a iterao atual do bloco de repetio interrompida e parte para a prxima iterao Exemplo
2

principal ( ) { inteiro i ; para ( i = 0 ; i < 1 0 ; i = i + 1) { se ( i == 3 ou i == 5) { continue ; } imprima ( i ) ; } }

10

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

81 / 119

Portucol Comandos Bsicos Comando de repetio - para Logicamente, pode-se utilizar abandone e continue conjuntamente Exemplo
2

principal ( ) { inteiro i , j ; para ( i = 0 ; i < 3 ; i = i + 1) { se ( i == 1) { continue ; } para ( j = 0 ; j < 2 ; j ++) { imprima ( " $ i $ j " ) ; abandone ; / abandona sempre o lao mais i n t e r n o / } } }

10

12

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

82 / 119

Portucol Comandos Bsicos

Exerccio de Fixao Faa um algoritmo que leia diversas idades e depois exiba a mdia. Duas consideraes: - O algoritmo dever ignorar idades acima de 120 anos; - O algoritmo s para de ler idades quando receber o valor -1.

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

83 / 119

Portucol Comandos Bsicos

Funes importantes tamanho retorna o tamanho de um string ou arranjo. Por exemplo, suponha que str contenha ANA, assim tamanho(str) retornar 3 encerra encerra o programa abruptamente

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

84 / 119

Portucol Comandos Bsicos Importante Ao ler um string, voc pode acessar cada posio utilizando colchetes [ ]
ndices vo de 0 a tam-1

Exemplo
1

principal ( ) { s t r i n g s t r = "ANA" ; i n t e i r o i , contador = 0 ; para ( i =0; i < tamanho( s t r ) ; i = i + 1 ) { se ( s t r [ i ] == A ) { contador = contador + 1 ; } } imprime ( " Numero de A s : $contador " ) ; }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

85 / 119

Portucol
Arranjos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

86 / 119

Portucol Arranjos

Arranjos - Conceito Arranjos tambm conhecidos como vetor, array etc so colees de um mesmo tipo em sequncia Arranjos podem ser de qualquer tipo visto (inteiro, real, caractere, string ou lgico) Pode se ter um arranjo de inteiros ou um arranjo de caracteres ou um arranjo de arranjo de reais
Contudo, no se pode ter um arranjo que contenha inteiros e strings

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

87 / 119

Portucol Arranjos

Arranjos - Declarao Declarao:


2

i n t e i r o notas [ 5 ] ; / Arranjo de 5 i n t e i r o s / caractere l e t r a s [ 5 ] ; / Arranjo de 5 caracteres /

Assim como variveis comuns, os elementos do arranjo no so inicializados automaticamente. Contudo, voc pode declarar j inicializando:
2

i n t e i r o notas [ 5 ] = { 4 , 6 , 6 , 9 , 8 } ; caractere l e t r a s [ 5 ] = { A , E , I , O , U } ;

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

88 / 119

Portucol Arranjos

Arranjos - Declarao Um arranjo de tamanho n, tem suas posies indexadas de 0 a n-1 Para obter o tamanho de um arranjo, basta chamar a funo tamanho Exemplo
2

principal ( ) { inteiro v[5] = {1 , 2 , 3 , 4 , 5}; inteiro i ; para ( i =0; i < tamanho( v ) ; i = i + 1 ) { imprima ( v [ i ] ) ; } }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

89 / 119

Portucol Arranjos Arranjos - Acesso aos elementos Arranjos permite recuperar ou alterar qualquer um de seus elementos Os arranjos sempre iniciam-se na posio 0
Isto indica que ele termina em uma posio inferior ao tamanho (n-1)

Exemplo
1

principal ( ) { caractere v [ 5 ] = { A , E , Y , O , U } ; imprima ( "A primeira vogal $v [ 0 ] " ) ;

v[2] = I ;
7

imprima ( "A ltima vogal $v [ 4 ] " ) ;


9

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

90 / 119

Portucol Arranjos Arranjos Multidimensionais Pode-se criar um arranjo de arranjos O mais comum o bidimensional que vemos como uma matriz A declarao somente acrescentar o nmero de colunas Por exemplo: inteiro matriz[4][3] declara-se uma matriz de 4 linhas e 3 colunas
matriz[4][3] = {{1,0,0},{0,1,2},{2,3,4},{0,6,7}};

Representao :

1 0 2 0

0 1 3 6

0 2 4 7
4 de abril de 2011 91 / 119

Ricardo Terra (rterrabh@gmail.com)

LP

Portucol Arranjos Arranjo Bidimensional Exemplo Declarando e inicializando uma matriz 3x2 e imprimindo a soma dos valores
1

principal ( ) { i n t e i r o v [ 3 ] [ 2 ] = { { 1 , 4 } , { 5 , 6 } , { 9 , 11} } ; i n t e i r o i , j , soma = 0 ; para ( i =0; i < tamanho( v ) ; i = i + 1 ) { para ( j =0; j < tamanho( v [ i ] ) ; j = j + 1 ) { soma = soma + v [ i ] [ j ] ; } } imprima ( "Soma da m a t r i z : $soma " ) ; }

matriz
1 5 9 4 6 -11

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

92 / 119

Portucol Arranjos

Exerccio de Fixao 01 Crie um algoritmo que declare e leia cada posio de um arranjo de inteiros de tamanho 5 e imprima a soma e a mdia aritmtica

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

93 / 119

Portucol Arranjos

Exerccio de Fixao 02 Crie um algoritmo que declare e leia cada posio de um arranjo de reais de tamanho 10 e imprima a soma total deste arranjo considerando a seguinte frmula: soma = 1 * array[0] + 2 * array[1] + ... + 9 * array[8] + 10 * array[9]

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

94 / 119

Portucol
Funes

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

95 / 119

Portucol Funes

Funo Um algoritmo uma coleo de funes Uma das funes deve se chamar principal
por onde comea a execuo do algoritmo

Uma funo pode:


receber parmetros declarar variveis locais conter instrues executveis retornar um valor

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

96 / 119

Portucol Funes

Funo O comando retorna efetua o retorno (trmino) da funo Uma funo pode ou no ter um retorno Uma funo pode ou no ter parmetros formais Exemplos
m1( ) { . . . } / sem retorno e sem parmetros formais /
2

m2( r e a l x ) { . . . } / sem retorno e com um par . formal /


4

i n t e i r o m3( ) { . . . } / com retorno e sem parmetros formais /


6

i n t e i r o m4( caractere c , i n t e i r o i ) { . . . } / com retorno e 2 par . /

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

97 / 119

Portucol Funes

Funo Sintaxe:
retorno nome ( < param { , param} > ) { corpo }

Exemplos
1

imprimir ( ) { . . . } i n t e i r o dobro ( i n t e i r o x ) { . . . } r e a l somar ( r e a l a , r e a l b) { . . . } l i s t a r ( i n t e i r o notas [ ] ) { . . . }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

98 / 119

Portucol Funes

Funo Retorno de funes


Uma funo pode retornar valores de qualquer tipo Uma funo que retorna nada, no declara retorno A expresso que segue o retorna, o valor retornado pela funo
no necessrio parnteses

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

99 / 119

Portucol Funes

Funo Trmino de uma funo


Ao encontrar a chave de fechamento Ao ser retornada (retorna)

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

100 / 119

Portucol Funes

Exerccios de Fixao Implementar as funes:


soma fatorial escreveMaior retornaMenorElemento retornaMaiorElemento retornaMedia

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

101 / 119

Portucol Funes

Exerccio - Soma
1

principal ( ) { real x , y , total ; leia ( x ) ; leia (y ) ; t o t a l = soma( x , y ) ; imprima ( " $x + $y = $ t o t a l " ) ; } r e a l soma ( r e a l x , r e a l y ) { retorna x+y ; }

11

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

102 / 119

Portucol Funes

Exerccio - Fatorial
1

principal ( ) { inteiro n; leia (n ) ; imprima ( f a t ( n ) ) ; } i n t e i r o fat ( i n t e i r o n) { i n t e i r o i , resultado = 1 ; se ( n == 0 ou n == 1) { retorna 1 ; } para ( i =2; i <= n ; i = i +1 ) { resultado = resultado i ; } retorna resultado ; }

11

13

15

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

103 / 119

Portucol Funes

Exerccio - Escreve Maior


2

principal ( ) { inteiro n; leia (n ) ; retornaMaior ( n ) ; } retornaMaior ( i n t e i r o inteiro i ; para ( i = n ; i >= imprime ( i ) ; se ( i ! = 1 ) imprime ( " } } } n) { 1 ; i = i 1) { { > " );

10

12

14

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

104 / 119

Portucol Funes

Exerccio - Retorna Menor Elemento


1

principal ( ) { i n t e i r o v [ 5 ] = { 2 , 4 , 5 , 1 , 3 } , min ; min = menorElemento ( v ) ; imprima ( " Menor elemento : $min " ) ; } i n t e i r o retornaMenorElemento ( i n t e i r o v [ ] ) { inteiro i ; i n t e i r o menor = v [ 0 ] ; para ( i = 1 ; i < tamanho( v ) ; i = i +1) { se ( v [ i ] < menor) { menor = v [ i ] ; } } retorna menor ; }

11

13

15

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

105 / 119

Contedo

1 2 3 4 5

Introduo Lgica Proposicional Algoritmos e Programao Estruturada Portucol Algoritmos com Qualidade Introduo Boas prticas de programao Metodologia para o desenvolvimento de algoritmos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

106 / 119

Algoritmos com Qualidade


Introduo

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

107 / 119

Algoritmos com Qualidade Introduo

Nessa seo, veremos: Boas prticas de programao Metodologia para o desenvolvimento de algoritmos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

108 / 119

Algoritmos com Qualidade


Boas prticas de programao

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

109 / 119

Algoritmos com Qualidade Boas prticas de programao 1. Algoritmos devem ser feitos para serem lidos por seres humanos Outras pessoas podero ter que corrig-lo, adapt-lo, modic-lo... Ainda, talvez voc mesmo tenha que entend-lo depois de um ano que escreveu 2. Comente seu cdigo Comentrio sinal de saber desenvolver Facilita o entendimento do cdigo Existem coisas que voc faz que poucos segundos depois nem lembra como fez
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 110 / 119

Algoritmos com Qualidade Boas prticas de programao

3. No entanto, comentrios devem acrescentar algo no apenas frasear os comandos Comentrios no dizem o que est sendo feito, mas sim, por qu Exemplo de comentrio que no se deve fazer:
imprima( total ); /* imprime o total */

Exemplo de comentrio que se deve fazer:


/* implementao da RN021 */ se ( taxaJuros < 3.0 e selic > taxaJuros ) { ... }

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

111 / 119

Algoritmos com Qualidade Boas prticas de programao

4. Use comentrios no prlogo de funes interessante que funes tenham comentrios contendo:
um descrio sucinta do que faz autor data de escrita

5. Utilize espaos em branco para melhorar a legibilidade melhoram substancialmente a aparncia de algoritmos principalmente no incio do algoritmo, pois pode ser que haja a necessidade de mais variveis

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

112 / 119

Algoritmos com Qualidade Boas prticas de programao

6. Variveis com nomes representativos Nomes de variveis devem identicar o que representam
Por exemplo, x = y + z muito menos claro que preco = custo + lucro

Outras dicas:
Para variveis de iterao, use i, j, k... Para variveis auxiliares, use aux

7. Um comando por linha Vrios comandos por linha, prejudicam a legibilidade

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

113 / 119

Algoritmos com Qualidade Boas prticas de programao

8. Utilize parnteses para aumentar a legibilidade e prevenir erros bobos Por exemplo: A * B * C / (D * E * F) seria ainda mais claro se fosse: (A * B * C) / (D * E * F) 9. Identao imprencidvel Melhora a legibilidade Apresenta a estrutura lgica do algortimo Deve seguir o padro (novos blocos so identados)

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

114 / 119

Algoritmos com Qualidade Boas prticas de programao

10. Alterao no algoritmo Alterao no comentrio Sempre que um algoritmo for alterado, os comentrios tambm devem ser alterados, no apenas os comandos Antes no comentar do que deixar um comentrio errado

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

115 / 119

Algoritmos com Qualidade


Metodologia para o desenvolvimento de algoritmos

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

116 / 119

Algoritmos com Qualidade Metodologia para o desenvolvimento de algoritmos Uma boa sequncia a ser seguida: Passo 1: leia o enunciado do problema at o nal (sem fazer nenhum tipo de anotao) Passo 2: repita o Passo 1 at entender Passo 3: levantar e analisar todas as sadas do problema Passo 4: levantar e analisar todas as entradas do problema Passo 5: levantar as variveis necessrias Passo 6: pensar como transformar entradas em sadas Passo 7: testar cada parte do algoritmo (simule entradas e conra sadas) Passo 8: testar o algoritmo como um todo (simule entradas e conra sadas)
Ricardo Terra (rterrabh@gmail.com) LP 4 de abril de 2011 117 / 119

Algoritmos com Qualidade Metodologia para o desenvolvimento de algoritmos Exerccio de Fixao De acordo com a metodologia, desenvolva um algoritmo que leia as trs variveis da equao de 2o grau (a, b e c) e imprima se a parbola gerada pela equao toca o eixo das abcissas ou no. Se tocar, imprima tambm as razes resultantes

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

118 / 119

Referncias

Angelo de Moura Guimares e Newton Albert de Castilho Lages. Algoritmos e Estruturas de Dados. Editora LTC, 1994. Victorine Viviane Mizrahi. Treinamento em Linguagem C. Prentice-Hall, 2 edition, 2008. Newton Jos Vieira. Lgica aplicada computao. http://homepages.dcc.ufmg.br/ nvieira/cursos/ldt/ notas-de-aulas/logica1.pdf, 2007.

Ricardo Terra (rterrabh@gmail.com)

LP

4 de abril de 2011

119 / 119

Você também pode gostar