CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros.

Slides:



Advertisements
Apresentações semelhantes
Funções em C.
Advertisements

TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS ESTRUTURAS DE DADOS AVANÇADAS Aula /08/2011 Professor Leomir J. Borba-
Estruturas de Dados Árvores Binárias
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
While While Condição // comandos End While. Exemplos While Var contador As Integer contador = 0 While (contador < 10) contador += 1 console.ConsoleWrite(contador)
Listas Encadeadas Circulares Listas Duplamente Encadeadas
2008 LCG/UFRJ. All rights reserved. 1 Standard Template Library STL Claudio Esperança Paulo Roma Cavalcanti.
FORTRAN 90 Denise Yumi Takamura.
Estruturas de Dados para projeto de SGBD. Estruturas de dados analisadas Estruturas de nível Esparso Denso Combinadas Arvore B+ Tabela de hash.
Vetores Variável Composta Homogênea Unidimensional
Vetores (2) Continuação.
Algoritmos com laços (ou seja, com conjuntos de instruções que devem ser executados repetidas vezes)
Criptografia Quântica : Um Estudo
Gustavo Vieira Pereira
Geração de Código Otimizações independentes de máquina.
Geração de Código Cap. 8. Introdução Fase final para um compilador Entrada é uma representação intermediária do código fonte e a saída é um programa para.
Planejando seu site Objetivos Abordagem Sílvia Dota.
Página de entrada A página de entrada, ou a index, representa um convite para o seu site.
CES-11 LAB 03 Bitmap Quadtree
CES-41 COMPILADORES Capítulo IV Complementos de Análise Léxica.
Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo III Comandos de Controle.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo IX Estruturas e Subprogramas sem Parâmetros.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
1.3 – Interpretadores – Compiladores versus Interpretadores
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo III Declarações e Comandos de Atribuição.
CES-41 COMPILADORES Capítulo VII Código Intermediário.
CES-41 COMPILADORES Aulas Práticas
CES-10 INTRODUÇÃO À COMPUTAÇÃO
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo II Confecção de Tabelas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VII Variáveis Indexadas Numéricas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados.
Capítulo IX – Ponteiros 9.1 – Introdução 9.2 – Relação entre ponteiros e variáveis indexadas 9.3 – Alocação dinâmica de memória 9.4 – Variáveis indexadas,
Exemplo: ordenação de uma lista pelo Selection-Sort:
1 Definição de Dicionário Dicionário é um sistema de informações: Equivalente a um conjunto de elementos não repetidos Equivalente a um conjunto de elementos.
Capítulo I – Conceitos Primários 1.1 – Estrutura de um computador 1.2 – Informações manipuladas por um computador 1.3 – Evolução das linguagens de programação.
Função Gráficos. Domínio e imagem no gráfico.
Curso Técnico em Informática La Salle - Canoas
ALOCAÇÃO DINÂMICA DE MEMÓRIA
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Listas Encadeadas.
Recursividade Estrutura de Dados.
Marco Antonio Montebello Júnior
Introdução à Probabilidade
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
Baseado no documento do Prof. Ronaldo Martins da Costa
LINGUAGENS DE PROGRAMAÇÃO
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Slides: Prof. João Fabro UTFPR - Curitiba
Fundamentos de Programação 1
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Exercícios de revisão.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
Árvores Binárias de Pesquisa
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2014 Capítulo X Encadeamento de Estruturas por Ponteiros.
Fundamentos de Programação 1 Slides 21 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Encadeada”.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2016
Capítulo II – Listas Lineares Gerais
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2017
Fundamentos de Programação 1
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2019
Transcrição da apresentação:

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

Programa 11.1: Alocação, preenchimento e escrita de uma nova estrutura #include #include typedef struct st st; struct st {int a; st *prox;}; void main () { st *p; st *p; p = (st *) malloc (sizeof(st)); p->a = 2; printf ("%4d", p->a); printf ("\n\nDigite algo para encerrar: "); getch(); printf ("\n\nDigite algo para encerrar: "); getch();} p ???2 2 Vídeo Copiar, salvar e executar aprox

Programa 11.2: Alocação, preenchimento e escrita de 3 novas estruturas (visto em aula teórica) typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; void main () { pontst p, q; p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); printf ("\n\nDigite algo para encerrar: "); getch(); } Copiar, salvar e executar

Seja a execução dos comandos: Seja a execução dos comandos: p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 q

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 q 2 Vídeo

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 q 2 Vídeo q

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a 5 2 Vídeo q

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo qq

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q

p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox 2 a 3 a Vídeo q q q == NULL: Fim!!!

Programa 11.3: Deixando vazia a primeira estrutura (chamando- a de estrutura-líder) typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; void main () { pontst p, q; p = (st *) malloc (sizeof(st)); p->a = 2; p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p; q != NULL; q = q->prox) printf ("%4d", q->a); printf ("\n\nDigite algo para encerrar: "); getch(); }

Programa 11.3: Deixando vazia a primeira estrutura (chamando- a de estrutura-líder) typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; void main () { pontst p, q; p = (st *) malloc (sizeof(st)); p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p->prox; q != NULL; q = q->prox) printf ("%4d", q->a); printf ("\n\nDigite algo para encerrar: "); getch(); } Copiar, salvar e executar

p = (st *) malloc (sizeof(st)); p->prox = (st *) malloc (sizeof(st)); p->prox->a = 3; p->prox->prox = (st *) malloc (sizeof(st)); p->prox->prox->a = 5; p->prox->prox->prox = NULL; for (q = p->prox; q != NULL; q = q->prox) printf ("%4d", q->a); p aprox ## aprox 3 a Vídeo Estrutura-líder Estrutura-líder é útil em muitas operações com encadeamento de estruturas

Programa 11.4: Lendo o n o de estruturas e os valores a serem nelas guardados (mantendo a estrutura-líder) #include #include /* Declaracoes dos tipos */ typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; /* main: cabecalho e declaracoes locais */ void main () { int i, n; pontst p, q; pontst p, q;

/* Alocacao da estrutura-lider */ p = (pontst) malloc (sizeof(st)); p = (pontst) malloc (sizeof(st)); /* Leitura do numero de estruturas */ printf ("Digite o numero de elementos do encadeamento: "); scanf ("%d", &n); /* Formacao e preenchimento do encadeamento de estruturas */ if (n > 0) { if (n > 0) { printf ("\nDigite os elementos: "); for (q = p, i = 1; i <= n; i++) { q->prox = (pontst) malloc (sizeof (st)); q = q->prox; scanf ("%d", &q->a); } q->prox = NULL; } else p->prox = NULL; ni p ## Buffer do teclado 3 3 q 1 q q q 8 4

/* 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) printf ("%4d", q->a); /* Fechamento da tela e encerramento */ printf ("\n\nDigite algo para encerrar: "); getch(); printf ("\n\nDigite algo para encerrar: "); getch();} ni p ## q Copiar, salvar e executar

Programa 11.5: Alterando o Programa 11.4 para que a formação do encadeamento e a escrita do mesmo fiquem em funções auxiliares #include #include /* Declaracoes dos tipos */ typedef struct st st; struct st {int a; st *prox;}; typedef st *pontst; /* Declaracoes dos prototipos das funcoes auxiliares */ pontst NovoEncadeamento (void); void EscreverEncadeamento (pontst);

/* main: cabecalho e declaracoes locais */ void main () { pontst x; pontst x; /* 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 */ printf ("\nConteudo do encadeamento:\n\n\t"); printf ("\nConteudo do encadeamento:\n\n\t"); EscreverEncadeamento (x); EscreverEncadeamento (x); /* Encerramento */ printf ("\n\nDigite algo para encerrar: "); getch(); printf ("\n\nDigite algo para encerrar: "); getch();}

/* Funcao NovoEncadeamento: forma um novo encadeamento de estruturas, preenchendo-o e retornando um ponteiro para a sua estrutura-lider */ a sua estrutura-lider */ pontst NovoEncadeamento () { int i, n; pontst p, q; pontst p, q; /* Alocacao da estrutura-lider */ p = (pontst) malloc (sizeof(st)); p = (pontst) malloc (sizeof(st)); /* Leitura do numero de estruturas */ printf ("Digite o numero de elementos do encadeamento: "); scanf ("%d", &n);

/* Formacao e preenchimento do encadeamento de estruturas */ if (n > 0) { if (n > 0) { printf ("\nDigite os elementos: "); for (q = p, i = 1; i <= n; i++) { q->prox = (pontst) malloc (sizeof (st)); q = q->prox; scanf ("%d", &q->a); } q->prox = NULL; } else p->prox = NULL; /* Retornando o ponteiro para a estrutura-lider */ return p; } p ##258 Na função main: x = NovoEncadeamento (); x (main)

/* Funcao EscreverEncadeamento: escreve o conteudo do encadeamento de estruturas acoplado ao parametro p */ void EscreverEncadeamento (pontst p){ pontst q; for (q = p->prox; q != NULL; q = q->prox) printf ("%4d", q->a); } ##258 x (main) Copiar, salvar e executar Na função main: EscreverEncadeamento (x); p

Exercício 11.1: Acrescentar ao Programa 11.5 código para a leitura e escrita de um segundo encadeamento y Exercício 11.2: Eliminação da primeira duplicata do primeiro elemento de cada um dos dois encadeamentos Acrescentar ao programa do Exercício 11.1 uma função para deletar de um encadeamento a estrutura com a primeira duplicata do primeiro elemento desse encadeamento Acrescentar ao programa do Exercício 11.1 uma função para deletar de um encadeamento a estrutura com a primeira duplicata do primeiro elemento desse encadeamento A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados

Exemplo: simulação da deleção da primeira duplicata: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqq free Fim !!!

Exercício 11.3: Eliminação de todas as duplicatas do primeiro elemento de cada um dos dois encadeamentos Alterar a função do Exercício 11.2 para que ela delete de um encadeamento todas as estruturas com duplicatas do primeiro elemento desse encadeamento Alterar a função do Exercício 11.2 para que ela delete de um encadeamento todas as estruturas com duplicatas do primeiro elemento desse encadeamento A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem os elementos deletados

Exemplo: simulação da deleção das duplicatas do 1º elemento: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqqqq Fim !!! Não esquecer de dar free nas estruturas deletadas

Exercício 11.4: Eliminação de todas as duplicatas dos dois encadeamentos Alterar a função do Exercício 11.3 para que ela delete de um encadeamento todas as estruturas com elementos em duplicata Alterar a função do Exercício 11.3 para que ela delete de um encadeamento todas as estruturas com elementos em duplicata A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função deve receber como argumento um ponteiro que aponte para a estrutura-líder do encadeamento-alvo A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem nenhum elemento em duplicata A função main deve chamar essa função para os dois encadeamentos e mandar escrever o conteúdo dos mesmos, agora sem nenhum elemento em duplicata

Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqqqq q

Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqqq q

Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pqq

Exemplo: simulação de uma eliminação de duplicatas: Seja o seguinte encadeamento: Seja o seguinte encadeamento: ## x pq Fim !!! Não esquecer de dar free nas estruturas deletadas

Exercício 11.5: Conjunto-união e conjunto-intersecção O Exercício 11.4 deixou os dois encadeamentos da função main sem duplicatas O Exercício 11.4 deixou os dois encadeamentos da função main sem duplicatas Então esses encadeamentos podem ser encarados como conjuntos de números inteiros Então esses encadeamentos podem ser encarados como conjuntos de números inteiros Fazer uma função que receba como argumentos dois ponteiros que apontem para as estruturas-líderes de dois encadeamentos Fazer uma função que receba como argumentos dois ponteiros que apontem para as estruturas-líderes de dois encadeamentos Essa função deve transformar o primeiro encadeamento no conjunto-união e o segundo no conjunto-intersecção desses argumentos Essa função deve transformar o primeiro encadeamento no conjunto-união e o segundo no conjunto-intersecção desses argumentos

Exercício 11.5: Conjunto-união e conjunto-intersecção A função main deve chamar essa função, passando-lhe como argumentos seus dois encadeamentos lidos, já sem duplicatas A função main deve chamar essa função, passando-lhe como argumentos seus dois encadeamentos lidos, já sem duplicatas Deve ainda mandar escrever o conteúdo dos mesmos, agora transformados pela referida função Deve ainda mandar escrever o conteúdo dos mesmos, agora transformados pela referida função Nessa nova função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura Nessa nova função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura

Exemplo: transformação em união e interseção: Sejam os seguintes encadeamentos: Sejam os seguintes encadeamentos: ## x ## y

Exemplo: transformação em união e interseção: Encadeamentos transformados: Encadeamentos transformados: ## x ## y Em y, as estruturas com elementos que não constam em x são transferidas para x

Exercício 11.6: Circularização e inversão da direção de um encadeamento Fazer uma função que receba como argumento um ponteiro que aponte para a estrutura-líder de um encadeamento Fazer uma função que receba como argumento um ponteiro que aponte para a estrutura-líder de um encadeamento Essa função deve: Essa função deve: Tornar circular o encadeamento recebido como argumento Tornar circular o encadeamento recebido como argumento Inverter a direção dos ponteiros desse encadeamento Inverter a direção dos ponteiros desse encadeamento Nessa função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura Nessa função, não se deve criar nenhuma nova estrutura, nem deixar nenhuma estrutura já existente fora dos encadeamentos, nem trocar o valor guardado em nenhuma estrutura

Exercício 11.6: Circularização e inversão da direção de um encadeamento A função main deve chamar essa função duas vezes, fornecendo-lhe como argumento, na primeira vez, o encadeamento transformado em união dos encadeamentos lidos e, na segunda vez, o encadeamento transformado em intersecção dos mesmos A função main deve chamar essa função duas vezes, fornecendo-lhe como argumento, na primeira vez, o encadeamento transformado em união dos encadeamentos lidos e, na segunda vez, o encadeamento transformado em intersecção dos mesmos Deve ainda escrever tais encadeamento, agora circularizados e invertidos Deve ainda escrever tais encadeamento, agora circularizados e invertidos Para essa escrita, é necessário uma outra função de escrever o conteúdo de um encadeamento, pois não haverá ponteiro NULL Para essa escrita, é necessário uma outra função de escrever o conteúdo de um encadeamento, pois não haverá ponteiro NULL

Exemplo: circularização e inversão de um encadeamento: Seja o seguinte encadeamento: ## x 8450 Circularizando-o:

Exemplo: circularização e inversão de um encadeamento: Invertendo seu encadeamento: ## x 8450