Bulbapok Temat założony przez niniejszego użytkownika |
[C++] Problem z wywoływaniem funkcji » 2015-03-09 20:23:44 Witam, mam pewien problem w C++ z wywoływaniem funkcji. Proszę nie bić i nie krzyczeć, jestem początkujący, większość programu jest jeszcze nie zrobiona. Podaję kod, problem opisałem pod nim: #include <iostream> #include <windows.h> #include <cstdlib> #include <ctime> #include <conio.h> #include <cmath> #include <iomanip>
using namespace std;
void we( int & a ) { do { cout << "Wprowadz ilosc liczb na ilu chcesz pracowac" << endl; cin >> a; if( a < 1 || a > 100 ) cout << "Bledna liczba, wprowadz liczbe z przedzialu od 1 do 100" << endl; } while( a < 1 || a > 100 ); }
void wyborzklawiatury( int xxx[], int a ) { cout << "Wprowadz " << a << " liczb" << endl; for( int i = 0; i < a; i++ ) { cin >> xxx[ i ]; cout << endl; } system( "cls" ); }
void wyborlosowy( int xxx[], int a ) { srand( time( NULL ) ); for( int i = 0; i < a; i++ ) { xxx[ i ] = a + rand() % a; } system( "cls" ); }
void wybor( int xxx[], int a ) { char wyboor; cout << "Wybierz sposob wprowadzania liczb" << endl; cout << "1. Wprowadzanie z klawiatury" << endl; cout << "2. Wprowadzanie losowe" << endl; cin >> wyboor; switch( wyboor ) { case '1': { wyborzklawiatury( xxx, a ); break; } case '2': { wyborlosowy( xxx, a ); break; } } }
void sortow( int xxx[], int a ) { int sorto; for( int j = 1; j < a; j++ ) { for( int i = 0; i < a - j; i++ ) { if( xxx[ i ] > xxx[ i + 1 ] ) { sorto = xxx[ i ]; xxx[ i ] = xxx[ i + 1 ]; xxx[ i + 1 ] = sorto; } } } cout << sorto << endl; }
void sortzlid( int xxx[], int a ) { }
void srednia( int xxx[], int a ) { float wynikost; float wynik = 0; for( int i = 0; i <= a - 1; i++ ) { wynik += xxx[ a ]; } wynikost = wynik / a; cout << "Srednia elementow tablicy to: " << wynikost << endl; }
void sredniaprawidlowa( int xxx[], int a ) { int srednia; int i; int suma = 0; cout << "Tablica: "; for( i = 0; i < a; i++ ) { cout << xxx[ a ] << ","; } cout << "\n" << endl; cout << "Suma elementow tablicy: "; for( i = 0; i < a; i++ ) { suma += xxx[ a ]; } cout << suma << endl; cout << endl; float reszta; reszta = suma % a; srednia = suma / a; cout << "Srednia elementow tablicy to: " << srednia << "," << reszta << endl; cout << endl; system( "PAUSE" ); }
void iloscliczb( int xxx[], int a ) { }
void elemmaksimin( int xxx[], int a ) { }
void rozbtab( int xxx[], int a ) { }
void laczenietab( int xxx[], int a ) { }
void dopisywanie( int xxx[], int a ) { }
void usuwanie( int xxx[], int a ) { }
void poszukiwanie( int xxx[], int a ) { }
void wybor2( int xxx[], int a ) { char wybooor; cout << "MENU" << endl; cout << "1. Sortowanie rosnace" << endl; cout << "2. Sortowanie z liderem" << endl; cout << "3. Srednia z elementow tablicy" << endl; cout << "4. Ilosc liczb dodatnich, ujemnych i rownych 0" << endl; cout << "5. Element maksymalny i minimalny" << endl; cout << "6. Rozbijanie tablicy na dwie tablice" << endl; cout << "7. Laczenie dwoch talblic w jedna" << endl; cout << "8. Dopisywanie elementu do tablicy" << endl; cout << "9. Usuwanie elementu z tablicy" << endl; cout << "10. Poszukiwanie wskazanego elementu w tablicy" << endl; cin >> wybooor; switch( wybooor ) { case 1: { sortow( xxx, a ); cout << "1. Sortowanie rosnace" << endl; break; } case 2: { sortzlid( xxx, a ); cout << "3. Sortowanie z liderem" << endl; break; } case 3: { srednia( xxx, a ); cout << "4. Srednia z elementow tablicy" << endl; break; } case 4: { iloscliczb( xxx, a ); cout << "5. Ilosc liczb dodatnich, ujemnych i rownych 0" << endl; break; } case 5: { elemmaksimin( xxx, a ); cout << "6. Element maksymalny i minimalny" << endl; break; } case 6: { rozbtab( xxx, a ); cout << "7. Rozbijanie tablicy na dwie tablice" << endl; break; } case 7: { laczenietab( xxx, a ); cout << "8. Laczenie dwoch talblic w jedna" << endl; break; } case 8: { dopisywanie( xxx, a ); cout << "9. Dopisywanie elementu do tablicy" << endl; break; } case 9: { usuwanie( xxx, a ); cout << "10. Usuwanie elementu z tablicy" << endl; break; } case 10: { poszukiwanie( xxx, a ); cout << "11. Poszukiwanie wskazanego elementu w tablicy" << endl; break; } } }
void wy( int xxx[], int a ) { cout << "TABLICA" << endl; for( int i = 0; i < a; i++ ) { cout << xxx[ i ] << endl; } }
int main() { int a, xxx[ 100 ]; we( a ); wybor( xxx, a ); wybor2( xxx, a ); wy( xxx, a ); return 0; }
Mój problem polega na tym, że powiedzmy chcę użyć pierwszego case w funkcji wybor2, czyli sortowania. No i wpisuję jedynkę a program wywołuje od razu funkcję wyjściową (wy), podając tylko elementy tablicy a nie sortując je. Gdy próbuję wywołać w funkcji main funkcję odpowiadającą za sortowanie, wtedy obojętnie jakiego case'a bym nie użył, w każdym następuje sortowanie elementów tablicy. Nie mam już pojęcia co zrobić, by po wpisaniu jedynki program wywoływał odpowiednią funkcję, dlatego bardzo proszę o pomoc, byłbym wdzięczny. |
|
pekfos |
» 2015-03-09 20:52:58 Zmień typ zmiennej wybooor w funkcji wybor2() na int. |
|
Fireho |
» 2015-03-10 09:33:20 A żeby lepiej wyjaśnić autorowi o co chodzi, nadchodzę: char to jest pojedyńczy znak, nie liczba. Tak naprawdę cyfra 0 jest w nim zapisana jako 48(są to kody ASCII), 5 jako 53, 9 jako 57 i pomiędzy nimi tak samo. Rozwiązania są takie: a) w case 'ach daj prawdziwe kody - proste, wystarczy do każdego dodać 48, przykłady: 0 - 48 , 1 - 49 , 2 - 50 b) w case 'ach zamiast liczb daj znaki - jeszcze lepiej, przykłady: 0 - '0' , 1 - '1' , 2 - '2' Natomiast rozwiązanie pekfos'a nie zadziała, bo std::cin.get() czyta tylko jeden znak. |
|
pekfos |
» 2015-03-10 10:19:07 Natomiast rozwiązanie pekfos'a nie zadziała, bo std::cin.get() czyta tylko jeden znak. |
A gdzie to wywołanie? |
|
« 1 » |