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

Podmiana elementów tablicy char na elementy dwóch innych tablic

Ostatnio zmodyfikowano 2015-08-11 12:23
Autor Wiadomość
Piotrekdoro
Temat założony przez niniejszego użytkownika
Podmiana elementów tablicy char na elementy dwóch innych tablic
» 2015-08-10 21:07:48
Witam, poniżej zamieszczam fragment programu. Jego zadaniem jest przyjecie wpisanych przez użytkownika 10 par różnych liter, które następnie zapisywane sa w para_liter_panel_sterujacy. Następnie kolejne litery alfabetu porównywane są z elementami para_liter_panel_sterujacy. Jeśli n-ta litera alfabetu występuje w n-tej parze liter to druga litera z pary ma zostać wysłana do tablica_panel_sterujacy, jeśli wśród 10 par liter badana aktualnie litera alfabetu nie występuje, to ma ona zostać przepisana wprost na n-te miejsce bez zmian. Mój cel dla jasności pokazuję na poniższym przykładzie:

alfabet  para_liter_panel_sterujacy           tablica_panel_sterujacy (nasza nowa wersja "alfabetu" potrzebna później w programie)
A              1 A<---->B                       B     
B              2 C<---->D                       A       
C              3 E<---->F                       D     
D              4 G<---->H                       C       
E              5 I<---->J                       F      
F              6 K<---->L                       E      
G              7 M<---->N                       H       
H              8 O<---->P                       G     
I              9 R<---->S                       J      
J             10 T<---->U                       I     
K           (zadeklarowano 10 par)              L
L                                               K
M                                               N            
N                                               M            
O                                               P            
P                                               O            
Q                                               Q (Q zostaje jak było bo nie jest w żadnej parze)            
R                                               S            
S                                               R            
T                                               U            
U                                               T            
V                                               V (dalej już normalnie bo liter tych nie ma w żadnej parze)            
W                                               W            
X                                               X            
Y                                               Y            
Z                                               Z 

Kod źródłowy:
(z zaznaczonym miejscem, w którym wszystko idzie źle)
C/C++
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    char alfabet[ 26 ] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
    char tablica_liter_panel_sterujacy[ 26 ];
    char para_liter_panel_sterujacy[ 10 ][ 2 ];
    int i = 0, j = 0;
   
    //tworzenie par liter
    cout << "\nMasz do wyboru 10 kabli, ktorymi mozesz zamieniac ze soba dowolne 10 par liter"
    << "\nPrzy pomocy klawiatury wybierz pierwsza z liter i zatwierdz wybor, nastepnie"
    << "\nwybierz z klawiatury litere ktora chcesz zamienic z litera pierwsza\n \n";
   
   
   
    for( i = 0, j = 0; i <= 9; i++ )
    {
        cout << "\n \nPozostalo " << 10 - i << " kabli\nWybierz pierwsza litere\n \n";
        if( j == 1 )
        {
            j = 0;
        }
        cin >> para_liter_panel_sterujacy[ i ][ j ];
        cout << "\n \nWybierz druga litere\n \n";
        if( j == 0 )
        {
            j += 1;
            cin >> para_liter_panel_sterujacy[ i ][ j ];
        }
    }
    cout << "Kable sie skonczyly\n \n";
   
    //zrobione na szybko wypisanie pary_liter_panel_sterujacy wypisanie
   
    cout << para_liter_panel_sterujacy[ 0 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 0 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 1 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 1 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 2 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 2 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 3 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 3 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 4 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 4 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 5 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 5 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 6 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 6 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 7 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 7 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 8 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 8 ][ 1 ] << endl
    << para_liter_panel_sterujacy[ 9 ][ 0 ] << "<---->" << para_liter_panel_sterujacy[ 9 ][ 1 ] << endl;
   
    //***TU JEST BLAD*** zapelnianie tablicy tablica_liter_panel_sterujacy ***TU JEST BLAD***
    for( j = 0; j < 26; j++ )
    {
        for( i = 0; i < 10; i++ )
        {
            if( alfabet[ j ] == para_liter_panel_sterujacy[ i ][ 0 ] )
            {
                tablica_liter_panel_sterujacy[ j ] = para_liter_panel_sterujacy[ i ][ 1 ];
                break;
            }
            if( alfabet[ j ] == para_liter_panel_sterujacy[ i ][ 1 ] )
            {
                tablica_liter_panel_sterujacy[ j ] = para_liter_panel_sterujacy[ i ][ 0 ];
                break;
            }
        }
        alfabet[ j ] = tablica_liter_panel_sterujacy[ j ];
    }
   
    i = 0;
    j = 0;
    //wypisanie tablica_liter_panel_sterujacy
    cout << "nowy alfabet\n \n";
    while( i < 26 )
    {
        cout << endl << endl << tablica_liter_panel_sterujacy[ i ];
        i++;
    }
}
          
Z niezrozumiałych powodów program wypluwa z siebie jakieś krzaczki

Według mojego rozumowania wszystko powinno być w porządku. Załóżmy, że zadeklarowane pary to A-B, C jest pominięte, następnie D-E, F-G itd. Przepisanie pierwszych trzech liter powinno się odbywać następująco:

- zewnętrzna pętla przyjmuje j=0 (czyli literę A)
- wewnętrzna pętla rozpoczyna pierwszy obieg
- spełniony jest warunek pierwszego if więc druga litera z pary A-B wpisywane jest na miejsce j-te (czyli 0) nowego alfabetu
- break, rozpoczyna się drugi obieg zewnętrznej pętli, j=1 więc badamy teraz literę B
- ponownie pierwszy obieg wewnętrznej pętli, drugi if jest sprełniony, przesłanie drugiej litery z pary A-B czyli litery A na j-te, czyli drugie miejsce nowego alfabetu
- break, trzeci obieg zewnętrznej pętli, j=3, czyli badamy C
- ponownie pierwszy obieg wewnętrznej pętli, warunek żadnego if nie jest spełniony więc i się inkrementuje i teraz i=1, badana jest druga pata, w następnych obiegach trzecie, czwarta i tak do dziesiątej
- po dziesiątym obiegu pętla wewnętrzna się kończy więc litera C jest bez zmian wpisywana na trzecie miejsce nowego alfabetu, pętla wewnętrzna się kończy
itd.

Nie mam pojęci gdzie znajduje się błąd, może w takiej sytuacji muszę operować na wskaźnikach? Jeśli tak to czy ktoś mógłby podpowiedzieć jak i dlaczego?

Z góry dziękuję za pomoc.
P-136013
Piotrekdoro
Temat założony przez niniejszego użytkownika
» 2015-08-11 12:23:22
Problem rozwiązany, zawsze łączyłem w pary małe litery, a tablica alfabet składała się z dużych liter, tablica_para_liter nie była więc zapełniana moimi danymi, a wyświetlała losowe znaki znajdujące się akurat w jej adresach. Tak przynajmniej mi się wydaje.
P-136052
« 1 »
  Strona 1 z 1