TAD Alphabetical Order Method List

Asked

Viewed 109 times

1

This is the first topic I’m posting, I’d like you to help me with this problem.

The problem is based on ordering data entered in a Dynamic List (C#) according to name (Alphabetical order). As it is a facul exercise the teacher asks us to implement the TAD List as well as all its methods. The following is some of the ordering method I did:

public void ordenaAlfabetica()
        {
            Celula temp1 = Inicio.prox;
            Celula temp2 = temp1.prox; //temp1 assumi o valor próximo à temp
            string nome1; //'nome1' assumi o valor do dado nome da primeira temp em MAIÚSCULO
            string nome2; //'nome2' assumi o valor do dado nome da segunda temp em MAIÚSCULO

            Dados aux = new Dados();
            int a = 0;
            int b = 0;
            int i = 0;

            //inicio da repetição 
            while (temp1 != null && temp2 != null) 
            {
                nome1 = temp1.dados.nome.ToUpper(); //'nome1' assumi o valor do dado nome da primeira temp em MAIÚSCULO
                nome2 = temp2.dados.nome.ToUpper(); //'nome2' assumi o valor do dado nome da segunda temp em MAIÚSCULO

                a = nome1[0]; //'a' assumi o valor em ASCII do primeiro caractere de 'nome1'
                b = nome2[0]; //'b' assumi o valor em ASCII do primeiro caractere de 'nome2'

                while(temp2 != null)
                {
                    nome2 = temp2.dados.nome.ToUpper(); //nome2 assumi o valor do nome da temp

                    a = nome1[0]; //'a' assumi o valor em ASCII do primeiro caractere de 'nome1'
                    b = nome2[0]; //'b' assumi o valor em ASCII do primeiro caractere de 'nome2'

                    while (a == b)  //roda enquanto as letras das palavras forem iguais ou 'i' atigir o tamanho da palavra
                    {
                        if (i == nome1.Length - 1 && i == nome2.Length - 1)
                        {
                            i = 0;
                            break;
                        }
                        else if (i < nome1.Length || i < nome2.Length)
                        {
                            i++;
                            a = nome1[i]; //'a' assumi o valor em ASCII do proximo caractere de 'nome1'
                            b = nome2[i]; //'b' assumi o valor em ASCII do proximo caractere de 'nome2'
                        }
                    }

                    if (a > b)
                    {
                        aux = temp1.dados;
                        temp1.dados = temp2.dados;
                        temp2.dados = aux;
                    }

                    temp2 = temp2.prox;
                } 

                temp1 = temp1.prox;
                temp2 = temp1.prox;
            } 
        }

The data entered inside each cell is of a class Data that contains encapsulated the Name and a Code.

The idea I was trying to make is in case the first letters of the word repeat, the third WHILE make it go to the next letter.

The example I am testing is the following, where they are entered in this order:

"deise"; 4;
"beatriz"; 2;
"carlos"; 3;
"abcade"; 1;

And the output that should be in alphabetical order is as follows:

"abcade"; 1;
"carlos"; 3;
"beatriz"; 2;
"deise"; 4;

Would anyone have any idea where the error lies??

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.