Program z wykorzystaniem struktur i sortowania

0

Witam mam na zaliczenie laboratoria z algorytmow zrobic takie zadanie w c++.
System demokratyczny w Bajtocji opiera się na dwóch partiach: „Twój Bajt” i „Związek Bitowy”. Mieszkańcy głosują w okręgach jednomandatowych (gminach) na członka jednej z dwóch partii albo nie uczestniczą w wyborach (od- danie pustej kartki lub skreślenie dwóch kandydatów traktowane jest jako brak uczestnictwa). Każda 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 następujący sposób: po pierwsze wyniki są uporządkowane wg status gminy w kolejności MNPP – M – MW – W wśród gmin o tym samym statusie wyniki mają być uporządkowane wg liczby osób, które zagłosowały na jedną z dwóch partii (wg sumy oddanych głosów ważnych) Napisz program, który umożliwia wykonania trzech operacji

  1. wypisywanie wyników zgodnie z wymogami GBKW
  2. wypisywanie wyników posortowanych malejąco wg wyników partii „Twój Bajt”
  3. wypisywanie wyników posortowanych malejąco wg wyników partii „Związek Bitowy”

bardzo prosze o pomoc bo brak mi pomyslow albo sortuje statusy a miesza liczbe waznych glosow albo miesza wszystko...

0

Użyj struktury, vector<>a tych struktur oraz sort z <algorithm>

0
#include <iostream>
using namespace std;
struct vote_result
    {
        char miasto[20];
        int status;
        int ilosc_glosow;
		int glosy_TB;
		int 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(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].ilosc_glosow)<(t[k].ilosc_glosow))) 	  
		  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";
		//cout << "Glosy oddane na partie Twoj Bajt: " << t[i].vote_TB << "\n";
		//cout << "Glosy oddane na partie Zwiazek Bitowy: " << t[i].vote_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(n,t);
    wydruk(n,t);
	return 0;
} 

poprawcie mi blagam funkcje sort zeby sortowalo tak jak trzeba a dalej juz sobie poradze bo juz nie mam sily do tego....

0

if(((t[j].status)<(t[k].status))||(((t[j].status)==(t[k].status))&&((t[j].ilosc_glosow)<(t[k].ilosc_glosow))))
ale prościej przekazać funkcje i użyć if(cmp(t[j],t[k])) która będzie wyglądać następująco:

bool cmp(vote_result &a,vote_result &b)
  {
   int r=(a.status>b.status)-(a.status<b.status);
   return r?r<0:a.ilosc_glosow<b.ilosc_glosow;
  }

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