[C++] Sortowanie struktury, wg liczb

0

Hej,
mam za zadanie wykonanie ćwiczenia:
Stwórz strukturę uczeń(imię, nazwisko, indeks i ocena), mam podać ilość uczniów i uzupełnić dane, następnie dane maja być posortowane od najwyższej do najniższej oceny, tu pojawia się problem. Starałem się robić to przez bąbelkowanie, ale nie działa tak jak należny, sortuje liczby, ale zawsze ostatnia to jakiś kosmos(ponad 40 000) i na dodatek nie wyświetla reszty wyników w posortowanej kolejność, proszę o pomoc, zamieszczam fragment kodu odpowiadający sortowaniu i wypisywaniu.

Struktura:

struct Student
{
    
    string Imie;
    string Nazwisko;
    int Nr_indeksu;
    int Ocena;
};

Sortowanie:

    for(short licz = 0; licz < x; licz++) 
    {
         if(Numer[licz].Ocena<Numer[licz+1].Ocena)
          {
          int t=Numer[licz].Ocena;
          Numer[licz].Ocena=Numer[licz+1].Ocena;
          Numer[licz+1].Ocena=t;
          }
        cout<<licz + 1<<"\t"<<Numer[licz].Imie<<"\t"<< Numer[licz].Nazwisko<<"\t\t"<<
        Numer[licz].Nr_indeksu<<"\t\t"<<Numer[licz].Ocena<<"\t"<< endl;
  }

Pozdrawiam, proszę o pomoc.

0

na początek:

  1. sortowanie bąbelkowe wymaga dwóch pętli;p
  2. zamieniasz miejscami oceny, a powinieneś zamieniać struktury
0

Może mógłbyś powiedzieć jak mniej więcej ma to wyglądać, wiem, że zamieniam miejscami tylko oceny, ale nie wiem jak zamienić miejscem całe struktury.

0

tak na szybko:

for(short licz = 0; licz < x - 1; licz++)
{
short a = licz;
while(Numer[a].Ocena<Numer[a+1].Ocena && a >= 0)
{
struct Student t=Numer[a];
Numer[a] =Numer[a+1];
Numer[a+1].Ocena=t;
a--;
}
}

0
klajter napisał(a)

for(short licz = 0; licz < x - 1; licz++)
{
short a = licz;
while(Numer[a].Ocena<Numer[a+1].Ocena && a >= 0)
{
struct Student t=Numer[a];
Numer[a] =Numer[a+1];
Numer[a+1].Ocena=t;
a--;
}
}

Niestety, próba skompilowania kończy się błędem, fajnie by było mieć ten program bo zaliczenie zawsze się przydaje:P

0

Kończy się błędem bo jest tam mały błąd... Bezmyślne kopiowanie nigdy nie wychodzi na dobre...

0

Petla wygląda teraz tak:

 for( short licz = 0; licz<x; licz++ ) 
         {
          short a=licz;
          while(Numer[a].Ocena<Numer[a+1].Ocena)
           {
            Student t=Numer[a];
            Numer[a]=Numer[a+1];
            Numer[a+1]= t;
           }
         cout<<a+ 1<<"\t"<<Numer[a].Imie<<"\t"<< Numer[licz].Nazwisko<<"\t\t"<<Numer[a].Nr_indeksu<<"\t\t"<<Numer[a].Ocena<<"\t"        << endl;
       }

Lecz nie działa jeszcze tak jak trzeba, zamienia kilka wyników miejscami, ale nie wszystkie.

0

więc przeanalizuj kod i sprawdź czego brakuje ;]

0

Prawdopodobnie pętli, ale gdzie?

0

liczba pętli jest wystarczająca, ale czegoś brakuje, że któraś z nich nie działa tak jak powinna, dowiedz się, która nie działa i co zrobić żeby działało

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