View
214
Download
0
Category
Preview:
Citation preview
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
2Vídeo
Copiar, salvar e executar
a prox
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
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
2Ví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
2Ví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
2Ví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 3Ví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 3Ví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 3Ví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 5Ví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 5Ví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 5Ví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 teclado3
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 8q
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 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);
/* 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 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
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 resultados os resultados
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 à 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
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
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 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
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 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
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
Recommended