• Nenhum resultado encontrado

Estrutura de um programa em C. Estruturas.

N/A
N/A
Protected

Academic year: 2021

Share "Estrutura de um programa em C. Estruturas."

Copied!
24
0
0

Texto

(1)

Prof. Santiago Valdés Ravelo santiago.ravelo@inf.ufrgs.br

programa em C .

Estruturas.

INF01202 Algoritmos e programação.

(2)
(3)

Tipos de dados

I Até o momento diferentes tipos de dados são armazenados isoladamente em variáveis distintas.

I Quando existe uma relação entre os dados, pode ser útil armazená-los juntos.

(4)

Problema

Suponha que um programa precisa realizar o senso de um grupo de pessoas, em que cada indivíduo tem:

I Nome

I Sobrenome

I Idade

I Peso

I CPF

Como

representamos

esses

(5)

Problema. Representação dos dados

Um indivíduo:

charnome[16], sobrenome[21]; intidade,cpf[11];

floatpeso;

Mil indivíduos:

charnomes [1000][16],sobrenomes[1000][21]; intidades[1000], cpfs[1000][11];

floatpesos[1000];

/* Dificuldade para tratar a informação, de forma separada por indivíduo!! */

(6)

Tipos de dados em C Simples: I char I int I long I float I double I void I ponteiros Estruturados: I arranjos I ESTRUTURAS I enumerativos I arquivos

(7)

Definição

I TIPO DE DADO que permite AGRUPAR INFORMAÇÕES com características diferentes.

I Elementos com TIPOS DE DADOS DIFERENTES.

I Cada unidade de informação é um CAMPO da estrutura.

Exemplo:Estrutura PESSOA com 5 campos, cada um de tipo diferente. Pessoa

(8)

Diferença entre arranjos e estruturas

Arranjo Coleção de dados homogênea:

I Todos os elementos do mesmo tipo.

I Um só nome com índices para identificar cada elemento. I Variável de tipo ponteiro

Estrutura Conjunto de dados heterogêneo:

I Os elementos podem ser de tipos diferentes.

I Cada elemento é identificado através de um nome diferente

(CAMPO).

I Não é um ponteiro, mas pode ter campos que são ponteiro e

(9)

Diferença entre arranjos e estruturas

Arranjo

Notas (Nome comum a todos os elementos)

0 1 2 3 4 5 6 7 8

Índices para identificar cada elemento

Estrutura

Pessoa (Nome comum a todos os elementos)

nome sobrenome idade peso cpf

(10)

Declaração: 4 formas diferentes I Forma 1 Só o tipo: structpessoa{ charnome[16]; charsobrenome[21]; intidade; floatpeso; intcpf[11]; };

I Forma 2 Associado à variável:

struct { charnome[16]; charsobrenome[21]; intidade; floatpeso; intcpf[11]; } pessoa1, pessoa2;

I Forma 3 Com tipo e variável:

structpessoa{ charnome[16]; charsobrenome[21]; intidade; floatpeso; intcpf[11]; };

structpessoa pessoa1, pessoa2;

I Forma 4 Omitindostructna variável:

structpessoa{ charnome[16]; charsobrenome[21]; intidade; floatpeso; intcpf[11]; };

(11)

Definição usando typedef

I Permite definir tipos abstratos: descreve intenção mas não aloca memória.

I Permite estender tipos primitivos com novos tipos do usuário, que possuem semântica própria.

I São declarações GLOBAIS. Sempre visíveis para todo o programa.

(12)

Definição usando typedef

typedef structpessoa { char nome[16]; char sobrenome[21]; int idade; float peso; int cpf[11]; }PESSOA;

Pode ser usada da forma:

structpessoa pessoa1, pessoa2;

Ou:

(13)

Estrutura de um programa em C

/*Nome e objetivo do programa*/

/*Diretivas para o pré-processador - bibliotecas*/

#include<biblioteca.h>

/*Declaração de constantes*/

#define CONSTANTE VALOR

/*Declaração typedef e de estruturas*/

typedef structnome{· · · }NOME;

/*Declaração de protótipos de funções*/

tiponome_da_função(parâmetros);

/*Declaração de variáveis globais*/

tiponome_da_variável;

/*declaração das funções não prototipadas*/

tiponome_da_função(parâmetros) {

//declaração de variáveis locais //comandos da função

}

/*Função principal*/

intmain() {

//declaração de variáveis locais //comandos da função main

return 0; }

/*escrita das funções declaradas nos protótipos*/

tiponome_da_função(parâmetros) {

//declaração de variáveis locais //comandos da função

(14)

Inicialização

typedef structnome_estrutura{ tipocampo_1;

· · ·

tipocampo_n; }NOME_ESTRUTURA;

Pode ser inicializada com valores entre chaves, na mesma ordem que aparecem na declaração:

structnome_estrutura nome_variável = { valor_1, · · · , valor_n};

Ou:

(15)

Inicialização. Exemplo

typedef structpessoa{ char nome[16]; char sobrenome[21]; intidade; floatpeso; intcpf[11]; }PESSOA;

structpessoa pessoa1 = {“Santiago”, “Ravelo”, 24, 66, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}};

Ou:

PESSOA pessoa1= {“Santiago”, “Ravelo”, 24, 66, {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0}};

(16)

Acesso aos dados

typedef structnome_estrutura{ tipocampo_1;

· · ·

tipocampo_n; }NOME_ESTRUTURA;

Pode acessar ao dado armazenado no campo_i da estrutura se usa o.

(ponto)

(17)

Acesso aos dados. Exemplo

typedef structpessoa{ char nome[16]; char sobrenome[21]; intidade; floatpeso; intcpf[11]; }PESSOA; pessoa1.peso= 65;

scanf(“%s”, pessoa1.sobrenome);

(18)

Estrutura com campos tipo estrutura

typedef structdata{ intdia; intmes; intano; }DATA;

typedef structpessoa{ charnome[16]; charsobrenome[21]; DATA nascimento; floatpeso; intcpf[11]; }PESSOA; PESSOA p; · · ·

printf(“Aniversario: %d do %d”, p.nascimento.dia, p.nascimento.mes);

(19)

Passagem de parâmetros por valor

typedef structdata{ intdia; intmes; intano; }DATA;

typedef structpessoa{ charnome[16]; charsobrenome[21]; DATA nascimento; floatpeso; intcpf[11]; }PESSOA; voidimprime(PESSOA p){

printf(“Nome: %s ”,p.nome);

printf(“Sobrenome: %s ”,p.sobrenome);

printf(“Aniversaro: %d do %d”, p.nascimento.dia, p.nascimento.mes);

(20)

Retorno

typedef structdata{ intdia; intmes; intano; }DATA;

typedef structpessoa{ charnome[16]; charsobrenome[21]; DATA nascimento; floatpeso; intcpf[11]; }PESSOA; PESSOA le(){ PESSOA p;

printf(“Entre o nome: ”);

scanf(“%s”,p.nome);

printf(“Entre o sobrenome: ”);

scanf(“%s”,p.sobrenome);

printf(“Entre o dia, o mes e ano de nascimento: ”);

scanf(“%d %d %d”, &p.nascimento.dia, &p.nascimento.mes, &p.nascimento.ano);

returnp; }

(21)

Passagem de parâmetros por referência

typedef structdata{ intdia; intmes; intano; }DATA;

typedef structpessoa{ charnome[16]; charsobrenome[21]; DATA nascimento; floatpeso; intcpf[11]; }PESSOA; voidle(PESSOA*p){

printf(“Entre o nome: ”);

scanf(“%s”, (*p).nome);

printf(“Entre o sobrenome: ”);

scanf(“%s”, (*p).sobrenome);

printf(“Entre o dia, o mes e ano de nascimento: ”);

scanf(“%d %d %d”, &(*p).nascimento.dia, &(*p).nascimento.mes, &(*p).nascimento.ano);

(22)

Passagem de parâmetros por referência

Operador: -> (seta)

I ponteiro->campo é uma sintaxe alternativa a

(*ponteiro).campo.

I Indica o ACESSO a um CAMPO da estrutura ATRAVÉS de um PONTEIRO a ela.

(23)

Passagem de parâmetros por referência

typedef structdata{ intdia; intmes; intano; }DATA;

typedef structpessoa{ charnome[16]; charsobrenome[21]; DATA nascimento; floatpeso; intcpf[11]; }PESSOA; voidle(PESSOA*p){

printf(“Entre o nome: ”);

scanf(“%s”,p->nome);

printf(“Entre o sobrenome: ”);

scanf(“%s”,p->sobrenome);

printf(“Entre o dia, o mes e ano de nascimento: ”);

scanf(“%d %d %d”, &p->nascimento.dia, &p ->nascimento.mes, &p->nascimento.ano);

(24)

Prof. Santiago Valdés Ravelo santiago.ravelo@inf.ufrgs.br

programa em C .

Estruturas.

INF01202 Algoritmos e programação.

Referências

Documentos relacionados

Com base nos resultados da pesquisa referente à questão sobre a internacionalização de processos de negócios habilitados pela TI com o apoio do BPM para a geração de ganhos para

• Árvores são ideais para armazenar hierarquias, além de serem mais rápidas e eficientes do que as estruturas de dados lineares... • É formada por um “conjunto de

– Os elementos devem estar ordenados – Realizar a busca pelo meio do vetor.

• Estas árvore podem assumir diferentes formas quando criadas ou modificadas. – A ordem de inserção ou remoção influem no formato

– Um nó aponta para o seu primeiro filho (prim) – Cada filho aponta para o próximo (prox) irmão.. • Representação de um nó

A clínica gestáltica tem o intuito de desenvolver um trabalho baseado na relação dialógica, que facilita o processo de autorregulação e ajustamento criativo para as pessoas.. Tais

[r]

Coletamos, ent˜ao, quatro tempos: tempo de carga (load), necess´ario para carregar a imagem do VIM nos n´os; tempo de inicializac¸˜ao (boot), necess´ario para iniciar o sistema