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

Algorytm "Flaga polska" sortowanie 01

Ostatnio zmodyfikowano 2018-06-06 15:29
Autor Wiadomość
Sakkage
Temat założony przez niniejszego użytkownika
» 2018-06-06 14:27:28
Ale jeśli zrobię typ zmienna to temp przechowa mi jeden rekord, a nie jak tutaj potrzebuje [nr indeksu] [ocena] dla każdej osoby (?)

edit. po próbie wyrzucenia struct mówi, że zmienna nie użyta i nie zadeklarowana (mimo dodania typu) + nie możliwa konwersja jeśli zmienię na inny typ
P-171418
jankowalski25
» 2018-06-06 14:30:55
Bo jeszcze jest słowo
struct
 na liście argumentów, które również trzeba stamtąd usunąć. To ma być tylko przy deklaracji struktury i nigdzie indziej.

tutaj potrzebuje [nr indeksu] [ocena] dla każdej osoby
W jednym kroku pętli wystarczy to zrobić dla jednej osoby.
P-171419
Sakkage
Temat założony przez niniejszego użytkownika
» 2018-06-06 14:56:57
C/C++
#include <iostream>
#include <algorithm>

using namespace std;

struct students {
    int nrind;
    float score;
};
void data( students people[], int n ) {
   
   
   
    cout << "Now please pass the index number and a score for everyone." << endl;
    cout << "Your index number must contain only 5 numbers" << endl;
    cout << "Possible scores are 2 , 3 , 3,5 , 4 , 4,5 , 5" << endl;
   
   
    for( int i = 0; i < n; i++ )
    {
        cout << "Index number" << endl;
        cin >> people[ i ].nrind;
        if( !cin )
        {
            cout << "Error. Pass the correct index number" << endl;
            cin.clear();
            break;
           
        }
        else
             cout << "Score" << endl;
       
        cin >> people[ i ].score;
        if( people[ i ].score != 2 && people[ i ].score != 3 && people[ i ].score != 3.5 && people[ i ].score != 4 && people[ i ].score != 4.5 && people[ i ].score != 5 )
        {
            cout << "You've passed a wrong score! Your score must be one of 2 , 3 , 3.5 , 4 , 4.5 , 5" << endl;
        }
       
       
       
       
       
       
    }
}


int sort01( int n, students people[] )
{
   
    int l = 0;
    int r = n - 1;
   
    while( l < r )
    {
        if( people[ l ].score == 2 )
        {
            l++;
        }
        else if( people[ r ].score > 2 )
        {
            r--;
        }
        else
       
             students temp = people[ l ];
       
        people[ l ] = people[ r ];
        people[ r ] = temp;
       
    }
    return 0;
   
}

int main()
{
   
    int n;
    char choice;
    cout << "Welcome to the sorting program!" << endl;
   
    cout << "Can we start? Press [Y] for yes or [N] for no." << endl;
    cin >> choice;
    if( choice == 'N' )
    {
        cout << "See you next time!" << endl;
        return 0;
    }
    else
    if( choice != 'Y' && choice != 'N' )
    {
        cout << "Try again" << endl;
        return 0;
    }
    if( choice == 'Y' )
    {
        cout << "Data for how many students do you want to pass?" << endl;
        cin >> n;
    }
    students people[ n ];
   
    data( people, n );
    sort01( n, people );
   
   
   
}

Jeśli dobrze rozumiem, to usunęłam struct z tych miejsc ale wynik bez zmian. Temp nie zadeklarowane i nie używana zmienna
P-171420
jankowalski25
» 2018-06-06 15:05:32
C/C++
else

     students temp = people[ l ];
A gdzie klamry? Przy instrukcjach takich jak
if
,
else
,
while
,
for
, wypadałoby wstawić klamry. Inaczej wykona się tylko jedna linijka, a następnie zmienna temp zostanie usunięta (ponieważ znajduje się w innym zasięgu, który tutaj niejawnie powstaje).
P-171421
Sakkage
Temat założony przez niniejszego użytkownika
» 2018-06-06 15:12:27
Dziękuję mój błąd już tyle razy to zmieniałam, że widzę coś czego nie ma.

Jednak dalej sypie błąd, że temp nie używane (chociaż odpala się program ale na niebiesko pozostaje informacja, że zmienna nie jest używana).

Nadal coś nie styka bo źle się sortuje ale może już jakoś to przerobię

Mogę jeszcze prosić Cię / Pana o sprawdzenie mi tego finalnie już czy ma algorytm odpowiednią złożoność? To będzie najsilniej oceniane w zadaniu i bez tego niezależnie od reszty kodu będzie ono niezaliczone.

złożoność A(n)=W(n)=n

C/C++
int sort01( int n, students people[] )
{
   
    int l = 0;
    int r = n - 1;
    for( int i = 0; i < n; i++ )
    {
       
        while( l < r )
        {
            if( people[ l ].score == 2 )
            {
                l++;
            }
            else if( people[ r ].score > 2 )
            {
                r--;
            }
            else
            {
                students temp = people[ l ];
                people[ l ] = people[ r ];
                people[ r ] = temp;
            }
           
        }
    }
    return 0;
   
}
P-171422
jankowalski25
» 2018-06-06 15:29:16
C/C++
for( int i = 0; i < n; i++ )
{
    //...
}
Dlaczego całość ma być wykonana n razy? I dlaczego zmienne l oraz r nie są odpowiednio przestawiane? Dla
i = 0
 dwójki znajdą się po lewej, reszta po prawej. I co dalej? Warunek
l < r
 będzie fałszywy, więc całość wykona się tylko raz, co jest błędem. Skoro masz już wynik dla dwójek, to zmień to tak, aby działało również dla reszty ocen. Czyli po zakończeniu pętli
while
 ustaw odpowiednio wartości l oraz r i w następnym przebiegu sprawdzaj kolejne oceny.

C/C++
int sort01( int n, students people[] )
{
    //...
    return 0;
}
Dlaczego zwracasz liczbę całkowitą, skoro to będzie zawsze zero i skoro to nigdy nie jest używane? W przypadku funkcji
main()
 jest to poprawne, ale wszędzie indziej można zwracać
void
 i nie używać
return
, gdy nie ma takiej potrzeby.
P-171423
1 « 2 »
Poprzednia strona Strona 2 z 2