• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie tablicy struktur

Cloud VPS
0 głosów
1,980 wizyt
pytanie zadane 9 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const int max1=16, max2=21, max3=10;
struct dane{
    int iLp;
    int iSort;
    char cImie[max1];
    char cNazw[max2];

};

void sortowanie(struct dane *os)
{
    int pom = 0;

    for (int i = 0; i<10; i++)
        for (int j = 0; j<10 - i - 1; j++) //pętla wewnętrzna
            if ((os+j)->iSort >(os+j+1)->iSort)
            {
                //zamiana miejscami
                dane tmp = os[j];
                os[j] = os[j+1];
                os[j+1] = tmp;
             }




}

int main()
{
    struct dane strStud[10]= {{1,11, "Jan","Kowalski"},{2,1, "Andrzej","Andrus"},{3,12,"Piotr","Lewandowski"},{4,22,"Anna", "Wojcik"},{5,4, "Sebastian", "Dabrowski"},{6,17, "Michal", "Putka"},{7,15,"Jaroslaw", "Nadkret"},{8,24, "Oskar", "Zak"},{9,14,"Bartosz","Michalski"},{10,7, "Radoslaw","Gabski"}};

    printf("Dane przed sortowaniem:\n");

    for(int i=0; i<10; i++)
    {
        printf("%d\t\t",strStud[i].iLp);
        printf("%d\t\t",strStud[i].iSort);
        printf("%s\t\t",strStud[i].cImie);
        printf("%s\n",strStud[i].cNazw);
    }

    sortowanie(struct dane);

    printf("Dane po sortowaniu:\n");

    for(int i=0; i<10; i++)
    {
        printf("%d\t\t",strStud[i].iLp);
        printf("%d\t\t",strStud[i].iSort);
        printf("%s\t\t",strStud[i].cImie);
        printf("%s\n",strStud[i].cNazw);
    }


return 0;
}

Pokazuje mi błąd przy wywoływaniu funkcji sortowanie(); 'expected primary-expression before 'struct''. Nie wiem czy brakuje parametrów przy wywoływaniu funkcji czy co. Za wszelką pomoc będę wdzięczny ;)

1 odpowiedź

0 głosów
odpowiedź 9 czerwca 2018 przez RafalS VIP (122,820 p.)
sortowanie(struct dane);

Struct dane to dopiero typ. Robisz coś w tym stylu:

sortowanie(int);

Prześlij Twoją tablicę:

sortowanie(strStud);

 

komentarz 9 czerwca 2018 przez WhizzKid Początkujący (400 p.)
Jak to mam przesłać swoją Tablice?
komentarz 9 czerwca 2018 przez RafalS VIP (122,820 p.)
No a która tablice chcesz sortować?
komentarz 9 czerwca 2018 przez WhizzKid Początkujący (400 p.)
tablicę struktur według parametru iSort (rosnąco)
komentarz 10 czerwca 2018 przez RafalS VIP (122,820 p.)
A ile mass tablic struktur w mainie?
komentarz 10 czerwca 2018 przez WhizzKid Początkujący (400 p.)

    struct dane strStud[10]= {{1,11, "Jan","Kowalski"}...

10 mam

komentarz 10 czerwca 2018 przez WhizzKid Początkujący (400 p.)

Udało mi się zrobić postęp:

 

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

const int max1=16, max2=21, max3=10;

struct dane{
    int iLp;
    int iSort;
    char cImie[max1];
    char cNazw[max2];

};

int main()
{
    struct dane strStud[10]= {{1,11, "Jan","Kowalski"},{2,1, "Andrzej","Andrus"},{3,12,"Piotr","Lewandowski"},{4,22,"Anna", "Wojcik"},{5,4, "Sebastian", "Dabrowski"},{6,17, "Michal", "Putka"},{7,15,"Jaroslaw", "Nadkret"},{8,24, "Oskar", "Zak"},{9,14,"Bartosz","Michalski"},{10,7, "Radoslaw","Gabski"}};

    printf("Dane przed sortowaniem:\niLp\tiSort\tcImie\t\tcNazw\n");

    for(int i=0; i<10; i++)
    {
        printf("%d\t",strStud[i].iLp);
        printf("%d\t",strStud[i].iSort);
        printf("%s\t\t",strStud[i].cImie);
        printf("%s\n",strStud[i].cNazw);
    }

    char tmp2[16];
    char tmp3[21];
    for (int i = 0; i<10; i++)
        for (int j = 0; j<10 - i - 1; j++) //pętla wewnętrzna
            if (strStud[j].iSort >strStud[j+1].iSort)
            {
                int tmp1=strStud[j].iLp;
                strStud[j].iLp=strStud[j+1].iLp;
                strStud[j+1].iLp=tmp1;
                int tmp =strStud[j].iSort;
                strStud[j].iSort = strStud[j+1].iSort;
                strStud[j+1].iSort = tmp;
                tmp2=strStud[j].cImie;
                strStud[j].cImie=strStud[j+1].cImie;
                strStud[j+1].cImie=tmp2;
                tmp3=strStud[j].cNazw;
                strStud[j].cNazw=strStud[j+1].cNazw;
                strStud[j+1].cNazw=tmp3;
             }

    printf("Dane po sortowaniu:\niLp\tiSort\tcImie\t\tcNazw\n");

    for(int i=0; i<10; i++)
    {

        printf("%d\t",strStud[i].iLp);
        printf("%d\t",strStud[i].iSort);
        printf("%s\t\t",strStud[i].cImie);
        printf("%s\n",strStud[i].cNazw);
    }


return 0;
}

ale gdy próbuję podmienić stringi(Imie, Nazw) to mi nie działa. I wyskakuje mi błąd 'invalid array assignment'. W sumie kwestia rozwiązania tego i program działa...

komentarz 10 czerwca 2018 przez WhizzKid Początkujący (400 p.)
42-47 linijka ^
komentarz 10 czerwca 2018 przez WhizzKid Początkujący (400 p.)
strcpy(temp2, strStud[j].cImie);
                strcpy(strStud[j].cImie,strStud[j+1].cImie);
                strcpy(strStud[j+1].cImie,temp2);
                strcpy(temp3, strStud[j].cNazw);
                strcpy(strStud[j].cNazw,strStud[j+1].cNazw);
                strcpy(strStud[j+1].cNazw,temp3);

Problem rozwiązany.. Dzięki za pomoc!

komentarz 10 czerwca 2018 przez RafalS VIP (122,820 p.)

10 mam

To ja się tylko jeszcze do tego odniose. Masz jedną tablice struktur dane.

Podobne pytania

0 głosów
0 odpowiedzi 580 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez siemasiema123.96 Początkujący (350 p.)
0 głosów
2 odpowiedzi 1,095 wizyt
pytanie zadane 7 kwietnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
0 głosów
1 odpowiedź 456 wizyt
pytanie zadane 11 marca 2019 w C i C++ przez Magmardo Początkujący (310 p.)

93,485 zapytań

142,417 odpowiedzi

322,767 komentarzy

62,898 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...