ces-10 introduÇÃo À computaÇÃo aulas práticas – 2014 capítulo x encadeamento de estruturas...

61
CES-10 INTRODUÇÃO À CES-10 INTRODUÇÃO À COMPUTAÇÃO COMPUTAÇÃO Aulas Práticas – 2014 Aulas Práticas – 2014 Capítulo X Capítulo X Encadeamento de Encadeamento de Estruturas por Estruturas por Ponteiros Ponteiros

Upload: benedita-pereira-sequeira

Post on 07-Apr-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

CES-10 INTRODUÇÃO CES-10 INTRODUÇÃO À COMPUTAÇÃOÀ COMPUTAÇÃO

Aulas Práticas – 2014Aulas Práticas – 2014

Capítulo X Capítulo X Encadeamento de Encadeamento de

Estruturas por Estruturas por PonteirosPonteiros

Page 2: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.1:Programa 10.1: Alocação, preenchimento e Alocação, preenchimento e escrita de uma nova estruturaescrita de uma nova estrutura

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>

typedef struct st st;typedef struct st st;struct st {int a; st *prox;}; struct st {int a; st *prox;};

int main () {int main () { st *p;st *p;

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;printf ("%4d", p->a);printf ("%4d", p->a);

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;}}

p? ? ?2

2Vídeo

Copiar, salvar e executar

a prox

Page 3: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.2:Programa 10.2: Alocação, preenchimento e escrita Alocação, preenchimento e escrita de 3 novas estruturas (visto em aula teórica)de 3 novas estruturas (visto em aula teórica)

typedef struct st st;typedef struct st st;struct st {int a; st *prox;};struct st {int a; st *prox;};typedef st *pontst;typedef st *pontst;

int main () {int main () {pontst p, q;pontst p, q;p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p; q != NULL; q = q->prox)for (q = p; q != NULL; q = q->prox)printf ("%4d", q->a);printf ("%4d", q->a);printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}

Copiar, salvar e executar

Page 4: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Seja a execução dos comandos:Seja a execução dos comandos:

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p; q != NULL; q = q->prox)for (q = p; q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

Page 5: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (for (q = p; q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

q

Page 6: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

q

2Vídeo

Page 7: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q != NULL; q = q->proxq = q->prox))

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

q

2Vídeo

q

Page 8: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2Vídeo

q

Page 9: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3Vídeo

q

Page 10: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q != NULL; q = q->proxq = q->prox))

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3Vídeo

q q

Page 11: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3Vídeo

q

Page 12: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3 5Vídeo

q

Page 13: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p;for (q = p; q != NULL; q != NULL; q = q->proxq = q->prox))

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox2

a prox3

a prox5

2 3 5Vídeo

q q

q == NULL:Fim!!!

Page 14: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.3:Programa 10.3: Deixando vazia a primeira Deixando vazia a primeira estrutura (chamando-a de estrutura (chamando-a de estrutura-líderestrutura-líder))

typedef struct st st;typedef struct st st;struct st {int a; st *prox;};struct st {int a; st *prox;};typedef st *pontst;typedef st *pontst;

int main () {int main () {pontst p, q;pontst p, q;p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));p->a = 2;p->a = 2;p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (for (q = p; q = p; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}

Page 15: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.3:Programa 10.3: Deixando vazia a primeira Deixando vazia a primeira estrutura (chamando-a de estrutura (chamando-a de estrutura-líderestrutura-líder))

typedef struct st st;typedef struct st st;struct st {int a; st *prox;};struct st {int a; st *prox;};typedef st *pontst;typedef st *pontst;

int main () {int main () {pontst p, q;pontst p, q;p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st)); p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (for (q = p->prox; q = p->prox; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;

}}

Copiar, salvar e executar

Page 16: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

p = (st *) malloc (sizeof(st));p = (st *) malloc (sizeof(st));

p->prox = (st *) malloc (sizeof(st));p->prox = (st *) malloc (sizeof(st));p->prox->a = 3;p->prox->a = 3;p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox = (st *) malloc (sizeof(st));p->prox->prox->a = 5;p->prox->prox->a = 5;p->prox->prox->prox = NULL;p->prox->prox->prox = NULL;for (q = p->prox;for (q = p->prox; q != NULL; q = q->prox)q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

pa prox

##a prox3

a prox5

3 5Vídeo

Estrutura-líderEstrutura-líder é útil em muitas operações com encadeamento de estruturas

Page 17: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.4:Programa 10.4: Lendo o n Lendo o noo de estruturas e os de estruturas e os valores a serem nelas guardados (mantendo a valores a serem nelas guardados (mantendo a estrutura-líder)estrutura-líder)

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>

/* Declaracoes dos tipos *//* Declaracoes dos tipos */

typedef struct st st;typedef struct st st;struct st {int a; st *prox;};struct st {int a; st *prox;};typedef st *pontst;typedef st *pontst;

/* main: cabecalho e declaracoes locais *//* main: cabecalho e declaracoes locais */

int main () {int main () {int i, n;int i, n;

pontst p, q;pontst p, q;

Page 18: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* Alocacao da estrutura-lider *//* Alocacao da estrutura-lider */

p = (pontst) malloc (sizeof(st)); p = (pontst) malloc (sizeof(st));

/* Leitura do numero de estruturas *//* Leitura do numero de estruturas */

printf ("Digite o numero de elementos do encadeamento: ");printf ("Digite o numero de elementos do encadeamento: ");scanf ("%d", &n);scanf ("%d", &n);

/* Formacao e preenchimento do encadeamento de estruturas *//* Formacao e preenchimento do encadeamento de estruturas */

if (n > 0) {if (n > 0) {printf ("\nDigite os elementos: ");printf ("\nDigite os elementos: ");for (q = p, i = 1; i <= n; i++) {for (q = p, i = 1; i <= n; i++) {

q->prox = (pontst) malloc (sizeof (st));q->prox = (pontst) malloc (sizeof (st));q = q->prox;q = q->prox;scanf ("%d", &q->a);scanf ("%d", &q->a);

}}q->prox = NULL;q->prox = NULL;

}}else p->prox = NULL;else p->prox = NULL;

ni

p

##

Buffer do teclado3

3

q

1

q

2 5 85 8

2

2

q

8

5

3

q8

4

Page 19: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* Escrita do conteudo do encadeamento de estruturas *//* Escrita do conteudo do encadeamento de estruturas */

printf ("\n\nConteudo do encadeamento:\n\n\t");printf ("\n\nConteudo do encadeamento:\n\n\t");for (q = p->prox; q != NULL; q = q->prox)for (q = p->prox; q != NULL; q = q->prox)

printf ("%4d", q->a);printf ("%4d", q->a);

/* Fechamento da tela e encerramento *//* Fechamento da tela e encerramento */

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;}}

ni

p

##

34

2 5 8q

Copiar, salvar e executar

Page 20: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.5:Programa 10.5: Alterando o Alterando o Programa 10.4 Programa 10.4 para que a formação do encadeamento e a para que a formação do encadeamento e a escrita do mesmo fiquem em funções auxiliaresescrita do mesmo fiquem em funções auxiliares

#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>

/* Declaracoes dos tipos *//* Declaracoes dos tipos */

typedef struct st st;typedef struct st st;struct st {int a; st *prox;};struct st {int a; st *prox;};typedef st *pontst;typedef st *pontst;

/* Declaracoes dos prototipos das funcoes auxiliares *//* Declaracoes dos prototipos das funcoes auxiliares */

pontst NovoEncadeamento (void);pontst NovoEncadeamento (void);void EscreverEncadeamento (pontst);void EscreverEncadeamento (pontst);

Page 21: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* main: cabecalho e declaracoes locais *//* main: cabecalho e declaracoes locais */

int main () {int main () { pontst x;pontst x;

/* Formacao de um encadeamento *//* Formacao de um encadeamento */

printf ("Formacao de um encadeamento:\n\n");printf ("Formacao de um encadeamento:\n\n"); x = NovoEncadeamento ();x = NovoEncadeamento ();

/* Escrita do conteudo do encadeamento formado *//* Escrita do conteudo do encadeamento formado */

printf ("\nConteudo do encadeamento:\n\n\t");printf ("\nConteudo do encadeamento:\n\n\t"); EscreverEncadeamento (x);EscreverEncadeamento (x);

/* Encerramento *//* Encerramento */

printf ("\n\n"); system ("pause"); return 0;printf ("\n\n"); system ("pause"); return 0;}}

Page 22: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* Funcao NovoEncadeamento: forma um novo encadeamento de/* Funcao NovoEncadeamento: forma um novo encadeamento deestruturas, preenchendo-o e retornando um ponteiro paraestruturas, preenchendo-o e retornando um ponteiro para

a sua estrutura-lidera sua estrutura-lider */ */

pontst NovoEncadeamento () {pontst NovoEncadeamento () {int i, n;int i, n;

pontst p, q;pontst p, q;

/* Alocacao da estrutura-lider *//* Alocacao da estrutura-lider */

p = (pontst) malloc (sizeof(st));p = (pontst) malloc (sizeof(st));

/* Leitura do numero de estruturas *//* Leitura do numero de estruturas */

printf ("Digite o numero de elementos do encadeamento: ");printf ("Digite o numero de elementos do encadeamento: ");scanf ("%d", &n);scanf ("%d", &n);

Page 23: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* Formacao e preenchimento do encadeamento de estruturas *//* Formacao e preenchimento do encadeamento de estruturas */

if (n > 0) {if (n > 0) {printf ("\nDigite os elementos: ");printf ("\nDigite os elementos: ");for (q = p, i = 1; i <= n; i++) {for (q = p, i = 1; i <= n; i++) {

q->prox = (pontst) malloc (sizeof (st));q->prox = (pontst) malloc (sizeof (st));q = q->prox;q = q->prox;scanf ("%d", &q->a);scanf ("%d", &q->a);

}}q->prox = NULL;q->prox = NULL;

}}else p->prox = NULL;else p->prox = NULL;

/* Retornando o ponteiro para a estrutura-lider *//* Retornando o ponteiro para a estrutura-lider */

return p;return p;}}

p

##

2 5 8

Na função main:x = NovoEncadeamento ();

x(main)

Page 24: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* Funcao EscreverEncadeamento: escreve o conteudo/* Funcao EscreverEncadeamento: escreve o conteudodo encadeamento de estruturas acoplado ao parametro p */do encadeamento de estruturas acoplado ao parametro p */

void EscreverEncadeamento (pontst p){void EscreverEncadeamento (pontst p){pontst q;pontst q;

for (q = p->prox; q != NULL; q = q->prox)for (q = p->prox; q != NULL; q = q->prox)printf ("%4d", q->a);printf ("%4d", q->a);

}}

##

2 5 8

x(main

)

Copiar, salvar e executar

Na função main:EscreverEncadeamento (x);

p

Page 25: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Programa 10.6:Programa 10.6: Alterando a função Alterando a função NovoEncadeamentoNovoEncadeamento do do Programa 10.5 Programa 10.5 para para que cada número seja inserido mantendo que cada número seja inserido mantendo ordenação crescenteordenação crescente

pontst NovoEncadeamento () {pontst NovoEncadeamento () {int i, n, num;int i, n, num;

pontst p, q, r;pontst p, q, r;

/* Alocacao da estrutura-lider, aterrando-a *//* Alocacao da estrutura-lider, aterrando-a */

p = (pontst) malloc (sizeof(st));p = (pontst) malloc (sizeof(st));p->prox = NULL;p->prox = NULL;

/* Leitura do numero de estruturas *//* Leitura do numero de estruturas */

printf ("Digite o numero de elementos do encadeamento: ");printf ("Digite o numero de elementos do encadeamento: ");scanf ("%d", &n);scanf ("%d", &n);

Page 26: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

/* Formacao e preenchimento do encadeamento de estruturas *//* Formacao e preenchimento do encadeamento de estruturas */

if (n > 0) {if (n > 0) {printf ("\nDigite os elementos: ");printf ("\nDigite os elementos: ");for (i = 1; i <= n; i++) {for (i = 1; i <= n; i++) {

scanf ("%d", &num);scanf ("%d", &num); q = p;q = p; while (q->prox != NULL && q->prox->a < num)while (q->prox != NULL && q->prox->a < num) q = q->prox;q = q->prox; r = q->prox;r = q->prox;

q->prox = (pontst) malloc (sizeof (st));q->prox = (pontst) malloc (sizeof (st));q->prox->a = num;q->prox->a = num;

q->prox->prox = r;q->prox->prox = r;}}

}}

/* Retornando o ponteiro para a estrutura-lider *//* Retornando o ponteiro para a estrutura-lider */

return p;return p;}}

Copiar, salvar e executar

Page 27: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exercício do Lab 10:Exercício do Lab 10: Armazenamento e Armazenamento e manipulação de números inteiros muito manipulação de números inteiros muito grandes, em encadeamentos de estruturasgrandes, em encadeamentos de estruturas

Números inteiros em C devem caber em Números inteiros em C devem caber em 4 bytes4 bytes

Os comandos de C não conseguem manipular Os comandos de C não conseguem manipular números inteiros números inteiros muito grandesmuito grandes (> 10 bilhões) (> 10 bilhões)

Pode-se armazená-los cada um num Pode-se armazená-los cada um num encadeamento de estruturasencadeamento de estruturas e assim fazer e assim fazer somas, multiplicações, etc.somas, multiplicações, etc.

A finalidade do Lab 10 é A finalidade do Lab 10 é ler dois númerosler dois números, , armazenáarmazená-los em encadeamentos de estruturas, -los em encadeamentos de estruturas, somásomá-los, -los, multiplicámultiplicá-los e -los e escreverescrever os resultados os resultados

Page 28: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

1º Detalhe: Esquema de armazenamento1º Detalhe: Esquema de armazenamento

Seja o seguinte número: Seja o seguinte número: 2390000009128000007523123900000091280000075231

Dividindo-o em Dividindo-o em grupos de 4 dígitosgrupos de 4 dígitos, da , da direita para a esquerda:direita para a esquerda:

239-0000-0091-2800-0007-5231239-0000-0091-2800-0007-5231

Armazenando os Armazenando os gruposgrupos, cada um numa , cada um numa estruturaestrutura, e encadeando-os:, e encadeando-os:

num

2390912800

75231

##

Obs.: o elemento em cada estrutura é um número inteiro

Page 29: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

1º Detalhe: Esquema de armazenamento1º Detalhe: Esquema de armazenamento

Possíveis declarações:Possíveis declarações:

typedef struct celula celula;typedef struct celula celula;typedef celula* pont;typedef celula* pont;struct celula {struct celula {

int num;int num; pont prox;pont prox;

};};typedef pont numero;typedef pont numero;

num

2390912800

75231

##

Obs.: o elemento em cada estrutura é um número inteiro

Page 30: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

2º Detalhe: Leitura e armazenamento2º Detalhe: Leitura e armazenamento

Ler o número como Ler o número como cadeia de caracterescadeia de caracteres: : ““23900000091280000075231”23900000091280000075231”

Armazená-lo inicialmente numa Armazená-lo inicialmente numa variávelvariável cadeia de caracteres:cadeia de caracteres:

Checar a existência de caracteres Checar a existência de caracteres não-dígitosnão-dígitos: : caso haja, armazenar só o caso haja, armazenar só o zerozero no no encadeamentoencadeamento

num

0##

'2''3''9''0''0''0''0''0''0''9''1''2''8''0''0''0''0''0''7''5''2''3''1''\0' cad

Page 31: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

2º Detalhe: Leitura e armazenamento2º Detalhe: Leitura e armazenamento

EliminarEliminar da variável cadeia os eventuais da variável cadeia os eventuais zeros à zeros à esquerdaesquerda

Por exemplo, se for digitado:Por exemplo, se for digitado:““00000091280000075231”00000091280000075231”

Armazenando na cadeia, fica:Armazenando na cadeia, fica:

Eliminando os Eliminando os zeros à esquerdazeros à esquerda::

O O único zero à esquerdaúnico zero à esquerda que não deve se que não deve se eliminado é aquele que aparecer imediatamente eliminado é aquele que aparecer imediatamente antes do ‘\0’antes do ‘\0’

'0''0''0''0''0''0''9''1''2''8''0''0''0''0''0''7''5''2''3''1''\0' cad

'9''1''2''8''0''0''0''0''0''7''5''2''3''1''\0'

cad

Page 32: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

2º Detalhe: Leitura e armazenamento2º Detalhe: Leitura e armazenamento

Para armazenar o número no encadeamento, Para armazenar o número no encadeamento, deve-se deve-se dividirdividir a cadeia em a cadeia em gruposgrupos de no máximo de no máximo 4 caracteres4 caracteres

Por exemplo, se a cadeia for:Por exemplo, se a cadeia for:““23900000091280000075231”23900000091280000075231”

Ela será dividida nas cadeias:Ela será dividida nas cadeias:““239”, “0000”, “0091”, “2800”, “0007”, “5231”239”, “0000”, “0091”, “2800”, “0007”, “5231”

Usando a função Usando a função atoiatoi, converte-se cada cadeia no , converte-se cada cadeia no inteiro correspondente:inteiro correspondente:

239, 0, 0091, 2800, 7, 5231239, 0, 0091, 2800, 7, 5231

Page 33: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

2º Detalhe: Leitura e armazenamento2º Detalhe: Leitura e armazenamento

Então, forma-se o encadeamento, armazenando Então, forma-se o encadeamento, armazenando nele cada um dos inteiros obtidos:nele cada um dos inteiros obtidos:

239, 0, 0091, 2800, 7, 5231239, 0, 0091, 2800, 7, 5231

num

2390912800

75231

##

O trabalho de leitura e armazenamento do número deve ser feito por uma função

A função deve retornar o ponteiro num, tal como no Programa 10.5

Page 34: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

3º Detalhe: Escrita do conteúdo do 3º Detalhe: Escrita do conteúdo do encadeamentoencadeamento

Para o número ser Para o número ser escritoescrito, o conteúdo de cada , o conteúdo de cada estrutura deve ser convertido para estrutura deve ser convertido para cadeia de cadeia de caracterescaracteres: :

Por exemplo, o encadeamento:Por exemplo, o encadeamento:

deve produzir as seguintes cadeias:deve produzir as seguintes cadeias:““5231”, “7”, “2800”, “91”, “0”, “239”5231”, “7”, “2800”, “91”, “0”, “239”

num

2390912800

75231

##

Page 35: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

3º Detalhe: Escrita do conteúdo do 3º Detalhe: Escrita do conteúdo do encadeamentoencadeamento

““5231”, “7”, “2800”, “91”, “0”, “239”5231”, “7”, “2800”, “91”, “0”, “239”

Com a exceção da última, todas as cadeias Com a exceção da última, todas as cadeias devem ter 4 caracteres (completar com zeros à devem ter 4 caracteres (completar com zeros à esquerda):esquerda):

““5231”, “0007”, “2800”, “0091”, “0000”, 5231”, “0007”, “2800”, “0091”, “0000”, “239”“239”

Estas cadeias devem ser Estas cadeias devem ser concatenadasconcatenadas da da direita para a esquerda e, em seguida, a direita para a esquerda e, em seguida, a concatenação pode ser concatenação pode ser escritaescrita::

““23900000091280000075231”23900000091280000075231”

O trabalho de escrita do encadeamento deve ser feito por uma função

A função deve ser do tipo void e deve ter como parâmetro o ponteiro para a estrutura-líder do encadeamento, tal como no Programa 10.5

Page 36: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

4º Detalhe: Soma dos números de dois 4º Detalhe: Soma dos números de dois encadeamentoencadeamentoss

Fazer uma Fazer uma funçãofunção para: para:

– Receber como argumentos Receber como argumentos dois encadeamentosdois encadeamentos contendo números inteiros, conforme descrito contendo números inteiros, conforme descrito anteriormenteanteriormente

– Produzir um Produzir um encadeamentoencadeamento contendo o contendo o resultado da resultado da somasoma dos números recebidos como dos números recebidos como argumentosargumentos

A soma deve ser calculada A soma deve ser calculada percorrendopercorrendo-se os dois -se os dois encadeamentos recebidos como argumentos, para encadeamentos recebidos como argumentos, para alocaralocar e e preencherpreencher cada estrutura do cada estrutura do encadeamento do encadeamento do resultadoresultado

Page 37: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

0carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

Armazenando-os em encadeamentos

##

Page 38: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

1carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

## 2351

Page 39: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

0carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

## 2351

9658

Page 40: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

1carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

## 2351

9658

1864

Page 41: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

1carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

## 2351

9658

1864

0

Page 42: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

0carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

## 2351

9658

1864

0 1

Page 43: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a soma dos números Seja a soma dos números 99994523682051209999452368205120 e e 734128377231734128377231

NS

0carry

N1

9999

4523

6820

5120

##

N2

7341

2837

7231

##

## 2351

9658

1864

0 1

Page 44: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

5º Detalhe: Multiplicação dos números de dois 5º Detalhe: Multiplicação dos números de dois encadeamentoencadeamentos s

Fazer uma função para: Fazer uma função para:

– Receber como argumentos Receber como argumentos dois dois encadeamentosencadeamentos contendo números inteiros, contendo números inteiros, conforme descrito anteriormenteconforme descrito anteriormente

– Produzir um encadeamento contendo o Produzir um encadeamento contendo o resultado da resultado da multiplicaçãomultiplicação dos números dos números recebidos como argumentosrecebidos como argumentos

A multiplicação deve fazer A multiplicação deve fazer sucessivas sucessivas chamadaschamadas da função para da função para somarsomar dois números dois números armazenados em encadeamentos de estruturasarmazenados em encadeamentos de estruturas

Page 45: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

Page 46: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

2720

3702

Page 47: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

2720

3702

9122

4931

Page 48: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

27209122

4931

0744

3271

Page 49: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

272091220744

3271

6040

7230

Page 50: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

2720912207446040

7230

7230

Page 51: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

0

9999 4523 6820 5120

0000 2837 72317341

27209122074460407230

Acrescenta-se este valor ao valor acumulado

Page 52: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

27209122074460407230

Acrescenta-se este valor ao valor acumulado

Page 53: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

00005440

1452

Page 54: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

00005440

1452

9792

1934

Page 55: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

000054409792

1934

3685

1283

Page 56: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

0000544097923685

1283

8446

2836

Page 57: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

00005440979236858446

2836

2836

Page 58: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

72306040074491222720

9999 4523 6820 5120

0000 2837 72317341

000054409792368584462836

Acrescenta-se este valor ao valor acumulado

Page 59: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

283756769726053745622720

9999 4523 6820 5120

0000 2837 72317341

000054409792368584462836

Acrescenta-se este valor ao valor acumulado

Page 60: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

283756769726053745622720

9999 4523 6820 5120

0000 2837 72317341

Nada será acrescentado ao valor acumulado

Page 61: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros

Exemplo: Exemplo: Seja a multiplicação dos números Seja a multiplicação dos números 99994523682051209999452368205120 e e 73410000283772317341000028377231

Valor acumulado

283756769726053745622720

9999 4523 6820 5120

0000 2837 72317341

000000000000

E assim por diante