Você está na página 1de 69

Lgica de Programao

UNIDADE 1 1.1 1.2 1.3 1.4 1.5 1.6

INTRODUO LGICA DE PROGRAMAO ........................................................................................... 3

VISO GERAL DO PROCESSO DE DESENVOLVIMENTO DE APLICAES ........................................................................................ 3 LGICA DE PROGRAMAO ............................................................................................................................................ 4 SEQUNCIA LGICA....................................................................................................................................................... 4 INSTRUES ................................................................................................................................................................ 5 ALGORITMO ................................................................................................................................................................ 5 EXERCCIOS SUGERIDOS ................................................................................................................................................. 9 DIAGRAMAS DE FLUXO .......................................................................................................................... 10

UNIDADE 2 2.1 2.2 2.3 2.4

DIAGRAMA DE NASSI-SHNEIDERMAN ............................................................................................................................. 10 FLUXOGRAMAS .......................................................................................................................................................... 12 LINGUAGEM NATURAL................................................................................................................................................. 14 PSEUDOCDIGO ......................................................................................................................................................... 14 ELEMENTOS BSICOS DO CDIGO ......................................................................................................... 16

UNIDADE 3 3.1 3.2 3.3

VARIVEIS E CONSTANTES ............................................................................................................................................ 16 TIPOS PRIMITIVOS DE DADOS ........................................................................................................................................ 16 DECLARAO DE VARIVEIS .......................................................................................................................................... 17 COMANDOS DE ATRIBUIO, ENTRADA E SADA DE DADOS ................................................................. 22

UNIDADE 4 4.1 4.2 4.3

COMANDO DE ATRIBUIO........................................................................................................................................... 22 COMANDO DE ENTRADA DE DADOS ............................................................................................................................... 23 COMANDO DE SADA DE DADOS .................................................................................................................................... 23 ESTRUTURAS DE SEQUENCIAO, SELEO E REPETIO ..................................................................... 24

UNIDADE 5 5.1 5.2 5.3

SEQUNCIA ............................................................................................................................................................... 24 SELEO ................................................................................................................................................................... 24 REPETIO ................................................................................................................................................................ 27 VETORES E MATRIZES (ARRAYS) ............................................................................................................. 31

UNIDADE 6 6.1 6.1

VETORES ................................................................................................................................................................... 31 MATRIZES ................................................................................................................................................................. 32 SUBROTINAS (PROCEDIMENTOS E FUNES)......................................................................................... 33

UNIDADE 7 7.1 7.2 7.3

UTILIZAO DE SUBROTINAS ......................................................................................................................................... 33 PROCEDIMENTOS........................................................................................................................................................ 34 FUNES .................................................................................................................................................................. 34 CONTEDO DINMICO........................................................................................................................... 36

UNIDADE 8 8.1 8.2

CONTEDO DINMICO - CONCEITO................................................................................................................................ 36 LINGUAGENS: ............................................................................................................................................................ 37 LINGUAGEM PHP.................................................................................................................................... 38

UNIDADE 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8

COMO CRIAR UM ARQUIVO PHP ................................................................................................................................... 38 DELIMITANDO O CDIGO PHP ...................................................................................................................................... 38 DELIMITADORES ALTERNATIVOS ..................................................................................................................................... 39 SEPARADORES DE INSTRUES ...................................................................................................................................... 39 COMENTRIOS ........................................................................................................................................................... 40 ESTRUTURAS DE DADOS ............................................................................................................................................... 41 VARIVEIS ................................................................................................................................................................. 41 CONSTANTES ............................................................................................................................................................. 41

9.9 9.10 9.11

ARRAYS .................................................................................................................................................................... 42 TIPOS DE DADOS SUPORTADOS ..................................................................................................................................... 43 ESTRUTURAS DE CONTROLE .......................................................................................................................................... 46 LINGUAGEM C .................................................................................................................................... 52

UNIDADE 10 10.1 10.2 10.3 10.4 10.5

ESTRUTURA BSICA DE UM PROGRAMA EM C ................................................................................................................... 52 COMANDO IF ............................................................................................................................................................. 53 ESTRUTURAS DE REPETIO .......................................................................................................................................... 54 ARRAYS (VETORES E MATRIZES) ..................................................................................................................................... 54 FUNES (SUBROTINAS) .............................................................................................................................................. 55 FUNDAMENTOS ORIENTAO A OBJETOS ......................................................................................... 56

UNIDADE 11 11.1 11.2 11.3 11.4

CONCEITOS BSICOS .................................................................................................................................................... 56 CLASSE ..................................................................................................................................................................... 59 COLABORAO .......................................................................................................................................................... 60 BENEFCIOS DA ORIENTAO A OBJETOS ......................................................................................................................... 61 EXERCCIOS DE FIXAO .................................................................................................................... 63

UNIDADE 12 -

Unidade 1 - Introduo Lgica de Programao


1.1 Viso geral do processo de desenvolvimento de aplicaes
Antes de comearmos a estudar lgica de programao, importante que tenhamos uma viso geral do processo de desenvolvimento de aplicaes, uma vez que estudaremos lgica de programao com o objetivo de conseguir um bom embasamento para a prtica da programao de computadores. Podemos encontrar na literatura em informtica vrias formas de representao das etapas em que consiste o processo de desenvolvimento de um programa ou aplicao. Estas formas de representao podem variar tanto na quantidade de etapas como nas atividades que devem ser realizadas por cada etapa. A seguir apresentaremos uma forma de representao do processo de desenvolvimento de software que bastante encontrada na literatura:

Planejamento Anlise Projeto Implementa o Testes Manuteno

Na figura, podemos ver o processo de desenvolvimento de programas dividido em seis etapas. A seguir daremos uma rpida explicao das atividades realizadas em cada etapa. Planejamento Na etapa de planejamento onde deve ser desenvolvido um plano inicial de desenvolvimento, levando em consideraes questes como definio da abrangncia do sistema, misso e objetivos do sistema, cronogramas de desenvolvimento, anlise custo x benefcio, levantamento inicial de informaes, etc.

Lgica de Programao

Anlise Tambm chamada de anlise de requisitos, onde deve se obter um claro entendimento sobre o sistema. A anlise proporciona a base para uma boa implementao do software. Projeto Tambm chamada de especificao do projeto, onde propomos uma arquitetura de implementao para o software, que atenda aos requisitos do sistema identificados na anlise. Aqui, passamos a nos preocupar com os diversos aspectos computacionais necessrios para uma boa implementao do software. Os algoritmos dos programas a serem implementados so construdos nesta fase. Implementao A etapa de implementao onde os programas so efetivamente construdos, a partir da arquitetura de implementao feita na etapa anterior. Nesta etapa onde a atividade de codificao ocorre de forma massiva. Teste Nesta etapa os programas construdos sero testados de forma exaustiva. Existe uma grande variedade de testes que so realizados, indo desde o teste unitrio dos mdulos de programas at o teste de integrao de todo o sistema de software. Manuteno onde ocorrem ajustes do software implementado, que podem ser ocasionados por vrios motivos: erros de projeto identificados aps a implementao e o teste do software, inovaes tecnolgicas, evoluo do sistema, etc..

1.2 Lgica de Programao


A lgica trata da correo do pensamento. Como filosofia ela procura saber por que pensamos de uma forma e no de outra. Poderamos dizer, tambm, que a Lgica a arte de pensar corretamente e, visto que a forma mais complexa de pensamento o raciocnio, a Lgica estuda ou tem em vista a "correo do pensamento". A Lgica de Programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a sequncia lgica para o desenvolvimento. Ento, o que Lgica? Lgica de Programao a tcnica de encadear pensamentos para atingir determinado objetivo.

1.3 Sequncia Lgica


Os pensamentos podem ser descritos como uma sequncia de instrues, que devem ser seguidas para cumprir uma determinada tarefa. Podemos dar uma definio concreta: Sequncia Lgica so os passos executados at atingir um objetivo ou soluo de um problema. 4

Lgica de Programao

1.4 Instrues

Na linguagem comum, entende-se por instrues "um conjunto de regras ou normas definidas para a realizao ou emprego de algo". Em informtica, porm, instruo a informao que indica a um computador uma ao elementar a ser executada. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem sequencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc... evidente que essas instrues tm que ser executadas em uma ordem adequada no se pode fritar as batatas para depois descasc-las. Dessa maneira, uma instruo tomada em separado, no tem muito sentido. Para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.

1.5 Algoritmo
A palavra algoritmo, primeira vista, parece-nos estranha. Embora possua designao desconhecida, fazemos uso constantemente de algoritmos em nosso cotidiano: a maneira como uma pessoa toma banho um algoritmo, por exemplo. Outros algoritmos frequentemente encontrados so: instrues para se utilizar um aparelho eletrodomstico; uma receita para preparo de algum prato; guia de preenchimento para declarao do imposto de renda; a regra para determinao de mximos e mnimos de funes por derivadas sucessivas; a maneira como as contas de gua, luz e telefone so calculadas mensalmente, dentre outros. So vrios os conceitos para algoritmo. Escolhemos alguns para serem apresentados aqui. "Um conjunto finito de regras que prov uma sequncia de operaes para resolver um tipo de problema especfico" Ronald Knuth

Lgica de Programao

"Sequncia ordenada, e no ambgua, de passos que levam soluo de um dado problema" Tremblay "Processo de clculo, ou de resoluo de um grupo de problemas semelhantes, em que se estipulam, com generalidade e sem restries, as regras formais para a obteno do resultado ou da soluo do problema" Dicionrio Aurlio Por que precisamos dele? No desenvolvimento de programas, estaremos tratando constantemente com a complexidade inerente aos problemas que desejamos que nosso programa de computador resolva. Para tratarmos da complexidade dos problemas desenvolvemos algoritmos que devem expressar de forma objetiva e clara a forma de solucionarmos esse problema. A partir do algoritmo desenvolvido fica fcil construirmos o programa, basta conhecermos a linguagem de programao que se pretende adotar. Uma vez construdo o algoritmo, podemos transport-lo para qualquer linguagem de programao, o que nos d uma flexibilidade para a efetiva implementao do programa. Caractersticas Todo algoritmo deve apresentar algumas caractersticas bsicas: ter fim; no dar margem dupla interpretao (no ambguo); capacidade de receber dado(s) de entrada do mundo exterior; poder gerar informaes de sada para o mundo externo ao do ambiente do algoritmo; ser efetivo (todas as etapas especificadas no algoritmo devem ser alcanveis em um tempo finito).

Formas de Representao Existem vrias ferramentas que podem ser utilizadas para a representao de algoritmos, entre elas: linguagem natural, pseudocdigo (ou portugus estruturado), diagrama de NassiShneiderman (ou Chapin), fluxogramas, etc. A seguir, veremos em nvel de detalhe algumas delas. Descrio Narrativa Faz-se uso da linguagem natural para descrever algoritmos. Exemplo: Receita de Bolo 6

Lgica de Programao

Providencie ingredientes. Misture os ingredientes. Despeje a mistura na forma de bolo. Leve a forma ao forno. Espere 20 minutos. Retire a forma do forno. Deixe esfriar. Prove.

Vantagens O idioma bastante conhecido por ns.

Desvantagens Impreciso. Pouca confiabilidade impreciso acarreta desconfiana). (a a

Extenso (normalmente, escreve-se muito para dizer pouca coisa). Existem trs estruturas bsicas para a construo de algoritmos: sequenciaco, seleo e repetio. A combinao destas trs estruturas permite-nos a construo de algoritmos para a resoluo de problemas extremamente complexos. A programao estruturada baseia-se nestas trs estruturas bsicas. Imagine a seguinte situao: precisamos elaborar um algoritmo para trocar uma lmpada.
Incio - pegue uma escada - coloque-a embaixo da lmpada - busque uma lmpada nova - suba na escada com a lmpada nova - retire a lmpada velha - coloque a lmpada nova - desa da escada Fim

Lgica de Programao

Observe que este algoritmo resolve o nosso problema da troca de lmpada. No entanto, trata-se de um algoritmo bastante simples, que se utiliza apenas da estrutura de sequenciao, ou seja, nenhuma seleo ou repetio de procedimentos aparece no algoritmo. Uma estrutura de sequncia, caracteriza-se por possuir uma nica sequncia de aes, que executada apenas uma vez. No entanto, antes de trocarmos a lmpada devemos nos certificar de que ela realmente esteja queimada, para ento troc-la. Assim, podemos melhorar nosso algoritmo.
Incio - ligue o interruptor - se a lampada no acender, ento: - pegue uma escada - coloque-a embaixo da lmpada - busque uma lmpada nova - suba na escada com a lmpada nova - retire a lmpada velha - coloque a lmpada nova - desa da escada Fim

Agora o nosso algoritmo, alm da estrutura, de sequncia, passa a utilizar uma estrutura de seleo. Na estrutura de seleo, uma condio deve ser analisada e, a partir do resultado da anlise, um "caminho" do algoritmo ser executado. Em outras palavras, uma estrutura de seleo escolhe aes a serem executadas a partir de uma condio (que pode ser simples ou composta). Embora nosso algoritmo tenha melhorado, ainda podemos deix-lo mais completo. Quando verificamos que a lmpada est queimada, subimos para troc-la, mas no consideramos a hiptese da lmpada nova tambm estar queimada. Se isso ocorrer, precisaremos executar algumas aes novamente, at que possamos efetivamente resolver nosso problema.
Incio - ligue o interruptor - se a lmpada no acender, ento: - pegue uma escada - coloque-a embaixo da lmpada - enquanto a lmpada no acender, faa: - busque uma lmpada nova - suba na escada com a lmpada nova - retire a lmpada velha - coloque a lmpada nova - desa da escada Fim

Lgica de Programao

Neste algoritmo, somente iremos parar de trocar a lmpada quando colocarmos uma lmpada que acenda. Portanto, um conjunto de aes ser executado repetidamente enquanto a condio de repetio for verdadeira. Assim, inserimos uma estrutura de repetio no nosso algoritmo, que passa a trabalhar com as trs estruturas bsicas de construo de algoritmos. importante salientar que existem vrias formas de se construir um algoritmo, pois as pessoas pensam de formas diferentes. No entanto, devemos sempre buscar a forma mais otimizada possvel (dentro dos limites impostos pela situao).

1.6 Exerccios Sugeridos


1) Crie uma sequncia lgica para tomar banho. a) Soluo somente com estrutura sequencial: b) Soluo usando estrutura de seleo: c) Soluo com as trs estruturas sequncia, seleo e repetio: 2) Descreva os passos necessrios para somar dois nmeros e multiplicar o resultado pelo primeiro nmero. 2) Descreva com detalhes a sequncia lgica para trocar um pneu de um carro.

Lgica de Programao

Unidade 2 - Diagramas de Fluxo


2.1 Diagrama de Nassi-Shneiderman
Tambm conhecido como diagrama de Chapin, esta ferramenta de representao oferece grande clareza para a representao de sequenciao, seleo e repetio num algoritmo, utilizando-se de uma simbologia prpria. A idia bsica deste diagrama representar as aes de um algoritmo dentro de um nico retngulo, subdividindo-o em retngulos menores, que representam os diferentes blocos de sequncia de aes do algoritmo. Seleo e repetio tambm so representadas de forma grfica, dentro dos retngulos

Sequncia

Ao - 1 Ao - 2 Ao - 3

Seleo Condio V Aes F Aes

10

Lgica de Programao

Repetio

Enquanto (cond) faa

Aes Aes Repetir at (condio)

Exemplo Queremos resolver o seguinte problema: Calcular a mdia de todos os alunos que cursaram uma disciplina X, a partir da leitura das notas da 1 e 2 prova, passando por um clculo de mdia aritmtica. Aps a mdia calculada, devemos anunciar se o aluno foi aprovado ou reprovado por nota. Somente esto aprovados os alunos com mdia maior ou igual 5,0.

Enquanto (no for fim da lista de alunos) faa Leia nota1 Leia nota2 Leia nota3 Media = (nota1+nota2)/2 Media >= 5.0 V Aluno Aprovado F Aluno Reprovado

11

Lgica de Programao

Embora os diagramas N-S ofeream uma representao muito clara do algoritmo, medida que os algoritmos vo se tornando mais complexos, fica difcil realizar os desenhos necessrios numa nica pgina, prejudicando a sua visualizao.

2.2 Fluxogramas
O fluxograma foi utilizado por muito tempo para a representao de algoritmos. No entanto, o seu grande problema permitir o desenvolvimento de algoritmos no estruturados. Com o advento das linguagens de programao estruturada o fluxograma caiu em desuso. O fluxograma utiliza-se de smbolos especficos para a representao de algoritmos. Existe uma certa variao na simbologia empregada, mas mesmo assim, apresentaremos a seguir uma simbologia tradicionalmente usada: Processo

Deciso

Leitura

Escrita

Conector

Terminal Setas de Fluxo de Controle

12

Lgica de Programao

Exemplo Com base no exemplo anterior, feito com N-S, complete o fluxograma abaixo:

Vantagens uma das ferramentas mais conhecidas. Figuras dizem muito mais do que palavras. Padro mundial.

Desvantagens Pouca ateno aos dados, no oferecendo recursos para descrevlos ou represent-los. Complica-se medida que o algoritmo cresce.

13

Lgica de Programao

2.3 Linguagem Natural


A representao de algoritmos atravs de linguagem natural a forma mais espontnea de representao de algoritmos, pois descrevemos os passos do algoritmo utilizando o nosso linguajar cotidiano, escrevendo o algoritmo como um texto simples. Representao Para todos os alunos da disciplina X, faa: ler as notas da 1 e 2 prova, somar as notas e dividir por dois, chegando assim, ao resultado da mdia do aluno. Se a mdia do aluno for maior ou igual a 5,0, ento o aluno est aprovado, seno o aluno est reprovado. Fazer para o prximo aluno. O problema da representao de algoritmos com linguagem natural que quanto maior a complexidade do problema, maior a dificuldade de entendermos o texto que procura descrever os passos do algoritmo, pois no se emprega nenhum recurso diagramtico, e no h uma rigidez na estruturao das aes.

2.4 Pseudocdigo
O pseudocdigo vem sendo amplamente utilizado por projetistas de softwares e programadores, pois obriga o uso de estruturas que facilitem o entendimento do algoritmo, e tambm facilitam a transformao do mesmo em cdigos reais. O pseudocdigo tambm recebe outros nomes, como: portugus estruturado, PDL (Program Design Language), pascalide, etc.. Utilizaremos neste curso o pseudocdigo como a forma de representao padro para algoritmos. Um dos ambientes que entende o pseudocdigo ou portugus estruturado o AMBAP (Ambiente de Aprendizado de Programao desenvolvido pela UFAL Universidade Federal de Alagoas). O exemplo anterior ser representado atravs de pseudocdigo.
//Algoritmo MediaAluno

variaveis numerico nota1, nota2, media

inicio faca enquanto (no for fim da lista de alunos) leia (nota1) leia (nota2) media = (nota1+nota2)/2 se (media >= 5.0)entao escreva ("Aluno aprovado") senao escreva ("Aluno reprovado")

14

Lgica de Programao

fim_se fim_enquanto fim

Observe que no pseudocdigo, somos obrigados a utilizar algumas estruturas bsicas de controle (sequncia, seleo e repetio), de forma a estruturar e organizar melhor os passos do algoritmo.

15

Lgica de Programao

Unidade 3 - Elementos Bsicos do Cdigo


3.1 Variveis e Constantes
Variveis e constantes so conceitos fundamentais para a construo de algoritmos e programas de computadores, pois so atravs deles que um algoritmo "guarda" os dados do problema. Todo dado que tem a possibilidade de ser alterado (portanto, sofrer variao) no decorrer do tempo, dever ser tratado como uma varivel do problema e, portanto, dever ser definido como tal no algoritmo a ser desenvolvido. Quando um dado no tem nenhuma possibilidade de variar com o decorrer do tempo, ele dever ser tratado como uma constante, e dessa forma definido e tratado como tal no algoritmo. Por exemplo, considere o desenvolvimento de um algoritmo para o seguinte problema: calcular as reas de cinco tringulos com medidas diferentes. Sabemos que a frmula para o clculo da rea de um tringulo "b*h / 2", onde "b" o valor da base e "h" o valor da altura do tringulo. Sendo assim, "b" e "h" so dados que iro variar no decorrer do "tempo de execuo" do algoritmo, portanto devero ser tratados como variveis. O nmero "2" da frmula um dado constante e no sofrer variao no decorrer do algoritmo, portanto, deve ser tratado como constante. Variveis e constantes so, em um algoritmo ou programa, nomes que identificam os valores tratados no problema. Estes nomes devem seguir algumas normas e regras para poderem funcionar corretamente: Devem comear por um caractere alfabtico; Podem ser seguidos por mais caracteres alfabticos e/ou numricos; No permitido o uso de caracteres especiais, como: @, #, &, *, +, ?, etc. (exceto o sublinhado), nem espaos em branco. De maneira geral, devem ser legveis e de fcil compreenso dentro do contexto, a fim de viabilizar o entendimento para outros programadores. Exemplos: X, x3, teste, altura1, nota2, abc213, a1b2c3, etc.

3.2 Tipos Primitivos de Dados

16

Lgica de Programao

Todo dado a ser tratado num algoritmo deve pertencer a algum tipo, que ir determinar o domnio de seu contedo. Os tipos mais comuns de dados so conhecidos como tipos primitivos de dados, so eles: numrico, texto (ou caracter) e lgico1. Neste curso, usaremos para a construo de nossos exerccios somente estes trs tipos, mas saiba que existem vrios outros e que, em outras bibliografias sero mais detalhistas. Numrico: todos os valores do tipo numrico seja ele positivo, negativo, zero, ponto flutuante, decimal, etc. Texto: todo e qualquer dado composto por um conjunto de caracteres alfanumricos (nmeros, letras e caracteres especiais), desde que estejam entre aspas. Lgico: todo e qualquer dado que s pode assumir duas situaes verdadeiro ou falso (biestveis).

3.3 Declarao de Variveis


Para elaborarmos nossos algoritmos deveremos, antes de tudo, "listar" todas as variveis que utilizaremos na construo do programa. Esse mtodo muito til principalmente para cdigos muito extensos, uma vez que, na maioria das linguagens de scripts no necessrio declararmos as variveis. Fazemos a declarao de variveis obedecendo ao seguinte padro:
//Algoritmo TesteVariaveis

variaveis tipo: nome_variavel, nome2_variavel, etc

inicio

Na Unidade 14 encontram-se maiores explicaes sobre a linguagem PHP, e na Unidade 15 sobre a linguagem C.

17

Lgica de Programao

<desenvolvimento> fim

Onde: Tipo pode ser numrico, caracter ou lgico. Nome_variavel o identificador da varivel. Operadores (aritmticos, relacionais e lgicos) Quando construmos algoritmos comum trabalharmos com expresses matemticas para a resoluo de alguns problemas. As expresses matemticas podem fazer uso de operadores aritmticos e relacionais. Chamamos de operadores aritmticos o conjunto de smbolos que representa as operaes bsicas da matemtica, conforme tabela a seguir:
Operaes Adio Subtrao Multiplicao Diviso Potenciao Mdulo (resto da diviso) ^ Resto(x,y) Operadores Linguagem C + * / No possuem um smbolo, fazem por funo da linguagem % % Linguagem PHP

H tambm um operador aritmtico especial para obter o resto de uma diviso inteira. Usaremos para essa operao a funo "resto". Exemplo: resto(20, 3) = 2. Um outro grupo importante de operadores formado pelos operadores relacionais. Quando queremos fazer comparaes entre valores, ou entre expresses (tanto matemticas como lgicas), precisamos utilizar esta categoria de operadores. Os operadores relacionais so:

Operaes Operadores Linguagem Linguagem C PHP Igualdade Diferena Maior Menor Maior = <> > < ou >= 18 == !=

Lgica de Programao

igual Menor ou <= igual O resultado de uma relao sempre um valor lgico (verdadeiro ou falso). Exemplos: a) 2+5 = 3+2 F (falso) b) 3*5 <> 2*3 V (verdadeiro) Uma terceira categoria de operadores que podemos utilizar na construo de algoritmos chamada de operadores lgicos. Estes operadores funcionam como conectivos para a formao de novas proposies. Os principais operadores lgicos so: Operaes Conjuno (e) Disjuno (ou) Negao (no) Operadores E OU NAO Linguagem C && || ! Linguagem PHP

Os resultados das operaes lgicas so sempre valores lgicos (verdadeiro ou falso). Para trabalharmos adequadamente com operadores lgicos, temos que conhecer a tabela verdade para cada um dos operadores. Uma tabela verdade o conjunto de todas as possibilidades combinatrias entre os valores das variveis lgicas, conforme apresentado a seguir:

A F F V V

B F V F V

AEB F F F V

A F

B F

A OU B F 19

Lgica de Programao

F V V

V F V

V V V

A F V Exemplos: a) 3 > 6 OU 4 < 5 F OU V Resultado: V b) 4 < 7 E 5 > 9 V E F Resultado: F

NO( A) V F

Na resoluo das expresses aritmticas, lgicas e relacionais, os operadores e as funes matemticas possuem uma hierarquia de prioridade.
Parnteses mais internos Funes matemticas ^ * / resto + operadores relacionais no e ou

20

Lgica de Programao

Exemplo:
No( 2^3 < 4^2) ou abs(int(15/-2)) < 10 No No No 8 < 16 ou abs (int(-7,5)) < 10 8 < 16 ou abs (-7) 8 < 16 No( V ) F ou V ou ou V 7 < V < 10 10

Exerccios Sugeridos 1) Sabendo que A=3, B=7 e C=4, informe se as expresses abaixo so verdadeiras ou falsas. (A+C) > B ( ) B >= (A+2) ( ) C = (B-C) ( ) (B+A) <= C ( ) (C+A) > B ( ) 2) Sabendo que A=5, B=4, C=3 e D=6, informe se as expresses abaixo so verdadeiras ou falsas. (A>C) AND (C<=D) (A>=C) AND (D>=C) ( ) ( )

(A+B) > 10 OR (A+B) = (C+D) ( )

21

Lgica de Programao

Unidade 4 - Comandos de Atribuio, Entrada e Sada de Dados


4.1 Comando de Atribuio
O comando de atribuio permite-nos atribuir um valor para uma varivel, sendo que tipo do dado atribudo para a varivel deve ser compatvel com o tipo declarado para a varivel. A sintaxe utilizada ser: Identificador := expresso2 onde identificador o nome da varivel que receber o valor da expresso. Exemplo:
X := 0 Y := 10 + 7 A := 0.098 Nome := "teste de atribuio" Z := verdadeiro

Nas linguagens C e PHP o smbolo de atribuio =, por exemplo, x = 5. J, nestas linguagens a igualdade representada por ==.

22

Lgica de Programao

4.2 Comando de Entrada de Dados


Na prtica de construo de programas, ser muito comum o uso de comandos que proporcionam a entrada de dados para o computador. Assim, devemos ter uma representao correspondente em nvel de algoritmo para a entrada de dados. Utilizaremos o comando ler para efetuar a entrada de dados para o algoritmo, conforme sintaxe abaixo. Ler varivel Sendo que varivel receber um valor vindo de "fora" do algoritmo para que algum processamento ocorra.

4.3 Comando de Sada de Dados


Alm do comando de entrada de dados ser muito comum o uso de comandos que proporcionem a sada de dados gerados pelo computador. Assim, devemos ter uma representao correspondente em nvel de algoritmo para a sada de dados. Utilizaremos o comando escrever para efetuar a sada de dados do algoritmo, conforme sintaxe abaixo: Escrever varivel, constante, expresso Neste exemplo, o algoritmo mostrar os valores de variveis, constantes e/ou expresses.
//Algoritmo Exemplo

variaveis numerico x, y, a, res caracter nome INICIO Escrever "Entre com o primeiro valor:" Ler x Escrever "Entre com o segundo valor:" Ler y Escrever "Entre com o nome da pessoa:" Ler nome

a:= x * 3 / y res := (a * 2.4)/3

Escrever "O resultado foi: ", res FIM

23

Lgica de Programao

Unidade 5 - Estruturas de Sequenciao, Seleo e Repetio


5.1 Sequncia
A estrutura de sequncia a estrutura mais simples que utilizamos na construo de algoritmos estruturados. Ela formada por um conjunto de instrues (ou comandos) que sero executadas numa sequncia linear de cima para baixo e da esquerda para a direita, ou seja, da mesma forma como elas foram escritas. Utilizamos as palavras inicio e fim para delimitar o bloco de sequncia, conforme abaixo: Exemplo:
INICIO Ler a Ler b c := a + b Escrever c FIM

5.2 Seleo
Uma estrutura de seleo permite a escolha de um conjunto de aes e/ou estruturas que sero executadas a partir do resultado de uma condio (simples ou composta), representada por uma expresso lgica. Utilizaremos a seguinte representao para estruturas de seleo:
se (condio) entao comando 1 comando 2 comando 3 ... fim_se

No caso acima, os comandos somente sero executados se a condio for verdadeira, caso contrrio, o programa continua executando os prximos passos logo aps o smbolo de fechamento de chaves. Temos ainda a possibilidade de outras representaes mais elaboradas, como as que seguem: 24

Lgica de Programao

se (condio) entao comandos ... senao comandos ... fim_se

ou
se (condio) entao comandos ... senao se (condio) entao comandos ... senao se (condio)entao comandos ... senao comandos ... fim_se fim_se fim_se

Nesses dois casos descritos acima, sero executados os comandos apenas de uma das condies e somente se ela for verdadeira. Caso no haja condies verdadeiras sero executados os comandos definidos dentro do bloco seno. Teste de Mesa uma simulao da execuo de um programa ou plano, usando para isso simplesmente papel e lpis para registrar o que teoricamente ocorre em cada passo. Serve para visualizarmos todas as etapas que o computador realiza durante a execuo do algoritmo. Exemplo de Algoritmo Receba a nota da prova1 25

Lgica de Programao

Receba a nota de prova2 Receba a nota de prova3 Receba a nota da prova4 Some todas as notas e divida o resultado por 4 Mostre o resultado da diviso Faa o teste de mesa: Nota da Prova 1 Nota da Prova 2 Nota da Prova 3 Nota da Prova 4 Utilize a tabela abaixo:

Exerccios 1) Identifique os dados de entrada, processamento e sada no algoritmo abaixo.


Receba cdigo da pea Receba valor da pea Receba quantidade de peas Calcule o valor total da pea Mostre o cdigo da pea e seu valor total

2) Faa um algoritmo para calcular o estoque mdio de uma pea, sendo informado o estoque mnimo e o estoque mximo. 3) Construa um algoritmo que leia a cotao do dlar, leia valores em dlar, converta esse valor para real e mostre o resultado. 4) Desenvolva um algoritmo que leia 4 nmeros, calcule o quadrado de cada um, some todos os resultados e mostre o resultado. 5) Construa um algoritmo para pagamento de comisso de vendedores de peas, levando em considerao que sua comisso ser de 5% do total da venda e que voc tem os seguintes dados: preo unitrio da pea e quantidade vendida. 6) Joo comprou um microcomputador para controlar o rendimento dirio de seu trabalho. Toda vez que ele traz um peso de peixes maior que o estabelecido pelo regulamento de pesca do Estado (50 quilos) deve pagar uma multa de R$ 4,00 por quilo excedente. Joo precisa que voc faa um algoritmo que leia a varivel P (peso do peixe) e verifique se h 26

Lgica de Programao

excesso. Se houver, gravar na varivel E (excesso) e na varivel M o valor da multa que Joo dever pagar. Caso contrrio, mostrar tais variveis com o contedo zero. 7) Elabore um algoritmo que leia as variveis C e N, respectivamente cdigo e nmero de horas trabalhadas de um operrio. Aps, calcule o salrio sabendo-se que ele ganha R$ 10,00 por hora. Quando o nmero de horas exceder a 50, calcule o excesso de pagamento armazenando-o na varivel E, caso contrrio zerar tal varivel. A hora excedente de trabalho vale R$ 20,00. No final do processamento mostrar o salrio total e o salrio excedente. 8) Escreva um algoritmo que leia quatro nmeros, calcule o quadrado de cada um e some todos. Se o quadrado do terceiro for maior que mil (1000), mostre o nmero original e finalize o programa. Caso contrrio, mostre o resultado de todos. 9) Escreva um algoritmo que leia um nmero inteiro e mostre uma mensagem dizendo se este nmero par ou mpar, positivo ou negativo. 10) A Secretaria do Meio Ambiente que controla o ndice de poluio mantm trs grupos de indstrias que so altamente poluentes do meio ambiente. O ndice de poluio aceitvel varia de 0,05 at 0,25. Se o ndice sobe para 0,30 as indstrias do 1 grupo so intimadas a suspenderem suas atividades. Se o ndice crescer para 0,4 as indstrias do 1 e 2 grupo so intimadas a suspenderem suas atividades. Se o ndice atingir 0,50 todos os grupos devem ser notificados a paralisarem suas atividades. Faa um algoritmo que leia o ndice de poluio medido e emita a notificao adequada aos diferentes grupos de empresas. 11) Elabore um algoritmo que, dada a idade de um nadador, classifique-o em uma das seguintes categorias: INFANTIL A: 5 a 7 anos INFANTIL B: 8 a 11 anos JUVENIL A: 12 a 13 anos JUVENIL B: 14 a 17 anos ADULTOS: Maiores de 18 anos.

5.3 Repetio
Laos Condicionais e Contados A estrutura de repetio permite que uma sequncia de comandos seja executada um certo nmero de vezes at que uma determinada condio seja satisfeita. Por exemplo, pode-se citar o caso em que se deseja realizar o mesmo processamento para um conjunto de dados diferentes, como a folha de pagamento de uma empresa de 100 funcionrios. Neste caso o mesmo clculo efetuado para cada um dos funcionrios. Para solucionar este problema precisaramos escrever o algoritmo em questo uma vez para cada funcionrio, ou seja, sendo 100 funcionrios teramos que escrev-lo 100 vezes. Outro modo de resolver essa questo seria utilizar a mesma sequncia de comandos, ou seja, fazer a repetio de um conjunto de comandos 100 vezes sem ter que reescrev-lo novamente. 27

Lgica de Programao

A estrutura de repetio tambm chamada de lao ou loop e se divide em: Laos Condicionais Quando no se conhece o nmero de vezes que um conjunto de comandos no interior do lao ser repetido. A repetio ou no dos comandos depender do resultado de uma condio. As estruturas de repetio que implementam esse tipo de lao usam testes no incio e testes no final do lao. Laos Contados Quando se conhece, previamente, quantas vezes o conjunto de comandos ser executado. Esse tipo de estrutura usa varivel de controle. Repetio com Teste no Incio Caracteriza-se por uma estrutura que efetua um teste lgico no incio do lao. Se o resultado do teste for verdadeiro o lao executado retornando novamente ao teste lgico e assim o processo ser repetido enquanto a condio testada for verdadeira. Sintaxe:
faca enquanto (cond) comando 1 comando 2 ... fim_enquanto

Repetio com Teste no Final

28

Lgica de Programao

Caracteriza-se por uma estrutura que permite que um lao seja executado at que o resultado do teste lgico seja verdadeiro. Neste caso o lao executado pelo menos uma vez e ento a condio testada, se o resultado for falso o lao executado novamente e este processo repetido at que o resultado da condio seja verdadeiro. A diferena que existe dessa estrutura para a anterior o fato de ser executada pelo menos uma vez antes de passar pela condio de teste3. Sintaxe:
faca comando 1 comando 2 ... enquanto (cond)

Repetio com Varivel de Controle utilizada quando se conhece previamente o nmero de vezes que se deseja executar um determinado conjunto de comandos. Esse tipo de lao nada mais que uma estrutura dotada de mecanismos prprios para contar o nmero de vezes que o lao vai ser executado obedecendo os limites fixados. Sintaxe:
para variavel de valor_inicio ate valor_final passo incremento comando 1 comando 2 ...

No AMBAP implementada somente repetio teste condicional no incio, porm, em vrias linguagens de programao existem as duas formas apresentadas, por isso constam na apostila.

29

Lgica de Programao

proximo

onde: varivel inicializada com o valor de valor_inicio e, subsequentemente, incrementada de incremento, executando comando1, comando2, ... at que varivel atinja o valor_final. Caso a expresso passo seja omitida, o valor padro 1 assumido.

Exerccios Sugeridos 1) Escreva um algoritmo que leia as notas finais dos alunos de uma disciplina e calcule a mdia da turma. 2) Escreva um algoritmo que leia o nome o sexo a altura e o peso de um grupo de 250 pessoas e informe: Mdia das alturas das mulheres e o nome do homem mais pesado. 3) Escreva um algoritmo que leia dois nmeros inteiros (inicial e final) e mostre os nmeros pares desse intervalo. Alm disso, deve mostrar tambm quantos so e qual a soma desses nmeros. 4) Construa um algoritmo que leia 500 valores inteiros positivos e encontre o maior valor, o menor valor e calcule a mdia dos nmeros lidos.

30

Lgica de Programao

Unidade 6 - Vetores e Matrizes (Arrays)


6.1 Vetores
Vetores so estruturas de dados que permitem o armazenamento de um conjunto de dados, que podem ser referenciados por um mesmo nome e acessados por um ndice. Diferentes linguagens implementam vetores de diferentes formas, podendo restringir seu uso apenas a vetores homogneos (em que todos os dados da estrutura tem o mesmo tipo) ou aceitar vetores heterogneos (em que cada dado pode ser de um tipo diferente). Tambm pode ser possvel construir vetores multi-dimensionais, indexados por mais de um ndice. No exemplo abaixo observamos um exemplo de um vetor homogneo unidimensional (o tipo mais utilizado e que deve ser o primeiro que o aluno deve entender e dominar). Exemplo:
//Algoritmo Soma_Valores

variaveis matriz numerico vet[50] numerico soma, i, val

INICIO val := 50 escrever "entre com ", val, " valores" para i de 1 ate val ler vet[ i ] proximo

soma:=0

para i de 1 ate val soma = soma + vet[ i ] proximo escrever "a soma foi", soma FIM

Observando o cdigo anterior, o uso do vetor razoavelmente claro. Inicialmente ele utilizado para armazenar os valores que vo sendo lidos, e em seguida utilizado no clculo da varivel Soma. 31

Lgica de Programao

Obviamente o exemplo acima poderia ser reproduzido sem o uso de vetores, com o clculo da varivel Soma durante a leitura. Porm, isto pode no ser possvel em exemplos mais complexos, como os sugeridos a seguir.

6.1 Matrizes
A matriz mais comum a de duas dimenses (linha e coluna), por se relacionar diretamente com a utilizao de tabelas. Trabalharemos somente com matrizes de 2 dimenses, por serem mais comuns, mas podem ser necessrias, em algum momento, matrizes de 3 ou mais dimenses. Uma matriz de 2 dimenses estar sempre fazendo meno a linhas e colunas e ser representada por seu nome e tamanho. Dessa forma, uma matriz Tabela[8,5] indica que tem 8 linhas e 5 colunas, conforme a figura.

A matriz pode ser declarada da seguinte forma:


variaveis matriz numerico M[10,10]

Exerccios Sugeridos 1) Crie uma novo algoritmo, com base no algoritmo sobre vetores, em que aps a leitura de todos os dados, pergunte ao usurio se ele deseja a multiplicao dos dados lidos, sua soma ou o clculo de sua mdia. Conforme a entrada informada pelo usurio, uma resposta diferente fornecida pelo sistema. 2) Faa um algoritmo tambm baseado no exemplo, que aps terminada a entrada de dados, exiba todos os nmeros do vetor de forma ordenada.

32

Lgica de Programao

Unidade 7 - Subrotinas (procedimentos e funes)


7.1 Utilizao de subrotinas
medida que a complexidade de um algoritmo aumenta, surge a necessidade de dividir um grande problema em problemas menores, para que seja compreendido mais facilmente. Dessa forma, cada parte menor (mdulo) tem um algoritmo mais simples, e esse trecho menor chamado de subrotina. Alm de facilitar a compreenso do algoritmo, as subrotinas possibilitam que determinados trechos de programas sejam aproveitados em outros programas. Isso facilita a correo, pois, se uma rotina para verificar se um nmero ou no primo est incorreta, por exemplo, sabe-se exatamente qual o trecho do programa que deve ser arrumado. Rotinas que ficam demasiado complexas podem ainda ser divididas em diversas outras rotinas mais simples. O processo de dividir uma subrotina em outras denominado refinamento sucessivo. O processo de se programar um computador torna-se bastante simples quando aplicado algum mtodo para utilizao das subrotinas. Um dos mtodos mais utilizados na programao estruturada o mtodo TOP-DOWN (de cima para baixo) que se caracteriza por: Antes de iniciar a construo do programa, o programador dever ter em mente as tarefas principais que esse programa dever executar. No necessrio saber como funcionaro, somente saber quais so. Deve-se ter em mente como ser o funcionamento do programa principal, que controlar todas as tarefas distribudas em subrotinas. Uma vez definido o programa principal, detalha-se ento as subrotinas. So definidos vrios algoritmos, um para cada rotina em separado, para que se tenha uma viso do que ser executado em cada mdulo de programa. Isso tambm facilita a manuteno (alteraes posteriores necessrias). O mtodo Top-Down pode ser graficamente visualizado conforme a figura:

33

Lgica de Programao

Existem dois tipos de sub-rotinas a serem utilizados na programao, conhecidos como procedimentos (procedures) e funes (functions). As diferenas entre eles so apresentadas a seguir.

7.2 Procedimentos
So, na realidade, trechos de programas independentes mas que, para serem processados, devem ser solicitados pelo programa principal. Exemplo:
procedimento NomeProcedimento ( lista de parmetros ) inicio <comandos> fim

A lista de parmetros, definida no cabealho do procedimento, produz a comunicao de dados entre o procedimento e quem o chamou. O procedimento pode ter de nenhum a vrios parmetros, sendo que tambm pode ter vrios parmetros de entrada, de sada ou ambos. Exemplos:
... limpa_tela // sem nenhum parmetro ... limpa_tela(01,01,24,80) // com parmetros de entrada somente ... Fatorial (5; retorno) // 5 parmetro de entrada e retorno parmetro de sada escrever retorno ...

7.3 Funes
um caso particular de procedimentos. A diferena porm, que apenas uma informao retornada ao programa que a chamou, ou seja, os parmetros, se existentes, so todos de entrada e obrigatoriamente h uma e somente uma sada ou retorno para o programa principal. Algumas linguagens obrigam que a chamada de funo nunca seja sozinha, como os procedimentos, mas sim fazendo parte de um comando de atribuio ou de uma expresso. A sua declarao segue o seguinte formato:
Funcao NomeFuno ( lista de parmetros) inicio <comandos> retornar ( parmetro ) fim

Exemplos do uso de funes:


variaveis

34

Lgica de Programao

numerico A,B

Funcao Soma (A, B) variaveis numerico x inicio x := A + B retornar(x) fim //Programa principal Inicio Ler A Ler B escrever "Soma de A e B:", Soma(A,B) Fim

As rotinas podem ficar no incio de um programa, no final ou ainda em um arquivo separado, dependendo da linguagem utilizada. Uma funo pode ainda retornar um valor verdadeiro (v) ou Falso (f). Nesse caso, as rotinas 1, 1.1 e 2 "enxergam" as variveis A e B, porm, dentro da Rotina 1, a varivel A definida novamente. Dessa forma, o novo valor da varivel ser vlido para a rotina 1.1. As variveis X e Y no sero visualizadas pelo programa principal. A varivel X presente na rotina 2 no interfere na varivel X que est na rotina 1 (so independentes). A estas peculiaridades Escopo de Variveis. denomina-se

35

Lgica de Programao

Unidade 8 - Contedo Dinmico


8.1 Contedo Dinmico - Conceito
A linguagem HTML permite a criao de pginas para a Web contendo texto, imagens, etc, mas uma limitao desta linguagem que no possvel produzir contedo que sofra mudanas de acordo com fatores externos. Para isso criou-se as linguagens conhecidas como Server side, ou seja, linguagens que so processadas no servidor web e nos permitem uma gama de recursos que at ento no existiam, como por exemplo: - Utilizao de variveis - Processamento de dados de formulrios - Acesso a bancos de dados Quando navegamos por um site chamado esttico, ou seja, com contedo imutvel, a cada clique disparamos o seguinte processo:

1- O navegador solicita ao servidor uma pgina HTML. 2- O servidor procura por este arquivo e o retorna para o navegador. Agora veja a diferena quando navegamos por um site com contedo dinmico:

36

Lgica de Programao

1. O navegador solicita ao servidor um arquivo de linguagem server side. 2. O servidor procura por este arquivo e passa para o interpretador desta linguagem, que processa os comandos contidos neste arquivo. 3. Aps o processamento o interpretador retorna para o servidor Web o resultado deste processamento, formatado em HTML. 4. O Servidor ento, retorna ao navegador este resultado.

8.2 Linguagens:
Entre as linguagens mais populares atualmente no desenvolvimento de sites dinmicos podemos citar o ASP (Active Server Pages, mantido pela Microsoft), JSP (Java Server Pages, mantido pela SUN) e o PHP (PHP Hypertext Preprocessor, mantido pelo PHP Group). Resumo: - Websites dinmicos possuem como principal caracterstica pginas que tm contedos que podem variar de acordo com fatores externos ao cdigo HTML. - As duas principais linguagens utilizadas no desenvolvimento de websites dinmicos so o ASP, da Microsoft e o PHP, do PHP Group.

37

Lgica de Programao

Unidade 9 - Linguagem PHP


PHP uma linguagem server side que foi criada originalmente pelo programador Rasmus Lerdorf para utilizao em seu site pessoal. Originalmente a sigla queria dizer Personal Home Page, significado que demonstrava bem que a linguagem ainda dava seus primeiros e despretensiosos passos. A linguagem que mais influenciou o PHP foi linguagem Perl, utilizada no incio da web principalmente para o tratamento de dados de formulrios com os famosos scripts CGI. Aps a adio de um pacote para tratamento de dados de formulrio e outro que dava suporte conexo com bancos de dados mSQL (miniSQL), a linguagem foi disponibilizada para o pblico e passou a receber contribuies de diversos programadores. A primeira verso do PHP utilizada em larga escala foi verso 3, que embora contendo pequenos bugs, j era utilizada por milhares de websites. Hoje o PHP se encontra na verso 5 e possui suporte conexo com os mais diversos bancos de dados, Orientao a Objetos, gerao dinmica de grficos, LDAP, XML, etc...

9.1 Como criar um arquivo PHP


Por ser uma linguagem interpretada, um arquivo PHP nada mais do que um arquivo texto. Devido a esta caracterstica, um arquivo PHP pode ser criado em praticamente qualquer editor disponvel no mercado, desde os mais avanados at os mais simples, como o Bloco de Notas. Todo arquivo PHP deve possuir a extenso .php, para possibilitar ao servidor web distingui-lo dos demais arquivos (HTML, JavaSript, XML, etc...). esta extenso que permite ao servidor web saber que este arquivo deve ser repassado ao interpretador PHP antes de retornar o resultado para o navegador. Mas no basta que informemos ao servidor web que este arquivo deve ser passado para o interpretador, devemos informar ao interpretador que partes deste arquivo devem ser processadas como cdigo PHP, o que nos leva ao nosso prximo tpico:

9.2 Delimitando o cdigo PHP


Vejamos a diferena de uma pgina HTML comum, que cumprimenta o usurio que est entrando em nosso site, e uma pgina PHP que far a mesma coisa, porm chamando o usurio pelo seu nome. No se preocupe neste momento com sintaxe e comandos PHP. Este exemplo apenas ilustra a utilizao de delimitadores. Exemplo 1: index.html
<html> <head> <title>Teste 1</title>

38

Lgica de Programao

</head> <body bgcolor=#FFFFFF> Ol, Usurio! </body> </html>

Exemplo 2: index.php
<html> <head> <title>Teste 1</title> </head> <?php $usuario = Paulo; ?> <body bgcolor=#FFFFFF> Ol, <?php echo $usuario; ?>! </body> </html>

Note que temos dois pares de tags que no so HTML, representados pela tag <?php e a sua tag de fechamento, ?>. Tudo o que estiver entre estas duas tags automaticamente processado pelo interpretador PHP como cdigo, enquanto que o restante tratado como HTML comum, e por consequncia, ignorado pelo interpretador.

9.3 Delimitadores alternativos


Embora as tags de delimitao de cdigo PHP que so utilizadas como padro pelos programadores sejam as tags <?php e ?>, o interpretador reconhece como vlidas as seguintes alternativas: - <? e ?> No recomendvel pela possibilidade de confuso com arquivos XML, que possuem uma tag que inicia exatamente pelos caracteres < e ?. - <% e %> No recomendvel pela possibilidade de confuso com arquivos ASP, que utilizam exatamente mesma notao. - <script language=php> e </script> No recomendvel por se tratar da notao padro para scripts client side (que so executados no lado cliente), como JavaScript, por exemplo. A no ser que haja um forte motivo para utilizar um dos delimitadores acima, recomendamos enfaticamente o uso dos delimitadores padro: <?php e ?>.

9.4 Separadores de instrues


Existem duas formas de separar instrues em PHP: 39

Lgica de Programao

- Para separar linhas de comandos utilizamos o ponto e vrgula, como no exemplo abaixo: Exemplo: Delimitando comandos
<?php $usuario = Paulo; echo Ol, $usuario!; ?>

- Para delimitar blocos de cdigos em Estruturas de Controle (que veremos mais adiante) utilizamos chaves: Exemplo: Delimitando blocos
if ($usuario == Paulo) { echo Ol, $usuario!; }

Note que o comando que define o bloco de cdigo no terminado por ponto e vrgula.

9.5 Comentrios
Comentrios servem, principalmente para auxiliar o programador ou equipe de programadores a se orientar dentro de um cdigo e para ajudar na tarefa de debug de um arquivo PHP. Comentrios so absolutamente ignorados pelo interpretador. Existem duas formas de comentrios disponveis em PHP: - Comentrios de uma linha ou linhas comentadas: So comentrios curtos que comeam e terminam na mesma linha. Para comentar uma linha utilizamos duas barras: Exemplo: Comentrio de uma linha
<?php // Este um comentrio de uma linha. ?>

Comentrios em mais de uma linha, ou blocos comentados: So comentrios mais extensos, utilizados para grandes descries ou para anular a execuo de uma srie de linhas de cdigo. Para isso utilizamos uma notao semelhante tags HTML: iniciamos o comentrio por uma barra e um asterisco e o finalizamos com um asterisco e uma barra: Exemplo: Bloco comentado
<?php /* Este um comentrio em mais de uma linha. Todo este bloco ser ignorado pelo interpretador PHP. */ ?>

40

Lgica de Programao

9.6 Estruturas de dados


Estruturas de dados podem ser entendidas como compartimentos que nos permitem armazenar informaes. Utilizamos estruturas de dados para que possamos trabalhar mais de uma vez com o mesmo dado em um programa. Em PHP existem trs estruturas bsicas de dados, que veremos com mais detalhes a seguir: - Variveis - Constantes - Arrays

9.7 Variveis
Variveis so a estrutura de dados mais comumente utilizada. Uma varivel uma estrutura de dado que nos permite guardar apenas um valor por vez. Variveis, assim como os arrays em PHP so denominadas pelo sinal de dlar. Veja o exemplo, ainda utilizando a varivel $usuario: Exemplo: Utilizando variveis
<?php $usuario = Paulo; // Inicializamos a varivel usuario com o valor Paulo $usuario = Joo; /* A partir deste momento a varivel usuario troca completamente de valor, contendo o valor Joo.*/ ?>

9.8 Constantes
Constantes, ao contrrio das variveis, so estruturas de dados cujo valor definido apenas uma vez, no podendo ser modificado. Embora o PHP aceite o nome de constante escrito em caracteres minsculos, uma boa prtica de programao definirmos o nome de uma constante sempre utilizando apenas caracteres maisculos. Constantes so declaradas atravs do comando define, define(nome_da_constante, valor [, insensibilidade__caixa]); Veja o exemplo: Exemplo: Declarando constantes
<?php define (USUARIO, Paulo); define (Pais, Brasil, FALSE); ?>

com

seguinte

sintaxe:

41

Lgica de Programao

O parmetro insensibilidade__caixa, que tem como parmetros possveis TRUE (verdadeiro) ou FALSE (falso) opcional. Por default este parmetro TRUE, ou seja, a constante deve ser chamada sempre se respeitando maisculas e minsculas. Na segunda linha de nosso exemplo, a constante pode ser chamada de qualquer forma Pais, PAIS, pais, PaIs, etc... enquanto que na primeira linha o interpretador PHP s reconhecer a constante se ela for chamada exatamente como foi definida, ou seja, toda em caixa alta.

9.9 Arrays
Arrays so vetores ou matrizes, estruturas de dados chamada compostas, pois tm como caracterstica a possibilidade de armazenar mais de um dado ao mesmo tempo. Estes dados so acessados atravs do que chamamos de ndice. Em PHP os arrays so definidos de uma forma mista: ao mesmo tempo em que declaramos o nome do array com o sinal de dlar, devemos utilizar o comando array para indicar que esta estrutura de fato uma matriz. Veja o exemplo de uma definio de array: Exemplo: Definindo um array
<?php $usuarios = array(Paulo, Joo); ?>

Neste exemplo definimos um array chamado usuarios contendo dois elementos: Paulo e Joo. Como no definimos explicitamente os ndices deste array, eles so automaticamente definidos pelo interpretador de acordo com a ordem dos elementos. importante notar que, ao contrrio do uso coloquial, o primeiro elemento de um array ordenado sempre definido pelo ndice zero. Caso queiramos chamar um elemento especfico deste array, Joo, por exemplo, utilizamos a seguinte notao:
$nome_do_array[indice];

Assim sendo nosso exemplo de saudao ao usurio, utilizando um array, poderia ser escrito da seguinte forma: Exemplo: Acessando um elemento de um array

42

Lgica de Programao

<html> <head> <title>Teste 1</title> </head> <?php $usuarios = array(Paulo, Joo); ?> <body bgcolor=#FFFFFF> Ol, <?php echo $usuarios[1]; ?>! </body> </html>

Podemos tambm criar o que chamamos de arrays associativos, ou seja, arrays cujo ndice explicitamente definido por ns: Exemplo: Declarando um array associativo
<?php $usuarios = array( Paulo => Paulo da Silva, Joo => Joo Paulo da Costa); ?>

E para chamarmos algum dos elementos deste array utilizamos exatamente mesma forma mencionada anteriormente: Exemplo: Acessando um elemento de um array associativo
<?php echo $usuarios[Paulo]; ?>

Resumo: - Para delimitarmos comandos em PHP utilizamos o ponto e vrgula, enquanto que para blocos de cdigos em estruturas de controle usamos as chaves. - Comentrios em PHP so marcados por duas barras quando forem comentrios de apenas uma linha ou delimitados por barra e asterisco e asetrisco e barra quando forem comentrios em mais de uma linha. - Em PHP possumos trs estruturas bsicas de dados: Variveis, Constantes e Arrays, sendo estes ltimos chamados de estruturas compostas, pois podem armazenar mais de um dado ao mesmo tempo. Todas as estruturas de dados em PHP so representadas pelo sinal de dlar.

9.10 Tipos de Dados Suportados


Existem 3 tipos bsicos suportados pelo interpretador PHP: - Strings ou texto. - Numricos inteiros e de ponto flutuante. - Booleanos Veremos a seguir cada um destes tipos com maiores detalhes. Strings 43

Lgica de Programao

Strings podem ser compreendidas como texto. Este texto pode conter qualquer tipo de caractere, sejam nmeros, letras, acentos, caracteres especiais, etc. Strings so sempre delimitadas por aspas, que podem ser tanto duplas quanto simples. Os dois exemplos abaixo so variveis que contm strings em seu valor: Exemplo: Declarando strings
<?php $var1 = Teste; $var2 = Teste; ?>

A diferena no uso das aspas simples ou duplas est na forma como o interpretador PHP tratar o contedo da string. No caso das aspas duplas poder ocorrer o que chamamos de interpolao, ou seja, se uma string contiver uma varivel, o interpretador PHP automaticamente converter a varivel para seu valor. As aspas duplas tambm permitem ao interpretador reconhecer caracteres especiais, como o caractere de nova linha, por exemplo. No caso da utilizao de aspas simples a interpolao no ocorre, assim como no ocorre o reconhecimento de caracteres especiais. Veja o seguinte exemplo para uma melhor compreenso das diferenas: Exemplo: Utilizao de aspas simples e duplas
<?php $var1 = teste; $var2 = teste; echo Isto um $var2; echo Isto um $var1; ?>

O primeiro comando echo resultar no texto: Isto um teste Enquanto que o segundo produzir como resultado: Isto um $var1 Numricos Numricos so os tipos que representam nmeros. So eles: - Inteiros - De ponto flutuante, tambm conhecidos como float ou double. Tipos numricos so representados pela ausncia de aspas: Exemplo: Declarando variveis numricas

44

Lgica de Programao

<?php $var1 = 10; $var2 = 0.5; $var3 = -5; ?>

Booleanos Um tipo booleano o que representa apenas dois valores possveis: verdadeiro ou falso. Normalmente estes valores so representados pelas palavras reservadas TRUE e FALSE: Exemplo: Declarando uma varivel booleana
<?php $ativo = TRUE; ?>

importante ressaltar que o interpretador PHP sempre considerar um valor como sendo verdadeiro, a no ser nos seguintes casos: - O booleano FALSE - O inteiro 0 (zero) - O float 0.0 - A string vazia ou - A string 0 ou 0 - Um array vazio

Converso de tipos A exemplo de outras linguagens web, PHP procura fazer a converso de tipos automaticamente. Exemplo: converso automtica de tipos
<?php $var1 = 1; $var1 += 5; $var1 += 2.7; ?>

Neste exemplo nossa varivel $var1 comea contendo uma string. Na segunda linha ela passa a conter um inteiro, enquanto que a partir da terceira linha seu valor passa a ser um float. Tambm possvel alterar o tipo de dado de uma varivel utilizando-se o comando settype, que possui a seguinte sintaxe: settype(varivel, tipo); O parmetro tipo deve conter um destes possveis valores: 45

Lgica de Programao

- Boolean - integer - float - string Sendo assim, nosso exemplo de transformao de tipos poderia ser reescrito de forma no ser necessrio modificar o valor da varivel: Exemplo: modificando o tipo de uma varivel com a funo settype
<?php $var1 = 1; settype($var1, integer); settype($var1, float); ?>

Resumo - PHP suporta os seguintes tipos bsicos: string, numrico e booleano. - Para realizar a converso entre tipos efetuamos operaes com a varivel ou utilizamos o comando settype.

9.11 Estruturas de Controle


Estruturas de controle so comandos que nos permitem controlar a forma como nosso programa ser executado. Existem dois tipos de estruturas de controle: - Condicionais - Loops Veremos agora cada uma das estruturas com mais detalhes. Condicionais Estruturas condicionais, como o prprio nome j diz, so estruturas que impem uma condio para que um ou mais comandos sejam executados. So elas:
If Sintaxe: if (condio) { comandos }

Descrio: O if a estrutura condicional mais simples. Os comandos contidos no bloco delimitado pelas chaves s sero executados no caso da condio ser verdadeira. Exemplo: Utilizando uma condicional if 46

Lgica de Programao

if ($usuario == Paulo) { echo Ol, Paulo.; }

O if suporta, ainda, mltiplas condies e o que fazer se a condio for falsa. Isto feito atravs das condies else if e else:
if (condio1) { comandos } else if (condio2) { comandos } else { comandos }

Switch sintaxe:
switch(varivel) { case valor1: comandos break; case valor2: comandos break; default: comandos }

Descrio: O condicional switch comumente utilizado para evitar instrues if-else if muito longas, ou seja, quando queremos testar uma gama muito grande de condies. Cada instruo case testa pela igualdade da varivel com o valor. Note que a limitao que ocorre com o condicional switch que apenas a igualdade testada. A instruo break obrigatria entre cases, pois ela que separa os blocos de instrues que sero executadas dependendo de cada condio. A instruo default opcional e diz para o interpretador PHP o que fazer se todas as condies expostas nas instrues case forem falsas. Exemplo: Utilizando uma condicional switch 47

Lgica de Programao

switch($usuario) { case Paulo: echo Ol Paulo.; break; case Joo: echo Ol Joo; break; default: echo Usurio desconhecido; }

Loops (laos de repetio) Loops so estruturas que causam a repetio de uma srie de instrues dependendo ou no de uma condio. So elas: For sintaxe:
for (inicializao_varivel; condio_varivel; operao) { comandos }

Descrio: Um loop for uma estrutura de controle que causar a repetio de comandos com um nmero finito de iteraes. Para isso criamos uma varivel contadora, testamos uma condio e a incrementamos ou decrementamos para que o loop tenha continuidade. Exemplo: Utilizando um loop for

for ($c = 0; $c < 10; $c++) { echo Esta a $c iterao de nosso loop de exemplo.; }

Em nosso exemplo teremos 10 iteraes em nosso loop (de 0 a 9). While sintaxe:
while(condio) { comandos }

48

Lgica de Programao

Descrio: Um loop while executado quantas vezes forem necessrias at que a condio especificada seja satisfeita (seja verdadeira). Exemplo: Utilizando um loop while

$c = 0; while ($c < 10) { echo Esta a $c iterao de nosso loop de teste.; $c++; }

Note que para reproduzir o comportamento de nosso loop for com um loop while precisamos incluir duas instrues explcitas: Na primeira linha inicializamos nossa varivel com o valor zero. Se esta linha estivesse dentro do bloco a ser executado pelo loop teramos o que chamamos de loop infinito, pois a cada iterao a varivel seria reinicializada com o valor zero e, portanto, seria sempre menor do que 10. Na ltima linha de nosso bloco de instrues incrementamos a varivel (o equivalente operao $c = $c + 1;). Se esta linha estivesse fora do bloco a ser executado pelo loop tambm teramos um loop infinito, pois o incremento jamais aconteceria e a varivel seria sempre menor do que 10. do-while sintaxe:
do { comandos } while (condio)

Descrio: O loop do-while extremamente parecido com o loop while, mas possui uma diferena importantssima: o bloco de comandos ser executado sempre pelo menos uma vez, j que a condio testada apenas no final da primeira iterao. Exemplo: Utilizando um loop do-while
$c = 0; do { echo Esta a $c iterao de nosso loop de teste.; $c++; } while ($c < 10)

Note que se tivssemos inicializado a nossa varivel contadora com o valor 1 e testssemos condio $c < 1 ainda assim teramos uma execuo do loop, pois a condio s comea a ser testada aps a primeira iterao. 49

Lgica de Programao

Arrays (vetores e matrizes) Para sabermos quantos elementos existem em um array utilizamos funo count: count (array [, modo]);

Exemplo: Retornando o nmero de elementos em um array


$numero_usuarios = count ($usuarios);

O parmetro modo opcional e pode conter um dos seguintes valores: 1 ou COUNT_RECURSIVE Conta recursivamente o nmero de elementos em um array multidimensional. 0 (zero) o modo default, ou seja, faz a contagem de forma no-recursiva, sendo o array multidimensional ou no. Obtendo-se o nmero de elementos de um array temos condies de percorrer um array com um loop for: Exemplo: percorrendo um array com um loop for
for ($c = 0; $c < count($usuarios); $c++) { echo Ol, .$usuarios[$c].<BR>; }

Note que esta forma de percorrer um array, ao contrrio do loop foreach, s funcionar com arrays de ndices numricos. Funes (subrotinas) A sintaxe bsica para definir uma funo :
function nome_da_funo([arg1, arg2, arg3]) { Comandos; ... ; [return <valor de retorno>]; }

50

Lgica de Programao

Qualquer cdigo PHP vlido pode estar contido no interior de uma funo. Como a checagem de tipos em PHP dinmica, o tipo de retorno no deve ser declarado, sendo necessrio que o programador esteja atento para que a funo retorne o tipo desejado. recomendvel que esteja tudo bem documentado para facilitar a leitura e compreenso do cdigo. Para efeito de documentao, utiliza-se o seguinte formato de declarao de funo:
tipo function nome_da_funcao(tipo arg1, tipo arg2, ...);

Este formato s deve ser utilizado na documentao do script, pois o PHP no aceita a declarao de tipos. Isso significa que em muitos casos o programador deve estar atento ao tipos dos valores passados como parmetros, pois se no for passado o tipo esperado no emitido nenhum alerta pelo interpretador PHP, j que este no testa os tipos.

51

Lgica de Programao

Unidade 10 -

Linguagem C

A linguagem C foi primeiramente criada por Dennis M. Ritchie e Ken Thompsom no laboratrio Bell em 1972, baseada na linguagem B de Thompson que era uma evoluo da antiga linguagem BCPL. A linguagem ficou contida nos laboratrios at o final da dcada de 70, momento que comeou a popularizao do sistema operacional UNIX e consequentemente o C (o UNIX desenvolvido em C). As principais caractersticas da linguagem C so: A unio de conceitos de linguagem de montagem e programao de alto nvel (o programador usufrui recursos de hardware sem a necessidade de conhecer o assembly da mquina); Linguagem compilada; Linguagem estruturada; Possui poucos comandos; No possui crtica eficiente para erros de execuo; Uma linguagem em constante evoluo. Existem verses orientadas a objeto e visuais como C++ e C++ Builder, entre outras.

10.1 Estrutura bsica de um programa em C


Um programa em C consiste em uma ou vrias funes, uma das quais precisa ser denomindada main. O programa sempre comear executando a funo main. Definies de funes adicionais podem preceder ou suceder a funo main. Para escrever um programa em linguagem C necessrio seguir algumas regras gerais: Toda funo deve ser iniciada por uma chave de abertura { e encerrada por uma chave de fechamento }; Toda funo sucedida de parntesis ( ); Todo programa dever conter a funo main; As linhas de cdigo so sempre encerradas por um ; (ponto-e-vrgula) ; A formatao dos programas completamente livre, mas temos por convenincia manter a legibilidade; Os comandos so executados na ordem em que foram escritos; Os comentrios devem ser delimitados por /* no incio e */ no final. Podem ser usados tambm os caracteres // para comentrios de uma linha.

Sintaxe bsica: 52

Lgica de Programao

/* Os comentrios podem ser colocados em qualquer parte do programa */ Declarao de variveis globais
void main (void) { Declarao de variveis locais ... Comandos; ... } Tipo funo (lista de argumentos) { Declarao das variveis locais funo ... Comandos; ... }

Exemplo de um programa em C:
#include <stdio.h> #include <conio.h> float processa(float r); //declarao da funo processa void main (void) // funo principal main { float raio, area; //delcarao de variveis locais clrscr (); // comando para limpar a tela printf(Raio: ); scanf(%f, &raio); area = processa(raio); printf(Area: %f, rea); getche(); } float processa (float r) //implementao da funo processa { float a; //declarao de variveis locais a=3.1415*r*r; return(a); }

10.2 Comando if
O comando if instrui o computador a tomar uma deciso simples. Se o valor entre parnteses da expresso de controle for verdadeiro ele executa as instrues, caso seja falso, as instrues sero ignoradas, ou executadas as que esto contidas no bloco do else. O comando if encadeado e o comando switch possuem a mesma sintaxe da linguagem PhP. Exemplo:
if (x%2)

53

Lgica de Programao

printf (x impar); else printf (x par );

10.3 Estruturas de repetio


Comando for:
for (inicializao; teste; incremento) { comandos; }

Exemplo:
for (a=1; a<100; a++) { printf(\n %i, a); }

Comando While sintaxe:


while (expresso teste) { comandos; }

Exemplo:
while (conta < 10) { total = total + conta; printf(conta = %i, total = %i, conta, total); conta++ }

Comando do..while:
do { comandos; } while (expresso teste);

Exemplo:
do { y--; x++; } while (y);

10.4 Arrays (vetores e matrizes)

54

Lgica de Programao

Um vetor ou matriz um tipo de dado usado para representar uma certa quantidade de valores homogneos. A linguagem C no valida limites dos vetores, cabe ao programador verificar o correto dimensionamento. O primeiro ndice o zero. Vetores possuem uma ou mais dimenses, como conveno, os vetores bidimensionais so chamados de matrizes. Declarao:
tipo variavel [tamanho]; //vetor tipo variavel [tamanho] [tamanho]; //matriz

10.5 Funes (subrotinas)


Uma funo uma unidade de cdigo de programa autnoma desenhada para cumprir uma tarefa particular. A funo recebe um certo nmero de parmetros e retorna apenas um valor. Da mesma maneira que so declaradas as variveis, deve-se declarar a funo. A declarao de uma funo chamada de prottipo e uma instruo geralmente colocada no incio do programa que estabelece o tipo da funo e os argumentos que ela recebe. Declarao
tipo nome_funo (declarao dos parmetros) void main(void) { a=nome_funo(lista dos parmetros); } tipo nome_funo(lista dos parmetros) { declarao das variveis locais comandos; return (valor); }

O tipo de uma funo determinado pelo tipo de valor que ela retorna pelo comando return e no pelo tipo de seus argumentos.

55

Lgica de Programao

Unidade 11 -

Fundamentos Orientao a Objetos

Orientao a Objetos o nome que os pesquisadores da computao, na dcada de 70, usaram para batizar este novo paradigma. Esse nome foi dado porque, de acordo com a viso de mundo desses pesquisadores, tudo objeto. Ou ao mnimo, se pretende que seja. Um paradigma uma maneira diferente de se tentar enxergar uma mesma coisa, um mesmo mundo. O paradigma da Orientao a Objetos (OO) busca bases filosficas para tentar traduzir um mundo mais humano s instrues que o processador realmente entende. E so de viagens deste tipo, combinadas estrutura de linguagens imperativas, como o C ou Pascal, que surgem as linguagens orientadas a objetos. E estas ltimas se responsabilizaram pela existncia da maioria dos grandes softwares produzidos nos dias atuais em todo o mundo. A Crise do Software, ocorrida entre as dcadas de 1960 e 1970, caracterizou-se principalmente por um motivo: complexidade. O modelo de desenvolvimento de sistemas da poca j no atendia demanda e no conseguia suprir, de forma adequada, todas as necessidades e/ou tarefas que envolviam a construo de um sistema de informao. Essa forma de trabalho acarretava diversos problemas, tais como: Falta de produtividade das equipes; Falta de qualidade e confiabilidade do software; Grande dificuldade de manuteno; Atraso na entrega do software ao usurio; Tempo de vida do software curto; Custos elevados de desenvolvimento e, principalmente, de manuteno. Toda essa situao acabou levando os profissionais da poca a buscar uma soluo alternativa, pois a complexidade dos sistemas j havia chegado a tal ponto que nem os programadores conseguiam domin-la mais. Sabia-se que as linguagens estruturadas, bem como o prprio paradigma, no davam mais suporte s necessidades, e esta, possivelmente, tenha sido a principal causa do surgimento da Orientao a Objetos. O desenvolvimento orientado a objetos impe (implicitamente) uma disciplina que diminui, se no todos, a grande maioria dos esforos inteis provenientes da programao estruturada e/ou tcnicas baseadas em banco de dados. Problemas, que muitas vezes, so complicados de serem resolvidos pela programao estruturada, so facilmente solucionados pela orientao a objetos. Na Orientao a Objetos no existe um conceito de sistema, como na viso estruturada. Isto se deve ao fato de que aqui a nfase em objetos e classes, e no em sistemas e subsistemas. Um programa ser ento um grande objeto composto de outros objetos formando assim o que se chama de mecanismo, o qual define um contexto de negcio e seus respectivos cenrios.

11.1 Conceitos bsicos


56

Lgica de Programao

Para compreender a essncia da Orientao a Objetos necessrio conhecer e entender alguns conceitos. Alguns deles foram herdados do paradigma estruturado e receberam um enfoque um pouco diferente de sua aplicao. Para analisar problemas complexos, a metodologia de orientao a objetos utiliza os seguintes mtodos: Abstrao; Hierarquizao; Encapsulamento; Modularizao; Classificao; Relacionamento. Abstrao Abstrao a habilidade de ignorar os aspectos no relevantes de um assunto para o propsito em questo, tornando possvel uma concentrao maior nos assuntos principais. Quando se quer diminuir a complexidade, seleciona-se parte do que est sendo analisado, em vez de tentar compreender o todo. Selecionados os objetos, necessrio definir os procedimentos desses objetos, ou seja, definir o comportamento de cada objeto selecionado. Isto vem de acordo com o escopo do sistema. S sero definidos os procedimentos que ajudaro a resolver o problema pelo qual o sistema est sendo criado. Definir procedimentos errados pode significar que o escopo do sistema e seus objetivos no foram bem entendidos e atendidos. Abstraes permitem gerenciar a complexidade e concentrar a ateno nas caractersticas essenciais de um objeto. Uma abstrao dependente da perspectiva: o que importante em um contexto pode no ser importante em outro. Levando em considerao essa definio, pode-se afirmar que o Princpio da Abstrao aplicado em todos os demais Princpios da Orientao a Objetos. Hierarquizao Aps dividir uma forma complexa em vrias partes, comum a hierarquizao destas partes, ou seja, ordenao e organizao delas. Essa organizao, normalmente, parte do mais geral para o mais especfico. o que se chama de hierarquizao. Por exemplo, a figura projeta uma hierarquia com a percepo do tipo de objeto Pessoa no nvel mais alto, o que significa que Pessoa um tipo mais geral de objeto que Empregado e que Estudante. Empregado e Estudante so subtipos de Pessoa, ou, da forma reversa, Pessoa um supertipo de Empregado e de Estudante. Todavia, hierarquizar um todo no significa priorizar determinada parte.

57

Lgica de Programao

O nvel de detalhe do exerccio da hierarquizao depende nica e exclusivamente do observador. A hierarquizao de um sistema d origem, normalmente, a poucos subsistemas, porque estes utilizam elementos comuns. Por exemplo, no microcomputador, o elemento memria utilizado por todos os componentes: CPU, teclado e vdeo. Outro fato a se considerar para o nvel de detalhamento da hierarquizao o objetivo e contexto do negcio, ou seja, para um bom entendimento do problema e, consequentemente, a criao de uma soluo adequada a ele, importante no perder o foco do objetivo que se deseja e o contexto do negcio ao qual se est trabalhando. Isso ajuda a delimitar o nvel de detalhe do trabalho de hierarquizao. Encapsulamento Encapsulamento um mecanismo que utilizamos para esconder detalhes de estruturas complexas, que de outra forma iriam interferir na anlise. O objetivo do encapsulamento restringir ou definir o escopo da informao, para obter legibilidade, manutenibilidade e principalmente reutilizabilidade no desenvolvimento de sistemas. O encapsulamento protege os dados de um objeto contra corrupo. Se todos os programas pudessem acessar os dados de qualquer maneira que os usurios desejassem, os dados poderiam se facilmente adulterados ou usados para fins indevidos. O encapsulamento protege os dados contra utilizao arbitrria e que fujam aos objetivos. O encapsulamento esconde, dos usurios de um objeto, os detalhes da implementao interna. Os usurios compreendem quais operaes podem ser solicitadas de um objeto, mas no conhecem os detalhes de como a operao executada. Todas as caractersticas especficas dos dados de um objeto e a codificao de suas operaes ficam escondidas. Classificao Classificar associar o objeto analisado a uma determinada categoria. Cada categoria possui caractersticas prprias. Ao se comparar as caractersticas do objeto analisado com as caractersticas daquela categoria, que se pode dizer se um objeto pode ser ou no classificado como pertencente quela categoria, definindo-se assim um tipo de objeto. Um tipo de objeto uma categoria de objeto.

58

Lgica de Programao

Os tipos de objeto so importantes porque eles criam os elementos conceituais bsicos para se projetar os sistemas. Na programao baseada em objetos, esses elementos bsicos orientam o projetista na definio de classes e suas estruturas. Alm disso, os tipos de objeto fornecem os ndices para a operao do sistema. Por exemplo, operaes tais como Contratar, Promover e Demitir esto intimamente ligadas ao tipo de objeto Empregado, porque elas alteram o estado de um empregado. Em outras palavras, um objeto s deve ser manipulado via operaes associadas ao seu tipo. Sem tipos de objeto, portanto, as operaes no podem ser definidas adequadamente. Modularizao Modularizar juntar partes com algumas semelhanas. Para melhor entendermos um sistema complexo, juntamos categorias com algumas caractersticas comuns em mdulos. Este conceito bem empregado na fase de projeto do software. atravs da aplicao dele que conseguimos organizar melhor os componentes de sistema, auxiliando no entendimento da construo, da manuteno e, muitas vezes, na implantao do software. Relacionamento Para o funcionamento do todo, necessrio que as partes funcionem separadamente, mas em conjunto. Este funcionamento em conjunto (cooperao) possvel porque as partes se relacionam entre si. O relacionamento entre os objetos feito atravs de mensagens, passadas de uma parte para outra. Uma empresa, por exemplo, composta de diversos departamentos, funcionando autonomamente. Mas, para que a empresa como um todo atinja seu objetivo (ou seja, lucre), necessrio um relacionamento entre estes departamentos, para que funcionem em conjunto. Este relacionamento possvel atravs da troca de mensagens entre os integrantes dos departamentos. No paradigma da Orientao a Objetos, as mensagens trocadas entre os objetos podem ser entendidas como solicitaes. Essa solicitao faz com que uma determinada operao seja ativada. A operao executa o mtodo adequado e, opcionalmente, devolve uma resposta. A mensagem que constitui a solicitao contm o nome do objeto, o nome da operao e, s vezes, um grupo de parmetros. Dessa forma, possvel realizar uma modelagem que espelha, o mais fiel possvel, a realidade. Afinal, empresas, departamentos, setores e pessoas relacionam-se atravs de mensagens enviadas uns aos outros, ou seja, atravs de solicitaes. Objetos podem ser muito complexos, porque objetos podem ser feitos de outros objetos, que, por sua vez, podem ser feitos de outros objetos, e assim por diante. O usurio de um objeto no precisa tomar conhecimento de sua complexidade interna, apenas precisa saber como se comunicar com ele e como ele reage.

11.2 Classe
O termo classe se refere implementao, no software, do tipo de objeto. Tipo de objeto uma noo conceitual. Ele especifica uma famlia de objetos, sem estipular como eles so implementados. Os tipos de objeto so identificados durante as fases de Levantamento de Requisito e Anlise. Os detalhes das classes so determinados na Anlise e no Projeto. Uma classe uma implementao de um tipo de objeto. Ela tem uma estrutura de dados e mtodos que especificam as operaes que podem ser feitas com aquela estrutura de dados. 59

Lgica de Programao

11.3 Colaborao
Os objetos colaboram entre si, a fim de disponibilizar as funcionalidades requeridas pelo sistema. Esta disponibilizao de funcionalidades se d atravs de troca de mensagens entre os objetos. Se um objeto precisa de uma informao que no sua, ou seja, que est em outro objeto, este deve pedir para ele enviando uma mensagem. Um objeto Aluno, por exemplo, no pode cancelar sua prpria matrcula. Ele deve enviar uma mensagem ao objeto Setor de Matrculas, solicitando o cancelamento de sua matrcula. A seguir, veremos os tipos de colaborao que podem existir entre objetos. Agregao Agregar significa juntar, colar, grudar. Neste contexto, dizemos que agregao o ato de agregar duas ou mais classes para formar uma nova classe, onde podemos identificar um relacionamento do tipo Todo-Parte. Esse relacionamento (todo-parte) pode ser visto de duas formas: Composio: quando o todo no existe sem as partes. Por exemplo: um objeto da classe Aluno, para uma universidade, no existe sem seu Currculo. O Currculo de um Aluno algo pessoal e intransfervel. Se um Aluno for excludo, seu Currculo deve ser excludo junto. Referncia: quando o todo somente faz referncia s partes. Por exemplo: um objeto da classe Nota Fiscal faz referncia a objetos do tipo Produto. A Nota Fiscal composta, entre outras coisas, de uma lista de produtos, mas se ela for excluda os produtos no precisam ser excludos de seu cadastro original. Generalizao/Especializao Especializao quando, dada uma determinada classe ou categoria, criamos uma outra, com novos atributos ou servios que a tornam mais restrita. Generalizao a operao inversa, ou seja, a remoo de uma ou mais caractersticas de determinada classe, de modo a formar uma classe mais abrangente. importante entender que generalizao o mecanismo para expressar a similaridade entre classes. Esse princpio permite representar membros comuns, servios e atributos uma s vez. Permite a reutilizao de especificaes comuns. Por exemplo: uma empresa possui o seu cadastro de Clientes. Podemos especializar a classe Cliente em Pessoa Fsica e Pessoa Jurdica. Em programao, o conceito de generalizao visto como herana. Podemos, ento, identificar basicamente dois tipos de herana: herana de INTERFACE e de IMPLEMENTAO. Herdar uma interface significa assumir o compromisso de oferecer as operaes definidas pela interface, ou seja, todos os mtodos declarados. Dessa forma, diz-se que se herda a interface da classe. Herdar a implementao significa que instncias da classe especializada tero parte de seus estados definidos e tambm controlados pela classe mais geral, mas em compensao, as operaes definidas na classe mais geral tambm se aplicam classe especializada, o que permite reaproveitamento de cdigo. Polimorfismo

60

Lgica de Programao

Muito provavelmente em alguns dos primeiros programas estruturados que criamos nos deparamos com uma pequena dvida: ...ser que eu poderia criar um procedimento em que o nmero de parmetros modificasse em tempo de execuo?. A questo anterior na verdade que saber se possvel criar uma operao que mude seu cdigo em tempo de execuo. Esse tipo de questionamento o princpio do polimorfismo. Ou seja, fazer a mesma coisa de vrias formas ou de forma diferente (poli = muito; morfismo = formas). A grande vantagem de serem permitidas implementaes de polimorfismo a flexibilidade. Por exemplo: Levando em considerao o desenho abaixo Um Aluno comunica-se com o Setor de Matrculas podemos entender que um Aluno pode solicitar a realizao de sua matrcula, em um determinado curso ou disciplinas, para o Setor de Matrculas. Contudo, a forma com que sua matrcula vai se realizar vai depender do nvel de ensino do curso em que ele quer se matricular: extenso, especializao, graduao, etc.

Para a matrcula em um curso de extenso necessita-se somente do nome e do RG da pessoa. J para a matrcula de um curso de especializao necessrio o RG e a identificao do curso que a pessoa deseja seguir. E para a matrcula em um curso de graduao precisa-se somente do RG da pessoa e do cdigo da disciplina que ela deseja cursar. Somente com o polimorfismo que se pode realizar a mesma ao no caso aqui se trata da ao de Matricular de vrias formas distintas, dando maior flexibilidade ao sistema.

11.4 Benefcios da Orientao a Objetos


A programao orientada encapsula dados (atributos) e mtodos (comportamentos) em objetos; os dados e os mtodos de um objeto esto intimamente associados entre si. Esto listados a seguir os principais ganhos para o desenvolvedor, caso este troque a Metodologia Tradicional pela Orientada ao Objeto: Exatido Devido caracterstica do desenvolvimento estruturado, onde se elabora um projeto e DEPOIS se faz os programas, podemos ter no final um sistema que no atenda perfeitamente seus objetivos depois de implementado. No desenvolvimento OOP, o desenvolvimento pode ser feito de maneira quase que interativa com o usurio, o que faz com que este risco caia significativamente. A pouca quantidade de cdigo programvel tambm reduz os problemas inerentes s mudanas das especificaes durante o desenvolvimento do projeto. Potencialidade Definimos como potencialidade, a forma como o programa reage aos erros imprevistos tais como uma falha na impressora, ou um disco cheio. Quanto maior for a potencialidade, maior a capacidade do programa em causar o menor dano possvel aos dados e evitar uma sada drstica do sistema.

61

Lgica de Programao

Extensibilidade Dizemos que quanto maior for a extensibilidade do software, maior ser sua capacidade em adequar-se as especificaes definidas pelos analistas. Reutilizao A capacidade de se otimizar a produtividade do programador depende diretamente da maneira como o software disponibiliza a reutilizao do cdigo gerado. De fato, a maioria dos programadores profissionais j reutiliza cdigos criados, porm a perfeita reutilizao consiste na utilizao COMPLETA de um cdigo gerado para algum sistema SEM qualquer outra adaptao prvia. Exerccios Descrever os atributos de uma classe Pessoa. Descrever os atributos de uma classe Carro. Descrever os atributos de uma classe ContaCorrente. Descrever os mtodos de uma classe Pessoa. Descrever os mtodos de uma classe Carro. Descrever os mtodos de uma classe ContaCorrente.

62

Lgica de Programao

Unidade 12 1. 2. final.

Exerccios de Fixao

Escreva um algoritmo para calcular a mdia entre dois nmeros quaisquer. Escreva um algoritmo para calcular a rea de um tringulo, exibindo o resultado

3. Escreva um algoritmo para calcular o valor de y como funo de x, segundo a funo y(x)=3x+2, num domnio real. 4. Escreva um algoritmo para efetuar a leitura de um nmero inteiro e apresentar o resultado do quadrado deste nmero. 5. Escreva um algoritmo para ler dois nmeros quaisquer, calcular a soma deles e aps mostrar os nmeros lidos e o resultado da soma precedido da palavra "Resultado:". 6. Escreva um algoritmo para ler dois nmeros quaisquer, dividir o primeiro pelo segundo. Mostrar os nmeros lidos e o resultado calculado. 7. Escreva um algoritmo para ler trs nmeros quaisquer e calcular a mdia aritmtica entre eles. Escrever os nmeros lidos e a mdia calculada. 8. Escreva um algoritmo para ler dois inteiros (variveis OP1 e OP2) e efetuar as operaes de adio, subtrao, multiplicao e diviso de OP1 por OP2 apresentando ao final os quatro resultados obtidos. 9. Escreva um algoritmo para ler dois inteiros (variveis OP1 e OP2) e imprimir o resultado do quadrado da diferena do primeiro valor pelo segundo. 10. Escreva um algoritmo para ler dois nmeros. Multiplicar o primeiro por 4 e o segundo por 6. Calcule a mdia aritmtica dos resultados obtidos. Escrever os valores lidos, os calculados e a mdia aritmtica. 11. Escreva um algoritmo para ler os seguintes nmeros: OP1, OP2 e OP3. Aps, calcular o valor de RESULTADO segundo a expresso: 12. RESULTADO = OP1^2 - 4OP2*OP3 e mostrar os valores lidos e o resultado. 13. Escreva um algoritmo para calcular e escrever o consumo mdio de um automvel (medido em Km/l), fornecida a distncia total percorrida e o volume do combustvel consumido para percorr-la (medido em litros). 14. Escreva um algoritmo para calcular a mdia de quatro nmeros inteiros e exibir o resultado final. 15. Faa um algoritmo que leia trs notas de um aluno e calcule e escreva a mdia final deste aluno. Considerar que a mdia ponderada e que os pesos das notas so 2, 3 e 5, respectivamente. 16. Escreva um algoritmo para calcular a funo f(x,y)=2x+3y2, num domnio real.

63

Lgica de Programao

17. Escreva um algoritmo que efetue e clculo do salrio lquido de um professor. Para fazer este programa voc dever possuir alguns dados, tais como: valor da hora aula, nmero de aulas dadas no ms e percentual de desconto do INSS. Em primeiro lugar, devese estabelecer qual ser o seu salrio bruto para efetuar o desconto e ter o valor do salrio lquido. Ao final do algoritmo deve ser mostrado o salrio bruto e o salrio lquido do professor. 18. Faa um algoritmo que calcule a mdia ponderada de um aluno, a partir de suas 3 notas obtidas no curso, sabendo-se que a primeira avaliao tem peso 2, a segunda tem peso 4 e a terceira tem peso 4. Mostre, ao final, a mensagem : A MEDIA FINAL DE ... FOI ... . Informar tambm se o aluno foi aprovado, mostrando a mensagem APROVADO caso a nota final seja maior ou superior a 7,0. 19. Modifique o algoritmo da mdia do aluno para informar: APROVADO ............ caso a nota final esteja no intervalo [10, 7] RECUPERAO...... caso a nota final esteja no intervalo [5, 7) REPROVADO .......... caso a nota final esteja no intervalo [0, 5) 20. Faa um algoritmo que leia 2 valores numricos e um smbolo. Caso o smbolo seja um dos relacionados abaixo efetue a operao correspondente com os valores. Ateno para a diviso por 0! + - * / operao de soma operao de subtrao operao de multiplicao operao de diviso

21. Dados 3 valores A, B, C, verifique se podem ser valores de lados um tringulo e, se for, determine se o tringulo equiltero, issceles ou escaleno. 22. Sejam 3 nmeros distintos A, B, C. Coloque-os em ordem crescente, utilizando seleo encadeada (ou aninhada). 23. Faa um programa que l dois valores, o primeiro servindo de indicador de operao e o segundo correspondendo ao raio de uma circunferncia. Caso o primeiro valor lido seja igual a 1, calcular e imprimir a rea desta circunferncia. Se o valor lido for 2, calcular e imprimir o permetro da circunferncia. E se o valor lido for diferente destes dois valores, imprimir uma mensagem dizendo que o indicador de operao foi mal fornecido. 24. Uma loja fornece 5% de desconto para funcionrios e 10% de desconto para clientes especiais. Faa um programa que calcule o valor total a ser pago por uma pessoa. O programa dever ler o valor total da compra efetuada e um cdigo que identifique se o comprador um cliente comum ou um dos dois tipos de clientes que recebem desconto. 25. Construa um programa que receba os nomes de 5 clientes de uma loja e o valor (em reais) que cada um destes clientes pagou por sua compra. O programa dever informar: a) o valor total pago pelos 5 b) o valor da compra mdia c) nome dos clientes que efetuaram compras superiores a d) o nmero de clientes que efetuaram compras inferiores a 50 reais. clientes; efetuada; 20 reais;

64

Lgica de Programao

26. A partir do preo vista de um determinado produto, calcular o preo total a pagar e o valor da prestao mensal, referentes ao pagamento parcelado. Se o pagamento for parcelado em trs vezes dever ser dado um acrscimo de 10% no total a ser pago. Se for parcelado em 5 vezes, o acrscimo de 20%. 27. O departamento que controla o ndice de poluio do meio ambiente fiscaliza 3 grupos de indstrias que so altamente poluidoras do meio ambiente. O ndice de poluio aceitvel varia de 0.05 at 0.25. Se o ndice sobe para 0.3 as indstrias do 1 grupo so intimadas a suspenderem suas atividades; se o ndice sobe para 0.4, as do 1 e do 2 grupos so intimadas a suspenderem suas atividades; e se o ndice sobe para 0.5, todos os trs grupos devem ser notificados a paralisarem suas atividades. Escreva um programa que l o ndice de poluio medido e emite a notificao adequada aos diferentes grupos de empresas. 28. Faa um programa que l 4 valores I, A, B e C onde I um nmero inteiro e positivo e A, B, e C so quaisquer valores reais. O programa deve escrever os valores lidos e: a) se I = 1, escrever os trs valores A, B e C em ordem crescente; b) se I = 2, escrever os trs valores A, B e C em ordem decrescente; c) se I = 3, escrever os trs valores A, B, e C de forma que o maior valor fique entre os outros dois; d) se I no for um dos trs valores acima, dar uma mensagem indicando isto. 29. Fazer um programa para imprimir o conceito de um aluno, dada a sua nota. Supor notas inteiras somente. O critrio para conceitos o seguinte: nota inferiores nota de 3 a 5 - conceito D notas 6 notas 8 nota 10 - conceito A e e a 7 9 3 conceito conceito conceito E C B

30. Elabore um algoritmo que verifique se um dado nmero inteiro positivo PAR ou MPAR. 31. Escreva um algoritmo que leia um nmero n (nmero de termos de uma progresso aritmtica), a1 (o primeiro termo da progresso) e r (a razo da progresso) e escreva os n termos desta progresso, bem como a soma dos elementos. 32. soma: Escreva um algoritmo que l um valor n inteiro e positivo e que calcula a seguinte

S := 1 + 1/2 + 1/3 + 1/4 + ... + 1/n O algoritmo deve escrever cada termo gerado e o valor final de S. 33. Escreva um algoritmo que leia um nmero n que indica quantos valores devem ser lidos a seguir. Para cada nmero lido, mostre uma tabela contendo o valor lido e o fatorial deste valor. 34. Escreva um algoritmo que leia um valor N inteiro e positivo e que calcule e escreva o valor de EX. EX = 1 + 1 / 1! + 1 / 2! + 1 / 3! + 1 / N!

65

Lgica de Programao

35. Faa um algoritmo que mostre os conceitos finais dos alunos de uma classe de 75 alunos, considerando: i. ii. de 0,0 a 4,9 de 5,0 a 6,9 de 7,0 a 8,9 de 9,0 a 10,0 os dados de cada aluno (nmero de matrcula e nota numrica final) sero fornecidos pelo usurio a tabela de conceitos segue abaixo: Nota Conceito D C B A

36. Foi feita uma estatstica nas 20 principais cidades brasileiras para coletar dados sobre acidentes de trnsito. Foram obtidos os seguintes dados: b. c. d. e. i. pertencem ii. iii. Sul. 37. Faa um algoritmo que leia um indeterminado nmero de linhas contendo cada uma a idade de um indivduo. A ltima linha, que no entrar nos clculos, contm o valor da idade igual a zero. Calcule e escreva a mdia das idades deste grupo de indivduos. 38. Imagine uma brincadeira entre dois colegas, na qual um pensa um nmero e o outro deve fazer chutes at acertar o nmero imaginado. Como dica, a cada tentativa dito se o chute foi alto ou baixo. Elabore um algoritmo dentro desse contexto, que leia o nmero imaginado e os chutes, ao final mostre quantas tentativas foram necessrias para descobrir o nmero. 39. Construa um algoritmo que permita fazer um levantamento do estoque de vinhos de uma adega, tendo como dados de entrada tipos de vinho, sendo: Tpara tinto, B para branco e R para rose. Especifique a porcentagem de cada tipo sobre o total geral de vinhos; a quantidade de vinhos desconhecida, utilize como finalizador F de fim. 40. Uma certa firma fez uma pesquisa de mercado para saber se as pessoas gostaram ou no de um novo produto. Para isso, forneceu o sexo do entrevistado e sua resposta (sim ou no). Este programa dever ser executado at que o sexo X seja informado pelo usurio, encerrando, assim sua execuo. Calcule e escreva os itens que seguem: o nmero de pessoas que responderam sim; 66 qual a mdia de veculos nas cidades brasileiras qual a mdia de acidentes com vtimas entre as cidades do Rio Grande do cdigo da cidade estado (RS, SC, PR, SP, RJ, ...) nmero de veculos de passeio (em 2007) nmero de acidentes de trnsito com vtimas (em 2007) qual o maior e o menor ndice de acidentes de trnsito e a que cidades

Deseja-se saber:

Lgica de Programao

o nmero de pessoas que responderam no; a porcentagem de pessoas do sexo feminino que responderam sim; a porcentagem de pessoas do sexo masculino que responderam no. 41. Leia dez elementos de um vetor. 42. Leia oito elementos de um vetor A. Construa um vetor B de mesma dimenso com os elementos do vetor A multiplicados por trs. Apresente o vetor B. 43. Leia dois vetores A e B com quinze elementos cada. Construa um vetor C, sendo este a juno dos dois vetores. Desta forma, C dever ter o dobro de elementos de A e B. 44. Leia vinte elementos de um vetor A e construa um vetor B de mesma dimenso com os mesmos elementos de A, sendo que estes devero estar invertidos, ou seja, o primeiro elemento de A passa a ser o ltimo de B. O segundo elemento de A passa a ser o penltimo de B e assim por diante. Apresente os dois vetores. 45. Leia doze elementos de um vetor coloc-los em ordem decrescente e apresente os elementos ordenados. 46. Leia um vetor A com doze elementos. Aps sua leitura, coloque os seus elementos em ordem crescente. Depois leia um vetor B tambm com doze elementos. Coloque os elementos de B em ordem crescente. Construa um vetor C, onde cada elemento de C a soma do elemento correspondente de A com B. Apresente os valores de C. 47. Escreva uma matriz que leia uma matriz M(6,6) e calcule as somas das partes indicadas: a. b. c. d. 48. a. b. c. d. e. Acima da diagonal secundria. Abaixo da diagonal principal. A esquerda abaixo da diagonal principal e acima da diagonal secundria. Acima das diagonais principal e secundria. Considerando uma matriz M(5,5), efetue as seguintes somas: soma dos elementos da linha 3; soma dos elementos da coluna 5; soma dos elementos da diagonal principal (i=j); soma dos elementos da diagonal secundria (i+j=n+1); soma dos elementos da matriz toda.

Escreva M e as somas calculadas.

Escreva as somas calculadas. 49. Escreva uma matriz M(5,3) e a escreva. Verifique, a seguir, quais elementos de M que esto repetidos e quantas vezes cada um deles repetido com uma mensagem dizendo que aparece X vezes em M.

67

Lgica de Programao

68