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

Sortowanie tablicy struktur

Object Storage Arubacloud
0 głosów
1,581 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 274 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez siemasiema123.96 Początkujący (350 p.)
0 głosów
2 odpowiedzi 905 wizyt
pytanie zadane 7 kwietnia 2016 w C i C++ przez Jędrzej Dembowski Użytkownik (740 p.)
0 głosów
1 odpowiedź 286 wizyt
pytanie zadane 11 marca 2019 w C i C++ przez Magmardo Początkujący (310 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...