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

Funkcja przypisania znaku do tablicy

Ostatnio zmodyfikowano 2014-01-21 13:23
Autor Wiadomość
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ą:

C/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 ?
P-102676
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.
P-102684
alixir
» 2014-01-21 08:48:15
Też miałem problem ze zrozumieniem problemu, ale wydaje mi się, że chodzi ci o coś takiego:

C/C++
#include <iostream>
#include <time.h>

char znak( int a ) {
    switch( a ) { // 15 roznych liter z poczatkowym kodem 10
    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; // zakres losowania -> 15 liczb poczynajac od liczby 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 ) ); // wypelniamy tLiczby1 przez losowanie
    losujDoTablicy( tLiczby2, sizeof( tLiczby2 ) / sizeof( int ) ); // wypelniamy tLiczby2 przez losowanie
   
    liczbyNaZnaki( tLiczby1, tZnaki1, sizeof( tLiczby1 ) / sizeof( int ) ); // kodujemy liczby z tLiczby1 do tZnaki1
    liczbyNaZnaki( tLiczby2, tZnaki2, sizeof( tLiczby2 ) / sizeof( int ) ); // kodujemy liczby z tLiczby2 do tZnaki2
   
    // Wypisujemy wszystkie tablice
    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;
}
P-102691
Monika90
» 2014-01-21 13:09:18

C/C++
char znak( int a ) {
    switch( a ) { // 15 roznych liter z poczatkowym kodem 10
    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:
C/C++
return "LDQKAFTWZBCJPEY"[ a - 10 ];
P-102705
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.
P-102707
« 1 »
  Strona 1 z 1