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
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
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
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
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
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
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
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
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
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
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
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
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!!!
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;
}}
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
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
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;
/* 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
/* 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
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);
/* 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;
}}
/* 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);
/* 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)
/* 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
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);
/* 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
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
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
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
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
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
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
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
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
##
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
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
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
##
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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