Apresentação atp algoritimo
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
347
On Slideshare
347
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. ApresentaçãoDurante o processamento, um programa de computador precisa armazenar e manipulardados. Os dados de um programa são valores, como uma cadeia de caracteres querepresenta o nome de um funcionário ou um valor numérico que representa seu saláriobruto, e esses valores precisam ser devidamente armazenados para permitir a realizaçãode diversas operações para a produção de resultados.O conjunto de instruções de um programa de computador determina precisamente quaissão os dados de entrada esperados, qual processamento será realizado sobre esses dadose como o resultado produzido será informado a quem o requisitou. Podemos citar, porexemplo, um programa para o cálculo do valor do Imposto de Renda de um funcionárioa partir do valor de seu salário bruto.Nesta aula, você vai aprender sobre a representação dos dados armazenados emanipulados por programas de computador. Você verá os tipos de dados, que sãoconceitos muito importantes às linguagens de programação e estreitamente relacionadosà representação dos valores de um programa por meio de suas variáveis e constantes.Você vai estudar também as operações que são comumente realizadas sobre os tipos dedados encontrados na maioria das linguagens de programação.Tipos de dadosVocê já deve ter ouvido algumas definições sobre o que é um computador. Vejamosmais uma... O computador é um dispositivo eletrônico que, em seu nível maiselementar, reconhece apenas dois estados elementares: a presença ou ausência de sinaiselétricos, ou, de forma simples, é um elemento que está ligado ou desligado. Porconsequência, todos os dados de um computador precisam ser representados com baseem um sistema de numeração binário, onde apenas dois valores diferentes sãodistinguidos. Comumente, esses dois estados são representados como 0 (zero) e 1 (um)e são chamados de dígitos binários, ou simplesmente bit (binary digit), a menor unidadede informação no computador.Então, você pode perguntar: se apenas dois estados podem ser distinguidos no nívelmais elementar de um computador, como podemos representar informações tãovariadas, como documentos, imagens e sons? A reposta a essa pergunta é simples:podemos representar um imenso número de estados distintos por meio das diversascombinações sobre conjuntos de bits. Agrupando bits, podemos distinguir um númeromuito maior de estados, um para cada combinação possível. Quanto mais bitsutilizarmos em uma representação, maior o número de combinações possíveis e umnúmero maior de valores pode ser distinguido. Comumente, a unidade básica detratamento de dados é um agrupamento de 8 (oito) bits, conhecido como byte (binaryterm). Um byte com 8 (oito) bits é capaz de representar combinações distintas, ouseja, 256 diferentes valores. Na memória de um computador, existe um endereço dememória específico a cada byte, assim como cada casa tem um número específico emuma rua. Esse mecanismo é capaz de identificar a localização de uma representação deinformações específicas. Contudo, por questões de eficiência, associamos endereços dememória a grupos de bytes, em vez de a um byte individual. Geralmente, agrupamentos
  • 2. de 2, 4, 6 ou 8 bytes são associados a endereços distintos. Esse agrupamento de bytes éconhecido como palavra.Portanto, todos os valores manipulados por um programa, sejam referentes aos dados deentrada, saída ou à computação de resultados intermediários, são representadosinternamente no computador por meio de um agrupamento de bits, independente se ovalor corresponde a uma frase, a um número inteiro ou a um número real, por exemplo.Contudo, quando codificamos instruções em uma linguagem de programação de altonível, existe distinção entre valores de diferentes categorias, ou tipos. A maioria daslinguagens de programação categoriza valores com propriedades em comum em umtipo, da mesma forma que a Matemática classifica elementos que possuem propriedadesem comum em um conjunto. Essa abordagem permite que as operações sejam definidassobre os valores de um tipo, tomando como base o formato geral de representaçãointerna dos valores do tipo, em termos de agrupamento de bits, da mesma forma quefunções matemáticas são normalmente definidas para operar sobre valores gerais de umconjunto. Portanto, a classificação de valores em tipos é benéfica às linguagens deprogramação porque permite estabelecer propriedades e cálculos para todos os valoresde um tipo de uma só vez, em vez de ter que especificar a propriedade ou operação paracada valor individual. Por exemplo, o compilador de uma linguagem de programaçãodeverá traduzir a operação de soma entre dois valores inteiros para a operação de somaentre agrupamentos de bits que representam inteiros, independente dos valoresespecíficos sobre os quais a soma deve ser desenvolvida.Os tipos de dados oferecidos por uma linguagem de programação têm relação diretacom a facilidade com que o programador cria seus programas, pois quanto mais asestruturas de dados forem flexíveis e adaptadas a um problema, mais natural e simplesserá a solução proposta.Os tipos de dados são comumente classificados em tipos de dados primitivos e tipos dedados estruturados. Um tipo de dado primitivo é aquele que não pode ser definido emtermos de outro tipo mais simples. Como exemplos de tipos primitivos, citamos o tipointeiro e o tipo real. Por outro lado, um tipo de dado estruturado é aquele construído apartir de tipos mais simples. Os registros e os arranjos, construídos a partir de campos eelementos mais simples, respectivamente, são exemplos de tipos de dados estruturados.Nas seções seguintes, você vai conhecer os tipos de dados primitivos e estruturadosmais comuns.Tipos primitivosOs tipos primitivos de dados são atômicos, no sentido em que não podem serdecompostos em tipos mais simples. Alguns tipos primitivos relacionam-se diretamenteà sua representação interna, como é o caso dos números inteiros. Outros tiposprimitivos, como o tipo caractere, precisam de um pequeno suporte de hardware ousoftware para serem representados internamente. Agora, você verá com mais detalhes ostipos primitivos numéricos, caractere e booleano.Tipos numéricosOs tipos numéricos estão entre os primeiros implementados pelas linguagens de
  • 3. programação. A maioria das linguagens oferece tanto representações dos númerosinteiros, , como representações dos números reais, . As representaçõescomputacionais desses tipos são apenas aproximações desses conjuntos matemáticos,que são infinitos, não podendo ser representados na memória do computador, que éfinita. No caso dos números reais, temos, também, apenas aproximações das dízimasinfinitas não periódicas.A Tabela 1 mostra os principais operadores aritméticos, a forma como sãorepresentados e exemplos de como utilizá-los. Tabela 1 – Operadores aritméticos. Operador Representação Exemplo Menos unário - -a Potenciação ^ a^5 Multiplicação * a*5 Divisão / a/5 Módulo (resto da divisão) % a%5 Adição + a+b Subtração - a–bValores numéricos podem também ser operandos de operadores relacionais. A Tabela 2mostra os operadores relacionais mais comuns. Tabela 2 – Operadores relacionais Operador Representação Exemplo Comparação menor < a<5 Comparação menor-igual ≤ a≤5 Comparação maior > a>5 Comparação maior-igual ≥ a≥5 Comparação igual == a == 5 Comparação diferente != a != 5Os operadores relacionais são utilizados para comparar valores, podendo ser aplicadossobre operandos numéricos, além de outros tipos. Contudo, um operador relacionalsempre produz um valor de tipo booleano, independente do tipo dos operandoscomparados. Ainda nesta aula, você verá o tipo de dado booleano.Tipo inteiroO tipo inteiro é o tipo primitivo numérico mais comum. Sem parte fracionária, o tipointeiro é caracterizado por sua faixa de valores representáveis, havendo versões dosinteiros com ou sem sinal. São comuns implementações de inteiros, inteiros sem sinal einteiros longos. Um tipo inteiro com sinal é representado internamente como umasequência de bits, em geral dois bytes, sendo o bit da extrema esquerda utilizado pararepresentar o sinal e os demais bits para representar o valor absoluto do número,normalmente em uma notação conhecida como complemento de dois. Por exemplo,
  • 4. utilizando dois bytes os números decimais e são representados na notação decomplemento de dois como e , respectivamente. Nocaso dos inteiros sem sinal, o bit que seria utilizado para representação do sinal sedestina também à representação do valor absoluto do número. Em um inteiro sem sinal,apenas o zero e valores positivos são representáveis, correspondendo ao conjunto dosnúmeros naturais, . Por fim, um inteiro longo é um inteiro com sinal onde mais bitssão utilizados para representar o valor absoluto do número, permitindo a representaçãode valores absolutos maiores. Em geral, um inteiro longo tem o dobro de bits em relaçãoao número de bits de um inteiro simples. A diversidade de tipos inteiros depende doprojeto da linguagem de programação e da arquitetura do computador para o qual ocompilador ou interpretador da linguagem foi projetado. Veja na Tabela 3 os exemplosde inteiros, tomando como base os inteiros oferecidos pelas linguagens C/C++: Tabela 3 – Valores de tipo inteiro na linguagem C Tipo Tamanho em Bytes Faixa de Valores Int 2 -32768 a 32767 unsigned int 2 0 a 65535 long int 4 -2.147.483.648 a 2.147.483.647 unsigned long int 4 0 a 4.294.967.295Na Tabela 3, unsigned int corresponde a um inteiro simples sem sinal, enquantounsigned long int corresponde a um inteiro longo sem sinal. Note que o uso do bit desinal como parte da representação do valor absoluto permite aproximadamente dobrar onúmero de valores positivos representáveis.Na escrita do algoritmo sob a forma de pseudocódigo, o tipo inteiro é identificado pelapalavra reservada inteiro. Como o algoritmo é uma representação genérica, não existe apreocupação com o tamanho necessário para armazenar esse tipo. Veja alguns exemplosde valores do tipo inteiro: 5, -3 e 0.Tipo flutuanteOs números em ponto-flutuante correspondem ao conjunto dos números reais, aquelesque abrangem os números racionais e irracionais. Para muitos números reais, asrepresentações computacionais em ponto-flutuante são apenas aproximações, comoacontece com dízimas periódicas e números como , e pode haver prejuízo de exatidãodurante algumas operações aritméticas, como em , supondo numerador edenominador representados em ponto-flutuante.Um valor em ponto-flutuante é definido em termos de precisão e faixa. A precisãocorresponde à exatidão de sua parte fracionária, medida pelo número de bitsempregados para representá-la, ao passo que a faixa de valores é uma combinação dosvalores do expoente e da parte fracionária. Um número em ponto-flutuante é geralmenterepresentado pelo padrão de ponto-flutuante IEEE 754. Nesse padrão, um bit representao sinal, seguido de uma sequência de bits que representa o expoente e outra sequênciade bits que representa o valor da parte fracionária, conforme mostrado a seguir: 1 bit 8 bits 23 bits
  • 5. sinal expoente FraçãoComo acontece com os inteiros, a variedade de tipos flutuantes em uma linguagem deprogramação depende do projeto da linguagem e de sua arquitetura alvo. Um tipoponto-flutuante de precisão simples costuma ser armazenado em quatro bytes, enquantoos de precisão dupla usam oito bytes. Tabela 4 – Valores de tipo flutuante na linguagem C Tipo Tamanho em Bytes Faixa de Valores float 4 -3.4E-38 a 3.4E+38 double 8 -1.7E-308 a 1.7E+308Uma representação alternativa à representação de números reais é oferecida pelalinguagem Cobol, que armazena esses números utilizando a codificação BCD (BinaryCoded Decimal), onde códigos binários são associados a cada dígito decimalindividualmente, um dígito por byte ou dois dígitos por byte, com o ponto decimal emuma posição fixa no valor. O Cobol é uma linguagem de programação antiga, mas aindabastante utilizada em sistemas antigos ainda em operação.Na escrita do pseudocódigo, os números reais (tipo flutuante) são identificadosunicamente pela palavra especial real e, assim como nos inteiros, não existe apreocupação com o tamanho necessário para armazenar esse tipo. Como exemplos devalores do tipo real, temos: 2, -2, 0.8, -0.8, 3.71654 etc.Tipo booleanoO tipo booleano é certamente o tipo primitivo mais simples, pois possui apenas doisvalores associados: true e false. Normalmente, o tipo booleano é empregado comosinalizador ou comutador para indicar a ocorrência de certas condições ou para desviaro fluxo de execução do programa. Ainda que algumas linguagens de programaçãoutilizem outros tipos para essas funções, como acontece com a linguagem C, o uso dotipo booleano geralmente torna o programa mais compreensível.Como o tipo booleano apresenta apenas dois valores, somos tentados a pensar que essetipo é representado por meio de um único bit. Contudo, devido a questões de eficiência,o tipo booleano costuma ser representado na menor célula de memória eficientementeendereçável, geralmente o byte.Na escrita do algoritmo, o tipo primitivo booleano é identificado pela palavra especialbooleano e, assim como nos outros tipos, não existe a preocupação com o tamanhonecessário para armazenar esse tipo. Nesse contexto, o tipo booleano pode assumir umdos valores: “falso” ou “verdadeiro”.A Tabela 5 mostra os operadores que podem ser utilizados sobre tipos booleanos. Tabela 5 – Operadores lógicos Operador Representação Exemplo
  • 6. Negação ! !a Conjunção && a && b Disjunção || a || bNa Tabela 5, e representam variáveis ou valores booleanos.Tipo caractereO tipo caractere corresponde aos símbolos alfanuméricos armazenados comocodificações numéricas. As codificações mais conhecidas são a ASCII (AmericanStandard Code for Information Interchange) que utiliza os valores de 0 a 127 paracodificar 128 diferentes caracteres, e a Unicode, uma tabela de codificação de 16 bitsque inclui caracteres da maioria das linguagens naturais. Em uma tabela de codificação,cada caractere é identificado com um código correspondente, conforme trecho da tabelaASCII apresentado na Tabela 6 a seguir: Tabela 6 – Trecho da Tabela ASCII Binário Decimal Hexa Caractere 0100 0000 64 40 @ 0100 0001 65 41 A 0100 0010 66 42 B 0100 0011 67 43 CAlém dos símbolos visíveis, essas tabelas de codificação incluem caracteres nãoimprimíveis, utilizados para controle de impressão, como tabulação e quebra de linha.Valores do tipo caractere são comumente definidos entre aspas simples nas linguagensde programação. Por exemplo, o valor caractere deve ser escrito como . Na escritado pseudocódigo, o tipo caractere será identificado pela palavra reservada caractere eseus valores serão denotados entre aspas simples.Tipo stringUma string é uma cadeia de caracteres, sendo o tipo utilizado para representar valorestextuais, como nomes, endereços etc. Em algumas linguagens, as strings sãorepresentadas como arranjos unidimensionais cujos elementos são caracteres, enquantoem outras as strings são oferecidas como um tipo básico da linguagem. Em nossasaulas, adotaremos essa última abordagem.Os caracteres que compõem uma string correspondem aos símbolos da tabela decodificação utilizada pela linguagem de programação, mas os valores strings sãonormalmente escritos como uma sequência de caracteres envolvidos entre aspas duplas.Portanto, os valores e são diferentes, pois o primeiro tem tipo caractere, enquantoo segundo é do tipo string.
  • 7. Em Portugol, o tipo string é denominado como texto e seus valores são tratadosconforme o exemplo seguinte, que mostra a declaração da string nome, seguida daatribuição do valor Digital à string: var nome: texto nome ← “Digital”Na Tabela 7, você verá as operações mais comumente realizadas sobre o tipo string. Tabela 7 – Algumas operações sobre strings Operação Descrição Inversão Retorna a string escrita na ordem inversa. Compara se duas strings são iguais, retornando 0 (zero) Comparação em caso positivo. Retorna a junção das duas strings, com a segunda string Concatenação começando imediatamente após o fim da primeira.Tipos estruturadosOs tipos de dados estruturados recebem esse nome porque são construídos a partir daaplicação de construtores de tipos a tipos mais simples. A possibilidade de utilizarconstrutores de tipos é importante porque permite ao programador definir novos tiposdevidamente voltados à solução do problema tratado. Abordaremos dois tipos de dadosestruturados em nossa discussão: os arranjos e os registros.ArranjosOs arranjos são um tipo de dado estruturado caracterizado como um agregado de dadoshomogêneo, isto é, um tipo de dado construído como um agrupamento de elementos demesmo tipo. Os arranjos têm relação direta com as matrizes da Matemática, discutidasem nossa quarta aula (Matrizes). Da mesma forma como acontece com as matrizesmatemáticas, um arranjo pode ter uma ou mais dimensões, cada uma delas relacionada aum índice. De forma geral, um arranjo de dimensões corresponde a uma matriz de dimensões, necessitando de índices para identificar um de seus elementosindividualmente.Na maioria das linguagens de programação, os elementos de um arranjo podem assumirqualquer um dos tipos válidos, desde que todos os elementos do arranjo possuam omesmo tipo. Por outro lado, os índices são normalmente valores numéricos ordinais,comumente inteiros. Geralmente, os índices de um arranjo iniciam-se em um ou zero,embora certas linguagens deixem essa decisão para o programador, que fica responsávelpor escolher a faixa de índices a utilizar em cada programa. Para simplificar seuaprendizado e torná-lo coerente com o que você viu acerca das matrizes matemáticas,assumiremos que os índices se iniciam em um, sem prejuízo para a generalidade desseestudo. Apresentamos, na Figura 1, exemplos de arranjos com uma, duas e trêsdimensões.
  • 8. (a) Arranjo (b) Arranjo (c) Arranjo Figura 1 – Exemplos de arranjo com uma (a), duas (b) e três (c) dimensões.Na Figura 1, você pode ver que os índices que identificam a primeira dimensãoaparecem em vermelho, a segunda dimensão em azul e a terceira dimensão em verde.Quando listamos os índices de um arranjo, devemos apresentá-los na ordemcorrespondentes a suas dimensões. Portanto, os elementos , e mostrados na Figura1 correspondem, respectivamente, aos elementos , e . Note que identifica o elemento localizado na segunda linha e terceira coluna do arranjo ,enquanto identifica o elemento localizado na primeira linha, terceira coluna eprimeiro nível de profundidade de .Os elementos de um arranjo são armazenados em posições adjacentes na memória docomputador, independente de quantas dimensões o mesmo envolve. Os índices doarranjo são utilizados pelo compilador ou interpretador da linguagem de programaçãopara indicar como calcular o endereço de cada elemento em relação ao endereço daposição onde começa o armazenamento do conjunto de dados referente ao arranjo.Os arranjos são muito úteis quando precisamos armazenar dados de mesmo tipo e quetêm relação entre si, permitindo uma forma de acesso adequada que se mostrará muitoadaptada às estruturas de repetição, conforme veremos nas próximas aulas. Comoexemplo de situação onde os arranjos se mostram adequados, considere o problema dearmazenar as notas de todos os alunos de uma turma com alunos em uma determinadaavaliação para posteriormente calcular a média da turma nesta avaliação. As notaspodem ser inicialmente armazenadas em um arranjo com elementos, uma nota emcada posição do arranjo. Posteriormente, as notas armazenadas nesse arranjo poderãoser facilmente acessadas, uma a uma, pelo procedimento de cálculo da média utilizandouma estrutura de repetição. As matrizes possuem diversas outras aplicações, incluindoaplicações complexas como previsão do tempo.Na escrita do algoritmo em pseudocódigo, os arranjos são identificados pelas palavrasreservadas arranjo de, seguidas do número de posições por dimensão e do tipo dosdados que neles serão armazenados. Veja os exemplos a seguir:var Vet : arranjo de 10 inteirovar Mat : arranjo de 25 10 caracterevar Opcoes : arranjo de 2 texto [“Inserir", “Sair"]Os arranjos que você acabou de ver definem, na ordem em que são mostrados, umarranjo unidimensional de 10 inteiros (Vet), um arranjo bidimensional de caracteres com
  • 9. 25 linhas e 10 colunas (Mat), e um arranjo unidimensional de strings com 2 posições, jáinicializadas, (Opcoes). Os programadores geralmente se referem aos arranjosunidimensionais simplesmente como vetores e aos arranjos bidimensionais comomatrizes. Por exemplo, os programadores geralmente se referem a um arranjounidimensional de elementos inteiros simplesmente como um vetor de inteiros,enquanto um arranjo bidimensional de elementos flutuantes seria chamado de umamatriz de flutuantes.RegistrosOs registros, também conhecidos como estruturas, definem um tipo de dado estruturadoque pode armazenar dados de tipos variados, sendo, portanto, considerado umagrupamento de dados potencialmente heterogêneo. Os elementos que compõem umregistro são organizados em campos: cada elemento de dado que compõe o registroencontra-se associado a um campo do registro, que possui um nome de campoassociado utilizado para identificá-lo individualmente. Diferente dos arranjos, onde oselementos componentes são identificados com base apenas em sua posição dentro doagrupamento de dados, um elemento de um registro é identificado com base no nome deseu campo.Os registros são muito úteis quando precisamos armazenar e manipular dados que seencontram relacionados entre si, mas que possuem tipos diferentes. Por exemplo, asinformações pertinentes a um aluno, como nome, matrícula, notas individuais nas trêsavaliações, e média em uma disciplina podem ser representadas com sucesso por meioda seguinte declaração de estrutura:Observe que essa declaração apenas cria um novo tipo, o tipo . Suponha que representa uma instância desse tipo, ou seja, é um nome específico associado a umconjunto de valores do tipo . O acesso aos campos de será realizado por meioda seguinte sintaxe:onde corresponde ao nome do campo que desejamos acessar. Por exemplo, asseguintes instruções definem o acesso aos campos e da estrutura , detipo :
  • 10. Em relação ao armazenamento, os campos de um registro se localizam em posições dememória adjacentes, como acontece com os arranjos. Contudo, o cálculo do endereço dedeslocamento de cada campo em relação ao início do registro varia de acordo com otipo associado a cada campo. Mas, você não precisa se preocupar com isso, pois essecálculo será feito automaticamente pelo compilador ou interpretador da linguagem deprogramação a partir do acesso que você definir com base nos nomes dos campos doregistro.Variáveis e constantesNa Matemática, uma variável é utilizada para representar um valor desconhecido,tipicamente conhecido como incógnita da expressão, podendo assumir qualquer valordo conjunto ao qual a variável pertence. É comum vermos expressões como ,onde a variável representa um valor inteiro desconhecido.Nas linguagens de programação, uma variável representa um valor qualquer de umdeterminado tipo, o tipo da variável. Na maioria das linguagens de programação, umavariável é identificada por um nome associado ao espaço de memória reservada para oarmazenamento de dados de um determinado tipo, funcionando como uma abstração deuma célula de memória. Ao dizer que uma variável é uma abstração de um espaço dememória, queremos dizer que uma variável se comporta como um nome associado a umespaço de memória do computador. Como tipos de dados diferentes têm diferentesformatos e demandam diferentes tamanhos de armazenamento, o tamanho do espaço dememória reservado a uma variável dependerá do tipo da variável, geralmente informadodurante a declaração da variável:var i: inteirovar media: realvar acertou: booleanovar letra: caracterevar titulo: textoO nome de uma variável deve ser escolhido com prudência, de forma a ser significativo,fazendo com que a leitura de seu identificador naturalmente lembre a função ou uso davariável, facilitando assim o entendimento do código do programa. Se quisermos ler ovalor associado a uma variável, basta escrevermos o nome dessa variável na expressãoonde seu valor deve ser considerado. Por outro lado, o valor associado a uma variávelpode ser alterado por meio de uma instrução conhecida como atribuição (←):i ← -2media ← 5.6acertou ← verdadeiroletra ← „n‟titulo ← “Aula 07”Atribuir um valor a uma variável corresponde a armazenar o valor atribuído ao espaço
  • 11. de memória associado àquela variável. Como esse espaço de armazenamento podearmazenar apenas um valor de determinado tipo a cada momento, uma atribuiçãosubstitui o valor anteriormente armazenado.Observe este exemplo:(1) var a, b, c: inteiro ← 0(2) a←b+6(3) c←3*a(4) b ← (c - a)*2(5) a ← b/aVocê é capaz de mostrar qual o valor de cada uma das variáveis ao fim do algoritmo?Acompanhe a tabela a seguir com os valores ao fim de cada linha: Linha a B c 1 0 0 0 2 6 0 0 3 6 0 18 4 6 24 18 5 4 24 18Viu como as variáveis se comportam? Inicialmente, todas as variáveis, a, b e c estavamcom valor inicial zero e com o decorrer das operações esses valores foram atualizados.Então, você pode perguntar: e o que é uma constante de uma linguagem deprogramação? Essas constantes funcionam de maneira semelhante às constantesmatemáticas. Podemos tomar a expressão que define a área de um círculo comoexemplo:onde a área e o raio do círculo são representados pelas incógnitas e , enquanto temsempre o valor . Da mesma forma, uma constante de um programa é um nomeassociado a um valor que não muda ao longo do tempo de execução do programa.Constantes são bastante úteis por simplificar o trabalho do programador, permitindo queum nome seja usado em lugar do valor explícito. Por exemplo, podemos usar aconstante para representar cada uma das ocorrências do valor em umprograma. Além disso, as constantes permitem que o código seja alterado com rapidez esem esforço, pois a redefinição do valor de uma constante requer apenas a alteração desua instrução de definição, mas o novo valor associado será considerado por todas asinstruções que referenciam a constante. Um bom exemplo desse uso seria o de umaconstante que representa o número de alunos de uma turma: uma simples redefiniçãodo valor da constante afetará todas as computações realizadas com base em .Em nosso pseudocódigo, a definição de constantes será realizada da seguinte forma:cte MSN: texto “Ola, mundo!”
  • 12. escreva (MSN)onde constante MSN, introduzida pela palavra especial cte, é uma constante do tipostring e que representa o valor “Olá, mundo!”.Tanto as variáveis como as constantes têm um tipo associado e armazenam apenasvalores desse tipo. Contudo, o valor da constante é definido no início do programa epermanece o mesmo até o fim da execução do programa, não podendo ser atribuído,enquanto o valor de uma variável pode ser alterado sempre que necessário.Os identificadores das variáveis e constantes devem ser formados atendendo a algumasregras simples: conforme discutimos, os identificadores devem ser significativos. O identificador deve remeter o leitor ao contexto da variável ou constante; os identificadores podem ser formados por letras, algarismos e o caractere _, não podendo ser iniciados por algarismos; os identificadores não podem ser palavras especiais da linguagem de programação utilizada. Uma palavra especial é quando seu uso já se destina à identificação de um elemento/componente da linguagem de programação. Por exemplo, em Portugol as palavras var, arranjo e booleano não podem ser utilizadas para nomear variáveis ou constantes, pois elas já têm emprego bem definida.Desde que respeitemos as regras acima, podemos criar padrões adicionais que facilitema compreensão do código produzido. Como exemplo, muitos programadores costumamidentificar as constantes com letras maiúsculas, facilitando seu reconhecimento nocódigo.Assim, sabemos que os tipos de dados, as variáveis e as constantes são elementosfundamentais na construção de programas. A diversidade de tipos de dados e demecanismos para a construção de novos tipos pelos programadores surgiu com oobjetivo de facilitar o trabalho do programador e aumentar sua produtividade. Afacilidade com que os programadores executam suas tarefas depende de quão bem ostipos de dados coincidem com o espaço de problema do mundo real. Portanto, oconhecimento dos tipos de dados e das representações de seus valores em constantes evariáveis é essencial ao programador.Leituras complementaresPara complementar seu estudo sobre os tipos de dados, variáveis e constantes, consulteestas fontes:NETTO, José L. M. Rangel. Tipos de dados. Disponível em: <http://www-di.inf.puc-rio.br/~rangel/lp/LP4.PDF>. Acesso em: 25 fev. 2010.Neste documento, você encontrará mais informações sobre os tipos de dadosestruturados, chamados pelo autor de tipos definidos pelo usuário. Atenção: a notação
  • 13. utilizada nos algoritmos é diferente da nossa, embora possa ser entendida semdificuldade.AMARAL, Fernando. Algoritmos: conceitos gerais. Disponível em:<http://www.prof2000.pt/users/famaral/ig/tlp/conceitos.htm>. Acesso em: 25 fev. 2010. Aqui, você pode conhecer mais sobre os tipos de dados e operadores aritméticos,relacionais e lógicos.ResumoNesta aula, você aprendeu sobre os principais tipos de dados, tanto básicos quantoestruturados. Para cada tipo apresentado, você conheceu os principais operadores e suarepresentação em Portugol, notação empregada para escrever nossos algoritmos empseudocódigo. O conteúdo aprendido hoje será muito útil nas aulas seguintes, quandoaprenderemos mais a respeito dos algoritmos e de seus elementos essenciais.ReferenciasMEDINA, M.; FERTIG, C. Algoritmos e programação: teoria e prática. São Paulo:Novatec, 2006.PUGA, S.; RISSETTI, G. Lógica de programação e estruturas de dados comaplicações em Java. São Paulo: Pearson Prentice Hall, 2003.SEBESTA, Robert W. Conceitos de linguagens de programação. 5. ed. Porto Alegre:Bookman, 2003.