zamiana parami danych w tablicy

0

Mam takie zadanie:
TablicęA[n] (n-stała) wypełnić rekordami opisującymi dane o studentach, o polach (imie, rok_ur, ocena) –dane należy wczytywać z pliku o nazwiepodanej przez użytkownikajako kolejne trójki danych typu (string, int,double). Przyjąć, że w pliku jest wystarczająco dużo danych, jak w zad. 7 do lekcji 3. Następnie:
1.wydrukować w kolejnych wierszach kolejne rekordy tablicy A.
2.zamienić miejscami studenta najlepszego z najgorszym (pod względem ocen)
3.przesunąć cyklicznie o 1 miejsce w dół (w kierunku rosnącego indeksu) elementy tablicy A i ponownie ją wydrukować.
4.zamienić miejscami studentów w kolejnych paracho indeksach 0-1, 1-2, ... itd., jeśli pierwszy student z danej pary jest starszyod drugiego, po czym znów wydrukowaćtablicę.Wskazówka:w krokach 2-4 należy zamieniać ze sobą całe rekordy, stosując zmiennąpomocniczątypu rekordowego jako tymczasowy schowek. I mam problem z ostatnim punktem czyli zamianą w parach:

#include <iostream>
#include <string>
#include<cstdlib>
#include<fstream>

using namespace std;

struct Tuczen
{
string imie;
int rokUr;
float ocena;
};





void wyswietlUczen(Tuczen uczen){
cout << uczen.imie << " ";
cout << uczen.rokUr << " ";
cout << uczen.ocena << endl;


}
void wypelnijKlase(Tuczen klasa[], int N, string nazwaPliku)
{
 ifstream plik (nazwaPliku.c_str());
 if (plik.good()){
     for (int i=0; i<N && !plik.eof(); i++){
        plik >> klasa[i].imie;
        plik >> klasa[i].rokUr;
        plik >> klasa [i].ocena;
        }
        plik.close();
 }  else{ cout << "Blad otwarcia pliku";}

}


void wyswietlKlase(Tuczen klasa[], int N){
    for (int i=0; i<N; i++){
        wyswietlUczen(klasa[i]);}
}

void zamienUczniow (Tuczen klasa[], int N){
int indeksNajwyzszy=0;
int indeksNajnizszy=0;
for (int i=1; i<N; i++){
    if (klasa[i].ocena>klasa[indeksNajwyzszy].ocena){
        indeksNajwyzszy=i;
    }
    if (klasa[i].ocena<klasa[indeksNajnizszy].ocena){
        indeksNajnizszy=i;
    }
}

swap (klasa[indeksNajwyzszy], klasa[indeksNajnizszy]);

}
void shift (Tuczen klasa[], int N){
for (int i=N-1; i>0; i--){
    swap (klasa[i], klasa[i-1]);

}
}
void najstarszy (Tuczen klasa [], int N){
int starszy=0;
int mlodszy=0;
for (int i=0; i>0; i++){
if (klasa[i].rokUr)>(klasa[i+1].rokUr){
starszy++;
}
else{
    mlodszy++;
}}


}




int main()
{
    const int N=3;
    Tuczen klasa[N];
    string nazwaPliku;
    cin >> nazwaPliku;
    wypelnijKlase(klasa, N, nazwaPliku);
    wyswietlKlase(klasa, N);
    zamienUczniow(klasa, N);
    wyswietlKlase (klasa, N);
    shift (klasa, N);
    wyswietlKlase(klasa, N);y
    najstarszy (klasa, N);


    return 0;
}

nie mam pojecia jak to zrobic, pomoze ktos??

0

Zamiana 0-1, 1-2, itd da Ci w efekcie "rotację" całej tablicy w lewo (czyli elementy przesuwają się o jedną pozycję, pierwszy element trafia na koniec)

idx: 0 1 2 3 4 5 6 7 8 9
val: A B C D E F G H I J

0-1

idx: 0 1 2 3 4 5 6 7 8 9
val: B A C D E F G H I J

1-2

idx: 0 1 2 3 4 5 6 7 8 9
val: B C A D E F G H I J

...

idx: 0 1 2 3 4 5 6 7 8 9
val: B C D E F G H I J A

Jeśli faktycznie taki efekt chcesz uzyskać, to algorytm:

  1. zapamiętaj tab[0] w zmiennej pomocniczej
  2. dla i = 0...size-2 wykonuj: tab[i] = tab[i+1]
  3. w tab[size-1] wstaw tmp
0

Ok dzieki, tak sprobuje :)

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