Funkcja przypisania znaku do tablicy
Ostatnio zmodyfikowano 2014-01-21 13:23
Szymix Temat założony przez niniejszego użytkownika |
Funkcja przypisania znaku do tablicy » 2014-01-20 21:10:26 Witam, piszę pewien program i chciałbym go maksymalnie skrócić i zoptymalizować dlatego mam pytania. Chodzi oto, że mam pewną funkcję przypisującą: void znaki() { for( int i = 0; i < 8; i++ ) { if( tabg[ i ] == 14 ) { zng[ i ] = "A"; } if( tabg[ i ] == 13 ) { zng[ i ] = "K"; } if( tabg[ i ] == 12 ) { zng[ i ] = "Q"; } itd. } w dalszej czesci programu w main-ie wywoluje kolejno funkcje losowanie() - losujaca liczby i zapisujaca je do tablicy int liczby[] oraz int liczby2[] a takze funkcje znaki() - przypisujaca odpowiedni znak liczbie. Problem w tym, ze nie chce pisac powyzszego kodu zarowno dla jednej i drugiej tablicy, gdyz mialbym wtedy dwa razy tyle warunkow przypisania. Chcialbym zrobic cos takiego, ze wywoluje losowanie() - losuje liczby i zapisuje do tablicy, nastepnie wywoluje znaki() przypisujaca odpowiednim liczba znaki - do obu tablic jednoczesnie, a nastepnie wyswietla mi nowe tablice stringow ze znakami. Jak tego dokonac ? |
|
mgrD |
» 2014-01-20 22:35:19 Nie wiem zbytnio co chcesz osiągnąć(bo opis mało mi zobrazował twój kłopot) lecz jeśli chcesz mieć krótszy kod(i jeśli masz 3+ warunki) to zastosuj switch. |
|
alixir |
» 2014-01-21 08:48:15 Też miałem problem ze zrozumieniem problemu, ale wydaje mi się, że chodzi ci o coś takiego: #include <iostream> #include <time.h>
char znak( int a ) { switch( a ) { case 10: return 'L'; case 11: return 'D'; case 12: return 'Q'; case 13: return 'K'; case 14: return 'A'; case 15: return 'F'; case 16: return 'T'; case 17: return 'W'; case 18: return 'Z'; case 19: return 'B'; case 20: return 'C'; case 21: return 'J'; case 22: return 'P'; case 23: return 'E'; case 24: return 'Y'; } }
void liczbyNaZnaki( int * liczby, char * znaki, int size ) { for( int i = 0; i < size; i++ ) znaki[ i ] = znak( liczby[ i ] ); }
void losujDoTablicy( int * liczby, int size ) { for( int i = 0; i < size; i++ ) liczby[ i ] =( rand() % 15 ) + 10; }
void wypisz( int * tablica, int size ) { for( int i = 0; i < size; i++ ) std::cout << tablica[ i ] << "\t"; std::cout << std::endl; }
void wypisz( char * tablica, int size ) { for( int i = 0; i < size; i++ ) std::cout << tablica[ i ] << "\t"; std::cout << std::endl; }
int main() { int tLiczby1[ 5 ], tLiczby2[ 8 ]; char tZnaki1[ 5 ], tZnaki2[ 8 ]; srand( time( NULL ) ); losujDoTablicy( tLiczby1, sizeof( tLiczby1 ) / sizeof( int ) ); losujDoTablicy( tLiczby2, sizeof( tLiczby2 ) / sizeof( int ) ); liczbyNaZnaki( tLiczby1, tZnaki1, sizeof( tLiczby1 ) / sizeof( int ) ); liczbyNaZnaki( tLiczby2, tZnaki2, sizeof( tLiczby2 ) / sizeof( int ) ); wypisz( tLiczby1, sizeof( tLiczby1 ) / sizeof( int ) ); wypisz( tZnaki1, sizeof( tZnaki1 ) / sizeof( char ) ); std::cout << std::endl; wypisz( tLiczby2, sizeof( tLiczby2 ) / sizeof( int ) ); wypisz( tZnaki2, sizeof( tZnaki2 ) / sizeof( char ) ); return 0; } |
|
Monika90 |
» 2014-01-21 13:09:18
char znak( int a ) { switch( a ) { case 10: return 'L'; case 11: return 'D'; case 12: return 'Q'; case 13: return 'K'; case 14: return 'A'; case 15: return 'F'; case 16: return 'T'; case 17: return 'W'; case 18: return 'Z'; case 19: return 'B'; case 20: return 'C'; case 21: return 'J'; case 22: return 'P'; case 23: return 'E'; case 24: return 'Y'; } } |
A co jak a jest mniejsze od 10 albo większe od 24? Zresztą, to można zapisać w jednej linijce: return "LDQKAFTWZBCJPEY"[ a - 10 ];
|
|
alixir |
» 2014-01-21 13:23:08 Monika przykład miał pokazać tylko zasadę działania, bez zagłębiania się w szczegóły. Ponadto w tablicy losują się liczby tylko z tego zakresu. Aczkolwiek bardzo spodobał mi się twój zapis :) . Też dopiero się uczę i to dla mnie miła ciekawostka. |
|
« 1 » |