Borowicz Temat założony przez niniejszego użytkownika |
[C++] Przekazywanie tablic i wartości między procedurami void » 2014-03-26 10:28:55 Witam, mam napisać program "Dziennik nauczyciela" który obejmuje 10 pozycji. Musi on zawierać 3 przykładowe rekordy, które już zawarłem, a także możliwość dodawania, usuwania, modyfikowania i wyświetlania całej listy. Na razie chciałbym poprosić o pomoc w wyświtlaniu listy, dodawaniu nowych elementów i wyświetlaniu tak zmodyfikowanej listy. Program nie chce mi się kompilować ponieważ niektóre zmienne są zawarte tylko w konkretnych funkcjach i nie wiem jak przekazywać je i ich wartości między funkcjami. Mam problem z lista_studentow i liczba_wpisow. Po dodatniu wpisu do dziennika powinien być on też wyświtlany. A może lepiej zrobić to w 1 funkcji? Tylko jak wtedy zapewnić wybór działań użytkownikowi? Oto mój kod: #include <iostream> #include <cstdlib> using namespace std;
void przykladowi_studenci(); void dodawanie(); void menu();
struct Student { int nr_indeksu; float ocena; };
int main() { menu(); }
void menu() { int nr_zad; int przelaczanie = 0; while( przelaczanie == 0 ) { cout << "Wybierz zadanie:" << endl; cout << "dodawanie studenta - 1" << endl; cout << "usuwanie studenta - 2" << endl; cout << "modyfikacja studenta - 3" << endl; cout << "wyswietlanie listy studetow - 4" << endl; cout << "koniec programu - 4" << endl; cin >> nr_zad; switch( nr_zad ) { case 1: { przykladowi_studenci(); } break; case 2: { dodawanie(); } break; default: cout << "Wybierz liczbe od 1 do 4" << endl; break; } } }
int liczba_wpisow = 3;
void przykladowi_studenci() { struct Student { int nr_indeksu; float ocena; }; Student lista_studentow[ 10 ]; lista_studentow[ 0 ].nr_indeksu = 191414; lista_studentow[ 0 ].ocena = 3.5; lista_studentow[ 1 ].nr_indeksu = 191415; lista_studentow[ 1 ].ocena = 4.0; lista_studentow[ 2 ].nr_indeksu = 191416; lista_studentow[ 2 ].ocena = 4.5; cout << "NAZWISKO" << " " << "NR INDEKSU" << " " << "OCENA" << endl; for( int i = 0; i < liczba_wpisow; i++ ) { cout << lista_studentow[ i ].nr_indeksu << " | " << " | " << lista_studentow[ i ].ocena << " | " << i << endl; } }
void dodawanie() { liczba_wpisow++; cout << "Podaj indeks: "; cin >> lista_studentow.nr_indeksu[ liczba_wpisow ] >> endl; cout << "Podaj ocene: "; cin >> lista_studentow.ocena[ liczba_wpisow ] >> endl; if( lista_studentow.ocena[ liczba_wpisow ] != 2.0 or lista_studentow.ocena[ liczba_wpisow ] != 2.5 or lista_studentow.ocena[ liczba_wpisow ] != 3.0 or lista_studentow.ocena[ liczba_wpisow ] != 3.5 or lista_studentow.ocena[ liczba_wpisow ] != 4.0 or lista_studentow.ocena[ liczba_wpisow ] != 4.5 or lista_studentow.ocena[ liczba_wpisow ] != 5.0 ) { cout << "Format oceny niepoprawny. Wpisz 1 z nastepujacych liczb: 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0: "; cin >> Student.ocena[ liczba_wpisow ] >> endl; } }
Kompilator: TDM-GCC 4.8.1 64-bit Release Wykonywanie g++.exe... g++.exe "F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp" -o "F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.exe" -g3 -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -g3 F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp: In function 'void dodawanie()': F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp:90:7: error: 'lista_studentow' was not declared in this scope cin>>lista_studentow.nr_indeksu[liczba_wpisow]>>endl; ^
F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp:104:15: error: expected primary-expression before '.' token cin>>Student.ocena[liczba_wpisow]>>endl; ^
Compilation failed after 1.31 seconds with errors
. Mam nadzieję, że teraz w porządku? Przepraszam za zamieszanie. |
|
akwes |
» 2014-03-26 12:50:20 Przeczytaj o formatowaniu wiadomości w ramce pod Twoim postem oraz załącz błędy kompilatora :) |
|
michal11 |
» 2014-03-26 17:14:32 |
|
Borowicz Temat założony przez niniejszego użytkownika |
» 2014-03-26 18:35:34 Co masz na myśli, mówiąc, że traktuję ocenę ze studenta jako tablicę? Indeksy są po to, żeby iterować przy wyświetlaniu. A zapis cin >> Student.ocena[ liczba_wpisow ] >> endl;
został zmieniony na cin >> lista_studentow.ocena[ liczba_wpisow ] >> endl;
Przy jego pomocy chcę wprowadzać nowe wpisy do dziennika. Cała trudność dla mnie polega na tym, że nie wiem jak wyświetlić te 3 przykładowe rekordy, dodawać wpisy i ponownie wyświetlać. Najlepiej jakbym mógł przełączać między wyświetlaniem, a dokonywaniem nowych wpisów. Poprawiony program #include <iostream> #include <cstdlib> using namespace std;
void przykladowi_studenci(); void dodawanie(); void menu();
struct Student { int nr_indeksu; float ocena; };
int main() { menu(); }
void menu() { int nr_zad; int przelaczanie = 0; while( przelaczanie == 0 ) { cout << "Wybierz zadanie:" << endl; cout << "dodawanie studenta - 1" << endl; cout << "usuwanie studenta - 2" << endl; cout << "modyfikacja studenta - 3" << endl; cout << "wyswietlanie listy studetow - 4" << endl; cout << "koniec programu - 4" << endl; cin >> nr_zad; switch( nr_zad ) { case 1: { przykladowi_studenci(); } break; case 2: { dodawanie(); } break; default: cout << "Wybierz liczbe od 1 do 4" << endl; break; } } }
int liczba_wpisow = 3;
void przykladowi_studenci() { struct Student { int nr_indeksu; float ocena; }; Student lista_studentow[ 10 ]; lista_studentow[ 0 ].nr_indeksu = 191414; lista_studentow[ 0 ].ocena = 3.5; lista_studentow[ 1 ].nr_indeksu = 191415; lista_studentow[ 1 ].ocena = 4.0; lista_studentow[ 2 ].nr_indeksu = 191416; lista_studentow[ 2 ].ocena = 4.5; cout << "NAZWISKO" << " " << "NR INDEKSU" << " " << "OCENA" << endl; for( int i = 0; i < liczba_wpisow; i++ ) { cout << lista_studentow[ i ].nr_indeksu << " | " << " | " << lista_studentow[ i ].ocena << " | " << i << endl; } }
void dodawanie() { liczba_wpisow++; cout << "Podaj indeks: "; cin >> lista_studentow.nr_indeksu[ liczba_wpisow ] >> endl; cout << "Podaj ocene: "; cin >> lista_studentow.ocena[ liczba_wpisow ] >> endl; if( lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 2.0 or lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 2.5 or lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 3.0 or lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 3.5 or lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 4.0 or lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 4.5 or lista_studentow.ocena[ liczba_wpisow ] % 0.5 != 5.0 ) { cout << "Format oceny niepoprawny. Wpisz 1 z nastepujacych liczb: 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0: "; cin >> Student.ocena[ liczba_wpisow ] >> endl; } }
Nowe logi Kompilator: TDM-GCC 4.8.1 64-bit Release Wykonywanie g++.exe... g++.exe "F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp" -o "F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.exe" -g3 -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -g3 F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp: In function 'void dodawanie()': F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp:90:7: error: 'lista_studentow' was not declared in this scope cin>>lista_studentow.nr_indeksu[liczba_wpisow]>>endl; ^
F:\Semestr 1 - informatyka\Algorytmy i struktury danych\lab3.cpp:104:15: error: expected primary-expression before '.' token cin>>Student.ocena[liczba_wpisow]>>endl; ^
Compilation failed after 0.41 seconds with errors
Pozdrawiam |
|
Monika90 |
» 2014-03-26 18:41:23 In function 'void dodawanie()': 'lista_studentow' was not declared in this scope
Czego tu nie rozumiesz? cin >> Student.ocena[ liczba_wpisow ] >> endl; | Student to typ a nie obiekt, a ocena to nie tablica. operacja cin >> endl nie ma sensu. |
|
Borowicz Temat założony przez niniejszego użytkownika |
» 2014-03-26 19:02:46 Rozumiem, że powinienem zadeklarować lista_studentów w void dodawanie, ale ja bym chciał żeby studenci byli dodawani do listy 3 zadeklarowanych domyślnie studentów. I nie wiem jak to zrobić. A operacja cin > endlo której mówiła Monika90 została już poprawiona. #include <iostream> #include <cstdlib> using namespace std;
void przykladowi_studenci(); void dodawanie(); void menu();
struct Student { int nr_indeksu; float ocena; };
int main() { menu(); }
void menu() { int nr_zad; int przelaczanie = 0; while( przelaczanie == 0 ) { cout << "Wybierz zadanie:" << endl; cout << "dodawanie studenta - 1" << endl; cout << "usuwanie studenta - 2" << endl; cout << "modyfikacja studenta - 3" << endl; cout << "wyswietlanie listy studetow - 4" << endl; cout << "koniec programu - 4" << endl; cin >> nr_zad; switch( nr_zad ) { case 1: { przykladowi_studenci(); } break; case 2: { dodawanie(); } break; default: cout << "Wybierz liczbe od 1 do 4" << endl; break; } } }
int liczba_wpisow = 3;
void przykladowi_studenci() { struct Student { int nr_indeksu; float ocena; }; Student lista_studentow[ 10 ]; lista_studentow[ 0 ].nr_indeksu = 191414; lista_studentow[ 0 ].ocena = 3.5; lista_studentow[ 1 ].nr_indeksu = 191415; lista_studentow[ 1 ].ocena = 4.0; lista_studentow[ 2 ].nr_indeksu = 191416; lista_studentow[ 2 ].ocena = 4.5; cout << "NAZWISKO" << " " << "NR INDEKSU" << " " << "OCENA" << endl; for( int i = 0; i < liczba_wpisow; i++ ) { cout << lista_studentow[ i ].nr_indeksu << " | " << " | " << lista_studentow[ i ].ocena << " | " << i << endl; } }
void dodawanie() { Student lista_studentow[ 10 ]; liczba_wpisow++; cout << "Podaj indeks: "; cin >> lista_studentow.nr_indeksu[ liczba_wpisow ] >> endl; cout << "Podaj ocene: "; cin >> lista_studentow.ocena[ liczba_wpisow >> endl; if( lista_studentow.ocena[ liczba_wpisow ] != 2.0 or lista_studentow.ocena[ liczba_wpisow ] != 2.5 or lista_studentow.ocena[ liczba_wpisow ] != 3.0 or lista_studentow.ocena[ liczba_wpisow ] != 3.5 or lista_studentow.ocena[ liczba_wpisow ] != 4.0 or lista_studentow.ocena[ liczba_wpisow ] != 4.5 or lista_studentow.ocena[ liczba_wpisow ] != 5.0 ) { cout << "Format oceny niepoprawny. Wpisz 1 z nastepujacych liczb: 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0: "; cin >> lista_studentow.ocena[ liczba_wpisow ] >> endl; } }
Kompilator: TDM-GCC 4.8.1 64-bit Release Wykonywanie g++.exe... g++.exe "F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp" -o "F:\Semestr II - informatyka\Podstawy programowania\lab3.exe" -g3 -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include" -I"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.8.1\include\c++" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\lib" -L"C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\lib" -static-libgcc -g3 F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp: In function 'void dodawanie()': F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:90:23: error: request for member 'nr_indeksu' in 'lista_studentow', which is of non-class type 'Student [10]' cin>>lista_studentow.nr_indeksu[liczba_wpisow]>>endl; ^
F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:92:23: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' cin>>lista_studentow.ocena[liczba_wpisow>>endl; ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:92:44: error: invalid operands of types 'int' and '<unresolved overloaded function type>' to binary 'operator>>' cin>>lista_studentow.ocena[liczba_wpisow>>endl; ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:92:48: error: expected ']' before ';' token cin>>lista_studentow.ocena[liczba_wpisow>>endl; ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:94:20: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow] != 2.0 or ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:95:19: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow] != 2.5 or ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:96:19: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow] != 3.0 or ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:97:19: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow] != 3.5 or ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:98:19: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow] != 4.0 or ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:99:19: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow] != 4.5 or ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:100:19: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' lista_studentow.ocena[liczba_wpisow]!= 5.0 ^ F:\Semestr II - informatyka\Podstawy programowania\lab3.cpp:104:24: error: request for member 'ocena' in 'lista_studentow', which is of non-class type 'Student [10]' cin>>lista_studentow.ocena[liczba_wpisow]>>endl; ^
Compilation failed after 0.53 seconds with errors
Próbowałem zamienić lista_studentow.ocena[ liczba_wpisow ]
na lista_studentow[ liczba_wpisow ].ocena
ale wyskakuje jeszcze więcej błędów. |
|
OczkoSX |
» 2014-03-26 19:07:06 Po co dwa razy tworzysz strukture Student? W case nei dajemy klamer. zamiast while(przelaczanie == 0) mozesz zrobić while(1) albo while(true). Eh, poczytaj lepiej o strukturach/klasach. robisz lista_studentow.ocena[], co jest nie poprawne. Powinno byc lista_studentow[].ocena. Nie pamiętam dokładnie twoich nazw ale coś w tym stylu |
|
Borowicz Temat założony przez niniejszego użytkownika |
» 2014-03-26 19:13:43 Próbowałem zamienić na lista_studentów[].ocena ale jest jeszcze więcej błędów |
|
« 1 » 2 |