[C++] zamiana liter w array
Ostatnio zmodyfikowano 2012-11-12 19:18
CoolPanda Temat założony przez niniejszego użytkownika |
[C++] zamiana liter w array » 2012-11-11 17:58:48 Witam, Bawie sie takim programem ktory zamienia literki wedlug liczby ktora wprawdzam.. aczkolwiek jesli wprowadze, powiedzmy 100, czasami zamieni sie 100 a czasami nie... Domyslam sie ze to ma cos doczynienia z rand(), nie wiem jak to poprawic aby liczba zamienionych liter rownala sie DOKLADNIE tej co zostala wprowazdona. Jakies wskazowki?? #include<iostream> #include<cstdlib> #include<ctime> using namespace std;
const int ARRAY_MAX = 100; const char ABC[] = { 'A', 'B', 'C' };
char wybierzLiterke( const char ABC[], int size ) { char losowa; for( int i = 0; i < size; i++ ) { int randChar = rand() % 3; losowa = ABC[ randChar ]; } return losowa; }
void pokarz( char wypelniacz[], int size ) { for( int i = 0; i < size; i++ ) { cout << wypelniacz[ i ]; } }
int wymiana( char a[], int size ) { char W = 'w'; char X = 'x'; char Y = 'y'; char randomChar; for( int i = 0; i < size; i++ ) { i = rand() % size; randomChar = a[ i ]; if( a[ i ] == 'A' ) { a[ i ] = W; return a[ i ]; } if( a[ i ] == 'B' ) { a[ i ] = X; return a[ i ]; } if( a[ i ] == 'C' ) { a[ i ] = Y; return a[ i ]; } } }
int main() { srand( time( NULL ) ); int n; int m; int wypelniacz; char losowane[ ARRAY_MAX ]; do { cout << "Liczba losowanych liter(1 - 100): "; cin >> wypelniacz; if( wypelniacz >= 1 && wypelniacz <= 100 ) { for( int i = 0; i < wypelniacz; i++ ) { n = wybierzLiterke( ABC, 3 ); losowane[ i ] = n; } } else { cout << "Liczba musi byc pomiedzy 1 a 100.\n"; cout << "Jeszcze raz..." << endl << endl; } } while(( wypelniacz <= 0 ) ||( wypelniacz > 100 ) ); pokarz( losowane, wypelniacz ); cout << endl; int wymieniacz; do { cout << "Ile liter chcesz wymienic(0 - " << wypelniacz << ")?: "; cin >> wymieniacz; cout << "Porownanie\n"; pokarz( losowane, wypelniacz ); cout << endl; if( wymieniacz >= 0 && wymieniacz <= wypelniacz ) for( int j = 0; j < wymieniacz; j++ ) { m = wymiana( losowane, wypelniacz ); } } while(( wymieniacz < 0 || wymieniacz > wypelniacz ) ); pokarz( losowane, wypelniacz ); cout << endl; return 0; }
|
|
CoolPanda Temat założony przez niniejszego użytkownika |
» 2012-11-11 20:47:52 Nikt nie ma wskazowek jak ten kod poprawic? |
|
DejaVu |
» 2012-11-11 20:55:38 W czy wydaje Ci się, że ktoś będzie siedział i czytał Twój cały długi kod? Przeanalizuj go samodzielnie, oceń które fragmenty kodu działają poprawnie, a które budzą wątpliwości i zastanów się dlaczego. Jak już nie będziesz wiedział 'dlaczego' dany fragment kodu nie działa to wówczas przychodź z pytaniem. Wiesz ile dziennie tematów się pojawia 'dlaczego to nie działa'? Gdybyśmy tak każdy kod przeglądali to nic innego byśmy nie robili tylko usuwali bugi z programów osób trzecich. |
|
crash |
» 2012-11-12 19:18:29 Kilka rzeczy, które mi w kodzie nie pasują: const char ABC[] = { 'A', 'B', 'C' };
char wybierzLiterke( const char ABC[], int size ) { ...
Argument funkcji identyczny jak zmienna globalna. Funkcja wybierzLiterke ma pętlę, która wykonuje się 'size' razy, za każdym razem jednej i tej samej zmiennej podstawia losową wartość, która zostaje ostatecznie zwrócona przez return. Wystarczy wybrać element tablicy przekazanej przez param i go zwrócić. void pokarz( char wypelniacz[], int size )
Ż, nie rz. cout<<tablica_char wyświetli wszystkie elementy tablicy char, nie trzeba pojedynczo wyświetlać ich cout'em. for( int j = 0; j < wymieniacz; j++ { m = wymiana( losowane, wypelniacz ); }
Ze zmniennej 'm' nie korzystasz ani teraz, ani później. Pętla wykonuje się wymieniacz razy, w dodatku wewnątrz wywoływanej funkcji idzie pętla wypelniacz razy. Coś się zapętliłeś. Popraw powyższe |
|
« 1 » |