ces-10 introduÇÃo À computaÇÃo aulas práticas – 2014

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: ava-huff

Post on 03-Jan-2016

21 views

Category:

Documents


1 download

DESCRIPTION

CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014. Capítulo X Encadeamento de Estruturas por Ponteiros. p. a. prox. Programa 10.1: Alocação, preenchimento e escrita de uma nova estrutura #include < stdio .h> #include typedef struct st st ; - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

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

2

Vídeo

Copiar, salvar e executar

a prox

Page 3: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

Programa 10.2:Programa 10.2: Alocação, preenchimento e Alocação, preenchimento e escrita de 3 novas estruturas (visto em aula escrita de 3 novas estruturas (visto em aula teórica)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

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

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

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

2

Vídeo

Page 7: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

2

Vídeo

q

Page 8: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

Vídeo

q

Page 9: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

Vídeo

q

Page 10: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

Vídeo

q q

Page 11: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

Vídeo

q

Page 12: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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 5

Vídeo

q

Page 13: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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 5

Vídeo

q q

q == NULL:

Fim!!!

Page 14: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

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

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 5

Ví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

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

/* 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 teclado

3

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

/* 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 8

q

Copiar, salvar e executar

Page 20: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

/* 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

/* Funcao NovoEncadeamento: forma um novo encadeamento de/* Funcao NovoEncadeamento: forma um novo encadeamento de

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

/* 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

/* Funcao EscreverEncadeamento: escreve o conteudo/* Funcao EscreverEncadeamento: escreve o conteudo

do 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

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

/* 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

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 os resultadosresultados

Page 28: CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014

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

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

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

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

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

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

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 de no máximo 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”, 239”, “0000”, “0091”, “2800”, “0007”, “5231”“5231”

Usando a função Usando a função atoiatoi, converte-se cada cadeia , converte-se cada cadeia no inteiro correspondente:no 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

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

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

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

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 dois encadeamentosencadeamentos contendo números inteiros, contendo números inteiros, conforme descrito anteriormenteconforme descrito anteriormente

– 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 -se os dois encadeamentos recebidos como argumentos, dois encadeamentos recebidos como argumentos, para 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

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

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

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

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

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

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

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

5º Detalhe: Multiplicação dos números de 5º Detalhe: Multiplicação dos números de dois encadeamentodois encadeamentos 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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