• Nenhum resultado encontrado

PARADIGMAS DE LINGUAGENS UNIDADE II: CARACTERIZAÇÃO DOS PRINCIPAIS PARADIGMAS DE PROGRAMAÇÃO

N/A
N/A
Protected

Academic year: 2022

Share "PARADIGMAS DE LINGUAGENS UNIDADE II: CARACTERIZAÇÃO DOS PRINCIPAIS PARADIGMAS DE PROGRAMAÇÃO"

Copied!
40
0
0

Texto

(1)

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.

(2)

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

(3)

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.

(4)

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

(5)

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.

(6)

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

(7)

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

(8)

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.

(9)

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

@email

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.

(10)

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.

(11)

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, ...

(12)

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

(13)

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.

(14)

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

(15)

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.

(16)

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)

(17)

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

(18)

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

(19)

Tipos de dados primitivos

Tipos numéricos – Ponto-flutuante (ou vírgula-flutuante):

São armazenados na forma normalizada.

Valor3,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

(20)

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

(21)

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)

(22)

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)

(23)

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)

(24)

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;

(25)

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.

(26)

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

(27)

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;

(28)

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´;

(29)

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;

(30)

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

(31)

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];

(32)

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).

(33)

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

(34)

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;

(35)

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

(36)

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

(37)

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 (&)

(38)

Tipos ponteiro

Ponteiros em C e C++

Exemplo:

#include <stdio.h>

main () {

int num,valor;

int *p;

num=55;

p=&num; /* 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.

(39)

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.

(40)

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

Referências

Documentos relacionados

0 empreendedorismo se tornou um fenomeno tao forte que muitos jovens passaram a satanizar as grandes empresas, conforme afirmac;ao do Professor Jeffry Timmons

A filosofia da linguagem de Wittgenstein é de fundamental importância para a construção do fundamento da culpabilidade; primeiro, porque absorvido na filosofia

No entanto, como se observou, a influência desses dispositivos e aplicativos é baixa (Figura 30). As práticas estão mais relacionadas aos grupos e às comunidades.. No entanto,

3.5.2 Quanto aos compostos estudados para os quais foram feitos cálculos de estrutura eletrônica utilizando o programa ZINDO98, onde foram obtidos orbitais moleculares para o

Assim, para esclarecer os dados obtidos na tabela 1, é de fundamental importância a apreciação do contexto histórico de ocupação do Estado de Goiás de modo

Admitindo que a remoção de crómio total se faz, predominantemente, por adsorção com permuta iónica, do crómio(III) formado durante o processo de redução do

Os cálculos referentes ao volume de cada amostra adicionado à célula assim como o volume de padrão de As-(V) adicionado e as concentrações de As-(V) e As-(III) presentes

Dissertação de Mestrado PPGCEP/UFRN Figura 5-37: Análise da energia perdida em relação ao fator de recuperação para a vazão de 12,5 m³/dia de vapor ou solvente com adição