Witam, mam do wykonania prosta tabele ligowa dla 8 drużyn (ustawiłem póki co rozmiar tablicy struktur na 3 żeby łatwiej się testowało działania poszczególnych funkcji bez zbędnego wpisywania dużej ilości danych). Chodzi o posortowanie tabeli względem punktów, jeżeli równe punkty to po ilości strzelonych, jeśli to i to równe po ilości straconych, jeżeli wszystkie 3 warunki są równe to nie zostaje tak jak jest. Póki co nazwę drużyny traktuję jako int bo miałem drobne problemy z wypisaniem tablicy znaków ale doczytałem o wskaźnikach i alokacji pamięci i myślę że to łatwo rozwiążę. Problemem jest bubblesort po kilku warunkach. Jeżeli sortuję tylko po punktach działa algorytm bez zarzutu ale jeżeli chcę dodać kolejne warunki sortowania to nic się nie dzieje w sortowaniu. Byłbym wdzięczny za uwagi co do całego kodu a szczególnie za jakąś wskazówkę gdzie popełniam błąd w rozumowaniu przy sortowaniu. Z góry dziękuję za komentarze
#include <stdio.h>
#include <stdlib.h>
#include<ctype.h>
typedef struct {
int* nazwa_druzyny;
int* punkty;
int* strzelone;
int* stracone;
} struktura;
int pobierz() {
int* nazwa;
printf("podaj nazwe druzyny:\n");
scanf_s("%d", &nazwa);
return nazwa;
}
int pobierz_punkty() {
int* liczba;
printf("Podaj liczbe zdobytych punktow\n");
scanf_s("%d", &liczba);
return liczba;
}
int pobierz_strzelone() {
int* liczba;
printf("Podaj liczbe zdobtych goli \n");
scanf_s("%d", &liczba);
return liczba;
}
int pobierz_stracone() {
int* liczba;
printf("Podaj liczbe straconych goli \n");
scanf_s("%d", &liczba);
return liczba;
}
int wypisz_naglowek() {
printf("Nazwa druzyny \t punkty \t strzelone \t stracone \n");
}
int wypisz(int* wynik) {
printf("%d \t \t ", *wynik);
}
char wypisznazwe(char* wynik[10]) {
printf("%s \t \t ", wynik);
}
int main() {
struktura druzyna[3];
for (int i = 0; i < 3; i++) {
druzyna[i].nazwa_druzyny = pobierz();
druzyna[i].punkty = pobierz_punkty();
druzyna[i].strzelone = pobierz_strzelone();
druzyna[i].stracone = pobierz_stracone();
}
wypisz_naglowek();
for (int i = 0; i < 3; i++) {
wypisz(&druzyna[i].nazwa_druzyny);
wypisz(&druzyna[i].punkty);
wypisz(&druzyna[i].strzelone);
wypisz(&druzyna[i].stracone);
printf("\n");
}
int tmp1=0;
int tmp2 = 0;
int tmp3 = 0;
int tmp4 = 0;
// bubblesort po punktach
for ( int i=0; i<3; i++){
for (int j = 0; j < 3 - i - 1; j++) {
if (druzyna[j].punkty <druzyna[j + 1].punkty)
{
tmp1=druzyna[j].nazwa_druzyny;
druzyna[j].nazwa_druzyny=druzyna[j + 1].nazwa_druzyny;
druzyna[j + 1].nazwa_druzyny=tmp1;
tmp2 = druzyna[j].punkty;
druzyna[j].punkty = druzyna[j + 1].punkty;
druzyna[j + 1].punkty=tmp2;
tmp3 = druzyna[j].strzelone;
druzyna[j].strzelone = druzyna[j + 1].strzelone;
druzyna[j + 1].strzelone = tmp3;
tmp4 = druzyna[j].strzelone;
druzyna[j].strzelone = druzyna[j + 1].strzelone;
druzyna[j + 1].strzelone = tmp4;
}
else if (druzyna[j].punkty == druzyna[j + 1].punkty && druzyna[j].strzelone < druzyna[j + 1].strzelone)
{
tmp1 = druzyna[j].nazwa_druzyny;
druzyna[j].nazwa_druzyny = druzyna[j + 1].nazwa_druzyny;
druzyna[j + 1].nazwa_druzyny = tmp1;
tmp2 = druzyna[j].punkty;
druzyna[j].punkty = druzyna[j + 1].punkty;
druzyna[j + 1].punkty = tmp2;
tmp3 = druzyna[j].strzelone;
druzyna[j].strzelone = druzyna[j + 1].strzelone;
druzyna[j + 1].strzelone = tmp3;
tmp4 = druzyna[j].strzelone;
druzyna[j].strzelone = druzyna[j + 1].strzelone;
druzyna[j + 1].strzelone = tmp4;
}
else if (druzyna[j].punkty == druzyna[j + 1].punkty && druzyna[j].strzelone < druzyna[j + 1].strzelone && druzyna[j].stracone>druzyna[j + 1].stracone)
{
tmp1 = druzyna[j].nazwa_druzyny;
druzyna[j].nazwa_druzyny = druzyna[j + 1].nazwa_druzyny;
druzyna[j + 1].nazwa_druzyny = tmp1;
tmp2 = druzyna[j].punkty;
druzyna[j].punkty = druzyna[j + 1].punkty;
druzyna[j + 1].punkty = tmp2;
tmp3 = druzyna[j].strzelone;
druzyna[j].strzelone = druzyna[j + 1].strzelone;
druzyna[j + 1].strzelone = tmp3;
tmp4 = druzyna[j].strzelone;
druzyna[j].strzelone = druzyna[j + 1].strzelone;
druzyna[j + 1].strzelone = tmp4;
}
}
}
printf("Po sortowaniu wyglada to tak \n");
printf("\n");
wypisz_naglowek();
for (int i = 0; i < 3; i++) {
wypisz(&druzyna[i].nazwa_druzyny);
wypisz(&druzyna[i].punkty);
wypisz(&druzyna[i].strzelone);
wypisz(&druzyna[i].stracone);
printf("\n");
}
return 0;
}