E/S CPU. Memória (Instruções e dados) 2 PARADIGMA IMPERATIVO. Instruções e dados. Resultados das operações. Unidade lógica e aritmética



Documentos relacionados
Estrutura de Dados Básica

Computação II Orientação a Objetos

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

CONCEITOS BÁSICOS PARA A CONSTRUÇÃO DE ALGORITMOS PARA COMPUTADORES. Isac Aguiar isacaguiar.com.br isacaguiar@gmail.com

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

Introdução ao Paradigma Orientado a Objetos. Principais conceitos

1 INTRODUÇÃO 1.1 CONCEITO DE PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

9 Comandos condicionais

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

ALGORITMOS MEMÓRIA, VARIÁVEIS E CONSTANTES, OPERADORES Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Conceitos de Linguagens de Programação

Linguagens de Programação

Introdução a Computação

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Algoritmos e Estruturas de Dados I

Carga horária : 4 aulas semanais (laboratório) Professores: Custódio, Daniel, Julio foco: introdução a uma linguagem de programação Linguagem Java

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Definição de Programas de Computadores e Linguagem de Programação de Comutadores

Componentes da linguagem C++

Introdução à Engenharia de Computação

Programação Orientada a Objeto

5 Apresentando a linguagem C

Programação: Tipos, Variáveis e Expressões

1. Fazer um programa em C que pergunta um valor em metros e imprime o correspondente em decímetros, centímetros e milímetros.

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

Linguagem de Programação I. Orientação a Objetos em Java

Paradigmas de Programação

Algoritmos e Programação

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Conversão de Tipos e Arrays

Conceitos básicos da linguagem C

O COMPUTADOR. Introdução à Computação

Algoritmos e Programação Conceitos e Estruturas básicas (Variáveis, constantes, tipos de dados)

Organização de Computadores 1

Neste artigo estudaremos os conceitos relacionados às matrizes unidimensionais (vetores) e multidimensionais.

ESTRUTURA DE DADOS -VARIÁVEIS COMPOSTAS. Prof. Angelo Augusto Frozza, M.Sc.

INTRODUÇÃO À PROGRAMAÇÃO DO ACCESS BASIC

1 Funções básicas de implementação de arquivos

Orientação a Objetos

INTRODUÇÃO À LINGUAGEM C++

Computador E/S, Memória, Barramento do sistema e CPU Onde a CPU Registradores, ULA, Interconexão interna da CPU e Unidade de controle.

Algoritmos DCC 119. Introdução e Conceitos Básicos

REPRESENTAÇÃO DE DADOS EM SISTEMAS DE COMPUTAÇÃO AULA 03 Arquitetura de Computadores Gil Eduardo de Andrade

Variáveis e Comandos de Atribuição

10/02/2015. Introdução. Podemos classificar os tipos de dados a serem processados em dados e instruções Dados: Algoritmos e Lógica de Programação

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Manipulação de Arquivos em Pascal

A declaração de uma variável vel define o seu tipo. O tipo do dado define como ele será: Armazenado na memória. Manipulado pela ULA.

Elementos da Linguagem C#

JSP - ORIENTADO A OBJETOS

Linguagem de Programação

1) Ao ser executado o código abaixo, em PHP, qual será o resultado impresso em tela?

Representação de Algoritmos - Linguagens de Programação

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Implementando uma Classe e Criando Objetos a partir dela

14.1 Vetor - Problemas

Linguagem C Tipos de Dados. void; escalares; sizeof Vectores; strings em C Estruturas Introdução ao pré-processador

Algumas notas sobre PASCAL

Algoritmos e Programação Parte Teórica

Lógica para a Programação - 1º semestre AULA 01 Prof. André Moraes

Algoritmos e programação

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Programação: Estruturas de seleção

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

Orientação a Objetos. Conceitos Iniciais Introdução a Linguagem Java. Gil Eduardo de Andrade

Aula Teórica 16: Estruturas de Dados Heterogêneas

3 A Biblioteca para Implementação de Máquinas Virtuais

2 Ferramentas Utilizadas

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

ILP - Introdução à Linguagem de Programação. Plano de estudo: - Constantes e variáveis. - Atribuindo valores às variáveis.

Resumo da última aula. Compiladores. Tipos. Regras semânticas. Expressões de tipos. Análise Semântica e checagem de tipos.

Introdução a Java. Hélder Nunes

Sistemas Numéricos bit / Byte BIT BYTE. Prof. Celso Candido ADS / REDES / ENGENHARIA

INTRODUÇÃO OBJECT PASCAL/DELPHI

Aula de JavaScript 05/03/10

2. A influência do tamanho da palavra

Estrutura Condicional em Java

ORGANIZAÇÃO DE COMPUTADORES MÓDULO 1

Programação Orientada a Objetos: Lista de exercícios #1. Bruno Góis Mateus

Algoritmos e Programação II. Sobrecarga

7. Estrutura de Decisão

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

compreender a importância de cada estrutura de controle disponível na Linguagem C;

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Linguagem de Montagem 2. Operações e Operandos

Software Básico. Conceito de Linguagem de Máquina e Montagem: introdução ao Assembly. Prof. MSc. Hugo Vieira L. Souza

CURSO de CIÊNCIA DA COMPUTAÇÃO - Gabarito

ARQUITETURA DE COMPUTADORES

Algoritmos Estruturas Seqüenciais. José Gustavo de Souza Paiva

Estruturas de Dados. Alguns dados não costumam ser tão simples assim... Podem ser compostos por vários dados distintos

Tipo de Dados em Linguagem C

Organização de Computadores 1. Prof. Luiz Gustavo A. Martins

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Transcrição:

2 PARADIGMA IMPERATIVO 2.1 CONCEITO As linguagens que pertencem ao paradigma imperativo tomam por base a perspectiva da máquina. Ou seja, no modo como o computador executa programas em linguagem de máquina. Por esta razão é o paradigma mais antigo e difundido pelo mundo. Existe uma infinidade de linguagens de programação do paradigma imperativo. Como a construção de programas desse paradigma segue o modo de execução da linguagem de máquina, o processo de tradução do programa é mais simples que os demais paradigmas. Outra característica importante das linguagens imperativas é que a oferta dos seus recursos está presa à arquitetura do computador utilizada, o que explica as diversas diferenças entre a linguagem C para arquiteturas CISC e para RISC. Em outras palavras, uma linguagem de programação é construída a partir de uma determinada arquitetura base. A arquitetura mais utilizada é a Máquina de Von Neumann, cuja estrutura está ilustrada na Figura 2.1. R1 R2... Memória (Instruções e dados) Rn Resultados das operações Instruções e dados CPU Unidade lógica e aritmética Unidade de controle E/S Figura 2-1 - Máquina de Von Neumann

Como as linguagens de programação imperativas imitam as ações da máquina, fazendo operações básicas entre a memória e a CPU. Uma unidade de execução de um programa é composta por: Obter endereços de memória para armazenar os resultados e buscar os operandos; Obter os dados a serem utilizados na operação; Realizar a operação com os operandos; Armazenar o resultado no devido endereço. Os dados são manipulados através de endereços de memória denominados variáveis e através de operações de atribuições de valores à essas variáveis e de iterações (repetição de passos elementares). A Figura 2.2 ilustra um exemplo de uma unidade de execução desse modelo. EXEMPLO a = b+c; Obter os endereços de a, b e c; Obter os valores dos endereços de c e c; Realizar a operação b+c; Armazenar o valor da operação no endereço de a; Figura 2-2 - Exemplo de uma Unidade de Execução Como forma de criar uma maior aproximação entre o desenvolvedor humano e o computador, foi criado o conceito de função. Uma função é a representação de um bloco de código de linguagem de máquina que executa uma determinada tarefa. Muitas funções assemelham-se à expressões em linguagens naturais como, por exemplo : for (i = 0;i<10;i++) ou clrscr (clear screen = tela limpa). Esta aproximação se reflete em uma maior eficiência dos programas. 2.2 TIPOS DE DADOS Tipos de dados podem ser entendidos como métodos (sig: meio, forma) para interpretar o conteúdo da memória do computador Os tipos de dados definem os valores que uma determinada posição da memória (variável pode assumir). As linguagens de programação possuem os tipos primitivos que podem ser utilizados tanto na sua forma natural, ou na construção de outros tipos de dados chamados por estruturados (Matrizes e Registros). Os tipos de dados foram construídos para:

Associar um nome (de tipo) a um domínio, uma representação interna e a um conjunto pré-determinado de operações; Permitir a verificação estática de tipos Uso em expressões, e/s e atribuição; Definição de equivalência de tipos; Conversão implícita e explícita. Segurança: A representação de tipos é inviolável e somente pode ser alterada através das operações definidas pela linguagem De forma geral, um tipo de dado é constituído de um nome, um ou mais domínios de valores e é associado a um conjunto de operações para manipular os seus valores. Esta representação é inviolável, somente acessível para a máquina. A Figura 2.3 ilustra dois exemplos de tipos de dados e suas operações. LINGUAGEM C EXEMPLO 1 float - domínios: números inteiros e fracionários; - operações: soma, divisão, multiplicação e subtração; - atribuição: recebe valores float e int; EXEMPLO 2 int - domínios: números inteiros - operações: soma, divisão, multiplicação, subtração e resto; - atribuições: valores int Figura 2-3 - Exemplos de Tipos de Dados Sobre os domínios de valores, há duas categorias: Primitivos não necessitam de descrição explícita como, por exemplo, o conjunto dos números reais. Eles são a base de todos os demais tipos das linguagens de programação; Definidos os componentes devem ser explícitos através de enumeração ou restrição. A Figura 2.4 ilustra um exemplo de enumeração e de restrição.

EXEMPLO ENUMERAÇÃO O conjunto são os valores: 1, 2, 3, 4,5 EXEMPLO RESTRIÇÃO O conjunto são os valores entre 2000 e 3000 Figura 2-4 - Enumeração e Restrição Existem vários propósitos para os tipos: 1. Passagens de parâmetros para funções; 2. Prevenir ou detectar construções incorretas em um programa 3. Determinar os métodos de representação e manipulação de dados no computador. Já os tipos definidos pelos usuários: Mnemônicos associados a tipos existentes Sinonímia: não criam novos tipos de dados; apenas usam identificadores simbólicos. Composição: podem ser combinados com outros tipos de dados. Permitem restrições / enumerações Os domínios compostos resultam de aplicação de métodos para construir novos domínios com base em domínios já existentes. Estes domínios compostos constituirão os tipos de dados estruturados disponíveis nas linguagens de programação: homogêneos e heterogêneos (estáticos, dinâmicos e variantes). A Figura 2.5 ilustra a estrutura de construção de um tipo composto. domínio simples método domínio estruturado Figura 2-5 - Domínio Composto Neste conceito, há duas categorias para os tipos de dados compostos: Homogêneas todos os componentes pertencem ao mesmo tipo. Os vetores e as matrizes pertence a essa categoria;

Heterogênea os componentes podem pertencer a diferentes tipos primitivos ou mesmo outros tipos compostos. Nesta categoria se encontram os registros e estruturas. Sobre os tipos primitivos, eles podem ser classificados em duas categorias: Numérico: compreende os tipos de dados utilizados para operações aritméticas. Conseqüentemente, eles podem armazenar apenas números. São exemplos de tipos numéricos: int, float na linguagem C e integer, real na linguagem Pascal; Caractere: são tipos de dados orientados para caracteres. Como forma de possibilitar o manuseio de cadeias de caracteres (palavras, frases e expressões) foi inserido o conceito de strings. Algumas linguagens fazem esse tratamento de forma explícita como, por exemplo, a linguagem Pascal. Outras fazem de forma implícita como, por exemplo, a linguagem C. na sua forma mais pura, uma string é uma matriz do tipo caractere. Para suporte às operações com strings foram criadas funções específicas para o manuseio das mesmas. As matrizes, também chamadas arrays, são definidas como um agregado homogêneo de dados, cujo elemento individual é identificado por sua posição em relação ao primeiro. Elas podem ser classificadas como: Array estático: faixas de índice estão estaticamente vinculadas e a alocação de armazenamento e estática (eficiente) Array stack-dinâmico fixo: índices estáticos, com alocação durante a execução; Array stack-dinâmico: índices e alocações dinâmicas. (flexibiliade) Array heap-dinâmico: alocação pode alterar durante a execução. (flexibilidade. Por outro lado, os registros e estruturas são formados por elementos de diferentes tipos, onde eles são identificados por um nome. Para ser acessado, o elemento é associado junto com o nome da variável estrutura. A Figura 2.6 ilustra um exemplo de uma estrutura feita em linguagem C.

EXEMPLO: struct Ficha{ char nome[40]; char endereco[40]; char fone[20]; float valor; } struct Ficha nova; gets(nova.nome); 2.3 COMPATIBILIDADE, EQUIVALÊNCIA E INFERÊNCIA A equivalência de tipos determina quando dois valores possuem o mesmo tipo A compatibilidade define quando um tipo pode ser usado em lugar de outro em um determinado contexto A inferência de tipos define o tipo de uma expressão com base nos tipos de operandos envolvidos e a operação a ser realizada. 2.3.1 Compatibilidade Quando existe compatibilidade de tipos, pode-se misturar valores de tipos diferentes em expressões, ou mesmo usar um tipo A em lugar de um tipo B, sem que haja violação das regras de segurança de tipos (erro de tipo). A Figura 2.7 ilustra um exemplo de compatibilidade de dados. EXEMPLOS: Seja i um inteiro e f um real e fun (inteiro, real) São válidas as atribuições: i := r e r:= i? É válida a invocação: fun(r, i)? Conversão de Tipos Quando os tipos envolvidos em uma expressão não são equivalentes, a linguagem oferece a possibilidade de conversão de tipos. A conversão implícita ou automática é feita com base nas regras definidas sem a interferência do programador. A conversão explícita é codificada diretamente pelo programador.

A conversão de tipos primitivos é ditada pelas regras da linguagem de programação. Normalmente admite a conversão de um tipo de representação menor para um tipo de representação maior. Por exemplo, em Java, a conversão entre tipos primitivos, exceto o tipo bool que não admite conversão, considera o tamanho do tipo (8, 16, 32, 64 bits). A Figura 2.8 ilustra um exemplo de conversões possíveis de tipos. de byte short char int long float short,int,long,float,double int,long,float,double int,long,float,double long,float,double float,double double para A conversão pode ser feita de três maneiras, ilustradas posteriormente na Figura 2.9: Por atribuição, ou conversão implícita para o tipo do lado esquerdo do comando de atribuição; Por promoção aritmética para o tipo de resultado esperado da operação (inferência); Por conversão explícita (casting). EXEMPLO DE CONVERSÃO: Seja float f, int i, float r; exemplo de atribuição: f = i; exemplo de promoção: r = f / i; exemplos de casting: i = (int) f ; r = (float) i/f; 2.3.2 Equivalência de Tipos Tipos estruturados e tipos definidos pelo usuário. As formas de equivalência são: Equivalência estrutural: mesma representação Equivalência de nome: mesmo nome de tipo Equivalência de declaração: mesma declaração A Figura 2.10 ilustra um exemplo de equivalência de tipos:

type doiscampos = record a, b: integer; end;? type doiscampos = record a: integer; b: integer; end; type doiscampos = record b: integer; a: integer; end;