Pomoc - slimak C#

0

Witam. Mam taki problem. Próbuję napisać program typu liczbowy ślimak, a mianowicie chodzi mi to, żeby liczby były wyświetlane w ten sposób:

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

... gdzie użytkownik podaje n, n jest liczba kolumn i wierszy. Np. w tym wypadku n=5 czyli 5*5=25 czyli ostatnia liczba w środku.
Napisałem coś takiego, ale brakuje mi części w drugiej pętli for.

O to mój program:

using System;

namespace slimak
{
using System;

class Program
{
public static void Main()
{
Console.WriteLine("Podaj rozmiar: ");
string liczba = Console.ReadLine();

int rozmiar = int.Parse(liczba);
int[] tablica = new int[rozmiar];

for (int i = 0; i < rozmiar; i++)
{
tablica[i] = i;

for (int j = 0;j < rozmiar; j++)
{
Console.Write("{0},", j.ToString());
}
Console.WriteLine();
}

Console.ReadLine();

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}

Proszę o pomoc ;)

0

Przetłumacz sobie na C# (program jest trochę ogólniejszy, ilość wierszy może być różna od ilości kolumn).

final int RIGHT=1;
final int DOWN=2;
final int LEFT=3;
final int UP=4;
int kierunek=RIGHT;
int rows=...;
int cols=...;
int[][] t=new int[rows][cols];
for(int i=0;i<rows;i++)
     for(int j=0;j<cols;j++)
           t[i][j]=-1;
int w=0;
int k=0;
for(int i=1;i<=rows*cols;i++)
{
     t[w][k]=i;
     switch(kierunek)
     {
          case RIGHT:
                 if(k<cols-1 && t[w][k+1]<0)
                     k++;
                 else
                 {
                     w++;
                     kierunek=DOWN;
                 }
                 break;
         case DOWN:
                 if(w<rows-1 && t[w+1][k]<0)
                     w++;
                 else
                 {
                     k--;
                     kierunek=LEFT;
                 }
                 break;
         case LEFT:
                 if(k>0 && t[w][k-1]<0)
                     k--;
                 else
                 {
                     w--;
                     kierunek=UP;
                 }
                 break;
         case UP:
                 if(w>0 && t[w-1][k]<0)
                     w--;
                 else
                 {
                     k++;
                     kierunek=RIGHT;
                 }
                 break;
       }
}
0

Nic mi to nie pomaga. A nie mógłby ktoś dopisać tej części w pętli for? Bo z tego co wiem, tylko tam brakuje części programu, aby działał poprawnie.

0

Dość trudno poruszać się po konsoli w lewo i do góry. Wygodniej stworzyć tablicę w pamięci (kod tworzący dostałeś), a potem ją wyświetlić:

        for(int i=0;i<rows;i++)
        {
            for(int j=0;j<cols;j++)
                System.out.printf("%4d",t[i][j]);
            System.out.println("");
        }

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