Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Nao consigo ordenr list em c

Olá, estou tentando fazer uma lista ordenada em c mas depois de colocar os valores simplesmente mostra na ordem de entrada .

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

    struct automovel{
        int cod;
        char marca[8];
        char modelo[8];
        int ano;
        char placa[8];// XXX-9999
    }c[3];

void ordenaNomes(){
    system("cls");
    int i,j;
    printf("\n-------Lista de automoveis--------\n\n");
    for(i=1;i<1;i++){
        for(j=i+1;j<1;j++){
            if( strcoll(c[i].marca, c[j].marca) > 0){
                c[0] = c[i];
                c[i] = c[j];
                c[j] = c[0];
            }
        }
    }
    printf("\n Marca  modelo  ano  placa \n ");
        for (i = 0; i < 3; i++)
            printf("\n %s     %s      %d       %s\n ", c[i].marca, c[i].modelo, c[i].ano, c[i].placa);

     printf("\n-------Lista de automoveis--------\n\n");
}

int main(){
    int i;
    int atual = 0;
    int menor = 0;

    for (i = 0; i < 3; i++){
        c[i].cod = i;
        printf("\nPor favor entre com a marca:");
        scanf("%s", &c[i].marca);
        printf("Por favor entre com a modelo: ");
        scanf("%s", &c[i].modelo);
        printf("Por favor entre com a ano de fabricacao :");
        scanf("%d", &c[i].ano);
        printf("Por favor entre com a placa formato XXX-9999:");
        scanf("%s", &c[i].placa);

        printf("\nGravando Marca %s, modelo %s, ano %d ,placa %s\n\n", c[i].marca, c[i].modelo, c[i].ano, c[i].placa);
    }

ordenaNomes();

return 0;
}
1 resposta
solução!

Olá Luciano

Não entendi exatamente como funciona a ordenação que você estava implementando, mas fiz uma que resolver parcialmente o que você propôs.Eu utilizei o algorítimo de ordenação Bubble sort, mas exitem muitos outros mais eficientes e você pode aprender sobre eles no curso.

Vamos lá, primeiro aumentei para 4 o número de automóveis, fiz isso porque precisava de um automóvel extra para utilizar como auxiliar.

struct automovel
{
    int cod;
    char marca[8];
    char modelo[8];
    int ano;
    char placa[8]; // XXX-9999
} c[4];

Depois fiz algumas modificações no for utilizando a lógica do Bubble sort, que funciona tentando levar o menor valor para o fim da lista. O Primeiro for serve para garantir que vamos passar por todos os itens da lista, o segundo for serve para comparar um item com todos os outros itens da lista. Agora a parte do if está comparando a primeira letra do veiculo com a primeira letra veiculo seguinte na lista. Quando a letra for maior que a seguinte ele faz a troca, nesse momento fazemos uso da ultima posição da lista que expliquei utilizaríamos como uma variável auxiliar.

for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3 -1; j++)
        {
            if (c[j].marca[0] > c[j + 1].marca[0])
            {
                c[3] = c[j];
                c[j] = c[j + 1];
                c[j + 1] = c[3];
            }
        }
    }

Bom essa são as modificações que fiz e que resolvem parcialmente a ordenação, já que olha apenas para a primeira letra, então não resolve quando as primeiras letras são iguais, seria uma boa tentar fazer isso para praticar.

Qualquer duvidas só perguntar. Bons estudos.