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

Struktury

Ostatnio zmodyfikowano 2011-07-04 20:32
Autor Wiadomość
jaupl
Temat założony przez niniejszego użytkownika
Struktury
» 2011-07-04 12:20:52
Witam. W zasadzie nie wiem czy temat jest adekwatny ale nic innego nie mogłem wymyślić. W poniższym kodzie zastanawia mnie następujący błąd : Program prosi o podanie danych tylko z jednej tury zawodów i takie dane też wyświetla a założeniem było żeby tury były dwie. W tym celu napisałem warunek (wyszczególniony poniżej komentarzem) umieszczony w pętlach for który (jeśli jest spełniony ma zmienić zmienną t na jeden (czyli na drugą turę.)
C/C++
#include <string>
#include <iostream>
#include <conio.h>
using namespace std;

struct zawodnicy
{
    string imie;
    int czas;
    int wynik;
};

int main()
{
    int a; // czas, wynik;
    cout << "Podaj ilosc zawodnikow ktorzy brali udzial w zawodach:" << endl << endl;
    cin >> a;
    zawodnicy tablica[ a ][ 2 ];
    int t = 0;
    for( int z = 0; z < a; z++ )
    {
        if( t == 0 )
        {
            cout << "podaj imie zawodnika " <<( z + 1 ) << " tury " <<( t + 1 ) << " :" << endl;
            cin >> tablica[ z ][ t ].imie;
        }
        else
             tablica[ z ][ t ].imie = tablica[ 0 ][ t ].imie;
       
        cout << "podaj czas zawodnika " <<( z + 1 ) << " tury " <<( t + 1 ) << " :" << endl;
        cin >> tablica[ z ][ t ].czas;
        cout << "podaj wynik zawodnika " <<( z + 1 ) << " tury " <<( t + 1 ) << " :" << endl;
        cin >> tablica[ z ][ t ].wynik;
        if( z ==( a - 1 ) && t != 1 ) //jeśli to nie tura jeden (czyli druga) - wzmiankowany warunek
        {
            z = 0;
            t = 1;
        }
    }
    t = 0;
    for( int z = 0; z < a; z++ )
    {
        cout << tablica[ z ][ t ].imie << " " << tablica[ z ][ t ].czas << " " << tablica[ z ][ t ].wynik << endl;
        if( z ==( a - 1 ) && t != 1 )
        {
            z = 0;
            t = 1;
        }
    }
    return 0;
}
teraz zauważyłem kilka nie potrzebnych zmiennych. wykomentuje je tutaj a w kodzie usunę. //program przechodzi do drugiej tury. ale nie da się wprowadzić danych z 2 tury dla 1 zawodnika.
P-35284
DejaVu
» 2011-07-04 14:34:36
Program działa tak jak napisałeś. Umieść drugą pętlę jeżeli mają być kilka tur.
1. pętla wczytywania danych o użytkownikach
2. pętla wczytywania kolejnych tur * pętla wczytywania jednej tury zawodników
3. pętla wypisująca wyniki.
P-35293
jaupl
Temat założony przez niniejszego użytkownika
» 2011-07-04 18:07:19
Już poprawiłem, teraz mam jeszcze dwa pytania potrzebne do skończenia zadania. Tablice Struktur można przekazać do funkcji podobnie jak zwykłe tablice zmiennych ?? I czy przy sortowaniu tablicy struktur, tak żeby zawodnik o najniższym czasie był wyświetlany jako pierwszy, mogę zamienić elementy tej tablicy tak :
C/C++
int schowek;
int y = z + 1;
if( tablica[ z ][ t ].czas > tablica[ y ][ t ].czas )
{
    schowek = tablica[ z ][ t ];
    tablica[ z ][ t ] = tablica[ y ][ t ];
    tablica[ y ][ t ] = schowek;
}
Czy muszę zmieniać każdy element struktury osobno ??(.czas, .wynik, .imie)
chciał bym do tego użyć osobnej funkcji i sortowania bąbelkowego.
P-35338
DejaVu
» 2011-07-04 18:41:15
1. Tak.
2. Tak, ale w kodzie masz błąd - zmienna schowek powinna być typu 'zawodnicy', a nie typu 'int'.

/edit:
Możesz też zrobić prościej:
C/C++
std::swap( tablica[ z ][ t ], tablica[ y ][ t ] );
P-35339
murek
» 2011-07-04 18:46:52
zamiast schowka mozesz uzyc swap()

edit.

ohh nie odswiezylem ;]
P-35341
jaupl
Temat założony przez niniejszego użytkownika
» 2011-07-04 19:10:04
tablica w argumencie ma być typu zawodnicy ??
P-35343
jaupl
Temat założony przez niniejszego użytkownika
» 2011-07-04 20:32:49
No cóż, ostatecznie program wygląda tak :
C/C++
#include <string>
#include <iostream>
#include <conio.h>
using namespace std;

struct zawodnicy
{
    string imie;
    int czas;
    int wynik;
};
void sortowanie( zawodnicy tablica[][ 2 ], int ilosc_liczb, int t )
{
    zawodnicy schowek;
   
    for( int z = 0; z < ilosc_liczb; z++ )
    {
        for( int z = 0; z <( ilosc_liczb - 1 ); z++ )
        {
            int y = z + 1;
            if( tablica[ z ][ t ].czas > tablica[ y ][ t ].czas )
            {
                schowek = tablica[ z ][ t ];
                tablica[ z ][ t ] = tablica[ y ][ t ];
                tablica[ y ][ t ] = schowek;
            }
        }
    }
}
int main()
{
    int a;
    cout << "Podaj ilosc zawodnikow ktorzy brali udzial w zawodach:" << endl << endl;
    cin >> a;
    zawodnicy tablica[ a ][ 2 ];
   
    for( int z = 0; z < a; z++ )
    {
        for( int t = 0; t < 2; t++ )
        {
            if( t == 0 )
            {
                cout << "podaj imie zawodnika " <<( z + 1 ) << " :" << endl;
                cin >> tablica[ z ][ t ].imie;
            }
            if( t > 0 )
            {
                tablica[ z ][ t ].imie = tablica[ z ][ 0 ].imie;
            }
            cout << "podaj czas zawodnika " <<( z + 1 ) << " podczas tury " <<( t + 1 ) << " :" << endl;
            cin >> tablica[ z ][ t ].czas;
            cout << "podaj wynik zawodnika " <<( z + 1 ) << " podczas tury " <<( t + 1 ) << " :" << endl;
            cin >> tablica[ z ][ t ].wynik;
        }
    }
    sortowanie( tablica, a, 2 );
    for( int z = 0; z < a; z++ )
    {
        for( int t = 0; t < 2; t++ )
        {
            cout << " Tura " <<( t + 1 ) << " " << tablica[ z ][ t ].imie << " " << tablica[ z ][ t ].czas << " " << tablica[ z ][ t ].wynik << endl;
        }
    }
    return 0;
}
Działa. Moim zdaniem poprawnie. poczekam jeszcze na ewentualne uwagi i zamknę temat :) Dzięki za pomoc !! ;)) // Wróć ... znowu coś skopałem . za 1 razem jak sprawdzałem kod wpisałem wszystkie dane tak że program nie miał czego ustawiać ... a po ponownym sprawdzeniu doszedłem do wniosku że w kodzie jest błąd ...
P-35346
« 1 »
  Strona 1 z 1