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

[C++] zamiana liter w array

Ostatnio zmodyfikowano 2012-11-12 19:18
Autor Wiadomość
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??

C/C++
#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;
}

P-69008
CoolPanda
Temat założony przez niniejszego użytkownika
» 2012-11-11 20:47:52
Nikt nie ma wskazowek jak ten kod poprawic?
P-69018
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.
P-69020
crash
» 2012-11-12 19:18:29
Kilka rzeczy, które mi w kodzie nie pasują:

C/C++
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ć.

C/C++
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.

C/C++
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
P-69055
« 1 »
  Strona 1 z 1