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)
#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;
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";
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;
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;
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.