Cześć, próbuję napisać funkcję, która szuka sąsiednich identycznych elementów tablicy dwuwymiarowej liter, a następnie zamienia je na ten sam element.
X:
0 Accb
1 cccb
2 cbca
3 ccac
0123 :Y
Użytkownik może zamieniać wielkie litery, w powyższym przypadku po zmianie "A" na "C" wszystkie sąsiadujące elementy powinny zamienić się w wielkie "C".
Jak na razie napisałem 2 funkcje, jedna przeszukująca tablice od lewego górnego rogu, druga od lewego dolnego z tym że obie z nich raz działają, a raz nie :/ Czy ma ktoś może pomysł jakby to napisać, żeby gwarantowało 100% funkcjonalność?
Tutaj funkcje jakie napisałem:
void sprawdzodgory(char** tab, int w, int k){
for(int i=0;i<w;i++){
for(int j=0;j<k;j++){
if(j==0){
if(tab[i][j]==toupper(tab[i][j+1]))
tab[i][j+1]=tab[i][j];
}
else if(j>0 && j<k-1){
if(tab[i][j]==toupper(tab[i][j+1]))
tab[i][j+1]=tab[i][j];
else if(tab[i][j]==toupper(tab[i][j-1]))
tab[i][j-1]=tab[i][j];
}
else if(j==k-1){
if(tab[i][j]==toupper(tab[i][j-1]))
tab[i][j]=tab[i][j-1];
}
if(i==0){
if(tab[i][j]==toupper(tab[i+1][j]))
tab[i+1][j]=tab[i][j];
}
else if(i>0 && i<w-1){
if(tab[i][j]==toupper(tab[i+1][j]))
tab[i+1][j]=tab[i][j];
else if(tab[i][j]==toupper(tab[i-1][j]))
tab[i-1][j]=tab[i][j];
}
else if(i==w-1){
if(tab[i][j]==toupper(tab[i-1][j]))
tab[i][j]=tab[i-1][j];
}
}
}
}
void sprawdzoddolu(char** tab, int w, int k){
for(int i=w-1;i>=0;i--){
for(int j=k-1;j>=0;j--){
if(j==k-1){
if(tab[i][j]==toupper(tab[i][j-1]))
tab[i][j-1]=tab[i][j];
}
else if(j>0 && j<k-1){
if(tab[i][j]==toupper(tab[i][j+1]))
tab[i][j+1]=tab[i][j];
else if(tab[i][j]==toupper(tab[i][j-1]))
tab[i][j-1]=tab[i][j];
}
else if(j==0){
if(tab[i][j]==toupper(tab[i][j+1]))
tab[i][j]=tab[i][j+1];
}
if(i==w-1){
if(tab[i][j]==toupper(tab[i-1][j]))
tab[i-1][j]=tab[i][j];
}
else if(i>0 && i<w-1){
if(tab[i][j]==toupper(tab[i+1][j]))
tab[i+1][j]=tab[i][j];
else if(tab[i][j]==toupper(tab[i-1][j]))
tab[i-1][j]=tab[i][j];
}
else if(i==0){
if(tab[i][j]==toupper(tab[i+1][j]))
tab[i][j]=tab[i+1][j];
}
}
}
}