Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Symulacja rozgrywek ekstraklasy. Ustalenie terminarzu.

Ostatnio zmodyfikowano 2014-01-20 10:03
Autor Wiadomość
Katoneo
Temat założony przez niniejszego użytkownika
Symulacja rozgrywek ekstraklasy. Ustalenie terminarzu.
» 2014-01-19 18:16:59
Witam, jestem nowy na forum i potrzebuję pomocy. Otóż mam do zrobienia projekt w C (najlepiej by był w całości w C). Tematem projektu jest symulacja rozgrywek ekstraklasy piłkarskiej i już na samym początku pojawiają się problemy. Mianowicie, nie potrafię napisać kodu, który ustalał by terminarz rundy jesiennej (15 kolejek po 8 meczów każda). Oto mój kod:

C/C++
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
#define KOLEJKI 15
#define REWANZE 15

struct LIGA // Struktura zawierająca zespoły znajdujące się w lidze i ich jakość (value).
{
    string nazwa;
    int value;
};



int main()
{
    LIGA Druzyny[ 16 ] = // Wypełnienie struktury LIGA, tablicą drużyn.
    {
        { "Legia Warszawa", 5 },
        { "Gornik Zabrze", 4 },
        { "Wisla Krakow", 4 },
        { "Lech Poznan", 4 },
        { "Ruch Chorzow", 3 },
        { "Pogon Szczecin", 3 },
        { "Slask Wroclaw", 3 },
        { "Jagiellonia Bialystok", 2 },
        { "Korona Kielce", 2 },
        { "Lechia Gdansk", 2 },
        { "Zaglebie Lublin", 2 },
        { "Piast Gliwice", 2 },
        { "Cracovia", 1 },
        { "Zawisza Bydgoszcz", 1 },
        { "Podbeskidzie Bielsko Biala", 1 }, //26 znaków najdłuższa nazwa
        { "Widzew Lodz", 1 },
    };
    int j = 0;
    int i = 0;
    for( int n = 0; n < KOLEJKI; n++ )
    {
        printf( "\n\n" );
        for( int i = n; i < n + 16; i = i + 2 ) // pętla losująca pary
        {
            printf( "%26s\t %26s \n", Druzyny[ i % 16 ].nazwa.c_str(), Druzyny[( i + 1 ) % 16 ].nazwa.c_str() );
        }
    }
}

Chcę osiągnąć efekt przejścia o jeden bez powtórzeń. Np. Pierwsza drużyna gra z drugą, w następnej kolejce z 3, 2 z 4 itd. Próbowałem już wielu wersji z dzieleniem modulo, ale nigdy nie wychodzi tak jakbym chciał. Jest jakiś inny sposób?

Ewentualnie mam jeszcze drugą wersję programu, w której drużyny z lewej strony grają z drużynami z prawej strony, ale to tylko połowa rundy i nie wiem jak sprawić by potem drużyny z lewej grały z lewymi, a z prawej z prawymi.

C/C++
for( int n = 0; n < 8; n++ )
{
    printf( "\n\n" );
    for( int i = 0; i < 8; i++ ) // pętla losująca pary
    {
        printf( "%26s\t %26s \n", Druzyny[ i ].nazwa.c_str(), Druzyny[( i + n ) % 8 + 8 ].nazwa.c_str() );
    }
}

Będę wdzięczny za wszelką pomoc
P-102554
Wiesiek
» 2014-01-20 10:03:45
Kolejki rozgrywek należy umieścić w tablicy Terminarz[16][16]. Do komórek tablicy poza przekątną będziesz wstawiał numery meczów z kolejnych kolejek: pierwsza kolejka, to mecze o numerach od 0 do 7, druga - od 8 do 15,... Liczba Terminarz[w][k]==m oznacza, że mecz o numerze m będzie rozgrywany przez drużyny o numerach w oraz k.

Wypełniasz tablicę liczbami -1, a potem losujesz ustawienia liczb od 0 do 15*8-1 według zasad:
- znajdujesz poza przekątną komórkę z Terminarz[w][k] z wartością -1 i taką, że w całym wierszu w i całej kolumnie k nie ma wstawionego numeru meczu z aktualnie uzupełnianej kolejki
- wstawiasz numer kolejnego meczu w dwóch komórkach: Terminarz[w][k] oraz Terminarz[k][w].

Ta sama informacja będzie w tablicy poniżej oraz powyżej przekątnej - to po to, aby łatwiej było pisać pętle. Można oczywiście wszystko wpisać bez powtórzeń uzupełniając tylko tablicę poniżej przekątnej
P-102593
« 1 »
  Strona 1 z 1