Tablica dwu wymiarowa, zwiększanie o jeden

0

Witam.
Chcę napisać program, który zwiększa o jeden po kolei wszystkie elementy tablicy w wierszu 0;
Napisałem coś takiego

#include <stdio.h> 
#define M 4
#define N 6
int tablica[M][N] = {{0}};
int zwieksz=1;
//int x=0,y=0;
void print_array(){
         for (int i = 0; i < M; i++) {
            for (int a = 0; a < N; a++) {
                printf("%3d", tablica[i][a]);
            }
            printf("\n");
         }
     }



int go_right(int x,int y){
	while(tablica[y][x]==0 && x<=N+4){
		tablica[y][x]=zwieksz++;
		x++;
	}
return x;
}
int main() {

go_right(0,0);
print_array();    

printf("\n%d",tablica[1][1]);

    return 0;
}
 

Linijkę

 while(tablica[y][x]==0 && x<=N+4){

napisałem specjalnie aby pokazać mój problem.
Jak widać tablica[1][1] ma wartość 8
Moje pytanie dlaczego?
Chciałem zwiększać tylko pierwszy wiersz(tablica[0][x]) a wiersz drugi również się zwiększył.
Proszę wytłumaczyć mi dlaczego i jak temu zaradzić.

//Nie wiem dlaczego nie koloruje składni

0

Najpierw powiedz mi dlaczego masz taki warunek:

 x⇐N+4

w pętli while?

Przecież x może maksymalnie osiągnąć wartość o jeden mniejszą od N, więc tutaj powinno być x<N.

tablica[y][x]=zwieksz++;

Taki zapis oznacza: Przypisz zmiennej tablica[y][x] wartość o jeden większą od zmiennej zwieksz (w tym wypadku to zawsze będzie 2), a z tego co napisałeś, to chciałeś zwiększyć o 1.

0
Blood napisał(a)

Najpierw powiedz mi dlaczego masz taki warunek:

 x⇐N+4

w pętli while?

Wyjaśnione w poście wyżej
Linijkę while(tablica[y][x]==0 && x⇐N+4)napisałem specjalnie aby pokazać mój problem.

Blood napisał(a)

tablica[y][x]=zwieksz++;
Taki zapis oznacza: Przypisz zmiennej tablica[y][x] wartość o jeden większą od zmiennej zwieksz (w tym wypadku to zawsze będzie 2), a z tego co napisałeś, to chciałeś zwiększyć o 1.

taki zapis oznacza przypisz do tablicy[y][x] wartość zwiększ a następnie zwiększ zmienną zwiększ o jeden.

Moje pytanie dlaczego kod zwiększa wartości drugiego wiersza(tablica[1][x])?

0

Dostęp do pól tabeli jest realizowany poprzez przesunięcie wskaźnika, a indeksy są tylko po to, żeby wyglądało to bardziej "ludzko".
Namieszałeś sobie z indeksami. Tabela ma rozmiar T[4][6], x zmienia Ci się w zakresie 0..9. , a więc od T[0][0] do T[1][3] ( teoretycznie do T[0][9] ). Żeby zmienić tylko pierwszy wiersz, x<N.

0

Dzięki za wytłumaczenie.
//Ubolewam nad tym że kompilator nie wyrzucił żadnego ostrzeżenia

0

Napisane w C++:

 
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
  int i,j,k=1,ktory,tab[3][4];
    for(i=0;i<3;i++)
    for(j=0;j<4;j++)
     {       
       tab[i][j]=k;
       k++;
       cout<<tab[i][j]<<" ";
       if(j==3)cout<<endl;                   
     }
    cout<<" ktory wiersz zmienic,podaj liczbe >=0 i <3 "; 
     cin>>ktory; 
     cout<<"tablica po dodaniu do elementow "<<ktory<<" wiersza liczby 20"<<endl;    
    for(j=0;j<4;j++)
     {
       i=ktory;
       tab[i][j]=tab[i][j]+20;     
       }            
          
    for(i=0;i<3;i++)
    for(j=0;j<4;j++)
     {       
       cout<<tab[i][j]<<" ";
       if(j==3)cout<<endl;                   
     }
    
 getch();
 return 0;    
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1