Sortowanie danych wg różnych porządków tą samą funkcją

0

Witam mam problem mianowicie program spelnia swoje zadanie. Sortuje wszystko tak jak powinno ale magisterek czepia sie jak zwykle wszystkiego wiec musze zmodyfikowac zeby zaliczyc laborki.

Zamieszczam kod do ktorego doszedlem

 #include <iostream>
#include<iomanip>
using namespace std;
struct vote_result
    {
        char miasto[20];
        int status;
        int ilosc_glosow;
		float glosy_TB;
		float glosy_ZB;

    };
    
    
    
void czytania (int n, vote_result *t)
    {
        for (int i=0;i<n;i++)
        {
            cout << "\nPodaj nazwe miasta. " ;
            cin >> t[i].miasto;
            cout << "Podaj wartosc statusu miasta. " ;
            cin >> t[i].status;
            cout << "Podaj ilosc waznych glosow. " ;
            cin >> t[i].ilosc_glosow;
			cout << "Podaj ilosc glosow oddanych na partie Twoj Bajt: " ;
			cin >> t[i].glosy_TB;
			cout << "Podaj ilosc glosow oddanych na pratie Zwiazek Bitowy: " ;
			cin >> t[i].glosy_ZB;
        }
    }
void sort_GBKW(int n, vote_result *t)
{
   int i, j, k;
   for(i=0; i<n; i++) {
      k=i;
      for(j=i+1; j<n; j++) 
	  	if(((t[j].status)<(t[k].status))||(((t[j].status)==(t[k].status))&&((t[j].ilosc_glosow)<(t[k].ilosc_glosow)))) 	  
		  k=j;
      		swap(t[k], t[i]);
   }
}

void sort_TB(int n, vote_result *t)
{
	
	
	int k;
	
    for( int i = 0; i <n; i++ )
    {
        k = i;
        for( int j = i + 1; j < n; j++ )
        if( t[ j ].glosy_TB < t[ k ].glosy_TB )
             k = j;
        
        swap( t[ k ], t[ i ] );
    }
}void sort_ZB(int n, vote_result *t)
{
	
	int k;
	
    for( int i = 0; i <n; i++ )
    {
        k = i;
        for( int j = i + 1; j < n; j++ )
        if( t[ j ].glosy_TB < t[ k ].glosy_TB )
             k = j;
        
        swap( t[ k ], t[ i ] );
    }
}
void wydruk (int n, vote_result *t)
{
    for(int i=0;i<n;i++)
    {
        cout << "\nMiasto: " << t[i].miasto << "\n";
        cout << "Status: " << t[i].status << "\n";
        cout << "Wszystkie głosy: " << t[i].ilosc_glosow << "\n";
        t[i].glosy_TB=(t[i].glosy_TB/t[i].ilosc_glosow)*100;
		cout << "Glosy oddane na partie Twoj Bajt: " <<setprecision(2+1)<< t[i].glosy_TB << " %\n";
		t[i].glosy_ZB=(t[i].glosy_ZB/t[i].ilosc_glosow)*100;
		cout << "Glosy oddane na partie Zwiazek Bitowy: " <<setprecision(2+1)<< t[i].glosy_ZB << " %\n\n";
    }
}
    
main()
{
	 int n;

    cout << "Podaj n."<<endl;
    cin >> n;
	cout << "\nWartosci statusu miasta:\nMNPP: 1;\nM: 2;\nMW: 3;\nW: 4;\n";
	vote_result *t;
    t=new vote_result[n];
    czytania(n,t);
    sort_GBKW(n,t);
    sort_TB(n,t);
    sort_ZB(n,t);
    cout<<"Sortowanie wg GBKW: \n";
    wydruk(n,t);
    cout<<"Sortowanie wg TB \n";
    wydruk(n,t);
    cout<<"Sortowanie wg ZB \n";
    wydruk(n,t);
    
	return 0;
}

a wiec tak sort_GKBW, sort_TB, sort _ZB musze byc w jednek funkcji sortowania. Oraz mamy podawac status miasta w formie char/string a nie tak jak tutaj dalem ze 1,2,3,4. Podam jeszcze tresc zadania zeby bylo jasne.

System demokratyczny w Bajtocji opiera sie na dwóch partiach: „Twój
Bajt” i „Zwiazek Bitowy”. Mieszkancy głosuja w okregach jednomandatowych
(gminach) na członka jednej z dwóch partii albo nie uczestnicza w wyborach (oddanie
pustej kartki lub skreslenie dwóch kandydatów traktowane jest jako brak
uczestnictwa). Kazda gmina ma status miasta na prawach powiatu (MNPP),
gminy miejskiej (M), miejsko-wiejskiej (MW) lub wiejskiej (W). Główna Bajtocka
Komisja Wyborcza wymaga, aby wyniki były posortowane w nastepujacy sposób:
po pierwsze wyniki sa uporzadkowane wg status gminy w kolejnosci MNPP
– M – MW – W
wsród gmin o tym samym statusie wyniki maja byc uporzadkowane wg liczby
osób, które zagłosowały na jedna z dwóch partii (wg sumy oddanych głosów
waznych)
Napisz program, który umozliwia wykonania trzech operacji

  1. wypisywanie wyników zgodnie z wymogami GBKW
  2. wypisywanie wyników posortowanych malejaco wg wyników partii „Twój
    Bajt”
  3. wypisywanie wyników posortowanych malejaco wg wyników partii „Zwiazek
    Bitowy”.
0

ale w czym problem? Bo nie ma nic konkretnego.

0

jak stworzyc jedna funkcje sortowania zamiast tych trzech gkbw tb i zb ? glownie chodzi o to z przeksztalceniem potem wczytwyania z inta na string albo char to jakos dam rade

0

zb, db robi to samo. Moze chodzilo prowadzacemu o to zeby stworzyc jedna funkcje typu

sortuj(string tryb)

i uzywasz tylko jedna funkcje do sortowania ale z innym trybem.

to nie wynika jasno z tresci zadania. Nikt nie jest jasnowidzem zeby powiedziec o co dokladnie chodzi.

0

Lekcja na dziś: komparator.
Zauważ ze cała operacja sortowanie jest IDENTYCZNA i różni się tylko w kwestii stwierdzenia które dwa elementy są "większe". Wyciągnij więc logikę takiego sprawdzania "większości" poza funkcję sortującą i zrób z niej parametr wywołania.

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