C++ tabela - POMOCY !!!

0

Witam, dostałem zadanie domowe którego nie jestem w stanie wykonać:

Napisz progra, który utworzy i wypisze tablicę według poniższego modelu.
Wymiary tablic podaje użytkownik programu.
Elementami tablicy są liczby całkowite.
Liczby w kolejnych polach tablicy odwzorowują kolejność odwiedzenia pół tej tablicy ( trasę wędrówki po polach tablicy).

1 2 6 7 14 15 22
3 5 8 13 16 21 23
4 9 12 17 20 24 27
10 11 18 19 25 26 28

Kod jest użytkownika Gray, zmodyfikowałem go na własne potrzeby bo bym zbyt skomplikowany jednak dalej nie wszystko rozumiem:

#include <iostream>
 using namespace std;
 int main()
{
	int t[101][51];
	int i = 0, j = 0, k = 2, x,y;
	int dir = 1;
	
 do
 {
  cout<<"Podaj liczbe wierszy: ";
  cin>>x;
 } while( (x<1) || (x>100) );
 
 do
 {
  cout<<"Podaj liczbe kolumn: ";
  cin>>y;
 } while ( (y<1) || (y>50) );
 
t[0][0] = 1;
 
while (k <= x*y)
 if (dir == 1) // z gory na dol
 {
  if(j+1<y)
  {
   j=j+1;
  }
   else
  {
   i=i+1;
  }
  while ( (i < x) && (j >= 0))
   t[i++][j--] = k++;
 
  i--; 
  j++;
  dir = 2;
  }
  else // z dolu do gory
  {
   if(i+1<x)
   {
	i=i+1;
   }
   else
   {
	j=j+1;
   }
   while (i >= 0 && j < y)
	t[i--][j++] = k++;

   i++; 
   j--;
   dir = 1;
  }
  for (int i = 0; i < x; i++)
  {
  for (int j = 0; j < y; j++)
  cout<<t[i][j]<<" ";
  cout<<endl;
  }
 system("pause");
 return 0;
}

t[i++][j--] = k++; - O co chodzi w tej linijce, jak to uprościć? Próbowałem na milion sposobów, ale nie potrafię - Pomocy !

0

Program tworzy tabelę (użytkownik podaje jej ilość kolumn i wierszy), która wpisuje tak jak napisane u góry po ukosie liczby, tylko nie wiem jak uprościć ten kod: t[i++][j--] = k++; żeby nauczyciel się nie czepiał.

0

Aha, dobra, mogłeś użyć code, bo to średnio czytelne było z Twojego postu.

 1  2  6  7 14 15 22
 3  5  8 13 16 21 23
 4  9 12 17 20 24 27
10 11 18 19 25 26 28

Nie ładniej tak? ;)

a co do problemu:

t[i++][j--] = k++

to nic innego jakt[i][j] = k;
i++;
j--;
k++;

0

Magicznym sposobem program się zawiesza gdy próbuję wkleić

t[i][j] = k;
i++;
j--;
k++;

do tego:

while ( (i < x) && (j >= 0))
   t[i++][j--] = k++;
 
  i--; 
  j++;
  dir = 2;
  }

robiąc:

while ( (i < x) && (j >= 0)) 
  t[i][j] = k;
  i++;
  j--;
  k++;
   
  i--; 
  j++;
  dir = 2;
  }
1

Oczywiście. Spróbuj

while ( (i < x) && (j >= 0)){
   t[i++][j--] = k++;
 
  i--; 
  j++;
}

Bez klamerek zostanie wykonana tylko jedna instrukcja.

Przy okazji, popracuj nad indentacją Twojego kodu, ciężko się go czyta. Nie łatwiej tak jak poniżej?

#include <iostream>
using namespace std;
int main()
{
    int t[101][51];
    int i = 0, j = 0, k = 2, x, y;
    int dir = 1;

    do {
        cout << "Podaj liczbe wierszy: ";
        cin >> x;
    } while ((x < 1) || (x > 100));

    do {
        cout << "Podaj liczbe kolumn: ";
        cin >> y;
    } while ((y < 1) || (y > 50));

    t[0][0] = 1;

    while (k <= x * y)
        if (dir == 1) // z gory na dol
        {
            if (j + 1 < y) {
                j = j + 1;
            } else {
                i = i + 1;
            }
            while ((i < x) && (j >= 0))
                t[i++][j--] = k++;

            i--;
            j++;
            dir = 2;
        } else // z dolu do gory
        {
            if (i + 1 < x) {
                i = i + 1;
            } else {
                j = j + 1;
            }
            while (i >= 0 && j < y) {
                t[i][j] = k;
                i++;
                j--;
                k++;
            }
            i++;
            j--;
            dir = 1;
        }
    for (int i = 0; i < x; i++) {
        for (int j = 0; j < y; j++)
            cout << t[i][j] << " ";
        cout << endl;
    }
    system("pause");
    return 0;
}
0

aaaa klamry.... kurcze ale jestem głupi. Wielkie dzięki :)

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