Przerobienie kodu na tablice dwuwymiarowa i sortowanie malejace

0

Witam,

od razu mowie ze jestem nowy i dopiero sie ucze. Mam kod C w ktorym podaje sie liczbe osob i ich wiek. Kolejno sa one sortowane malejaco. Jednak nie bardzo wiem jak przerobic to na tablice dwuwymiarowa, zeby sortowalo wedlug wieku i jednoczesnie po uporzadkowaniu zmienialo numer osoby (teraz caly czas osoby sa od 1 do x, a zmienia sie wiek malejaco co jednoczesnie zmienia wiek danej osoby).

Będę bardzo wdzięczny za pomoc.

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

void sortmal(float *, int);


int main(void)
{
    int i, r;

    printf("Podaj ilosc osob: ");
    scanf("%d", &r);
    float * tab = (float *)malloc(r * sizeof (double));

    for (i = 0; i < r; i++)
    {
        printf ("Podaj wiek osoby %d: ", i+1);
        scanf ("%f", &tab[i]);
    }

    printf("\n---------------------------------");
    sortmal(tab, r);
    printf ("\n\nSortowanie malejace: \n");

    for (i = 0; i < r; i++)
    {
        printf ("Osoba %d: %.0f\n", i+1, tab[i]);
    }


    free(tab);
    printf("\n\n");
    system ("Pause");

    return EXIT_SUCCESS;
}


void sortmal(float * tab, int r)
{
    int i, j, temp;
    for (i = 0; i < r; i++)
        for (j = 0; j < r-1; j++)
        {
            if (tab[j] < tab[j+1])
            {
                temp = tab[j+1];
                tab[j+1] = tab[j];
                tab[j] = temp;
            }
        }
}
0

Moim zdaniem powinieneś przechowywać te dane w strukturze albo klasie , wtedy wiek będzie przesuwał się razem z numerkiem.

#include <stdio.h>

struct osoba
{
    int numer;
    int wiek;
};

int main()
{   const int ileosob = 10;
    osoba ludzie[ileosob];
    for (int i =0; i < ileosob; i++)
    {
        ludzie[i].numer = i;
       scanf ("%d", &ludzie[i].wiek);
    }


return 0;

}
0

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

void sortmal(float *, float *, int);

int main(void)
{
    int i, r;

    printf("Podaj ilosc osob: ");
    scanf("%d", &r);
    float * tab = (float *)malloc(r * sizeof (double));
    float * tab2 = (float *)malloc(r * sizeof (double));
    for (i = 0; i < r; i++)
    {
        printf ("Podaj wiek osoby %d: ", i+1);
        tab2[i] = i+1;
        scanf ("%f", &tab[i]);
    }

    printf("\n---------------------------------");
    sortmal(tab,tab2, r);
    printf ("\n\nSortowanie malejace: \n");

    for (i = 0; i < r; i++)
    {
        printf ("Osoba %.0f: %.0f\n", tab2[i], tab[i]);
    }

    free(tab);
    free(tab2);
    printf("\n\n");
    system ("Pause");

    return EXIT_SUCCESS;
}

void sortmal(float * tab, float * tab2, int r)
{
    int i, j, temp, temp2;
    for (i = 0; i < r; i++)
        for (j = 0; j < r-1; j++)
        {
            if (tab[j] < tab[j+1])
            {
                temp2 = tab2[j+1];
                tab2[j+1] = tab2[j];
                tab2[j] = temp2;
                temp = tab[j+1];
                tab[j+1] = tab[j];
                tab[j] = temp;
            }
        }
}

To powinno działać..

1 użytkowników online, w tym zalogowanych: 0, gości: 1