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

[C++] Problem z wywoływaniem funkcji

Ostatnio zmodyfikowano 2015-03-10 10:19
Autor Wiadomość
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:

C/C++
#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.
P-128055
pekfos
» 2015-03-09 20:52:58
Zmień typ zmiennej wybooor w funkcji wybor2() na int.
P-128057
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.
P-128067
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?
P-128070
« 1 »
  Strona 1 z 1