PARADIGMAS DE LINGUAGENS
UNIDADE II: CARACTERIZAÇÃO DOS PRINCIPAIS PARADIGMAS DE PROGRAMAÇÃO
Tipos de Dados
Introdução
•
Variáveis
• O Conceito de Variáveis depende do tipo de paradigma de programação.
• Em linguagens logicas e funcionais (LISP e PROLOG, assim como na matemática) uma variável é um valor fixo, porem desconhecido.
• Em linguagens imperativas, procedurais ou OO, uma variável é um contêiner para valores, que podem ser acessados e atualizados.
• Em OO, tais variáveis podem ser usadas para modelar objetos do mundo real que mudem seus valores no tempo.
Introdução
• Na prática , uma variável nada mais é do que uma abstração para o endereço de memória.
• Em geral, as linguagens de alto nível possuem dois tipos de elementos:
• elementos definidos pela própria linguagem
• símbolos para operadores, nome de comandos, etc...
• elementos definidos pelo programador
• identificadores, comentários, etc..
Ex.: 16 bits.
Introdução
•
Variáveis podem ser vistas como as seguintes características:
•
Endereço
• Local correspondente na memória física do computador
•
Identificador
• Nome mnemônico para referenciar o espaço em memória
•
Tipo
• Classificação do dado armazenado na memória
•
Valor
• Valor armazenado na memória
• Tempo de Vida
• O tempo de vida de uma variável é o intervalo de tempo durante o qual um conjunto de células de memória está vinculado à uma variável.
• Escopo
• O escopo de uma variável é o contexto onde ela foi definida
Introdução
• Variáveis podem ser vistas como uma quadrupla:
Int a, b a = 10;
b = 5;
Endereço Identificador Tipo Valor
1001 a int 10
1006 b int 5
Endereços
•
Um endereço de memória é um identificador único para um local de memória no qual um processador ou algum outro dispositivo pode armazenar pedaços de dados.
• Endereço Físico
• É o endereço real na memoria física.
• Endereço Virtual
• É o endereço lógico ou de programas que o processo usa. Sempre que a UCP gera um endereço, ele é sempre relacionado ao espaço de endereço virtual.
Endereços
• Utilização do Sistema Binário
• Pois qualquer valor diferente “0” e ”1”, será completamente desprezado. Tornando os dispositivos digitais menos susceptíveis ao erro, tornando-os mais confiáveis e puros.
• Bit0 ou 1 (álgebra de boole)
• Bytesconjunto de 8 bits
• Palavras (word) é um conjunto de bits que representa uma informação transferida ou processada pela UCP.
• Atualmente os Processadores são capazes de utilizar palavras de até 64 bits, isso é, processa e transmite informações, internamente através de um canal de 64 bits.
• Uma máquina de 64 bits terá registradores de 64 bits e instruções de para movimentar, somar, subtrair e em geral, manipular palavras de 64 bits.
Endereços
Nybble – 4 bits Long Word – 32 bits Byte – 8 bits Very Long Word – 64 bits Word – 16 bits
Identificadores (Nome)
•
Considerações acerca de um nome:
Qual o comprimento máximo de um nome ?
As palavras especiais e/ou palavras reservadas ou palavras-chave
Existe distinção entre maiúsculas e minúsculas ? Podem ser utilizados Caracteres de Conexões ?
($ ? # @ ~ ; : / \ | ...)
Identificadores (Nome)
•
Toda linguagem de programação possui “nomes” com significados pré-definido
• O nome identifica ações que deve ser executada.
• Exemplo:
• Begin
• If
• While
• True / False
•
As linguagens usam os nomes assim como os humanos
•
conceito de mnemônico para facilitar a memorização e o entendimento:
• Identificar variáveis, rotinas ou construções de programa.
Identificadores (Nome)
• Tamanho
•
As primeiras Linguagens utilizavam nomes com apenas 1 caractere, pois eram basicamente matemáticas.
•
Exemplos de linguagens:
• FORTRAN I: máximo de 6 caractere;
• FORTRAN 90 e C: máximo de 31 caractere;
• BASIC: 1 caractere ou 1 caractere seguido de 1 número
• COBOL : máximo de 30 caractere;
• Ada e Java: sem limite de caracteres;
• C++: sem limite, mas implementadores geralmente impõem limites
Identificadores (Nome)
• Palavras Especiais
• É uma "palavra chave", e por ser de uso restrito, é também uma "palavra reservada“, onde se refere a uma funcionalidade ou para uso futuro.
•Ex.:
• Na linguagem Java, as palavras const e goto são reservadas; elas não tem nenhum significado para a linguagem mas não podem ser utilizadas como identificadores. Isto permite que estas palavras sejam definidas em versões futuras da linguagem sem que o código já escrito seja afetado.
• Sendo assim, Identificadores de variáveis não podem assumir o mesmo nome de palavras especiais, entretanto a exceções.
•Exemplo
• PASCAL: não se pode criar variáveis com identificador (nome) como if / true / and.
•Contra Exemplo.:
• FORTRAN 90 permite que se defina variáveis com nomes do e end
Identificadores (Nome)
• Key Sensitive –
•
Distinção entre Maiúsculas e minúsculas
•
Desvantagem:
• Problema de Legibilidade
• nomessemelhantes são diferentes
• rest, Rest, ResT, REST,
•
Nomes em C, C++, Modula-2 e em Java fazem distinção entre maiúscula e minúscula
•
FORTAN anteriores ao 90
• Somente letras maiúsculas podiam ser usadas em nomes
Identificadores (Nome)
•
Caracteres de conexão
• Exemplo
•
_ “ Underline”
• Pascal, Modula-2 e FORTRAN 77 não permitem
• Linguagens mais recentes permitem
• Java, .NET
Identificadores (Nome)
• Caracteres de conexão
• Exemplo: Pascal, Modula-2 e Fortran 90
• Ficha
• Aluno_1_ano
• B3d
• x+y (somente letras, algarismos e underline são permitidos)
• 2somas (os identificadores têm que começar por uma letra).
• Não é permitido usar palavras acentuadas como se verifica na língua portuguesa.
• salário
• gratificação
• Java / ActionScript – ja lidam diferente como esse tipo de situação e permitem o uso dos acentos e cedilha “ç”
• ªgratificação_01 ºgratificação_01 $gratificªção_01 gratificºção_01
É considerada boa regra de programação utilizar identificadores que representem nomes com significado, de forma a facilitar a interpretação dos programas.
Identificadores (Nome)
•
No Fortran 90, os identificadores devem começar com uma letra e podem ser seguidos por mais 30 letras, algarismos ou underline ( _ ), perfazendo, assim, no total um máximo de 31 caracteres.
•
Desta forma:
• os identificadores têm que começar por uma letra;
• somente letras, algarismos e underline são permitidos;
• não são permitidos o uso de palavras reservadas ;
• não faz distinção entre as letras maiúsculas e minúsculas.
Identificadores (Nome)
Um identificador válido na linguagem Pascal é qualquer sequência de caracteres que obedeça às seguintes regras:
• Seja iniciada por uma letra ( a, b, ..., z ) ;
• Possui, depois da primeira letra, uma seqüência de caracteres que podem ser letras, digitos (1, 2, ... , 9, 0 ) ou ainda o caractere _ ;
• É uma palavra que não é uma das palavras reservadas da linguagem Pascal.
Exemplo
Identificadores válidos:
A Nota P1
Meu_Identificador
Identificadores inválidos:
1A E(13) A:B
A linguagem Pascal não diferencia palavras maiúsculas de palavras minúsculas.
Assim, para o compilador as seguintes palavras denotam um mesmo identificador:
PASCAL = pascal = Pascal = pAsCaL
Identificadores (Nome)
A linguagem C exige uma regra para a criação de identificadores.
O primeiro caractere deve ser letra ou sinal de underline ( _ ).
Os demais caracteres podem ser letras, números ou sinal de underline, portanto, identificadores como abaixo não são permitidos.
1peso
Os identificadores não devem coincidir com palavras reservadas da linguagem C, portanto palavras como switch, não podem ser utilizadas.
A linguagem C distingue letras maiúsculas de minúsculas, ou seja ela é key sensitive, logo . Variáveis.
pesoPaciente é diferente de PesoPaciente.
Identificadores (Nome)
Em JAVA:
• Os identificados devem conter apenas caracteres como, números, símbolos de moedas ($) e caracteres de conexão underline (_).
• Os identificadores devem começar com uma letra, um cifrão ($) ou um underline (_).
• O primeiro caractere de um identificador não pode ser um número.
• Após o primeiro caractere, os identificadores podem conter letras, números, cifrões ($) e caracteres de conexão (_).
• Os identificadores em Java são kay sensitive, sendo assim, nome é diferente de Nome que é diferente de nOmE.
• Um identificador não pode ser uma palavra-chave Java.
Identificadores (Nome)
Ainda em JAVA
Devemos levar em consideração as convenções de Nomenclatura:
• Benefícios:
• Código mais legível e documentável,
• Melhora o entendimento para reaproveitamento do código.
• Nome de Classes
• Por convenção, toda classe deve começar com uma letra maiúscula e, de preferência, não pode conter letras não ASCII (caracteres de língua de origem latina, como caracteres acentuados).
• Portanto, não é possível declarar uma classe com qualquer caracter especial (@, #,
$, %, &, *, _, etc...) ou número.
• Caso o nome de uma classe seja composto por mais de uma palavra, a primeira letra de cada palavra deve ser em maiúscula.
• O nome da classe deve ser exatamente o mesmo nome de seu arquivo fonte ( .java ).
• O nome da classe deve fazer referência total ao seu objeto (atributos e métodos contidos dentro da classe).
• Por exemplo:
• se tivermos uma classe com os atributos canal, volume e sintonia; e os métodos
mudarCanal (), aumentarVolume () e diminuirVolume (); então, possivelmente chamaríamos esta classe de TV ou Televisao.
Identificadores (Nome)
Ainda em JAVA
Devemos levar em consideração as convenções de Nomenclatura:
•
Nome de Pacotes
• Os pacotes devem começar com uma letra minúscula.
• Jamais poderemos iniciar o nome de um pacote com caracteres especiais (@, #, $, %, &, *, _, etc...) ou número.
• Caso o nome de um pacote seja composto por mais de uma palavra, a primeira letra de cada palavra deve ser em maiúscula.
• O nome do pacote deve fazer referência total às funções exercidas pelas classes dentro do pacote,
• Exemplos de nomes de pacotes
• conexõesDeBancoDeDados , ...
Identificadores (Nome)
Ainda em JAVA
Devemos levar em consideração as convenções de Nomenclatura:
•
Nome de atributos ou variáveis
• Os atributos (variáveis) podem começar com qualquer letra e os caracteres $ ou _, porém não podem começar com números.
• Caso o nome de um atributo (variável) seja composto por mais de uma palavra, a primeira letra de cada palavra deve ser em maiúscula.
• Exemplos de nomes de atributos ou variáveis:
• x, y, resultado, valorDeX, valorDeY, ligado, ...
•
Nome de atributos finais ou constantes
• Os atributos finais (constantes) devem ser escritos em letras maiúsculas.
• Usamos underline (_) para separar nomes compostos de atributos finais (constantes).
• Exemplos de nomes de atributos finais ou constantes:
TAMANHO, PARAR_DE_EXECUTAR, ...
Identificadores (Nome)
Em Python:
• O nome das variáveis tem que começar com uma letra
• não podendo ser espaço
• são key sensitive.
Tipos de dados
•
Os programas de computador produzem resultados manipulando dados.
•
Que tipos de dados podemos ter?
• Primitivos
• String de caracteres
• Ordinais definidos pelo usuário
• Matriz (array)
• Registro
• Ponteiro
Tipos de dados primitivos
•
Também chamados de tipos Básicos ou Nativos
•
são aqueles não definidos em termos de outros tipos.
•
Tipos numéricos
• Inteiro
• Decimais
• Ponto-flutuante
•
Tipos booleanos
•
Tipos caractere
Tipos de dados primitivos
•
Tipos numéricos – Inteiro:
• Muitos computadores suportam diversos tamanhos de inteiros.
• Linguagem de programação como Ada
• SHORT INTEGER, INTEGER, LONG INTEGER
• Representado por uma cadeia de bits (bit de sinal na extrema esquerda)
• Notação complemento de 2 para números negativos.
Tipos de dados primitivos
•
Tipos numéricos – Inteiro:
• Em Java
• byte, short, int e long
Tipos de dados primitivos
•
Tipos numéricos – Decimais:
• São armazenados usando códigos binários para os dígitos decimais.
• Representação BCD (Binary-Coded Decimal)
• São necessários pelo menos 4 bits para codificar um dígito decimal.
• 123 (decimal) = 000100100011 (BCD) 0001 0010 0011
1 2 3
Tipos de dados primitivos
•
Tipos numéricos – Inteiros:
• Representado por uma cadeia de bits (bit de sinal na extrema esquerda)
• Notação complemento de 2 para números negativos.
Exemplo -9 em binário?
1 1 1 1 0 1 1 1 (base 2) = -9 na (base 10)
Tipos de dados primitivos
•
Tipos numéricos – Inteiros:
• Notação complemento de 2 para números negativos.
Exemplo em 8 bits 1 1 1 1 0 1 1 1 (base 2) = -9 na (base 10)
complemento de dois é um tipo de representação binária de números com sinal amplamente usada nas arquiteturas dos dispositivos computacionais modernos.
Usa o bit mais significativo (MSB) para indicar o sinal do número.
MSB => Most Significant Bit (bit mais significativo) é o que informa o sinal do número.
Tipos de dados primitivos
•
Tipos numéricos – Inteiros:
• Notação complemento de 2 para números negativos.
Exemplo em 8 bits 1 1 1 1 0 1 1 1 (base 2) = -9 na (base 10)
• MSB = 0 indica que o número é positivo.
• MSB = 1 indica que o número é negativo.
Passos:
1º passo: converta para binário, de maneira normal, o número como se não tivesse sinal 2º passo: Inverta todos os bits, trocando 1 por 0 e 0 por 1 para obter o complemento 1 3º passo: Some 1 ao número obtido no passo 2 para obter o complemento 2
Tipos de dados primitivos
•
Tipos numéricos – Inteiros:
• Notação complemento de 2 para números negativos.
Exemplo em 8 bits 1 1 1 1 0 1 1 1 (base 2) = -9 na (base 10)
1º passo: converta para binário, de maneira normal, o número como se não tivesse sinal
9|_2_
1 4 |_2_
0 2 |_2 0 1 |_2_
10 Logo 9 (base 10) = 1001 (base 2) = 00001001 (em 8 bits)
Tipos de dados primitivos
•
Tipos numéricos – Inteiros:
• Notação complemento de 2 para números negativos.
Exemplo em 8 bits 1 1 1 1 0 1 1 1 (base 2) = -9 na (base 10)
2º passo: Inverta todos os bits, trocando 1 por 0 e 0 por 1 para obter o complemento 1
00001001 = 11110110
3º passo: Some 1 ao número obtido no passo 2 para obter o complemento 2
11110110 = 11110111
Tipos de dados primitivos
•
Tipos numéricos – Inteiros:
• Prática Rápida:
Transforme usando notação de complemento de 2 de (8 bits) -12, -21 e -10 da base 10 para a base 2
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
• Ponto flutuante (do inglês floating point) ou vírgula flutuante é um formato de representação digital de números reais, que é usada nos computadores.
• Modelam os números reais (aproximação – π: 3,14...)
• Os valores de ponto-flutuante são representados como frações e como expoentes (notação científica)
Exemplo:
o número 25,456 em notação corresponde ao 0,25456 x 102. 12345,00 × 10−2 = 123,45
1,2345 × 10+2 = 123,45
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
• São armazenados na forma normalizada.
• A maioria das linguagens inclui dois tipos de ponto-flutuante: float e double.
• Em JAVA
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
• São armazenados na forma normalizada.
• Valor3,25 (na base 2) corresponde a 01101101 (na base 10).
Sinal Expoente Mantissa 0 110 1101
OBS.: 8 bits
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
• Exemplo: de 8 bits
• 3,25 (base 10 para base 2) => Notação de ponto flutuante.
• 1º Tratar o sinal
• Sinal => 0 se o número for positivo ou 1 se o número for negativo.
• 2º Converte para binário 3,25
3 (antes da virgula) 0,25 depois da virgula
3|_2_ 0,25* 2 = 0,50
1 1|_2_ 11(base 2) 0,50* 2 = 1,00 0,01 (base 2) 1 0
Temos então (1*2^1) + (1*2^0) + (0*2^-1) + (1*2^-2) 2 + 1 + 0 + 0,25 => 3,25 Mantissa 1101
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
• Exemplo: de 8 bits
• 3,25 (base 10 para base 2) => Notação de ponto flutuante.
• Sinal 0 (pois o numero é positivo)
• Mantissa em binário 1101 (obs.: o ponto fica mais a esquerda)
• Expoente ?como fazer para ficar 11.01
Lembrando que o expoente para a (Direita é +) para (Esquerda é -)
• Temos
.1101
e devemos deslocar o ponto para a direta, logo (+2)• Pega o Valor +2 e verifica na tabela.
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
• Notação de Excesso – 3 bit
Valor Binário Valor Representado
000 -4
001 -3
010 -2
011 -1
100 0
101 1
110 2
111 3
CENTRO
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
Em 8 bits
• Valor 3,25 (base 10)01101101 (na base 2) Sinal Expoente Mantissa
0 110 1101
Tipos de dados primitivos
•
Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):
Exercitação - Em 8 bits
• Valor 5,50 (da base 10 para base 2)
• Valor -1,75 (da base 10 para base 2)
• Valor -2,25 (da base 10 para base 2)
• Valor 6,01 (da base 10 para base 2)
Tipos de dados primitivos
•
Tipos booleanos:
• Sua faixa de valores tem somente dois elementos.
True 0 False 1
• Uma exemplo popular é o PASCAL, no qual expressões numéricas podem ser usadas como condicionais.
If ( 3 > 2) Then begin
writeln (‘verdade’);
end Else begin
writeln (‘falso’);
end;
Tipos de dados primitivos
•
Tipos caractere:
• Os dados de caracteres são armazenados nos computadores como codificações numéricas;
• A codificação mais comumente usada é a ASCII (American Standard Code for Information Interchange)
• Codificação Unicode (Java)
Tipos de dados primitivos
•
Tipos caractere:
• A codificação mais comumente usada é a ASCII (American Standard Code for Information Interchange)
Tipos de dados primitivos
•
Tipos caractere:
• Codificação Unicode (Java)
Tipos String de caracteres
•
Um tipo cadeia de caracteres (String) é aquele cujos valores consistem em sequências de caracteres.
•
Os dados das cadeias normalmente são armazenados em vetores de caracteres únicos e referenciados como tal na linguagem (Pascal, C, C++, Ada).
Tipos String de caracteres
•
Ada
• STRING é um tipo formado por elementos CHARACTER.
• Referência a subcadeias, concatenação, operadores relacionais e atribuição são operações oferecidas para os tipos STRING.
• Exemplo:
NAME1 := NAME1 & NAME2;
Tipos String de caracteres
•
C e C++
• Vetores char para armazenar cadeias de caracteres.
• Biblioteca padrão (string.h)
• As cadeias de caracteres são finalizadas com um caractere especial nulo (zero).
Tipos String de caracteres
•
Opções de tamanho da cadeia
• Cadeia de tamanho estático: FORTRAN 90, COBOL, Pascal e Ada.
• Exemplo de instrução FORTRAN 90:
CHARACTER(LEN=15) NAME1, NAME2 Em PASCAL
Uma variável string é uma cadeia de caracteres com tamanho variável e um tamanho máximo entre 1 e 255.
Tipos String de caracteres
•
Opções de tamanho da cadeia
• Cadeias de tamanho dinâmico limitado: C e C++
• Cadeias de tamanho dinâmico: SNOBOL4, JavaScript e Perl.
Tipos ordinais definidos pelo usuário
•
Tipo ordinal: faixa de valores associada aos inteiros positivos.
• Pascal e Ada: inteiro, caractere e booleano como tipos ordinais primitivos.
• Em muitas linguagens, os usuários podem definir dois tipos de ordinais:
• Enumerações
• Subfaixa
Tipos ordinais definidos pelo usuário
•
Tipos Enumeração
• São aqueles em que todos os valores possíveis são enumerados na definição.
• Exemplo
• Ada:
• type DIAS is (Seg, Ter, Qua, Qui, Sex, Sab, Dom)
• Em JAVA
• public enum MarcasEnum {
AMAZON, DELL, HP, TOSHIBA, LG, SAMSUNG;
}
Tipos ordinais definidos pelo usuário
•
Tipos Enumeração
• Em PASCAL
Exemplo:
type
tCor =(vermelho, laranja, amarelo, verde, azul, anil, violeta);
var
C1,C2: tCor;
begin
C1 := vermelho; { e não ´vermelho entre aspas}
C2 := violeta;
Tipos ordinais definidos pelo usuário
•
Tipos Subfaixa
• Um tipo subfaixa (subrange) é uma subsequência de um ordinal.
• Ex: 12...14 (subfaixa de inteiro)
• Na Ada, as subfaixas são incluídas na classe de tipos, chamada subtipos.
• Ex: subtype DIASSEMANA is DIAS range Seg..Sex;
• Todas as operações para o tipo pai também são definidas para o subtipo, exceto atribuição fora da faixa de valores.
Tipos ordinais definidos pelo usuário
• Tipos Subfaixa
• Em PASCAL
• Definem faixas de valores de um certo tipo ordinal program SubFaixa;
type
tIdadeFunc = 18..80;
tLetraMin = ´a´.. ´z´;
tDigito = ´0´ .. ´9´;
var
IdFunc: tIdadeFunc;
L: tLetraMin;
D: tDigito;
begin
IdFunc := 20;
L := ´d´;
D := ´4´;
Tipos array
•
Uma vetor (array em inglês) ou matriz é um agregado homogêneo de elementos de dados.
• Cada elemento é identificado por sua posição em relação ao primeiro.
• Os elementos são de algum tipo previamente definido.
Tipos array
•
VETOR em PASCAL A forma geral é:
var
<identificador do vetor>: array [<intervalo das posições>] of <tipo dos valores do vetor>
•
var
v: array [1..6] of integer;
Tipos array
•
VETOR em C / C++ / JAVA A forma geral é:
•
tipo variável[tamanho];
•
Exemplo:
int vetor [10];
int vet [ ] = {17, 42, 9, 33, 12};
Tipos array
•
Matrizes e índices
• Uma matriz é um array de duas dimensões.
• Uma matriz é útil por exemplo para armazenar tabelas, fazer cálculos matemáticos, fazer desenhos, resolver problemas, etc.
• Uma Matriz é composta por linhas e colunas
Tipos array
•
Matrizes ou Array multidimensionais
•
Em PASCAL
<nome array>: array [dimensões] of <tipo>;
Declaração e exemplo:
•
Var
mat: array[1..5,1..3] of integer;
Begin
mat[1,2]:=10;
mat[3,1]:=11;
mat[5,3]:=12;
mat[2,2]:=78;
end.
Tipos array
•
Matrizes ou Array multidimensionais
•
Em C / C++ / JAVA
<tipo> <nome> [ ][ ] = new <tipo> [linhas][colunas];
•
Exemplo
int m[ ][ ] = new int[5][3];
Tipos matriz (array)
•
Matrizes e índices
• Dois tipos distintos são envolvidos em tipo de matriz: o do elemento e o do subscrito.
• As primeiras linguagens de programação não especificavam que as faixas de subscrito deveriam ser implicitamente verificadas.
• O C, o C++ e o FORTRAN não especificam a verificação de faixa de subscritos.
• O Pascal, a Ada e o Java especificam.
Tipos matriz (array)
•
Vinculações de subscrito
• Vinculação do tipo do subscrito: normalmente estática.
Tipo inteiro para o índice dos vetores e matrizes
• Vinculação das faixas de valor de subscrito: às vezes dinâmica.
• Especificar tamanho do vetor ou matriz, ou permitir o uso de variável para tratamento do vetor.
• Em algumas linguagens, o limite inferior da faixa de subscrito é implícito.
• No C, no C++ e no Java, o limite inferior é fixado em zero (0).
• No FORTRAN I, II e IV, o limite inferior foi fixado em um (1).
• No FORTRAN 77 e no FORTRAN 90, o padrão é um (1).
Tipos matriz (array)
•
Inicialização de matrizes
• O C, o C++ e o Java também permitem inicialização de suas matrizes
• Exemplo:
int lista[] = {4, 5, 7, 83};
• O compilador define o tamanho do vetor.
Tipos registro
•
Definições de registros
• Um registro é um agregado possivelmente heterogêneo de elementos de dados.
• Cada elemento possui um nome.
• Exemplo: informações sobre um estudante
• Nome
• Número do estudante
• Média das notas
Tipos registro
•
Definições de registros
• Os elementos (ou campos) do registro são referenciados utilizando-se seus identificadores.
• Considere a seguinte declaração de registro:
REGISTRO-EMPREGADO.
NOME-EMPREGADO.
PRIMEIRO MEIO ULTIMO TAXA-HORARIA
Tipos registro
•
Definições de registros
• O Pascal e a Ada usam uma sintaxe diferente para os registros.
• Considere a seguinte declaração Ada:
REGISTRO_EMPREGADO:
record
NOME_EMPREGADO:
record
PRIMEIRO: STRING (1..20);
MEIO: STRING (1..10);
ULTIMO: STRING (1..20);
end record;
TAXA_HORARIA: FLOAT;
end record;
Tipos registro
•
Referências a campos do registro
• As referências aos campos individuais são sintaticamente especificadas por diversos métodos diferentes.
• As referências a campos do COBOL têm a forma:
• Nome_do_campo OF nome_do_registro_1 OF ... OF nome_do_registro_n
• MEIO OF NOME-EMPREGADO OF REGISTRO-EMPREGADO
Tipos registro
•
Referências a campos do registro
• A referência ao campo MEIO da Ada tem a forma a seguir (notação de pontos)
• REGISTRO_EMPREGADO.NOME_EMPREGADO.MEIO
Tipos ponteiro
•
Definição
• Ponteiros: são variáveis cujo conteúdo é um endereço de memória.
• Assim, um ponteiro endereça uma posição de memória que contém valores que são na verdade endereços para outras posições de memória.
• Os ponteiros, ao contrário das matrizes e dos registros, não são tipos estruturados.
• São usados para referenciar alguma outra variável.
• Ponteiros permitem o uso de rotinas de alocação dinâmica de memória em tempo de execução conforme a necessidade do programa e aumento de eficiência em determinadas rotinas.
Tipos ponteiro
•
Operações com ponteiros
• Atribuição
• Desreferenciamento
Tipos ponteiro
•
Ponteiros em C e C++
•
Exemplo:
int *p;
•
Ponteiros são tipados, ou seja, devem ter seu tipo declarado e somente podem apontar para variáveis do mesmo tipo.
Tipos ponteiro
•
Ponteiros em C e C++
& - Fornece o endereço de memória onde está armazenado uma variável. Lê-se “o endereço de”.
* - Valor armazenado na variável referenciada por um ponteiro. Lê- se “o valor apontado por”.
• Operação de desreferenciamento (*)
• Endereço de uma variável (&)
Tipos ponteiro
•
Ponteiros em C e C++
• Exemplo:
#include <stdio.h>
main () {
int num,valor;
int *p;
num=55;
p=# /* Pega o endereco de num */
valor=*p; /* Valor é igualado a num de uma maneira indireta */
}
Tipos ponteiro
•
Ponteiros em Pascal
• Exemplo:
program soma;
var
S,A,B: integer;
PtS,PtA,PtB: ^integer;
begin A := 2;
B := 3;
PtA := @A;
PtB := @B;
PtS := @S;
PtS^ := PtA^ + PtB^;
Writeln('Resultado: ',PtS^);
end.
Exercício Parte 01
1º Responda:
a) Como são tratadas as variáveis nos paradigmas funcionais, lógico, imperativo, procedural e orientado a objetos;
b) Defina o que são variáveis em ciências da computação;
c) Quais são as principais características de uma Variável?
Exercício Parte 01
2º Quais considerações devem ser observadas na hora de nomenclatura uma variável independente da linguagem de programação que esteja sendo empregada?
3º Liste quais os tipos de dados manipuláveis pelos
computadores e classifique-os em primitivos ou derivados.
Exercício Parte 01
4º Utilizando a representação Representação BCD (Binary- Coded Decimal) transforme os seguintes valores da base 10 para a base 2.
a) 145
b) 582
c) 7654
d) 3489
•
5º Utilizando a notação complemento de 2 realize a conversão dos seguintes valores da base 10 para a base 2.
a) - 7
b) -13
c) -4
d) -11
Exercício Parte 01
•
6º Normalize os valores abaixo da base 10 para a base 2.
a) - 4,25
b) 0,50
c) - 0,75
d) 2,25