• Nenhum resultado encontrado

Livro Logica Programacao b

N/A
N/A
Protected

Academic year: 2021

Share "Livro Logica Programacao b"

Copied!
148
0
0

Texto

(1)

Curitiba Curitiba 2016 2016

Programacao

Programacao

Faculdade Educacional da Lapa (org.)

Faculdade Educacional da Lapa (org.)

~~

,,

(2)
(3)

 Direitos dea edição reservados à Fael.  Direitos dea edição reservados à Fael.

É proibida a reprodução total ou parcial dea obra sem autorização expressa da Fael. É proibida a reprodução total ou parcial dea obra sem autorização expressa da Fael.

FAEL FAEL  Direção de Produção

 Direção de Produção Fernando Santos de Moraes SarmentoFernando Santos de Moraes Sarmento

Coordenação Editorial 

Coordenação Editorial  Raquel Andrade Lorenz Raquel Andrade Lorenz 

Revisão

Revisão FabriCOFabriCO

Projeto Gráfco

Projeto Gráfco Sandro Niemicz Sandro Niemicz 

Capa

Capa Katia Cristina Santos MendesKatia Cristina Santos Mendes

Imagem capa

Imagem capa Shuerstock Shuerstock 

 Diagramação

(4)

1.

1. F���������� F���������� �� Lógica �� Lógica para Ppara Programação rogramação ||  7  7 

2.

2. F����� �� F����� �� representação de representação de um algoritmo um algoritmo ||  21  21 

3.

3. TT���� ���� �� dados: �� dados: variáveis e variáveis e constantes constantes | | 33 5 5

4.

4. O��������� � expressões | 4O��������� � expressões | 4 5 5

5.

5. E�������� �� E�������� �� seleção simples seleção simples e composta e composta ||  55 55

6.

6. E�������� E�������� �� �� seleção seleção encadeada encadeada || 6969

7.

7. E�������� E�������� �� �� repetição repetição com com teste teste no no início início || 87 87 

8.

8. E�������� E�������� �� �� repetição repetição com com teste teste no no final final ||  99 99

9.

9. E�������� E�������� �� �� repetição repetição com com variável variável de de controle controle || 111 111 

10.

10. E��������� E��������� �� �� Dados Dados || 129129

11.

11. M������������ |M������������ | 137 137 

R���������� | R���������� | 147 147 

(5)
(6)

P������ �����,

 A arte e ciência de programar computadores é algo fascinante. Podemos definir esta atividade como emprestar um pouco de nossa inteligência ao computador. Quando o computador trabalha é como se nossa inteligência emprestada a ele estivesse trabalhando. E para isto precisamos aprender como se comunicar com ele.

O conhecimento lógico é essencial para qualquer pessoa que deseja iniciar a carreira na área de desenvolvimento de sistemas, independente do paradigma da linguagem ou do sistema que ire-mos desenvolver. E este conceito é bastante necessário na lógica de programação para obtermos retorno útil destas máquinas maravi-lhosas que são os computadores.

(7)

 A lógica de programação aborda como se escreve um programa de com-putador, isto é, como se escreve um algoritmo. Um algoritmo nada mais é do que um manual de instrução, uma receita, uma sequencia lógica de ações que devem ser realizadas para se atingir um objetivo. Quando o algoritmo é aplicado na área da computação ele faz parte da lógica de programação.

Nesta disciplina iremos aprender como se escreve um algoritmo, isto é, como organizar nosso pensamento para dizer ao computador o que fazer. Durante esta disciplina iremos também aprimorar a forma de escrever os algoritmos, utilizando a lógica de programação para entender o melhor jeito de escrevê-los. Nosso obje-tivo final é que o computador interprete corretamente nosso algoritmo e retorne a resposta correta do problema a ser resolvido. Por isso as atividades práticas são imprescindíveis para aprimorarmos a lógica de programação.

Para isto veremos os conceitos básicos de logica de programação e as formas mais utilizadas para a representação de algoritmos. Abordaremos os operadores lógico-matemáticos e relacionais necessários para a construção de expressões. Iniciaremos a construção de algoritmos sequenciais, aprendendo os comandos básicos de entrada e saída de dados.

Os comandos de seleção serão apresentados a seguir, abordando os des-vios condicionais simples, composto e encadeado. Conheceremos também os diferentes comandos de repetição e suas aplicabilidades.

Iremos entender como criar e manipular estruturas de dados simples como vetores e registros. E por fim vamos aprender a criar funções e como melhor utilizá-las.

Em suma, vamos aprender um método para nos comunicar com a máquina da melhor forma buscando tê-la cada vez mais como aliada na solução de problemas que auxiliem o ser humano tanto social como economicamente.

Bons estudos!

Patricia Rucker de Bassi Coordenadora dos Cursos de Tecnologia em Análise e Desenvolvimento de Sistemas e Tecnologia em Gestão de TI

(8)

1

Fundamentos da

Lógica para Programação

Introdução

S�� ������, � computador é uma das maiores invenções do homem e tem se mostrado uma ferramenta versátil, rápida e segura para a manipulação de informações.

P��� ������ ���� invenção é responsável pela intensificação da mecanização e descobertas científicas na vida moderna. Esta afir-mação dá um caráter autônomo ao computador, como se o mesmo fizesse tudo sozinho. Entretanto cabe esclarecer que o computador é uma grande ferramenta de trabalho, servindo de auxílio para as mais diversas atividades. Porém esta máquina não é criativa e nem inteligente, na verdade, apenas reproduz o que lhe é ordenado por meio de seus programas de computador.

Os programas de computador são construídos para resolver algum problema específico e a solução adotada é sempre uma solução

(9)

lógica. E essa solução é formalizada em um algoritmo, que podemos entender como uma receita de bolo a ser adotada para a solução do problema. A Lógica para Programação é então o passo inicial para a construção de um programa de computador.

Por tratar de questões relacionadas ao raciocínio natural do ser humano, esta aula não apresenta pré-requisitos formais, entretanto cabe ressaltar que será pré-requisito para as demais aulas deste caderno. Para você alcançar o objetivo proposto, será necessário apenas disciplinar o seu modo de pensar, evitando extrapolar os limites de abstração, ou seja, focar apenas o problema a ser resolvido, uma vez que esse material dará a você embasamento teórico para compreender como o pensamento lógico pode ser representado e repro-duzido em um algoritmo computacional.

Esperamos que, ao final desta aula, você seja capaz de:

2 entender como a lógica formal e matemática é aplicada na

Programa-ção de Computadores;

2 compreender a importância da construção de algoritmos

computacio-nais.

Por isso, nesta aula, temos três questões a serem respondidas: o que é a Lógica? Como a Lógica é aplicada à Programação de Computadores? O que é um Algoritmo? Vamos começar explicando os princípios básicos do pensa-mento lógico.

1.1 O que é Lógica?

Não há consenso quanto à definição da Lógica. Alguns autores a defi-nem como o estudo dos processos válidos e gerais pelos quais atingimos a verdade, outros como a ciência das leis do pensamento, ou somente como o estudo dos princípios da inferência válida. Esta pluralidade de definições nos dá conta da diversidade de estudos que são abrangidos pela Lógica.

Não seria cabível discutir sobre lógica sem lançar mão da Filosofia. Mesmo não querendo aprofundar no mérito filosófico, é necessário revisar as bases filosóficas da lógica a fim de compreender a sua origem e função.

(10)

 A Lógica foi criada por Aristóteles, no século IV a.C., como uma ciên-cia autônoma que se dedica ao estudo dos atos do pensamento – conceito,  juízo, raciocínio, demonstração – do ponto de vista da sua estrutura ou forma Lógica, sem ter em conta qualquer conteúdo material. É por esta razão que essa Lógica Aristotélica é também conhecida por Lógica Formal.

Em contraposição a esse conceito de Lógica Formal, surgiu um outro – o de Lógica Material – para designar o estudo do raciocínio no que ele depende quanto ao seu conteúdo ou matéria.

Essa distinção entre Lógica Formal e Lógica Material nos permite perce-ber porque: tendo em conta a sua forma, o raciocínio é correto ou incorreto (válido ou inválido). Mas se atendermos à sua matéria, a conclusão pode ser verdadeira ou falsa.

Para exemplificar, tomemos como exemplo as seguintes sentenças de raciocínio lógico:

I. nenhum homem sabe dançar; II. este dançarino é homem;

III. logo, este dançarino não sabe dançar.

Este raciocínio é formalmente correto, uma vez que a conclusão está cor-retamente deduzida. Mas a conclusão é falsa, uma vez que é falsa a primeira proposição (“Nenhum homem sabe dançar”). Estamos perante um raciocínio que tem validade formal, mas não tem validade material. Logo temos que concluir que é falso.

Desde a sua criação o estudo da Lógica tem registrado enormes aperfei-çoamentos, sobretudo a partir de meados do século XIX. É costume dividir--se a sua história em três períodos: Período Clássico, Período Moderno e Perí-odo Contemporâneo.

 A Lógica Matemática (desenvolvida no Período Moderno) exerceu uma influência decisiva em muitos domínios, principalmente na Eletrônica, Cibernética, Informática e Inteligência Artificial.

Mesmo com essa multiplicidade de conceitos, a Lógica pode ser vista como uma ciência que procura encontrar as leis em relação às quais o nosso pensamento deve obedecer para que possa ser considerado válido.

(11)

No contexto da informática, a Lógica de Programação é a técnica de encadear pensamentos para atingir determinado objetivo previamente defi-nido. Ou seja, é a técnica que nos permite expressar o que deve ser feito e em

que ordem para que a solução seja alcançada.

1.2 A Lógica no dia-a-dia 

Sempre que pensamos estamos exercitando a nossa lógica ou ilógica (não-lógica). Toda vez que falamos também estamos fazendo uso da lógica uma vez que a fala é apenas uma representação do que pensamos.

Quantas e quantas vezes, em um quotidiano e rotineiro diálogo, produ-zimos afirmações do gênero: “Isso é lógico!”, “...não tem lógica alguma.” ou “Não vejo lógica nisso!”.

Saber o que é lógico, ou saber identificar uma estrutura lógica, em um contexto lingüístico, é algo que nos é transmitido por meio da nossa educação.  Além dessa lógica lingüística, aplicamos outros tipos de raciocínio lógico em nosso dia-a-dia. Um bom exemplo seria pensar o porquê não colocamos nossa mão em uma superfície quente. Parece lógico, não?! Nosso cérebro rapi-damente processa sentenças lógicas como:

I. a pele humana não suporta altas temperaturas (ou algo mais sim-ples como “queimei minha pele no último contato com uma super-fície quente”);

II. a minha mão é coberta de pele;

III. logo, a minha mão não suporta altas temperaturas.

Esse tipo de pensamento lógico se repete várias e várias vezes ao dia. E graças à Lógica nos mantemos longe de problemas.

Isso deixa claro que nós pensamos de forma lógica o tempo todo. No entanto, temos uma grande dificuldade em formalizar este raciocínio lógico. Um exemplo disso são aquelas situações nas quais temos de expli-car a alguém algo a ser feito. Muitas vezes, já fizemos essa mesma tarefa inúmeras vezes e, para nós, ela é extremamente lógica. Porém encontra-mos dificuldades em organizar e relatar o conjunto de passos que deverão

(12)

ser realizados. Isso acontece porque não somos acostumados a formalizar nosso pensamento.

Para o computador, a descrição de cada passo e seu correto encadea-mento é fundamental para que o programa funcione corretamente e que a solução seja alcançada. Por isso costuma-se dizer que o computador nunca erra, são as pessoas que erram. Nesse caso, são as pessoas que formalizaram a sua Lógica de Programação de maneira incorreta.

Nesse momento de nossos estudos, você já deve ter percebido que a Lógica para Programação não é algo difícil ou impossível, uma vez que é ape-nas uma técnica para dizer ao computador o que deve ser feito para atingir a solução de um determinado problema.

1.3 Algoritmos

 A construção de algoritmos é o primeiro passo para a Programação de Computadores. É uma das tarefas mais complexas da programação de com-putadores, mas também uma das mais desafiadoras e empolgantes.

Um algoritmo pode ser definido como uma seqüência de passos que visa a atingir um objetivo definido. Assim podemos dizer que um algoritmo é a organização do pensamento para a solução de um problema, portanto é uma representação da lógica.

Um algoritmo, na Linguagem da Programação de computadores, repre-senta uma seqüência de instruções que o computador deve seguir a fim de atingir um objetivo definido. Cada instrução é, na verdade, uma informação que indica ao computador o que deve ser feito. Já o programa consiste na codi-ficação precisa do algoritmo em uma linguagem de programação específica.

É importante lembrar que a ordem na qual as instruções serão executa-das é de fundamental importância para a efetividade da solução algorítmica. Para entendermos melhor, imaginemos como problema a ser resolvido o pre-paro de uma carne assada. É óbvio que a sua solução envolve, entre outras tarefas menores, limpar a carne, temperá-la e levá-la ao forno. Mas também é obvio que se a ordem dessas instruções for alterada certamente não iremos atingir a solução para o problema. Imagine se levássemos a carne ao forno e a temperássemos somente depois!

(13)

O algoritmo não é a solução do problema, mas uma forma de solucioná--lo. Assim, para um mesmo problema, podemos criar diferentes algoritmos usando diferentes abordagens. Em outras palavras, podemos usar diferentes seqüências de instruções para resolver o mesmo problema. Em alguns casos, até mesmo diferentes instruções. Quase sempre existe mais do que uma maneira de resolver um problema, e essa escolha é nossa. Qual será então a melhor das escolhas?

Dados dois ou mais algoritmos para resolver o mesmo problema, é sen-sato escolher aquele que obtém uma solução no menor tempo possível e que utiliza o menor espaço para a representação dos dados do problema.

 Apesar de sua nomenclatura pouco usual, usamos algoritmos em várias situações cotidianas. Um exemplo comum são as receitas culinárias. Em uma receita culinária descrevemos todos os ingredientes que farão parte do prato, suas quantidades, a ordem em que serão usadas, suas transformações (modo de preparo) até o preparo completo do prato. Dessa forma é possível garantir que a aplicação correta do algoritmo resulte no prato desejado.

É importante esclarecer desde já que um algoritmo independe da lingua-gem de programação que será utilizada. Na verdade, uma vez que o algoritmo seja desenvolvido de forma correta, poderá ser implementado em diferentes linguagens de programação sem maiores alterações.

 A construção de um algoritmo deve observar todos os passos necessários à execução da atividade e evitar que passos desnecessários sejam executados ou que passos interdependentes sejam executados fora de ordem.

Durante sua construção, um algoritmo é constantemente revisto a fim de identificar novas situações ou exceções a serem tratadas.

Quando temos um problema e precisamos construir um algoritmo para resolvê-lo, devemos passar pelas seguintes etapas:

a. definir o problema;

b. realizar um estudo da situação atual e verificar qual(is) a(s) forma(s) de resolver o problema;

(14)

d. analisar junto aos usuários se o problema será resolvido. Se a solução não foi encontrada, ou surgirem exceções a serem tratadas, deverá ser retornado para a fase de estudo para descobrir onde está a falha.  A fim de entender como um algoritmo é construído, vamos analisar a construção de um algoritmo para o seguinte problema clássico, discutido por vários autores, inclusive em Forbellone e Eberspächer (2005, p. 4), por ser um problema cotidiano e que não exige conhecimentos específicos: “trocar uma lâmpada queimada”. A partir desse exemplo, será possível evidenciar o processo de encadeamento de idéias até a solução final do problema.

Inicialmente, poderíamos construir o seguinte algoritmo básico para solucionar o problema proposto:

I. pegue uma escada;

II. posicione-a embaixo da lâmpada; III. busque uma lâmpada nova;

IV. suba na escada;

V. retire a lâmpada velha; VI. coloque a lâmpada nova.

Se examinarmos esse algoritmo, veremos que ele permite solucionar o pro-blema da  troca de uma lâmpada queimada . Entretanto, se considerarmos as

situa-ções nas quais o algoritmo poderá ser aplicado, perceberemos que o mesmo não irá tratar a situação em que a lâmpada não esteja queimada. Na verdade, mesmo que a lâmpada esteja funcionando, esse algoritmo irá trocá-la por uma nova.

Para solucionar esse problema, é necessário alterar o algoritmo de modo que a lâmpada seja testada antes de efetuar a troca. Para isso, basta ligar o interruptor e verificar se a lâmpada está funcionando ou não. Intuitivamente, faríamos a seguinte alteração no algoritmo:

I. pegue uma escada;

II. posicione-a embaixo da lâmpada; III. busque uma lâmpada nova;

(15)

V. se a lâmpada não acender, então: f. suba na escada;

g. retire a lâmpada velha; h. coloque a lâmpada nova.

 À primeira vista, o algoritmo agora está correto. Ao introduzirmos um

teste seletivo, uma condição, no passo V , impomos que os passos a , b e c só

deverão ser executados se o resultado do teste for verdadeiro. Nesse caso, se a lâmpada não acender. Os testes seletivos nos permitem tratar as exceções e garantir que determinados passos não sejam executados em vão, otimizando o algoritmo.

Esse mesmo algoritmo, apesar de funcional, ainda pode ser otimizado. Se o reexaminarmos, perceberemos que, no caso de a lâmpada não estar quei-mada, teremos executado os passos I, II e III em vão.

Para tratar essa situação, bastaria reposicionar os passos I, II e III para

que ocorram somente após o teste seletivo, uma vez que só serão úteis caso a lâmpada tenha de ser realmente trocada, ou seja, que ela esteja queimada. Desse modo, o algoritmo seria novamente alterado, ficando:

ligue o interruptor;

se a lâmpada não acender, então: a) pegue uma escada;

b) posicione-a embaixo da lâmpada; c) busque uma lâmpada nova;

d) suba na escada;

e) retire a lâmpada velha; f) coloque a lâmpada nova.

 Apesar de parecer completo, ou seja, permitindo solucionar o problema da troca da lâmpada queimada , este algoritmo não leva em consideração a

possibilidade de a nova lâmpada não funcionar. Pois, nesse caso, seria neces-sário repetir os passos e e f. Daí surge a seguinte questão: pode ser que a outra

(16)

lâmpada também não funcione, sendo necessário repetir mais uma vez esta seqüência de passos. Então, quando deveremos parar de repetir?

Para toda repetição em um algoritmo devemos estabelecer uma condi-ção de parada, ou seja, um limite para a quantidade de vezes em que os passos deverão ser repetidos. Caso não seja estabelecido esta condição de parada ocorre o que chamamos de laço infinito – mais conhecido por sua designação em inglês loop infinito – no qual os passos se repetem indefinidamente.

No caso do nosso algoritmo, uma condição de parada adequada seria repetir enquanto a lâmpada não acender. Assim o algoritmo ficaria da seguinte forma:

VIII. ligue o interruptor;

IX. se a lâmpada não acender, então: a. pegue uma escada;

b. posicione-a embaixo da lâmpada; c. busque uma lâmpada nova;

d. suba na escada;

e. retire a lâmpada velha; f. coloque a lâmpada nova;

g. enquanto a lâmpada não acender: 1. retire a lâmpada;

2. coloque outra lâmpada.

O passo g  apresenta o que chamamos de fluxo repetitivo no qual um

conjunto de passos pode se repetir n vezes.

Reflita

Não se aprende algoritmos copiando ou estudando outros algoritmos já feitos. Para aprender algoritmos, é necessário con-struí-los e testá-los.

(17)

1.4 Construindo algoritmos

 Antes de construir um algoritmo, é necessário entender o modelo de processamento geral de um programa de computador. Este modelo é repre-sentado na figura 1.

Figura 1. Modelo geral de processamento de um programa de computador

ENTRADAS PROCESSAMENTO SAÍDA 

Dados iniciais para a resolução do problema  Regras do problema  Resultados do processamento ou solução para o problema  Exemplo: Multiplicação de dois números inteiros

 A = 25

B = 3 RESULTADO = A*B 75

Todo programa fundamentalmente opera sobre um conjunto de entrada que representa os dados iniciais necessários à resolução do problema. Essas entradas são então processadas a partir de um conjunto de regras já definidas e, ao final, o programa gera um conjunto de saídas que representa o resultado do processamento.

 Assim, antes de iniciar a construção de um algoritmo, é recomendado seguir os seguintes passos:

1. identificação do problema : determinar o que se quer resolver ou

qual objetivo a ser atingido. Esse passo é fundamental para a reso-lução do problema, pois não há como dizer  ao computador o que

fazer para resolver o problema se nem sequer sabemos defini-lo; 2. identificação dos dados de entrada : determinar as informações

necessárias para os cálculos que se seguirão;

(18)

mento. É neste passo que devemos definir inclusive o formato da saída como, por exemplo, se será em tela ou na forma de relatório impresso;

4. identificação das regras e limitações do problema ou das limita-ções do agente executante: nesse passo devemos identificar

clara-mente quais serão as regras a serem aplicadas na solução. É também nesse passo que devemos definir as limitações para o problema, uma vez que o algoritmo pode ter de cobrir apenas parte de um problema mais geral. Ainda é possível que seja necessário definir as limitações do agente executante, como, por exemplo, definir as limitações em função de pouca memória RAM do computador em que o programa irá rodar;

5. definição dos processamentos a serem executados a fim de transformar as “entradas” em “saídas”: nesse ponto deve ser

determinada a seqüência de ações ou instruções que leve à solução do problema, respeitando-se as regras já definidas;

6. construção do algoritmo: utilizando uma das formas de

represen-tação de algoritmos que iremos estudar nas próximas aulas;

7. teste da solução: execução de todas as ações do algoritmo, seguindo

o fluxo estabelecido para verificar se ele está realmente gerando os resultados esperados ou detectar possíveis erros em sua descrição.  Ao seguir esses passos, garantiremos que o algoritmo desenvolvido será executado corretamente pelo computador.

Resumindo

Nesta aula, foram discutidos os princípios da programação para compu-tadores. Foi apresentado o conceito de Lógica para Programação que é, em essência, uma extensão da lógica matemática.

Um dos conceitos mais importantes discutidos é o conceito de algo-ritmo. É por meio do algoritmo que informamos ao computador o que deverá ser feito. Vale lembrar que o encadeamento das instruções que compõem o algoritmo é de fundamental importância para seu correto funcionamento.

(19)

Atividades

1. Leve em consideração os estudos que realizamos nesta aula e marque com V (Verdadeiro) ou F (Falso) as alternativas a seguir.

(—) A lógica para programação torna o computador capaz de realizar tarefas de forma autônoma e criativa, sem a necessidade da interfe-rência humana.

(—) Um algoritmo representa uma seqüência lógica de instruções.

(—) Cada instrução em um algoritmo faz com que o computador exe-cute uma ou um conjunto de tarefas específicas.

(—) Para todo problema somente é possível criar um único algoritmo correto.

(—) Uma vez que um algoritmo é criado, não deve mais ser modificado. (—) Antes de iniciar a construção de um algoritmo, é preciso definir a

linguagem de programação a ser usada.

2. Comente a importância dos dados de entrada, do processamento e dos dados de saída para a construção de algoritmos.

Comentário das atividades

Na  atividade 1, caso você tenha lido com atenção o material desta aula,

percebeu que a primeira alternativa é obviamente falsa, uma vez que a lógica para programação permite apenas determinar a seqüência de passos a ser seguida para a solução de um problema. Além disso, como foi discutido, o computador apenas segue essas instruções sem alterações, não demonstrando comportamento criativo ou autônomo. A segunda opção é verdadeira, visto que o algoritmo descreve uma seqüência ordenada ou lógica das tarefas que o computador deve desempenhar. A terceira opção também é verdadeira, pois uma instrução representa uma ou um conjunto de tarefas específicas que o computador deverá desempenhar. A quarta opção é falsa, uma vez que um problema pode apresentar diferentes soluções que darão origem a diferentes algoritmos. A quinta opção é falsa, pois um algoritmo deve sempre ser reexaminado a fim de identificar erros ou situações inesperadas e, uma vez identificado algum desses casos, o algoritmo deverá ser modificado a fim

(20)

de tratar a situação levantada. A sexta e última opção é falsa, pois um algoritmo independe da linguagem de programação que será mais tarde utilizada.

Para realizar a   atividade 2, com base no que foi discutido nesta aula,

você deve saber que é de fundamental importância identificar corretamente os dados de entrada, o processamento e os dados de saída de um algoritmo. Sem conhecer os dados de entrada, corremos o risco de não possuir dados sufi-cientes para uma solução do problema. Além disso correremos o risco de des-considerar algum detalhe importante sobre o problema que pode ser revelado por algum dado de entrada ignorado. Já os processamentos a serem realizados sobre os dados de entrada são igualmente importantes. Eles nos dirão o que fazer ao longo do algoritmo. Além disso, com os resultados dos processamen-tos, já poderemos predizer alguns dos dados de saída do algoritmo. Os dados de saída são importantes, pois representam o resultado final do algoritmo e estão diretamente associados à medida de eficácia do algoritmo. Se conhecer-mos os dados de saídas, sabereconhecer-mos “o que se quer” do algoritmo.

 Ao realizar as atividades com sucesso, você teve oportunidade de alcan-çar os objetivos propostos para esta aula de entender como a Lógica Formal e Matemática é aplicada na Programação de Computadores e de compreender a importância da construção de algoritmos computacionais.

Na próxima aula 

Dando continuidade ao estudo da Lógica para Programação, estuda-remos como a lógica de programação, em sua forma algorítmica, pode ser representada. Estudaremos os métodos mais utilizados na prática: Descrição Narrativa, Fluxograma e Pseudocódigo.

(21)
(22)

2

Formas de

representação

de um algoritmo

Introdução

C�� � ������ do tempo e de estudos dos algoritmos, foram desenvolvidas inúmeras formas de se representar um algoritmo de modo a facilitar o seu entendimento e, mais tarde, a sua tradução para uma linguagem de programação específica. Entre as formas de representação de algoritmos mais conhecidas, podemos citar a Descrição Narrativa, o Fluxograma Convencional e o Pseudocódigo - também conhecido como Linguagem Estruturada ou “Portugol”. Essas três formas serão objeto de estudo desta aula.

Uma representação clara e fácil de ser seguida facilita o desen-volvimento, depuração (correção de erros) e subseqüente transfor-mação do algoritmo em um programa de computador.

(23)

Uma vez que esta aula trata da representação de um algoritmo é neces-sário que você tenha entendido o conceito de algoritmo apresentado na aula anterior. Caso haja dúvidas, recorra ao material e entre em contato com a web-tutoria.

Esperamos que, ao final desta aula, você seja capaz de:

2 representar um algoritmo usando Descrição Narrativa; 2 representar um algoritmo usando Fluxograma;

2 representar um algoritmo usando Pseudocódigo.

2.1 Formas de representação

O domínio das formas de representação de algoritmos é de fundamen-tal importância tanto para Analistas de Sistemas que são responsáveis por mapear as necessidades dos clientes para a forma algorítmica, quanto para Programadores, que irão transformar os algoritmos em programas.

Na Linguagem Narrativa, os algoritmos são expressos diretamente em linguagem natural – no português, por exemplo. Já o Fluxograma (ou Dia-grama de Fluxo) é uma representação gráfica que emprega formas geométri-cas padronizadas para indicar as diversas ações e decisões que devem ser exe-cutadas para resolver o problema. O Pseudocódigo emprega uma linguagem intermediária entre a linguagem natural e uma linguagem de programação para descrever os algoritmos.

Não existe consenso entre os especialistas sobre qual é a melhor maneira de representar um algoritmo. Atualmente a maneira mais comum de repre-sentar algoritmos é por meio de pseudocódigo. Essa forma de representação tem a vantagem de que o algoritmo pode ser escrito de uma forma que está próxima de uma linguagem de programação de computadores, facilitando a criação do programa.

Existem outras formas de representação conhecidas, porém pouco utili-zadas, como o Diagrama de Chapin ou Nassi-Shneiderman (N-S), que apre-senta a solução do problema por meio de um diagrama de quadros com uma visão hierárquica e estruturada. Essa forma não é muito utilizada devido à sua

(24)

2.2 Descrição Narrativa 

2.2 Descrição Narrativa 

Nessa forma de representação, os algoritmos são expressos diretamente Nessa forma de representação, os algoritmos são expressos diretamente em linguagem natural.

em linguagem natural.

Esta forma de representação é a mesma utilizada em algoritmos Esta forma de representação é a mesma utilizada em algoritmos não--computacionais, como receitas culinárias. Dessa forma as instruções são -computacionais, como receitas culinárias. Dessa forma as instruções são des-critas livremente, entretanto devemos tomar alguns cuidados para manter a critas livremente, entretanto devemos tomar alguns cuidados para manter a clareza do algoritmo.

clareza do algoritmo.

Para escrever um algoritmo, precisamos descrever a seqüência de Para escrever um algoritmo, precisamos descrever a seqüência de ins-truções, de maneira simples e objetiva. Para isso devemos obedecer algumas truções, de maneira simples e objetiva. Para isso devemos obedecer algumas regras básicas:

regras básicas:

2

2 usar somente um verbo por frase;usar somente um verbo por frase;

2

2 imaginar que você está desenvolvendo um algoritmo para pessoasimaginar que você está desenvolvendo um algoritmo para pessoas

que não trabalham com informática; que não trabalham com informática;

2

2 usar frases curtas e simples;usar frases curtas e simples;

2

2 ser objetivo;ser objetivo;

2

2 procurar usar palavras que não tenham sentido dúbio.procurar usar palavras que não tenham sentido dúbio.

Um exemplo de representação de um algoritmo usando Descrição Um exemplo de representação de um algoritmo usando Descrição Nar-rativa para o problema de cálculo da média de um aluno ficaria:

rativa para o problema de cálculo da média de um aluno ficaria: 1.

1. obter obter as as notas notas da da primeira, primeira, segunda segunda e e terceira terceira provas;provas; 2.

2. calcular calcular a a média média aritmética aritmética entre entre as as três três notas;notas; 3.

3. se a se a média fomédia for maior r maior ou iou igual que gual que 7,00, o 7,00, o aluno foaluno foi aproi aprovado,vado, senão, foi

senão, foi reprovadoreprovado..

No entanto, na prática, essa representação é pouco usada porque o uso No entanto, na prática, essa representação é pouco usada porque o uso da linguagem natural dá muitas vezes oportunidade a más interpretações, da linguagem natural dá muitas vezes oportunidade a más interpretações, ambigüidades e imprecisões. Por esse motivo, não daremos maior atenção a ambigüidades e imprecisões. Por esse motivo, não daremos maior atenção a este tipo de

este tipo de representação.representação.

2.3 Fluxograma 

2.3 Fluxograma 

Essa é a forma gráfica de representar um algoritmo mais conhecida e Essa é a forma gráfica de representar um algoritmo mais conhecida e utilizada. O fluxograma nos permite mostrar graficamente a lógica de um utilizada. O fluxograma nos permite mostrar graficamente a lógica de um algoritmo, enfatizando passos individuais e o fluxo de execução.

(25)

É intermediária à descrição narrativa e ao pseudocódigo, pois é menos É intermediária à descrição narrativa e ao pseudocódigo, pois é menos imprecisa que a primeira e, no entanto, não se preocupa com detalhes de imprecisa que a primeira e, no entanto, não se preocupa com detalhes de imple-mentação do programa como a segunda, como, por exemplo, o tipo de mentação do programa como a segunda, como, por exemplo, o tipo de variá-veis utilizadas.

veis utilizadas.

Para muitos autores, o fluxograma é a

Para muitos autores, o fluxograma é a forma universal de representação,forma universal de representação, pois se utiliza de figuras geométricas padronizadas para ilustrar os passos a pois se utiliza de figuras geométricas padronizadas para ilustrar os passos a serem seguidos para a resolução de problemas. E o ideal é que um algoritmo serem seguidos para a resolução de problemas. E o ideal é que um algoritmo seja entendido da mesma forma por diferentes pessoas que o utilizarem. seja entendido da mesma forma por diferentes pessoas que o utilizarem.

Para que um fluxograma seja interpretado corretamente, é Para que um fluxograma seja interpretado corretamente, é necessá-rio entender sua

rio entender sua sintaxesintaxe e sua e sua semântica semântica . Sobre sintaxe de um fluxograma,. Sobre sintaxe de um fluxograma,

devemos entender como a correta utilização dos seus símbolos gráficos e das devemos entender como a correta utilização dos seus símbolos gráficos e das expressões que podem ser escritas no seu interior. Já a semântica diz respeito expressões que podem ser escritas no seu interior. Já a semântica diz respeito ao significado de cada símbolo, ou seja, como interpretá-lo corretamente. ao significado de cada símbolo, ou seja, como interpretá-lo corretamente. Com isso é possível

Com isso é possível entender e simular o entender e simular o algoritmo representado.algoritmo representado.  A interpr

 A interpretação de etação de um fluxograma, um fluxograma, via de via de regra, se regra, se dá de dá de cima para cima para baixobaixo e da esquerda para a direita. É importante seguir essa regra, pois garante que e da esquerda para a direita. É importante seguir essa regra, pois garante que o fluxo de instruções seja

o fluxo de instruções seja entendido corretamente.entendido corretamente.

Por se tratar de uma representação gráfica, o fluxograma não se mostra Por se tratar de uma representação gráfica, o fluxograma não se mostra adequado para a representação de algoritmos maiores e/ou mais complexos. adequado para a representação de algoritmos maiores e/ou mais complexos. Nesses casos, é comum o uso do pseudocódigo como forma de representação. Nesses casos, é comum o uso do pseudocódigo como forma de representação. 2.3.1 Simbologia básica de um fluxograma

2.3.1 Simbologia básica de um fluxograma

Estes são alguns dos símbolos mais conhecidos e utilizados ao longo dos Estes são alguns dos símbolos mais conhecidos e utilizados ao longo dos anos pelos profissionais da área de informática para a

anos pelos profissionais da área de informática para a descrição de algoritmosdescrição de algoritmos usando fluxograma e são descritos na norma internacional ISO 5807/1985. usando fluxograma e são descritos na norma internacional ISO 5807/1985.

Inicio Inicio

Terminador  Terminador 

Símbolo utilizado como ponto para indicar o início e/ou Símbolo utilizado como ponto para indicar o início e/ou fim do fluxo de

fim do fluxo de um programa. É importante salientar que um programaum programa. É importante salientar que um programa deve possuir apenas um terminador de INÍCIO e

deve possuir apenas um terminador de INÍCIO e outro de FIM.outro de FIM.

 V  Variávelariável

Entrada Manual Entrada Manual

Utilizado para ler os dados necessários ao programa. Usado para Utilizado para ler os dados necessários ao programa. Usado para representa

representar dados, independente do tipo r dados, independente do tipo de mídia, que sejamde mídia, que sejam fornecidos manualm

fornecidos manualmente, em ente, em tempo de processamento. Per-tempo de processamento. Per-mite representar a entrada de dados via teclado, mouse, leitor de mite representar a entrada de dados via teclado, mouse, leitor de código de barras ou qualquer outro dispositivo de entrada. código de barras ou qualquer outro dispositivo de entrada.

(26)

Dados Dados

Dados Dados

Utilizado para representar dados tanto de entrada quanto de saída Utilizado para representar dados tanto de entrada quanto de saída  já definidos n

 já definidos no próprio prograo próprio programa, como valorema, como valores de constantess de constantes..

Condição Condição

SSIIMM NNÃÃOO

Decisão Decisão

Indica a decisão que deve ser tomada, indicando a possibilidade Indica a decisão que deve ser tomada, indicando a possibilidade de desvios para diversos outros pontos do

de desvios para diversos outros pontos do fluxo, dependendo dofluxo, dependendo do resultado de comparação de uma condição estabelecida. Essa resultado de comparação de uma condição estabelecida. Essa estru-tura permite controlar o fluxo de instruções em um fluxograma. tura permite controlar o fluxo de instruções em um fluxograma.

Doc Doc

Documento Documento

Utilizado para representar a utilização de algum documento Utilizado para representar a utilização de algum documento específico contendo dados necessários ao algoritmo.

específico contendo dados necessários ao algoritmo.

Dados Dados Dados Dados Arma-zenados zenados

Usado para indicar dados que estão ou Usado para indicar dados que estão ou deve-rão ser armazenados pelo algoritmo.

rão ser armazenados pelo algoritmo.

 V  Variável ouariável ou mensagem mensagem Exibição Exibição

É utilizado quando se deseja que

É utilizado quando se deseja que os dados sejam impressos. Repre-os dados sejam impressos. Repre-senta um dispositivo de saída como o monitor ou a impressora. senta um dispositivo de saída como o monitor ou a impressora.

Operações Operações

Preparação Preparação

Refere-se a um determinado grupo de Refere-se a um determinado grupo de opera-ções não incluídas da

ções não incluídas da diagramaçãodiagramação..

Referência Referência de Página de Página

Utilizado quando é preciso particionar o diagrama. Quando Utilizado quando é preciso particionar o diagrama. Quando ocor-rer mais de uma partição, é colocada uma letra ou número dentro rer mais de uma partição, é colocada uma letra ou número dentro do símbolo de conexão para identificar os pares de ligação. do símbolo de conexão para identificar os pares de ligação.

Referência fora Referência fora

da Página da Página

Específico para indicar conexão do fluxo em outra página. Específico para indicar conexão do fluxo em outra página.

(27)

Seta de orienta-ão de fluxo

Permite indicar o sentido do fluxo de dados. Serve exclusiva-mente para conectar os símbolos ou blocos existentes.

Processo

Processamento

Símbolo ou bloco que se utiliza para indicar cálculos (algorit-mos) a efetuar, atribuições de valores ou qualquer manipulação de dados que tenha um bloco específico para sua descrição.

2.3.2 Construindo um fluxograma

Para entendermos como um fluxograma é criado para representar um algoritmo, vamos discutir passo-a-passo a criação de um fluxograma para representar um algoritmo que permita calcular a média final de um aluno considerando que todo aluno realiza três provas no semestre. O aluno é considerado “aprovado” se a sua média for igual ou superior a 7,00, senão é considerado “reprovado”.

 Antes de iniciarmos a construção do fluxograma, devemos formalizar o algoritmo para solucionar o problema, de acordo com o que estudamos na primeira aula.

É evidente que este é um problema de pouca complexidade e que envolve poucas regras. Para resolver esse problema, fica claro que precisaremos conhe-cer as três notas do aluno, que deverão ser informadas pelo usuário e, em seguida, calcular a média por meio do cálculo de média aritmética simples para a qual devemos aplicar a fórmula média = (nota1+nota2+nota3)/3. Após o cálculo da média, é necessário testar se o seu valor é igual ou superior ao valor 7,00 e, nesse caso, deverá ser listada a mensagem “Aprovado”. Em caso contrário, deverá ser listada a mensagem “Reprovado”. Agora que conhece-mos o algoritmo, é possível representá-lo como um fluxograma.

Inicialmente a forma mínima de um fluxograma é dada pela junção de seus terminadores de início e fim. Na verdade, essa construção mínima exe-cuta absolutamente nada. Os símbolos de INICIO e FIM, na verdade, não representam instruções de fato, mas são marcadores essenciais que permitem

(28)

Entretanto, para nosso algoritmo, será necessário ler os dados de entrada, nesse caso, as três notas do aluno. Com isso, é necessário expandir o nosso flu-xograma. Por motivos didáticos, para cada variável foi utilizado um símbolo de entrada manual. Na prática, entretanto, é comum a utilização de apenas um símbolo contendo todas as variáveis a serem lidas.

De posse do valor de cada uma das três notas, é possível processar a média do aluno. Vamos representar esse processamento utilizando o símbolo de processo, como mostra a figura 1. Em um fluxograma, devemos sempre representar a atribuição de valor a uma variável por meio do símbolo “←

,

na forma variável← valor. Em um fluxograma, a expressão variável = valor

representa o teste se o valor da variável é igual ao valor informado do lado direito da expressão e não uma atribuição.

Figura 1. Exemplo de algoritmo representado nas três formas mais comuns Cálculo da Média de dois números inteiros positivos média = ( a + b)/2

Início de Programa  Leia os valores a e b

Se a e b forem maior do que zero Calcula o valor da média a partir da fórmula [média = (a + b)/2]

Imprime o valor da média  Senão

Imprime “Os valores devem ser positivos”

Fim do programa 

Início de Programa  Leia a,b

Se a > 0 e b > 0 então

Calcula o valor da média a partir da média = (a + b)/2 Imprime o valor da média  Senão

Imprime “Os valores devem ser positivos” Fim se Fim do programa  Fluxograma  média  Inicio Fim Média = (a+b)/2 Leia a  Leia b a>0 e b>0 SIM NÃO “Os valores devem ser positivos” Linguagem Narrativa  Pseudocódigo

2.4 Pseudocódigo

Esse nome é uma alusão à posterior implementação em uma Linguagem de Programação, ou seja, quando formos programar em uma linguagem de programação específica.

(29)

O pseudocódigo é um código de escrita em que se utilizam termos convencionais para indicar as instruções do programa. Esses termos são geralmente uma mistura de palavras da nossa linguagem natural com pala-vras e notações típicas das linguagens de programação.

 A utilização de pseudocódigo permite ao programador expressar as suas idéias sem ter de se preocupar com a sintaxe da linguagem de programação. Para isso, são utilizadas primitivas (comandos genéricos) que podem ser facilmente traduzidos para uma linguagem de progra-mação específica.

Uma grande vantagem da utilização de pseudocódigo é o fato de per-mitir ao programador expressar as suas idéias sem ter de se preocupar com a sintaxe da Linguagem de Programação. Por outro lado, esse tipo de repre-sentação é o que mais se aproxima da codificação final em uma Linguagem de Programação e, por isso, é a mais utilizada na prática.

Síntese da aula 

Nesta aula, foram discutidos conceitos sobre as formas mais comuns de representação de um algoritmo computacional.

Esperamos que, a partir do que foi estudado nesta aula, você seja capaz de concluir que há diversas formas de representação de algoritmos que diferem entre si pela quantidade de detalhes de implementação que fornecem ou, inversamente, pelo grau de abstração que possibilitam em relação à implementação do algoritmo em termos de uma linguagem de programação específica.

Das principais formas de representação de algoritmos, destacam-se: a descrição narrativa, o fluxograma convencional e o pseudocódigo. Dessas três, a mais utilizada na prática é o pseudocódigo, principalmente por sua proximidade com o produto final – o programa codificado em uma Lingua-gem de Programação – o que diminui o tempo de desenvolvimento e reduz custos. Além disso, o pseudocódigo permite adicionar detalhes específicos da linguagem a ser utilizada.

(30)

Atividades

Para as atividades 1, 2 e 3, considere a seguinte questão: elabore um algoritmo para um programa que permita ler vários números inteiros a partir do teclado e, após a leitura de cada número individual, deverá ser apresentada uma mensagem indicando se o número informado é positivo, negativo ou nulo. O programa deverá encerrar quando o valor nulo for informado.

1. Represente o algoritmo na forma de Descrição Narrativa. 2. Represente o algoritmo na forma de um Fluxograma. 3. Represente o algoritmo na forma de Pseudocódigo. 4. Sobre a Descrição Narrativa, é incorreto afirmar que:

a. utiliza a linguagem natural para descrever o algoritmo; b. pouco utilizada na prática;

c. em função de usar a linguagem natural, pode dar margem a ambigüidades, tornando o algoritmo pouco claro;

d. possui regras fixas que garantem que um mesmo algoritmo sem-pre será resem-presentado da mesma forma, mesmo que por pessoas diferentes;

e. devemos utilizar frases curtas e simples na descrição dos passos de um algoritmo.

5. Sobre a forma de representação de algoritmos usando Fluxograma, é

incorreto afirmar que:

a) é uma representação gráfica dos passos a serem seguidos;

b) os símbolos utilizados em um fluxograma são internacionalmente definidos para garantir que um mesmo fluxograma seja correta-mente interpretado, não importa onde tenha sido criado;

c) a interpretação de um fluxograma, via de regra, se dá de baixo para cima e da direita para a esquerda;

d) um programa deve possuir apenas um terminador de INÍCIO e outro de FIM;

(31)

e) por se tratar de uma representação gráfica, o fluxograma não se mostra adequado para a representação de algoritmos maiores e/ ou mais complexos.

6. Sobre o algoritmo em pseudocódigo apresentado a seguir, é correto

afirmar que: ALGORITIMO A6; VAR X: Inteiro; INICIO REPITA LEIA (X); SE (X < 0) ENTAO

IMPRIMA (“O valor informado deve ser positivo”)

  SENAO

IMPRIMA (X*X); FIM SE

ATE (X <= 0) FIM

a) o pseudocódigo é a forma de representação menos utilizada na prá-tica;

b) para esse algoritmo, caso o usuário informe um valor negativo, será emitida a mensagem “O valor informado deve ser positivo” e um novo valor será lido;

c) esse algoritmo não utiliza uma estrutura de decisão; d) esse algoritmo não utiliza uma estrutura de repetição;

e) esse algoritmo imprime o quadrado de vários números infor-mados pelo usuário até que seja informado um valor negativo ou nulo.

(32)

Comentário das atividades

Para resolver a atividade 1, com base no que foi estudado, existem várias

formas, visto que a Descrição Narrativa não obedece a nenhuma regra, apenas sendo uma adaptação da linguagem natural. Uma possível resposta para essa questão é:

Repetir até que seja lido um número nulo Ler número

Se o número for maior do que zero imprimir “Positivo”

Senão se o número for menor do que zero imprimir “Negativo”

Senão se o número for igual a zero imprimir “Nulo”

Encerrar o programa

Podemos ainda melhorar essa primeira solução, suprimindo o teste “se o número for igual a zero”, afinal, se o valor já não for maior e nem menor do que zero só poderá ser o próprio zero. Com isso diminuiremos a quanti-dade de tarefas que o computador terá de executar. Dessa forma, teríamos o seguinte algoritmo:

Repetir até que seja lido um número nulo Ler número

Se o número for maior do que zero imprimir “Positivo”

Senão se o número for menor do que zero imprimir “Negativo”

  Senão

imprimir “Nulo” Encerrar o programa

(33)

Para resolver a   atividade 2, tivemos de representar uma estrutura de

repetição que permita ler N valores até que um valor nulo seja informado. E para cada valor devemos realizar testes condicionais para determinar qual mensagem deve ser escrita e para onde deve ser desviado o fluxo de instruções. Uma resposta possível para essa questão é o seguinte fluxograma:

Inicio FIM N N > 0 N < 0 N = 0 SIM SIM SIM NÃO NÃO NÃO “Positivo” “Positivo” “Nulo”

 Já na atividade 3, em pseudocódigo, uma solução possível para esse

problema é:

ALGORITIMO A3; VAR N: Inteiro; INICIO

(34)

REPITA LEIA (N); SE (N > 0) ENTAO IMPRIMA (“Positivo”)   SENAO SE (N < 0) ENTAO IMPRIMA (“Negativo”)   SENAO IMPRIMA (“Nulo”) FIM SE FIM SE ATE (N = 0) FIM

Naatividade 4, de acordo com o que foi estudado sobre Descrição

Nar-rativa, você deve ter reconhecido como opção incorreta a opção (d), pois nesse tipo de representação não existem regras fixas e, por usar a linguagem natural, duas pessoas distintas poderão usar termos diferentes para descre-ver um mesmo passo do algoritmo. A opção (a) é correta, pois a Descrição Narrativa utiliza a linguagem natural para descrever o conjunto de passos do algoritmo. A opção (b), por sua vez, é também correta, pois esse tipo de representação é pouco usado na prática. A opção (c) é correta e levanta um dos principais problemas com esse tipo de representação, que é a possibili-dade de ambigüipossibili-dade, pois caso um passo seja ambíguo, pode dar margem a entendimentos distintos do algoritmo. Por último, a opção (e) também está correta, pois devemos utilizar frases curtas e simples a fim de manter a clareza e facilitar a interpretação do algoritmo.

Considerando o que foi estudado nesta aula sobre fluxograma, você deve ter reconhecido como opção incorreta para a atividade 5 a opção (c), pois a interpretação de um fluxograma deve ser sempre realizada de cima para baixo e da esquerda para a direita. Você deveria ter reconhecido ainda a opção (a) como correta, pois o fluxograma é exatamente uma representação gráfica dos

(35)

passos de um algoritmo. A opção (b) também está correta, pois a norma inter-nacional ISO 5807/1985 define a simbologia a ser adotada na construção de um fluxograma e, com isso, um mesmo fluxograma será corretamente inter-pretado, não importa onde tenha sido criado. A opção (d) é correta, uma vez que o algoritmo representado só pode ter um início e um fim no fluxograma. E, por fim, a opção (e) também deveria ser considerada correta, pois o maior problema com o uso de fluxograma ou de qualquer ferramenta de representa-ção gráfica é que não são adequadas para situações mais complexas que gerem algoritmos com uma elevada quantidade de passos.

De acordo com o que você estudou sobre Pseudocódigo, deve ter ficado claro que a opção correta para a atividade 6 é a opção (e), pois, seguindo o

fluxo do pseudocódigo, percebemos que a leitura e teste da variável X encon-tram-se no bloco de instruções do comando REPITA. Assim esses passos deverão ser executados até que a condição (X <= 0) seja verdadeira. Deveria ter ficado claro também que a opção (a) está incorreta, pois esse tipo de repre-sentação é o mais usado na prática, pois é a forma que mais se aproxima da codificação final em uma linguagem de programação. A opção (b) está incor-reta e sua avaliação depende da atenção ao teste condicional para a instrução REPITA... ATÉ. Nela, caso o valor seja negativo ou nulo, o fluxo é desviado para o final do algoritmo. As opções (c) e (d) são obviamente incorretas, uma vez que o algoritmo apresenta as instruções SE..ENTAO e REPITA..ATÉ que são estruturas de decisão e repetição, respectivamente.

 As atividades lhe deram a oportunidade de representar um algoritmo usando Descrição Narrativa, Fluxograma e Pseudocódigo, que foram os obje-tivos fixados para esta aula.

Na próxima aula 

Estudaremos como os dados são armazenados e representados pelo com-putador. Esse conhecimento é de fundamental importância para a atividade de Programação de Computadores.

(36)

3

Tipos de dados:

variáveis e constantes

Introdução

P��� � �������� de qualquer tipo de programa, o computa-dor necessita armazenar dados de natureza diversa. Esses dados são armazenados na memória do computador.

T���� �� ����������� existentes no computador estão ou na memória primária (memória RAM), ou na memória secundária (discos, fitas, CD-ROM, etc). Nós iremos trabalhar, neste caderno, somente com a memória primária, especificamente com as informa-ções armazenadas na RAM (memória de acesso aleatório).

Para atingir os objetivos desta aula, é desejável que você possua conhecimento, ainda que básico, sobre arquitetura de computadores – principalmente no que diz respeito à memória RAM. Pesquise sobre o assunto!

(37)

Esperamos que, ao final desta aula, você seja capaz de:

2 entender os conceitos de variável e de constante e suas utilizações; 2 utilizar adequadamente cada tipo de dado disponível.

3.1 Manipulação das informações

Na verdade, toda operação realizada por um computador é baseada na manipulação das informações contidas em sua memória. De uma maneira geral, essas informações podem ser classificadas em dois tipos:

2 as instruções, usadas para determinar o funcionamento da máquina

e a maneira como os dados devem ser tratados. As instruções são específicas para cada arquitetura de computador, pois estão dire-tamente relacionadas às características do hardware particular – como, por exemplo, o conjunto de instruções de cada processador;

2 os dados  propriamente ditos, que correspondem às informações

que deverão ser processadas pelo computador.

2  A memória do computador pode ser entendida como uma seqüência

finita de gavetas que, em dado momento, guarda algum tipo de infor-mação, como um número, uma letra, uma palavra, uma frase, etc. O computador, para poder trabalhar com alguma dessas informações, seja para ler seu conteúdo ou alterá-lo, precisa saber exatamente onde, na memória, o dado está localizado. Fisicamente, cada gaveta, ou cada posição de memória – esse é o termo técnico correto – possui um endereço, ou seja, um número, que indica o seu endereço na memória, em outras palavras, onde cada infor-mação está localizada. Esse número é normalmente representado usando nota-ção hexadecimal, tendo o tamanho de quatro, ou mais bytes  – dependendo da

arquitetura do computador. São exemplos de endereços físicos:

End. Físico Conteúdo 7000:A210 ‘Paulo Sérgio’ 3000:12BC 345

(38)

O endereçamento das posições de memória por meio de números hexa-decimais é perfeitamente compreendido pela máquina, mas para nós huma-nos torna-se uma tarefa complicada.

Para resolver esse problema, as linguagens de computador facilitam o manuseio, por parte dos programadores, das posições de memória da máquina, permitindo que, ao invés de trabalhar diretamente com os núme-ros hexadecimais, seja possível atribuir nomes diferentes a cada posição de memória. Além disso, tais nomes são de livre escolha do programador. Com esse recurso, os usuários ficaram livres dos endereços em hexadecimal e pas-sam a trabalhar com endereços lógicos. Como o conteúdo de cada gaveta (endereço lógico) pode variar, ou seja, mudar de valor ao longo da execução do programa, convencionou-se chamar de variável a referência a cada gaveta.

 Assim, para o exemplo de endereços físicos mostrados anteriormente, poderíamos rotular a posição de memória  7000:A210 como nome e, com

isso, sempre que precisássemos do valor dessa posição de memória, bastaria referenciar a variável nome. Assim ficaria o exemplo anterior:

End. Físico End. Lógico (variável) Conteúdo 7000:A210 nome ‘Paulo Sérgio’ 3000:12BC valor 345

4100:0006 total 99.834

Basicamente, uma variável possui três atributos: um nome (ou rótulo), um tipo de dado associado à mesma e um valor que representa a informação por ela apontada. Uma vez definidos, o nome e o tipo de uma variável não podem ser alterados no decorrer de um programa.

Cada Linguagem de Programação define as suas regras para a criação de identificadores de variáveis. Todavia a maioria delas concorda que um identifi-cador de variável deve ser formado por uma letra ou então por uma letra seguida de uma ou mais letras ou dígitos. Como regra, as Linguagens de Programação não permitem o uso de espaços em branco ou de qualquer outro caractere que não seja letra ou dígito, na formação de um identificador de variável.

Devemos sempre definir um nome significativo para as variáveis em um programa. Com isso é muitas vezes possível ter uma idéia do conteúdo e

(39)

propósito de uma variável mesmo sem inspecioná-la. Um erro comum de programadores iniciantes é a utilização de nomes de variáveis como simples letras, como a, b, c, x, y. Isso torna o programa difícil de ler e compreender.

Em alguns casos, nem mesmo o seu autor entende!

 Algumas linguagens permitem o uso do caractere “_” (underline ) para

separar as palavras em um identificador. Assim é possível criar uma variável com o rótulo Nome_do_Cliente.

Existem alguns dados que não sofrem alteração em seu valor do iní-cio ao fim do programa. A esse tipo de informação conveniní-cionou-se cha-mar de constante. Conforme o seu tipo, a constante é classificada como

sendo numérica, lógica e literal.

 As constantes são muito utilizadas na programação principalmente em situações nas quais temos de referenciar um mesmo valor várias vezes ao longo do programa. Para esses casos, podemos definir um nome de constante e atribuir-lhe um valor. A partir daí basta referenciar o nome da constante e implicitamente estaremos nos referenciando ao seu valor. A principal vanta-gem dessa abordavanta-gem é a possibilidade de alterar o valor da constante apenas em sua definição e essa alteração ser automaticamente refletida em qualquer outro local do programa em que a sua referência é usada. Em casos como esse, sem o uso de constantes, será necessário alterar o valor em cada linha do programa onde ele foi usado.

Um conceito importante sobre variáveis diz respeito à sua localidade ou escopo. Uma variável declarada no programa principal passa a ser visível em todo o programa e, por isso, são chamadas de variáveis globais. Já uma variável declarada dentro de uma função ou procedimento, é dita como local, indi-cando que só será visível e conhecida dentro desse procedimento ou função.

Outro atributo característico de uma variável é o tipo de dado que ela pode armazenar. Esse atributo define a natureza das informações contidas na variável.

3.2 Tipos de dados

Os dados são classificados de acordo com o tipo de informação neles contida. Essa classificação não se aplica a nenhuma linguagem de

(40)

programa-ção específica; pelo contrário, ela sintetiza os padrões utilizados na maioria das linguagens. Na verdade, essa classificação é necessária para determinar a porção de memória que será necessária para armazenar o dado. Além disso essa classificação garante que a interpretação do conteúdo da posição de memória seja feita de forma adequada.

3.2.1 Dados Numéricos

Nessa classificação, estão todos os dados que façam referência a valo-res. Para o computador, existem diferentes formas de representar um valor, dependendo das suas características. Por exemplo, para armazenar um valor real – que possui casas decimais após a vírgula – é necessário um espaço bem maior de memória. Já um valor inteiro ocupa bem menos espaço.

Os dados numéricos possuem uma subclassificação que os define de acordo com a sua grandeza de representação. Entre as principais subclas-ses temos:

2 inteiro – os números inteiros são aqueles que não possuem casas

decimais nem são números fracionários, e podem ser positivos, negativos ou zero. Exemplos de números inteiros são 55 (inteiro positivo), 0 (zero inteiro) e -98 (inteiro negativo);

2 real – os dados do tipo real são aqueles que possuem parte decimal

ou são números fracionários, e podem ser positivos, negativos ou zero. Exemplos de dados do tipo real são 3.2 (real positivo), 0.00 (zero real) e -19.76 (real negativo).

Na implementação particular de cada linguagem, esses tipos de dados numéricos são expandidos, dando origem a novos tipos de dados. Normal-mente, esses novos tipos permitem representar valores maiores ou menores a fim de permitir um melhor uso do espaço de memória disponível para execu-ção do programa. A Linguagem de Programaexecu-ção C, por exemplo, apresenta para os números inteiros os tipos integer  (inteiro tradicional) – usado para

representar números entre 32768 até +32767 e ocupa dois bytes  na memória; char  (caractere – que, na verdade, é um inteiro pequeno) – usado para

repre-sentar números entre 0 e 255; word  – usado para representar números inteiros

positivos entre 0 e 65535 e ocupa dois bytes  na memória; ShortInt  – usado

(41)

memó-ria; e LongInt  – usado para representar números inteiros entre 2.147.483.648

até 2.147.483.648 e ocupa quatro bytes  na memória. Existem diferentes tipos

para os valores reais também.

3.2.2 Dados literais (string)

Uma informação do tipo literal representa um conjunto de caracteres que pode ser formado por letras, dígitos ou símbolos especiais.

O computador representa cada letra, dígito e símbolo especial como um valor inteiro que varia de 0 a 255. Assim cada caractere é tratado internamente por esse valor. A correspondência de valores para os carac-teres é fornecida por uma padronização internacional conhecida como Tabela ASCII.

 A Tabela ASCII ISO 8859-1, também chamada Latim I, é uma das Tabelas ASCII estendidas, orientada especificamente para alguns idiomas europeus ocidentais.

 A correta visualização dos caracteres dessa tabela depende de vários fato-res técnicos, inclusive da fonte utilizada. Em computadofato-res atualizados, pro-vavelmente, será possível uma visualização adequada sem problemas.

Observe que nem todos os números da tabela correspondem a grafemas. Cabe ressaltar que os valores de 0 a 31, 127 e 255 são reservados para funções especiais de processamento e não representam caracteres imprimíveis.

Figura 1– Tabela ASCII.

0 32 ? 64 @ 96 ` 128 Ç 160 á   192 └  224 Ó 1 ☺ 33 ! 65 A 97 a 129 ü 161 í   193 ┴  225 ß 2 ☻ 34 " 66 B 98 b 130 é 162 ó   194 ┬  226 Ô 3 ♥ 35 # 67 C 99 c 131 â 163 ú   195 ├  227 Ò 4 ♦ 36 $ 68 D 100 d 132 ä 164 ñ   196 ─  228 õ 5 ♣ 37 % 69 E 101 e 133 à 165 Ñ   197 ┼  229 Õ 6 ♠ 38 & 70 F 102 f 134 å 166 ª 198 ã 230 µ 7 • 39 ' 71 G 103 g 135 ç 167 º 199 Ã 231 þ 8 ◘ 40 ( 72 H 104 h 136 ê 168 ¿   200 ╚  232 Þ 9 ○ 41 ) 73 I 105 i 137 ë 169 ®   201 ╔  233 Ú 10 ◙ 42 * 74 J 106 j 138 è 170 ¬   202 ╩  234 Û

(42)

12 ♀ 44 , 76 L 108 l 140 î 172 ¼   204 ╠  236 ý 13 ♪ 45 - 77 M 109 m 141 ì 173 ¡   205 ═  237 Ý 14 ♫ 46 . 78 N 110 n 142 Ä 174 «   206 ╬  238 ¯  15 ☼ 47 / 79 O 111 o 143 Å 175 »   207 ¤ 239 ´ 16 ► 48 0 80 P 112 p 144 É 176 ░  208 ð 240 17 ◄ 49 1 81 Q 113 q 145 æ 177 ▒  209 Ð 241 ± 18 ↕ 50 2 82 R 114 r 146 Æ 178 ▓ 210 Ê   242 ‗  19 ‼ 51 3 83 S 115 s 147 ô 179 │ 211 Ë 243 ¾ 20 ¶ 52 4 84 T 116 t 148 ö 180 ┤ 212 È 244 ¶ 21 § 53 5 85 U 117 u 149 ò 181 Á   213 ı 245 § 22 ▬ 54 6 86 V 118 v 150 û 182 Â 214 Í 246 ÷ 23 ↨ 55 7 87 W 119 w 151 ù 183 À 215 Î 247 ¸ 24 ↑ 56 8 88 X 120 x 152 ÿ 184 © 216 Ï 248 ° 25 ↓ 57 9 89 Y 121 y 153 Ö   185 ╣ 217 ┘ 249 ¨ 26 → 58 : 90 Z 122 z 154 Ü   186 ║ 218 ┌  250 · 27 ← 59 ; 91 [ 123 { 155 ø   187 ╗ 219 █  251 ¹ 28 ∟ 60 < 92 \ 124 | 156 £   188 ╝ 220 ▄  252 ³ 29 ↔ 61 = 93 ] 125 } 157 Ø 189 ¢ 221 ¦ 253 ² 30 ▲ 62 > 94 ^ 126 ~ 158 × 190 ¥ 222 Ì 254+ ■ 31 ▼ 63 ? 95 _    127 ⌂ 159 ƒ   191 ┐ 223 ▀  255 Fonte: <http://www.abusar.org>.

Essa convenção foi padronizada para possibilitar a migração de progra-mas entre máquinas diferentes.

Cabe salientar que o comprimento de um dado do tipo literal é dado pelo número de caracteres nele contido. Logo, para armazenarmos um tipo de dado literal precisamos reservar um espaço contíguo de memória igual ao comprimento do mesmo, destinando um byte  para cada caractere de

informa-ção. O literal “Programação”, por exemplo, possui comprimento igual a 11, ou seja, possui 11 caracteres.

3.2.3 Dados lógicos

Um dado do tipo lógico só possui dois valores possíveis: verdadeiro ou falso. Dessa forma poderíamos pensar em armazenar uma informação desse tipo em apenas um único bit. Todavia a menor porção de memória que se pode acessar é o byte  (oito bits). Assim uma informação do tipo lógico é

(43)

De certa forma, se por um lado isso pode parecer como um “desperdí-cio” de memória, por outro simplifica bastante a arquitetura de memória dos computadores. Além disso isso não é tão relevante, uma vez que, na prática, o número de ocorrências de dados do tipo lógico é bastante inferior ao de ocorrências de dados do tipo literal ou numérico.

Síntese da aula 

Nesta aula, discutimos como o computador armazena e manipula as informações na memória do computador.

 A memória dos computadores é composta por posições numeradas e ordenadamente organizadas em bytes. Cada tipo de dado requer uma quan-tidade diferente de bytes para armazenar a sua informação na memória. Essa quantidade pode também variar em função do tipo de computador ou Lin-guagem de Programação considerada.

Uma variável é uma entidade dotada de um nome para diferenciá-la das

demais e permitir encontrar a sua posição da memória, e um tipo de dado,

que define o tipo de informação que ela é capaz de guardar.

Uma vez definidos, o nome e o tipo de uma variável não podem ser alterados no decorrer de um programa. Por outro lado, a informação útil da variável é passível de modificação durante o decorrer do programa, de acordo com o fluxo de execução do mesmo.

 Já um dado constante não sofre alteração no seu valor durante a execu-ção do programa.

Atividades

1. Com base no que foi estudado nesta aula, escolha a alternativa que apre-senta, respectivamente, os tipos de dados mais adequados para variá-veis que deverão armazenar os seguintes conteúdos: idade, temperatura, nome da cidade, número da carteira de identidade, notas de um aluno.

a) Inteiro, real, caractere, caractere, vetor de real.

Referências

Documentos relacionados

Apesar de o mercado acionário brasileiro ter se tornado mais importante para a economia brasileira, sobretudo entre o período de 2002 para 2005 (Tabela 3), sua repre- sentatividade

Changes in the gut microbiota appears to be a key element in the pathogenesis of hepatic and gastrointestinal disorders, including non-alcoholic fatty liver disease, alcoholic

Therefore, the aim of this study was to identify the species of Colletotrichum associated with chayote anthracnose in different production poles of Brazil, based on DNA sequence

In this study, we describe the fish demersal assemblage along the continental shelf of the northeast Brazilian coast 5°-9°S, specifically the ecological descriptors and the

compra dele, no que diz respeito aos gastos relacionados com alimentos e motivos de escolha do ponto de venda, é chegada a hora de entendermos o conhecimento dele acerca de

desenvolvimento deste trabalho têm as seguintes metas a serem atingidas: 1 Confirmar que o cenário apresentado depois do Plano1 Diretor de Reforma do Aparelho do Estado 1997, CPI

A baixa taxa de desconto ao longo dos anos de produção do campo, para o cálculo da função objetivo, aliada a baixa produção de água que a locação de