Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

LOSOWANIE

Ostatnio zmodyfikowano 2011-05-02 23:02
Autor Wiadomość
Elano92
Temat założony przez niniejszego użytkownika
LOSOWANIE
» 2011-04-28 11:19:12
program losuje liczby od 10 do 99

Jak zrobic zeby wypelnial tablice w taki sposob  ze jak dojdzie do prawej sciany zejdzie w dol a jak dotrze do dolu skreci w lewo jak dotrze do konca lewej sciany to pojdzie w gore i tak dalej. Jak to zrobic bo znalesc nigdzie nie moge
P-32139
Mrowqa
» 2011-04-28 15:46:30
w ogóle nie wiem o co Ci chodzi ... jakie ściany, chodzenie... ??
P-32158
dmx81
» 2011-04-28 15:59:13
pewnie chodzi ci o rodzaj spirali o poczatku na zew, a koncu w srodku? Tylko o co chodzi ze scianami? To maja byc pola pionowe i poziome tablicy? Jesli tak,to dajesz,ze jesli pozycja rowna ilosci wierszy,to zwiekszaj pozycje kolumnami,jesli pozycja rowna ilosci kolumn,to zmniejszaj pozycje wierszami ale o liczba wieszy-1, ze nie wejdziesz na juz wypelnione itd
P-32159
Mrowqa
» 2011-04-28 16:43:41
Coś też tak podejrzewałem spiralę i tablicę( po tych ścianach :D ) - ale dla mnie to trochę bez sensu ;) Ale autor niech robi jak chce ^^ grunt żeby jego wypowiedź była wystarczająca ( co w tym przypadku się nie spełniło ).
P-32161
yyy...mleko
» 2011-05-02 21:40:49
Miałeś na myśli coś w tym stylu ???:
C/C++
#include <iostream>
using namespace std;

int main()
{
    const int iy = 20, ix = 80;
    int tab[ iy ][ ix ];
   
    for( int a = 0; a < iy; a++ )
    for( int b = 0; b < ix; b++ )
         tab[ a ][ b ] = 0;
   
    int l1 = 0;
    int l2 = 0;
    int l3 = 0;
    int l4 = 0;
   
    while( l1 < 10 )
    {
        for( int a = l1; a < ix - l2; a++ )
        {
            tab[ l1 ][ a ] = rand() % 9 + 1;
            system( "cls" );
            for( int a = 0; a < iy; a++ )
            for( int b = 0; b < ix; b++ )
            {
                if( tab[ a ][ b ] != 0 )
                     cout << tab[ a ][ b ];
                else
                     cout << " ";
               
            }
        }
        l1++;
        for( int b = l1; b < iy - l3; b++ )
        {
            tab[ b ][ ix - 1 - l2 ] = rand() % 9 + 1;
            system( "cls" );
            for( int a = 0; a < iy; a++ )
            for( int b = 0; b < ix; b++ )
            {
                if( tab[ a ][ b ] != 0 )
                     cout << tab[ a ][ b ];
                else
                     cout << " ";
               
            }
        }
        l2++;
       
        for( int c = ix - 1 - l2; c >= l4; c-- )
        {
            tab[ iy - 1 - l3 ][ c ] = rand() % 9 + 1;
            system( "cls" );
            for( int a = 0; a < iy; a++ )
            for( int b = 0; b < ix; b++ )
            {
                if( tab[ a ][ b ] != 0 )
                     cout << tab[ a ][ b ];
                else
                     cout << " ";
               
            }
        }
        l3++;
       
        for( int d = iy - 1 - l3; d >= l1; d-- )
        {
            tab[ d ][ l4 ] = rand() % 9 + 1;
            system( "cls" );
            for( int a = 0; a < iy; a++ )
            for( int b = 0; b < ix; b++ )
            {
                if( tab[ a ][ b ] != 0 )
                     cout << tab[ a ][ b ];
                else
                     cout << " ";
               
            }
        }
        l4++;
    }
   
    system( "pause" );
    return 0;
}
sorry za nie optymalność i nie czytelność kodu, ale nie umiem jeszcze przekazywać tablicy wielowymiarowej do funkcji :) chociaż tak myślę, że można to zrobić w jednowymiarowej, ale nie chce mi się już kodzić :)
P-32477
absflg
» 2011-05-02 23:02:59
Może by tak:
- tworzysz typ wyliczeniowy kierunku
C/C++
enum course {
    DOWN,
    RIGHT,
    UP,
    LEFT
};
Tworzysz zmienną tego typu i ustawiasz na DOWN.
- tworzysz zmienne przechowujące współrzędne bieżącego elementu tablicy (int) i ustawiasz obie na kolumnę na 0, a rząd na -1. (wyrówna się przy pierwszym obiegu pętli do 0)
(W tym momencie masz założenia początkowe, tj. zaczynasz z lewego górnego rogu idąc w dół.)
- pętla
-- dodaj/odejmij 1 do współrzędnych bieżącego zgodnie z zapisanym kierunkiem.
(zaraz po wejściu uzyskamy więc [0;0]) /1
-- uzupełniasz komórkę.
-- jeżeli należy zmienić kierunek, to zmień. /2
-- wyjdź z pętli, jeżeli uzupełniłeś wszystko. /3
- w tym miejscu masz gotową tablicę.

/1:
Tu nie powinno być problemu. Np. jeżeli ustawiono RIGHT to dodajesz do współrzędnej x +1.
/2:
Zakładam, że "wirujesz" w kierunku przeciwnym do wskazówek zegara.
Sprawdzasz czy w następnej komórce coś jest. Jeżeli jest pusta to nic nie robisz, jeżeli jest wypełniona to zakręcasz DOWN->RIGHT->UP->LEFT->DOWN.
/3:
Po prostu: Jeżeli mimo skręcenia w /2 następna jest zajęta, to oznacza, że wypełniono wszystkie.
vv<<<<
v>>>X^
>>>>>^
Powyżej 'X' to komórka spełniająca ten warunek: doszło do zakrętu (w górę), lecz mimo to trafia na uzupełnioną komórkę.

Sprawdzając czy uzupełnia poprawnie, nie losuj, tylko wstawiaj kolejne liczby ;)
P-32487
« 1 »
  Strona 1 z 1