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 |
|
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. |
|
Sakkage Temat założony przez niniejszego użytkownika |
» 2018-06-06 14:56:57 #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 |
|
jankowalski25 |
» 2018-06-06 15:05:32 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). |
|
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 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; }
|
|
jankowalski25 |
» 2018-06-06 15:29:16 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. 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. |
|
1 « 2 » |