Estrutura de Dados. TAD (Tipo Abstrato de Dados) Criando a primeira estrutura

Documentos relacionados
Introdução a Programação. Tipos Estruturados de Dados

Algoritmos e Programação

Linguagem de Programação

Introdução a Computação

Sumário. Introdução à Ciência da Computação. Ponteiros em C. Introdução. Definição. Por quê ponteiros são importantes?

LINGUAGEM C: ESTRUTURAS DEFINIDAS PELO

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

MC-102 Aula 21 Registros

Programação de Computadores IV

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

Aula 03 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

SSC304 Introdução à Programação Para Engenharias. Estruturas. GE4 Bio

INF 1620 P1-13/09/02 Questão 1 Nome:

ECT1203 Linguagem de Programação

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Variáveis, Tipos de Dados e Operadores

Algoritmos e Estruturas de dados

3. Linguagem de Programação C

INTRODUÇÃO À LINGUAGEM C

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Java Variáveis e Controle Fluxo

Programação científica C++

Computação Eletrônica. Aula 08 Estruturas de Dados. Prof: Luciano Barbosa. CIn.ufpe.br

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Objetivo. Compreender a definição e dominar a implementação de ponteiros em C. Dominar a manipulação de arquivos

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Linguagem de Programação II Implementação

Programação Estruturada

Programação Básica. Estrutura de um algoritmo

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

Computação 2. Aula 7. Profª. Fabiany Ponteiros

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

INTRODUÇÃO À LINGUAGEM C

Linguagem C. André Tavares da Silva.

INTRODUÇÃO À LINGUAGEM C

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Introdução a Programação de Jogos

Introdução a Linguagem C. Prof. Me. Hélio Esperidião

1 Introdução e Conceitos básicos

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

4. Estruturas Fundamentais de Programação em C

Métodos Computacionais. Tipos Estruturados

Linguagem de Programação

3. Linguagem de Programação C

Disciplina de Algoritmos e Programação

Programação Estruturada Aula - Tipos, Constantes, Variáveis e Identificadores

Introdução à Linguagem C

Modularidade - Funções e Procedimentos

Conceitos básicos de programação

Ponteiros em C. Adriano Joaquim de Oliveira Cruz 21 de julho de Instituto de Matemática Departamento de Ciência da Computação UFRJ

Entender o problema Encontrar um algoritmo para resolvê-lo. Implementar o algoritmo numa linguagem de programação

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Introdução à Computação (IC) Linguagem C: Variáveis e Constantes

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

Unidade Acadêmica: Faculdade de Computação FACOM Disciplina: Programação Orientada a Objetos I Professor: Fabiano Azevedo Dorça Prática 01

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Linguagem C: Introdução

Array em Java. Figura 1 - Exemplo de um array de inteiros

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

Linguagem C Princípios Básicos (parte 1)

ESTRUTURAS COMPOSTAS. REGISTROS (Struct) Introdução à Ciência da Computação I Simone Senger Souza

Linguagem C. IF61A/IF71A - Computação 1 Prof. Leonelo Almeida. Universidade Tecnológica Federal do Paraná

6 Alguns conceitos e comandos em programação

Modulo 13: para os que ainda tem dúvidas no assunto...

Introdução à Computação

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

AULA 6 - ARRAYS. Array de 10 elementos

Módulo Lógica Programação com aplicações em Java. Projeto khouse Profissionalizante Profª Larissa Brandão

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

Estrutura de Dados. Introduc a o e Alocac a o de Memo ria. Vilson Heck Junior. Instituto Federal de Santa Catarina

Lógica de Programação. Lógica de Programação com Java

Conceitos básicos. Computação eletrônica: Gurvan Huiban

Programação Java (nível intermediário) 4. Polimorfismo

Arrays. int idade1; int idade2; int idade3; int idade4; int[] idades;

INF 1620 P2-23/10/04 Questão 1 Nome:

Aula 13 Oficina de Programação Modularização. Profa. Elaine Faria UFU

A Linguagem C. A forma de um programa em C

Hello World. Linguagem C. Tipos de Dados. Palavras Reservadas. Operadores Aritméticos. Pré e pós incremento e pré e pós decremento

Algoritmos e Introdução à Programação. Lógica e Linguagem de Programação

Tipos de Dados, Variáveis e Entrada e Saída em C. DCC 120 Laboratório de Programação

Programação Estruturada

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Estruturas (registros)

Análise de Programação

1. Revisão de Vetores, Ponteiros, Funções e Estruturas em C

Variáveis primitivas e Controle de fluxo

OO - Orientação a Objetos

Aula 11 Oficina de Programação Estruturas. Profa. Elaine Faria UFU

Ponteiros de Variáveis

Programação: Vetores

Revisão. Profa Marina Gomes

Introdução à Programação

Computação 2. Aula 5. Diego Addan Estrutura de Dados Registros (structs)

Transcrição:

Estrutura de Dados TAD (Tipo Abstrato de Dados) Criando a primeira estrutura

TAD Um tipo de dado abstrato pode ser definido como um conjunto de valores e uma coleção de operações que atual sobre esses valores. As operações devem ser consistentes com os tipos de valores (MORAES, C.R., 2001, P5)

Definindo tipos em C A maioria das linguagens compartilham o mesmo tipo primitivo de dados como int (para inteiros) float (para ponto flutuante sem precisão) double (para pontos flutuantes com precisão) char (para caracteres) string (para cadeia de caracteres) entre outros

Definindo tipos em C Podemos dar outro nome para os tipos primitivos Por exemplo, imagine chamar o tipo int de INTEIRO, ou até mesmo NUMEROSNATURAIS Ou chamar tipo char de CARACTERES Ou chamar o tipo float de NUMEROQUEBRADO (rsrs) Em C temos o comando typedef o qual dá um novo nome para um tipo

Definindo tipos em C #include <stdio.h> typedef int NUMERO; // definimos que o tipo int será chamado de NUMERO main(){ NUMERO a, b, total; //ao invés de declarar como int, declaramos como NUMERO a = 2; b = 3; total = a + b; printf( O total da soma é %d, total);

Estrutura para guardar dados Algumas vezes precisamos guardar dados Para isso, criaremos estruturas, cada uma responsável por guardar os dados em uma hierarquia específica Como modelar essa estrutura? Como inicializamos esta estrutura? Como acessamos os campos desta estrutura?

Struct Imagine que temos uma ficha para preencher sobre uma pessoa, nesta ficha temos Nome Idade Peso Altura Nome: Josafá Moisés Idade: 32 Peso: 85 Altura: 1.78 Ficha Cadastral

Struct Esta ficha é um conjunto de dados sobre uma pessoa, neste caso, o senhor Josafá Podemos ter uma ficha de outra pessoa, digamos que a Delfina Nome: Josafá Moisés Idade: 32 Peso: 85 Altura: 1.78 Ficha Cadastral

Struct Ficha Cadastral Ficha Cadastral Nome: Josafá Moisés Idade: 32 Peso: 85 Altura: 1.78 Nome: Delfina Pereira Idade: 39 Peso: 61 Altura: 1.55

Estrutura para guardar dados Temos agora uma estrutura (Ficha Cadastral) e duas fichas preenchidas com dados pessoais, uma para Josafá outra para Delfina Como podemos modelar a estrutura desta ficha cadastral em linguagem de programação?

Estrutura para guardar dados Em Java, utilizaremos o paradigma orientado a objetos Podemos criar uma classe chamada FichaCadastral e depois instanciar os objetos (Veja o próximo slide)

Código Java public class FichaCadastral{ String nome; int idade; float peso; float altura; public class EstruturaSimples{ public static void main(string[] args){ FichaCadastral pessoa1 = new FichaCadastral(); FichaCadastral pessoa2 = new FichaCadastral(); pessoa1.nome = Josafa Moises; pessoa1.idade = 32;... pessoa2.nome = Delfina Pereira; pessoa2.idade = 39;...

Criando uma estrutura simples em C Em C não temos o conceito de classes Mas temos um ancestral das classes: a STRUCT Struct Define uma estrutura com os campos definidos entre as chaves struct{ int altura; int peso;

Criando uma estrutura simples em C Uma Struct pode ser vista como um novo tipo de dado, o qual é formado por composição de variáveis de outros tipos Uma Struct é um agrupamento de dados Cadastro de pessoas Todas as informações como Nome, Idade, Peso e altura pertencem a uma pessoa Logo, podemos agrupar estes dados Isso facilita lidar com dados de outras pessoas no mesmo programa

Criando uma estrutura simples em C Utilizaremos o comando typedef para definir o nome da struct, ficando assim typedef struct{ int altura; int peso; Pessoa;

Criando uma estrutura simples em C Voltando a ficha anterior, em Java criamos uma classe chamada FichaCadastral, então agora criaremos uma struct chamada FichaCadastral e depois vamos requisitar esta ficha no escopo principal do código C (Veja o próximo slide)

Código C typedef struct{ char nome[50]; int idade; float peso; float altura; FichaCadastral; main(){ FichaCadastral p1, p2; strcpy(p1.nome, Josafa Moises ); p1.idade = 32;... strcpy(p2.nome, Delfina Pereira ); p2.idade = 39;...

Exercício Declare uma estrutura capaz de armazenar o ra e 3 notas para um dado aluno

int x; int* y; //significa que x é uma variável do tipo inteiro //significa que y é uma variável do tipo endereço para inteiro O símbolo de asterisco após a palavra int indica que estamos falando de um endereço para a memória, e não para um valor na memória Veja o código no próximo slide

#include <stdio.h> int main(void) { int a; int* b; a = 100; //a variável a recebe o valor 100 b = &a; //a variável b recebe o endereço de memória da variável a printf("o valor de b eh: %d", b); //imprime o valor de b, que será o endereço de a

#include <stdio.h> int main(void) { int a; int* b; a = 100; //a variável a recebe o valor 100 b = &a; //a variável b recebe o endereço de memória da variável a printf("o valor de b eh: %d", *b); //agora será impresso o conteúdo presente no endereço de a confuso??? Veja no próximo slide o passo a passo da execução

Na memória foi reservado um espaço para o conteúdo da variável a. Este espaço está no endereço 854245. #include <stdio.h> Variável a (854245) int main(void) { int a; int* b; Saída na Tela: a = 100; b = &a; printf("o valor de b eh: %d", b);

Na memória foi reservado um espaço para o conteúdo da variável b. Este espaço está no endereço 835424. #include <stdio.h> Variável a (854245) Variável b (835424) int main(void) { int a; int* b; Saída na Tela: a = 100; b = &a; printf("o valor de b eh: %d", b);

O espaço na memória com endereço 854245, representado pela variável a recebe o valor 100. #include <stdio.h> int main(void) { int a; int* b; Variável a (854245) Variável b (835424) 100 Saída na Tela: a = 100; b = &a; printf("o valor de b eh: %d", b);

O espaço na memória com endereço 835424, representado pela variável b recebe o endereço da variável a, que é 854245. #include <stdio.h> int main(void) { int a; int* b; Variável a (854245) Variável b (835424) Saída na Tela: 100 854245 a = 100; b = &a; printf("o valor de b eh: %d", b);

O printf mostra o valor contido em b, neste caso, o endereço de a O endereço vai mudar de execução para execução!!! #include <stdio.h> int main(void) { int a; int* b; Variável a (854245) Variável b (835424) 100 854245 Saída na Tela: O valor de b eh: 854245 a = 100; b = &a; printf("o valor de b eh: %d", b);

Estamos mostrando o endereço da variável a que está na variável b Para mostrarmos o valor de a, colocaremos um asterisco antes da variável b no printf *b desta forma, não vamos mais mostrar o endereço de a, mas o valor que está contido naquele endereço Chamamos de ponteiro pois este aponta para um endereço de memória, e não para um valor

Na memória foi reservado um espaço para o conteúdo da variável a. Este espaço está no endereço 854245. #include <stdio.h> Variável a (854245) int main(void) { int a; int* b; Saída na Tela: a = 100; b = &a; printf("o valor de b eh: %d", *b);

Na memória foi reservado um espaço para o conteúdo da variável b. Este espaço está no endereço 835424. #include <stdio.h> Variável a (854245) Variável b (835424) int main(void) { int a; int* b; Saída na Tela: a = 100; b = &a; printf("o valor de b eh: %d", *b);

O espaço na memória com endereço 854245, representado pela variável a recebe o valor 100. #include <stdio.h> int main(void) { int a; int* b; Variável a (854245) Variável b (835424) 100 Saída na Tela: a = 100; b = &a; printf("o valor de b eh: %d", *b);

O espaço na memória com endereço 835424, representado pela variável b recebe o endereço da variável a, que é 854245. #include <stdio.h> int main(void) { int a; int* b; Variável a (854245) Variável b (835424) Saída na Tela: 100 854245 a = 100; b = &a; printf("o valor de b eh: %d", *b);

O *b apresentará o valor contido no endereço 854245 #include <stdio.h> int main(void) { int a; int* b; Variável a (854245) Variável b (835424) 100 854245 Saída na Tela: O valor de b eh: 100 a = 100; b = &a; printf("o valor de b eh: %d", *b);

Estamos mostrando o endereço da variável a que está na variável b Para mostrarmos o valor de a, colocaremos um asterisco antes da variável b no printf *b desta forma, não vamos mais mostrar o endereço de a, mas o valor que está contido naquele endereço Chamamos de ponteiro pois este aponta para um endereço de memória, e não para um valor

No próximo exemplo, vamos modificar o valor da variável a fazendo b receber um determinado valor, utilizando ponteiro

As variáveis a e b são declaradas e um espaço na memória é reservado para cada uma das variáveis, a estará no endereço 5421 e b no endereço 5638 #include <stdio.h> Variável a (5421) Variável b (5638) int main(void) { int a; int* b; Saída na Tela: a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

A variável a recebe o valor 100. Ou seja, o espaço na memória cujo endereço é 5421 e é representado pela variável a, recebe o valor 100 #include <stdio.h> int main(void) { int a; int* b; Variável a (5421) Variável b (5638) 100 Saída na Tela: a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

A variável b recebe o endereço da variável a. Ou seja, o espaço na memória cujo endereço é 5638 e é representado pela variável b, recebe o endereço 5421 #include <stdio.h> int main(void) { int a; int* b; Variável a (5421) Variável b (5638) Saída na Tela: 100 5421 a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

Neste momento, é como se o espaço de memória da variável b deixasse de ser no endereço 5638 e passasse a ser no endereço 5421, ou seja, mesmo endereço de a #include <stdio.h> int main(void) { int a; int* b; Variável a (5421) Variável b (5638 5421) Saída na Tela: 100 5421 a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

Quando colocamos o *b, dizemos que: o conteúdo para onde o endereço de memória de b aponta receberá o valor 50 #include <stdio.h> int main(void) { int a; int* b; Variável a (5421) Variável b (5638 5421) Saída na Tela: 100 50 5421 a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

É como se b fosse uma ponte para a variável a. Tudo o que for atribuído ou manipulado na variável *b, será impactado na variável a, pois *b APONTA para o endereço de memória de a #include <stdio.h> int main(void) { int a; int* b; Variável a (5421) Variável b (5638 5421) Saída na Tela: 50 5421 a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

Será impresso na tela o valor 50, que é o valor atual de a. #include <stdio.h> int main(void) { int a; int* b; Variável a (5421) Variável b (5638 5421) 50 5421 Saída na Tela: O valor de a eh: 50 a = 100; b = &a; *b =50; printf("o valor de a eh: %d", a);

Atividade 1) Quais serão os valores de x, y e p ao final do trecho de código abaixo? int x, y, *p; y = 0; p = &y; x = *p; x = 4; (*p)++; --x; (*p) += x; printf( x=%d y=%d p=%d,x,y,p);

Atividade 2) O programa abaixo possui erro(s). Qual(is)? Como deveria ser? main(){ int x, *p; x = 100; p = x; printf( Valor de p: %d, *p);