QBasic i njegove naredbe

poruka: 88
|
čitano: 74.484
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
neaktivan
offline
QBasic i njegove naredbe

Gle to da zabranim pikselu da prijeđe preko neke linije te baš ne razumijem zato što ja radim po ovom :

SCREEN 13

x = 160
y = 100
boja = 15
kraj = 0

DO
        a$ = INKEY$
        IF LEN(a$) = 2 THEN
                c$ = RIGHT$(a$, 1)
                IF c$ = CHR$(72) THEN
                        y = y - 1
                ELSEIF c$ = CHR$(80) THEN
                        y = y + 1
                ELSEIF c$ = CHR$(75) THEN
                        x = x - 1
                ELSEIF c$ = CHR$(77) THEN
                        x = x + 1
                ELSEIF c$ = CHR$(74) THEN
                        boja = boja - 1
                ELSEIF c$ = CHR$(78) THEN
                        boja = boja + 1
                END IF
        ELSEIF LEN(a$) = 1 THEN
                IF a$ = CHR$(27) THEN
                        kraj = 1
                ELSEIF a$ = CHR$(43) THEN
                        boja = boja + 1
                ELSEIF a$ = CHR$(45) THEN
                        boja = boja - 1
                END IF
        END IF
        PSET (x, y), boja
LOOP UNTIL kraj = 1
nači što bi tu trebalo dodat (liniju ) i kad ju stavim(iako je sad nema)što onda?

lila
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe
ivain2 kaže...

Gle to da zabranim pikselu da prijeđe preko neke linije te baš ne razumijem zato što ja radim po ovom : nači što bi tu trebalo dodat (liniju ) i kad ju stavim(iako je sad nema)što onda?

Ma nije bitno, samo nacrtas neke linije. Ono o cemu je mbaksa govorio je da prije nego pomaknes lika (u ovom slucaju piksel) na neko mjesto na ekranu, moras provjeriti je li to mjesto slobodno. Ako je mjesto zauzeto (blokirano) onda ne pomices lika.

 

SCREEN 13

x = 160
y = 100
boja = 15
kraj = 0

LINE (100, 50)-(100, 150), 9
LINE (100, 150)-(220, 150), 9
LINE (220, 150)-(220, 50), 9
LINE (220, 50)-(100, 50), 9

LINE (110, 70)-(170, 130), 9
LINE (150, 70)-(210, 130), 9

DO
        a$ = INKEY$
        IF LEN(a$) = 2 THEN
                c$ = RIGHT$(a$, 1)
                IF c$ = CHR$(72) THEN
                        IF POINT(x, y - 1) = 0 THEN
                                PSET (x, y), 0
                                y = y - 1
                        END IF
                ELSEIF c$ = CHR$(80) THEN
                        IF POINT(x, y + 1) = 0 THEN
                                PSET (x, y), 0
                                y = y + 1
                        END IF
                ELSEIF c$ = CHR$(75) THEN
                        IF POINT(x - 1, y) = 0 THEN
                                PSET (x, y), 0
                                x = x - 1
                        END IF
                ELSEIF c$ = CHR$(77) THEN
                        IF POINT(x + 1, y) = 0 THEN
                                PSET (x, y), 0
                                x = x + 1
                        END IF
                ELSEIF c$ = CHR$(74) THEN
                        boja = boja - 1
                ELSEIF c$ = CHR$(78) THEN
                        boja = boja + 1
                END IF
        ELSEIF LEN(a$) = 1 THEN
                IF a$ = CHR$(27) THEN
                        kraj = 1
                ELSEIF a$ = CHR$(43) THEN
                        boja = boja + 1
                ELSEIF a$ = CHR$(45) THEN
                        boja = boja - 1
                END IF
        END IF
        PSET (x, y), boja
LOOP UNTIL kraj = 1

 

Evo daljnja razrada ovoga sto sam vec radio.

Ove "line" funkcije na pocetku iscrtavaju mapu (ajmo reci da je to nekakva primitivna mapa nekakve izmisljene igre). I njihov je oblik i polozaj posve nebitan (mozes ih i izmjeniti pa vidjeti radi li), glavno da postoje nekakvi objekti s kojima se piksel kojeg pomices moze sudarati.

 

Sto se dalje dogada kada korisnik pritisne neku od strijelica? Program prvo provjerava da li je mjesto na koje se treba prebaciti slobodno, tj. ako ima boju broj 0 (crna boja), ako ima, onda ga pomice. Ako je boja piksela bilo koja druga, program ignorira pritisak na tipku i ne mijenja polozaj lika.

 

Isto tako dodao sam par linija koda koje sprijecavaju da piksel kojeg pomices za sobom ostavlja trag. To sam napravio tako da piksel prije pomaka sam sebe oboja u crnu boju (boju pozadine), te se kasnije pri dnu petlje iscrta na novom mjestu u boji u kojoj bi trebao biti iscrtan.

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
Poruka je uređivana zadnji put sri 30.3.2011 17:59 (rustweaver).
13 godina
neaktivan
offline
QBasic i njegove naredbe

e sad mi je sva jasno .Puno hvala!!!!!!!!!!!

lila
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Da bi napravio igricu potrebna mi je još jedna stvar:htio bi da ovaj  piksel kada dođe do određenog mjesta,da se pojavi npr ono bravo?????kako sad to napravit,jer ako to napravim to mi može bit igra prava igra i ja dalje od toga mogu nizati lvl-e??????

lila
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Pa testiras isto kao sto testiras i sudaranje, samo moras testirati s cime tocno si se sudario. Npr zidovi su plavi, sudar s pikselom plave boje znaci da si se sudario sa zidom. E sad, ako specijalne objekte obojas u drugu boju pa testiras sudaranje s pikselom takve boje to ti je onda nacin provjere sudaranja sa specijalnim objektima.

 

Da malo razjasnim:

 

SCREEN 13
RANDOMIZE TIMER
DEF SEG = &HA000

x = 160
y = 100
boja = 15
bojakockice = 4
kraj = 0
pokupljen = 1
bodovi = 0

LINE (100, 50)-(100, 150), 9
LINE (100, 150)-(220, 150), 9
LINE (220, 150)-(220, 50), 9
LINE (220, 50)-(100, 50), 9
LOCATE 8, 1
PRINT "Bodovi:"; bodovi

pocetnoVrijeme& = TIMER
DO
        TrenutnoVrijeme& = TIMER
        a$ = INKEY$
      
        IF LEN(a$) = 2 THEN
                c$ = RIGHT$(a$, 1)
                IF c$ = CHR$(72) THEN
                        IF PEEK(x + ((y - 1) * 320)) = 0 THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                y = y - 1
                        ELSEIF PEEK(x + ((y - 1) * 320)) = bojakockice THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                y = y - 1
                                bodovi = bodovi + 50
                                pokupljen = 1
                                pocetnoVrijeme& = TIMER
                        END IF
                ELSEIF c$ = CHR$(80) THEN
                        IF PEEK(x + ((y + 1) * 320)) = 0 THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                y = y + 1
                        ELSEIF PEEK(x + ((y + 1) * 320)) = bojakockice THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                y = y + 1
                                bodovi = bodovi + 50
                                pokupljen = 1
                                pocetnoVrijeme& = TIMER
                        END IF
                ELSEIF c$ = CHR$(75) THEN
                        IF PEEK(x - 1 + (y * 320)) = 0 THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                x = x - 1
                        ELSEIF PEEK(x - 1 + (y * 320)) = bojakockice THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                x = x - 1
                                bodovi = bodovi + 50
                                pokupljen = 1
                                pocetnoVrijeme& = TIMER
                        END IF
                ELSEIF c$ = CHR$(77) THEN
                        IF PEEK(x + 1 + (y * 320)) = 0 THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                x = x + 1
                        ELSEIF PEEK(x + 1 + (y * 320)) = bojakockice THEN
                                POKE (x + (y * 320)), 0
                                'PSET (x, y), 0
                                x = x + 1
                                bodovi = bodovi + 50
                                pokupljen = 1
                                pocetnoVrijeme& = TIMER
                        END IF
                END IF
        ELSEIF LEN(a$) = 1 THEN
                IF a$ = CHR$(27) THEN
                        kraj = 1
                ELSEIF a$ = CHR$(43) THEN
                        boja = boja + 1
                ELSEIF a$ = CHR$(45) THEN
                        boja = boja - 1
                END IF
        END IF
        IF TIMER - pocetnoVrijeme& > 3 THEN
                IF pokupljen = 1 THEN
                        POKE (101 + INT(RND * 119) + ((51 + INT(RND * 99)) * 320)), bojakockice
                        pokupljen = 0
                END IF
        END IF
        IF pokupljen = 1 THEN
                LOCATE 8, 1
                PRINT "Bodovi:"; bodovi
        END IF
      
        POKE (x + (y * 320)), boja
        'PSET (x, y), boja
LOOP UNTIL kraj = 1

 

Ovo sam jos jucer nakucao, tesko je stati kada jednom pocnes. xD

 

Neka te ne zbunjuju ovi PEEK i POKE, to su funkcije koje pisu direktno po memoriji (u ovom slucaju videomemoriji) i u kontekstu ovog programa imaju istu namjenu kao i POINT i PSET. Cak mozes i vidjeti da je na dosta mjesta ostao PSET ciju sam liniju jednostavno stavio pod komentar.

 

Dakle sto se novo dogada u programu u odnosu na stari?

Imas timer koji svake 3 sekunde stvara crvenu kockicu, ako vec ima jedna kockica na ekranu onda se ne stvara nova kockica. Kada "igrac" naleti na crvenu kockicu kockica se brise, i igracu se dodaje 50 bodova.

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
13 godina
neaktivan
offline
QBasic i njegove naredbe

Ovo sto si ti napravio je odlicno,ali meni treba nesto jednostavnije.NPR:samo od onog primjera da mo se nakon deset sec od pritiska neke tipke ovaj piksel zacrni(kako ne bih znao kuda idem) i onda da moram doc do neke tocke u roku od 30 sec .samo to,a ja cu onda napravit drugacije prepreke i levele samo te to molim??

lila
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe

E pa preradi...

Ne ocekujes valjda gotov kod za sve?

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
13 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Oprostite al ja ne ocekujem kod nit sam ga uopce ocekivo,ja samo zelim neko objasnjenje.

lila
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Prouci kako se koristi funkcija TIMER

fino dovedes kursor u qbasicu na rijec TIMER i lupis F1, pa onda gledas malo ovo sto sam ja radio s njime i trebalo bi ti biti jasno.

 

Sto se tice bojanja piksela u crnu boju, to ti je valjda do sada jasno...

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
13 godina
neaktivan
offline
QBasic i njegove naredbe

ok

lila
 
0 0 hvala 0
13 godina
neaktivan
offline
QBasic i njegove naredbe

još jedna molba sve sam napravio (cijelu igricu)samo još neznam postavit TIMER gdje mi to piše?????????????

lila
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Funkcija TIMER ti vraca broj sekundi koje su prosle od ponoci.

 

CLS
DO
        LOCATE 1, 1
        PRINT TIMER
LOOP UNTIL INKEY$ = CHR$(27)

PRINT "Pricekaj 5 sekundi..."

vrijeme! = TIMER
DO
LOOP UNTIL TIMER - vrijeme >= 5

PRINT "5 sekundi je proslo"



Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
13 godina
neaktivan
offline
QBasic i njegove naredbe

Ok hvala puno,sad imam cijelu igricu!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Yes,tooooooooo!!!!!!!!!!!!!!!!

lila
 
0 0 hvala 0
13 godina
neaktivan
offline
QBasic i njegove naredbe

evo pogledajte što sam izmikso pa recite kako vam se čini????

 

SCREEN 13
RANDOMIZE TIMER
DEF SEG = &HA000


x = 160
y = 100
boja = 15
bojakockice = 4
kraj = 0
pokupljen = 1
bodovi = 0
potezi = 1000
LOCATE 2, 2
PRINT "Potezi:", potezi


LINE (100, 50)-(100, 150), 9
LINE (100, 150)-(220, 150), 9
LINE (220, 150)-(220, 50), 9
LINE (220, 50)-(100, 50), 9
LOCATE 8, 1
PRINT "Bodovi:"; bodovi


DO

    a$ = INKEY$

    IF LEN(a$) = 2 THEN
        c$ = RIGHT$(a$, 1)
        IF c$ = CHR$(72) THEN
            IF PEEK(x + ((y - 1) * 320)) = 0 THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                y = y - 1
                potezi = potezi - 1
                LOCATE 2, 2
                PRINT "Potezi:", potezi
                IF potezi = 0 THEN
                    GOTO lolo
                END IF

            ELSEIF PEEK(x + ((y - 1) * 320)) = bojakockice THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                y = y - 1
                bodovi = bodovi + 50
                pokupljen = 1
                PRINT "Bravo tocno"
                CLS
                LOCATE 2, 2
                PRINT "Potezi:", potezi

                LINE (100, 50)-(100, 150), 9
                LINE (100, 150)-(220, 150), 9
                LINE (220, 150)-(220, 50), 9
                LINE (220, 50)-(100, 50), 9
                LOCATE 8, 1
                PRINT "Bodovi:"; bodovi

                a$ = INKEY$


                IF LEN(a$) = 2 THEN
                    c$ = RIGHT$(a$, 1)
                    IF c$ = CHR$(72) THEN
                        IF PEEK(x + ((y - 1) * 320)) = 0 THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            y = y - 1
                            potezi = potezi - 1
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi
                            IF potezi = 0 THEN
                                GOTO lolo
                            END IF

                        ELSEIF PEEK(x + ((y - 1) * 320)) = bojakockice THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            y = y - 1
                            bodovi = bodovi + 50
                            pokupljen = 1
                            PRINT "Bravo tocno"
                            CLS
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi

                            LINE (100, 50)-(100, 150), 9
                            LINE (100, 150)-(220, 150), 9
                            LINE (220, 150)-(220, 50), 9
                            LINE (220, 50)-(100, 50), 9
                            LOCATE 8, 1
                            PRINT "Bodovi:"; bodovi


                        END IF
                    ELSEIF c$ = CHR$(80) THEN
                        IF PEEK(x + ((y + 1) * 320)) = 0 THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            y = y + 1
                            potezi = potezi - 1
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi
                            IF potezi = 0 THEN
                                GOTO lolo
                            END IF

                        ELSEIF PEEK(x + ((y + 1) * 320)) = bojakockice THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            y = y + 1
                            bodovi = bodovi + 50
                            pokupljen = 1
                            PRINT "Bravo tocno"
                            CLS
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi

                            LINE (100, 50)-(100, 150), 9
                            LINE (100, 150)-(220, 150), 9
                            LINE (220, 150)-(220, 50), 9
                            LINE (220, 50)-(100, 50), 9
                            LOCATE 8, 1
                            PRINT "Bodovi:"; bodovi

                        END IF
                    ELSEIF c$ = CHR$(75) THEN
                        IF PEEK(x - 1 + (y * 320)) = 0 THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            x = x - 1
                            potezi = potezi - 1
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi
                            IF potezi = 0 THEN
                                GOTO lolo
                            END IF

                        ELSEIF PEEK(x - 1 + (y * 320)) = bojakockice THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            x = x - 1
                            bodovi = bodovi + 50
                            pokupljen = 1
                            PRINT "Bravo tocno"
                            CLS
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi

                            LINE (100, 50)-(100, 150), 9
                            LINE (100, 150)-(220, 150), 9
                            LINE (220, 150)-(220, 50), 9
                            LINE (220, 50)-(100, 50), 9
                            LOCATE 8, 1
                            PRINT "Bodovi:"; bodovi

                        END IF
                    ELSEIF c$ = CHR$(77) THEN
                        IF PEEK(x + 1 + (y * 320)) = 0 THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            x = x + 1
                            potezi = potezi - 1
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi
                            IF potezi = 0 THEN
                                GOTO lolo
                            END IF

                        ELSEIF PEEK(x + 1 + (y * 320)) = bojakockice THEN
                            POKE (x + (y * 320)), 0
                            'PSET (x, y), 0
                            x = x + 1
                            bodovi = bodovi + 50
                            pokupljen = 1
                            PRINT "Bravo tocno"
                            CLS
                            LOCATE 2, 2
                            PRINT "Potezi:", potezi

                            LINE (100, 50)-(100, 150), 9
                            LINE (100, 150)-(220, 150), 9
                            LINE (220, 150)-(220, 50), 9
                            LINE (220, 50)-(100, 50), 9
                            LOCATE 8, 1
                            PRINT "Bodovi:"; bodovi

                        END IF
                    END IF
                ELSEIF LEN(a$) = 1 THEN
                    IF a$ = CHR$(27) THEN
                        kraj = 1
                    ELSEIF a$ = CHR$(43) THEN
                        boja = boja + 1
                    ELSEIF a$ = CHR$(45) THEN
                        boja = boja - 1
                    END IF
                END IF
                IF TIMER - pocetnoVrijeme& > 3 THEN
                    IF pokupljen = 1 THEN
                        POKE (101 + INT(RND * 119) + ((51 + INT(RND * 99)) * 320)), bojakockice
                        pokupljen = 0
                    END IF
                END IF
                IF pokupljen = 1 THEN
                    LOCATE 8, 1
                    PRINT "Bodovi:"; bodovi
                END IF

                POKE (x + (y * 320)), boja
                'PSET (x, y), boja


            END IF
        ELSEIF c$ = CHR$(80) THEN
            IF PEEK(x + ((y + 1) * 320)) = 0 THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                y = y + 1
                potezi = potezi - 1
                LOCATE 2, 2
                PRINT "Potezi:", potezi
                IF potezi = 0 THEN
                    GOTO lolo
                END IF

            ELSEIF PEEK(x + ((y + 1) * 320)) = bojakockice THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                y = y + 1
                bodovi = bodovi + 50
                pokupljen = 1
                PRINT "Bravo tocno"
                CLS
                LOCATE 2, 2
                PRINT "Potezi:", potezi

                LINE (100, 50)-(100, 150), 9
                LINE (100, 150)-(220, 150), 9
                LINE (220, 150)-(220, 50), 9
                LINE (220, 50)-(100, 50), 9
                LOCATE 8, 1
                PRINT "Bodovi:"; bodovi

            END IF
        ELSEIF c$ = CHR$(75) THEN
            IF PEEK(x - 1 + (y * 320)) = 0 THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                x = x - 1
                potezi = potezi - 1
                LOCATE 2, 2
                PRINT "Potezi:", potezi
                IF potezi = 0 THEN
                    GOTO lolo
                END IF

            ELSEIF PEEK(x - 1 + (y * 320)) = bojakockice THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                x = x - 1
                bodovi = bodovi + 50
                pokupljen = 1
                PRINT "Bravo tocno"
                CLS
                LOCATE 2, 2
                PRINT "Potezi:", potezi

                LINE (100, 50)-(100, 150), 9
                LINE (100, 150)-(220, 150), 9
                LINE (220, 150)-(220, 50), 9
                LINE (220, 50)-(100, 50), 9
                LOCATE 8, 1
                PRINT "Bodovi:"; bodovi

            END IF
        ELSEIF c$ = CHR$(77) THEN
            IF PEEK(x + 1 + (y * 320)) = 0 THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                x = x + 1
                potezi = potezi - 1
                LOCATE 2, 2
                PRINT "Potezi:", potezi
                IF potezi = 0 THEN
                    GOTO lolo
                END IF

            ELSEIF PEEK(x + 1 + (y * 320)) = bojakockice THEN
                POKE (x + (y * 320)), 0
                'PSET (x, y), 0
                x = x + 1
                bodovi = bodovi + 50
                pokupljen = 1
                PRINT "Bravo tocno"
                CLS
                LOCATE 2, 2
                PRINT "Potezi:", potezi

                LINE (100, 50)-(100, 150), 9
                LINE (100, 150)-(220, 150), 9
                LINE (220, 150)-(220, 50), 9
                LINE (220, 50)-(100, 50), 9
                LOCATE 8, 1
                PRINT "Bodovi:"; bodovi

            END IF
        END IF
    ELSEIF LEN(a$) = 1 THEN
        IF a$ = CHR$(27) THEN
            kraj = 1
        ELSEIF a$ = CHR$(43) THEN
            boja = boja + 1
        ELSEIF a$ = CHR$(45) THEN
            boja = boja - 1
        END IF
    END IF
    IF TIMER - pocetnoVrijeme& > 3 THEN
        IF pokupljen = 1 THEN
            POKE (101 + INT(RND * 119) + ((51 + INT(RND * 99)) * 320)), bojakockice
            pokupljen = 0
        END IF
    END IF
    IF pokupljen = 1 THEN
        LOCATE 8, 1
        PRINT "Bodovi:"; bodovi
    END IF

    POKE (x + (y * 320)), boja
    'PSET (x, y), boja
LOOP UNTIL kraj = 1
lolo:
CLS

PRINT "Igra je gotova."

PRINT "Tvoj iznos bodova je: "; bodovi

lila
 
0 0 hvala 0
14 godina
offline
QBasic i njegove naredbe

e, plss pomognite mi ljudi s ovim zadatkom za skolu... kako da to napravim..

ugl. treba iz datoteke rijec.dat ucitati 3 puta po 3 rijeci i svaki put ispisati najdužu koristeći LEN. plss moze ovo sta brze... :) tnx

.-~-. rođen stoljeće prekasno .-~-.
Poruka je uređivana zadnji put čet 28.4.2011 13:27 (tonchy).
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Trebat ce ti slijedece funkcije:

 

open

close

input

len

left$

right$

mid$

instr

 

Malo ih prouci, i nemoj cekati da ti nesto ovako jednostavno padne s neba. Qbasic ima odlican help koji ti je prakticki jedino sto ti treba za pisanje programa, a sadrzi i odlicne primjere.

 

btw. sto ti znaci "3 puta po 3 rijeci"?

Datoteka ima 3 rijeci, jedna rijec po liniji, pa 3 puta otvaras, citas i zatvaras datoteku.

Datoteka zapravo ukupno ima 9 rijeci, jedna rijec po liniji.

Datoteka ima 3 rijeci po liniji, te tri takve linije, cineci ukupno 9 rijeci.

 

pretpostavimo da je ovo zadnje u pitanju i imas datoteku sa slijedecim sadrzajem:

rijec1 rijec2 rijec3
rijec4 rijec5 rijec6
rijec7 rijec8 rijec9

prvo otvoris tu datoteku koristeci "open", zatim postavis petlju sa tri iteracije (citamo tri linije), u petlji koristeci "input" citas liniju teksta, nakon toga funkcijama "instr", "left$", "right$" i eventualno "mid$", pronalazis razmake u liniji te rezes string na djelove, ispitas velicinu svakog dijela i ispises najvecu rijec na monitor, postupak se ponavlja za preostale dvije linije nakon cega zatvoris datoteku koristeci "close"

 

pocni, pa ako zapne ja cu se ubaciti...

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
14 godina
offline
QBasic i njegove naredbe

ee super.. nesto sam napravio ali zapeo kod rezanja stringa.... i tocno, zapravo ima 9 rijeci... evo mog programa... stvarno nemam ideje kako da ono napravim...

ima glavni program, i 2 sub-a (upisivanje rijeci i ispisivanje najdužih)

treba: uciniti da mogu upisati 3 puta po 3 rijeci, i da mi ispiše najduže...

 

DECLARE SUB cita ()

DECLARE SUB otvori ()

CLS

TYPE rijeci

     rijec AS STRING * 50

END TYPE

LOCATE 5, 10: PRINT "Izbor"

LOCATE 7, 7: PRINT "a- Upiçi nove rijeźi"

LOCATE 8, 7: PRINT "b- Ispiçi najdu§u rijeź"

LOCATE 18, 3: INPUT "Unesi §eljeno slovo: ", s$

SELECT CASE s$

CASE "a", "A"

CALL otvori

CASE "b", "B"

CALL cita

GOTO 20

END SELECT

INPUT "Za nastavak pritisni ENTER", o$

GOTO 20

20 END

--------------------------

SUB cita

DIM skup AS rijeci

DIM rijec$(3)

i = 0

OPEN "D:\QB\RIJEC.DAT" FOR RANDOM AS #1 LEN = LEN(skup)

FOR i = 1 TO 3

GET #1, i, skup

PRINT i; "rijeź: "; skup.rijec$

NEXT i

CLOSE #1

END SUB

--------------------

SUB otvori

CLS

DIM skup AS rijeci

i = 0

OPEN "D:\QB\RIJEC.DAT" FOR RANDOM AS #1 LEN = LEN(skup)

FOR i = 1 TO 3

INPUT "Upiçi rijeź: ", skup.rijec$

PUT #1, i, skup

NEXT i

CLOSE #1

END SUB

 

.-~-. rođen stoljeće prekasno .-~-.
 
0 0 hvala 0
16 godina
moderator
offline
Re: QBasic i njegove naredbe

Znači, napišeš si još jednu funkciju ili sub - štogod, koja će ti uzimati taj tvoj jedan redak u datoteci (string * 50) kao argument i dalje radiš s njim.

 

A što radiš? Pa pomoću funkcij instr pronađeš prvi razmak - recimo da je to pozicija razmak1. Koja ti je onda prva riječ? Left$(rijec$, razmak1) ili tako nekako, zar ne? Znači, imaš sad prvu od tri riječi.

 

Sad se moraš riješiti te prve riječi, u osnovi je obrisati iz stringa. Kako ćeš to napraviti? Pa uzet ćeš string od pozicije razmak1+1 (nisam za ovo siguran - nemam pojma kako idu indeksi u QBASIC-u) pa sve do kraja riječi, zar ne? Znači, nesto tipa $riject=right$(rijec$, len(rijec$) - razmak1). Time si ogulio prvu rijec iz stringa.

 

Kako ćeš do druge riječi? Potpuno ista stvar - tražiš razmak, left$ do razmaka, i na kraju brišeš tu drugu riječ (ona je sad u string prva riječ). I kad obrišeš tu drugu riječ (uključujući razmak), već imaš treću riječ - to je ono što ti je ostalo od stringa.

 

------------------------

 

Nije mi inače jasno zašto si išao komplicirati program s definiranjem Type rijeci i što će ti random pristup datoteci.  Iovako ionako spremaš u datoteku redak po redak i čitaš iz nje redak po redak, zar ne? Bez skakanja tamo-vamo? Znači, umjesto toga što si radio, jednostavno si mogao triput obični string ispisati u datoteku i isto tako ga pročitati iz nje.

 

------------------------

 

Inače, zašto imaš prored? To je editor na forumu zeznuo ili to sam radiš? Ovo je nečitko - ne bi trebao imati prored, već bi logički trebao odjeljivati cjeline. Znači, vertikalni razmak prije i poslije for petlje i sl. Također, uvlači ono što ti je na hijerarhijski nižoj razini - recimo ono što je unutar for petlje.

 

Još mi jedna stvar nikako ne ide u glavu. Vi QBasicaši ste toliko opsjednuti GOTO naredbom da ne možete, a da ne napišete program bez nje, zar ne? IZBACI JE! Kojeg ti smisla da naredba ima u ovom programu? NE KORISTI NAREDBU GOTO OSIM AKO TO NIJE PRIJEKO POTREBNO! S korištenjem naredbe GOTO učiš se programirati na POGREŠAN NAČIN.

14 godina
neaktivan
offline
Re: QBasic i njegove naredbe
tonchy kaže...
...

Nisi morao definirati vlastiti tip podataka, qbasic se malo bolje snalazi sa stringovima od C-a. Zasto koristis "end" na kraju programa? Nije potreban. "select case" je previse za testiranje 2 jednostavna uvjeta, "if" je tu puno prikladniji. "select case" ti je vise za slucajeve kada moras ispitati cijeli niz uvijeta i bilo bi neprakticno svaki posebno provjeravati "if" naredbom. Random pristup datoteci nije potreban, mozes koristiti input i print umjesto get i put, sto ce ti olaksati zivot.

 

evo sto sam napravio od tvog programa:

 

DECLARE SUB cita ()
DECLARE SUB otvori ()

CLS

LOCATE 5, 10: PRINT "Izbor"
LOCATE 7, 7: PRINT "a- Upisi nove rijeci"
LOCATE 8, 7: PRINT "b- Ispisi najduzu rijec"
LOCATE 18, 3: INPUT "Unesi zeljeno slovo: ", s$

IF (s$ = "a" OR s$ = "A") THEN
        otvori
        INPUT "Za nastavak pritisni ENTER", o$
ELSEIF (s$ = "b" OR s$ = "b") THEN
        cita
        INPUT "Za nastavak pritisni ENTER", o$
END IF

SUB cita
DIM rijeci(9) AS STRING
CLS

OPEN "RIJEC.DAT" FOR INPUT AS #1

FOR i = 0 TO 2
        INPUT #1, linija$
      
        rijeci(i * 3 + 1) = LEFT$(linija$, INSTR(linija$, " ") - 1)
        linija$ = RIGHT$(linija$, LEN(linija$) - INSTR(linija$, " "))

        rijeci(i * 3 + 2) = LEFT$(linija$, INSTR(linija$, " ") - 1)
        linija$ = RIGHT$(linija$, LEN(linija$) - INSTR(linija$, " "))

        rijeci(i * 3 + 3) = linija$
NEXT i

FOR n = 0 TO 2
        najvecaduljina = 0
        najdulji = 1
        FOR i = 1 TO 3
                IF LEN(rijeci(n * 3 + i)) > najvecaduljina THEN
                        najdulji = i
                        najvecaduljina = LEN(rijeci(n * 3 + i))
                END IF
        NEXT i
        PRINT rijeci(n * 3 + najdulji)
NEXT n

CLOSE #1
END SUB

SUB otvori
DIM rijeci(3) AS STRING
CLS

OPEN "RIJEC.DAT" FOR OUTPUT AS #1
FOR i = 1 TO 3
        FOR n = 1 TO 3
                INPUT "Upisi rijec: ", rijeci(n)
        NEXT n
        PRINT #1, rijeci(1); " "; rijeci(2); " "; rijeci(3)
NEXT i
CLOSE #1
END SUB

 

 

Sad kad gledam, neke sam stvari mogao i skratiti, ali tko ga j.... radi i ovako :D

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
Poruka je uređivana zadnji put pet 29.4.2011 19:20 (rustweaver).
14 godina
offline
Re: QBasic i njegove naredbe
malo me zafrkava ovaj html kod pa moram ovako citate.... hebemu.... )($&##/$ {#} {#}
mbaksa kaže...

1.

Nije mi inače jasno zašto si išao komplicirati program s definiranjem Type rijeci i što će ti random pristup datoteci.  Iovako ionako spremaš u datoteku redak po redak i čitaš iz nje redak po redak, zar ne? Bez skakanja tamo-vamo? Znači, umjesto toga što si radio, jednostavno si mogao triput obični string ispisati u datoteku i isto tako ga pročitati iz nje.

------------------------

2.

Inače, zašto imaš prored? To je editor na forumu zeznuo ili to sam radiš? Ovo je nečitko - ne bi trebao imati prored, već bi logički trebao odjeljivati cjeline. Znači, vertikalni razmak prije i poslije for petlje i sl. Također, uvlači ono što ti je na hijerarhijski nižoj razini - recimo ono što je unutar for petlje.

 

1. eee, ovo mi je tek sad doslo... {#} smetnuo sam to s uma kad sam radio program.. {#}

2. da, mora da je forum, jer čim sam napisao post izašao sam s foruma, nisam pregledavao... ah nvm sad... 

tnx na savjetima

rustweaver kaže...
Nisi morao definirati vlastiti tip podataka, qbasic se malo bolje snalazi sa stringovima od C-a. Zasto koristis "end" na kraju programa? Nije potreban. "select case" je previse za testiranje 2 jednostavna uvjeta, "if" je tu puno prikladniji. "select case" ti je vise za slucajeve kada moras ispitati cijeli niz uvijeta i bilo bi neprakticno svaki posebno provjeravati "if" naredbom. Random pristup datoteci nije potreban, mozes koristiti input i print umjesto get i put, sto ce ti olaksati zivot.
ah, nemam komentara... {#}  {#}  super, stvarno nisam imao pojma, jer inače uvijek volim komplicirati... :) svaka cast i hvaala {#}
.-~-. rođen stoljeće prekasno .-~-.
16 godina
moderator
offline
Re: QBasic i njegove naredbe
rustweaver kaže...

LOCATE 18, 3: INPUT "Unesi zeljeno slovo: ", s$

IF (s$ = "a" OR s$ = "A") THEN
        otvori
        INPUT "Za nastavak pritisni ENTER", o$
ELSEIF (s$ = "b" OR s$ = "b") THEN
        cita
        INPUT "Za nastavak pritisni ENTER", o$
END IF

Ne sjećam se više jesam li tebi prokomentirao ovako nešto već jednom, ali kad je u pitanju bio neki drugi programski jezik. Kad se uspoređuju stringovi, a bitno je da nisu case-sensitive (kao u ovom slučaju), onda je najpametnije odmah promijeniti case pa onda imaš poslije manje uvjeta za raditi, a shodno tome i teže ćeš napraviti neki bug - kao recimo ti u ovom slučaju - dvaput si provjerio za "b", a ni jednom za "B". {#}

 

Također, na sličan sam način već čistio tuđe izvorne kodove, vezano uz duplanje istih naredbi. Naime, ovaj input ide u SVAKOM slučaju. Stoga ga nema smisla stavljati u uvjet, nego ga treba izvaditi iz uvjeta i staviti iza njega. Zašto dvaput pisati istu stvar? Također se otvara mogućnost pravljenja buga, pogotovo ako se ide mijenjat tu liniju.

 

Još jedna stvar su zagrade kod uvjeta - one idu u C-like jezicima, ali u Basicu i Pascalu ne moraju ići, niti je konvencija takva da bi išli.

 

Znači, to treba ići ovako:

 

LOCATE 18, 3: INPUT "Unesi zeljeno slovo: ", s$

s$ = LCASE$(s$)

IF s$ = "a" THEN
        otvori       
ELSEIF s$ = "b" THEN
        cita       
END IF

INPUT "Za nastavak pritisni ENTER", o$

 

 

Trebalo bi napomenuti da se neki rezultati mogu i "keširati" i to bi trebalo iskoristiti, pogotovo ako se radi velik broj operacija (recimo u petljama), jer se bezveze troši procesorko vrijeme. Ovdje bi trebalo keširati rezultat funkcije INSTR - nema potrebe da se dvaput pretražuje isti string za istim znakom (razmakom). Znači, imaš:

 

rustweaver kaže...

        rijeci(i * 3 + 1) = LEFT$(linija$, INSTR(linija$, " ") - 1)
        linija$ = RIGHT$(linija$, LEN(linija$) - INSTR(linija$, " "))

        rijeci(i * 3 + 2) = LEFT$(linija$, INSTR(linija$, " ") - 1)
        linija$ = RIGHT$(linija$, LEN(linija$) - INSTR(linija$, " "))

        rijeci(i * 3 + 3) = linija$

 

To bi bilo bolje riješiti ovako:

rustweaver kaže...

       
        razmak = INSTR(linija$, " ")
        rijeci(i * 3 + 1) = LEFT$(linija$, razmak - 1)
        linija$ = RIGHT$(linija$, LEN(linija$) - razmak)

        razmak = INSTR(linija$, " ")
        rijeci(i * 3 + 2) = LEFT$(linija$, razmak - 1)
        linija$ = RIGHT$(linija$, LEN(linija$) - razmak)

        rijeci(i * 3 + 3) = linija$

 

 

Nemoj zamjerit na komentarima, nije kritika, nego samo dopuna - to je namijenjeno ovim početnicima da odmah uče upravo onako kako bi se pravilno trebao pisati kod, odnosno da im se već sad skrene pažnja na neke stvari na koje bi trebali paziti. {#}

Poruka je uređivana zadnji put pet 29.4.2011 22:41 (mbaksa).
14 godina
neaktivan
offline
Re: QBasic i njegove naredbe
mbaksa kaže...
rustweaver kaže...

ELSEIF (s$ = "b" OR s$ = "b") THEN

hahahahaha busted :D

 

Stvarno nisam ni skuzio sto sam napravio, pogotovo ovo sa zagradama, C mi se totalno uvukao pod kozu, dobro da nisam negdje stavio ";" na kraj...

 

Naravno da ne zamjeram, sve sto si rekao je tocno.

 

btw. onaj input sto se ponavlja, to sam namjerno tako napravio, htio sam bas postici isto ono sto je on napravio sa goto-om, ali bez koristenja istog...

Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
12 godina
neaktivan
offline
QBasic i njegove naredbe

evo ljudi ja sam mali pocetnik

moze li mi neko tocno napisati neku naredbu za QBASIC 64 da proucim to malo

molim vas neku naredbu kako nacrtati krug ili zmiju ili nesto

 

i molim vas ukratku mi to objesnite hvala

petar
Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: QBasic i njegove naredbe
zovkec kaže...

evo ljudi ja sam mali pocetnik

moze li mi neko tocno napisati neku naredbu za QBASIC 64 da proucim to malo

molim vas neku naredbu kako nacrtati krug ili zmiju ili nesto

 

i molim vas ukratku mi to objesnite hvala

A da pogledaš prve postove?
QBasic je najbolje učiti iz njegovog Help-a, koliko znam mnogi su ga tako naučili.
Ako si početnik u programiranju ne zamaraj se previše krugovima, nego počni učiti logiku, pogledaj teme po ovom podforumu.

Au tek sad vidim da je @zovkec neaktivan, ali nema veze.

Life is Computers, Tobacos, Women, Trucks, you live better?
Poruka je uređivana zadnji put čet 27.10.2011 19:25 (royalhero).
12 godina
neaktivan
offline
QBasic i njegove naredbe

Ja imam problem koji baš nisam uocio da negdje ovdje pise...

ja kada pokusam napisati neku naredbu...

npr.

PRINT " KAC "

 

Meni se pojavljuje PRINT @ KAC @ ...

NIKAKO NEMOGU NAPISAO " ...

Jeli znate u cemu je problem?

 
0 0 hvala 0
12 godina
neaktivan
offline
Re: QBasic i njegove naredbe

Engleski karakteri, na HR je Shift+ 2, a na EN Shift + Ć, tako ja mislim. A to možeš rijšiti skriptama, pogledaj iznad u temi ili čekaj @rustveawera.

14 godina
neaktivan
offline
Re: QBasic i njegove naredbe
Kac2506 kaže...

Ja imam problem koji baš nisam uocio da negdje ovdje pise...

U postavkama jezika tipkovnice vjerojatno. Koji OS koristis?

My computer once beat me at chess, but we got even after a round of boxing.
13 godina
neaktivan
offline
QBasic i njegove naredbe

Ovako, ljudi trebam pomoć oko programiranja u Qbasicu..idem u drugi raz Računalnog tehničara u strojarstvu..i znači imam programski zadatak iz Računalstva a nemam blage veze a također moj profesor je nob koi nista nezna objasniti...da ne odugovlačim zadatak glasi ovako:

Prema priloženom primjeru programu u QBasic-u za kvadratnu jednadžbu napiši program za sljedeći primjer:

      4X^2 + X/2+ 6=0 

ovo X^2 je x na kvadrat...

evo ljudi ako netko zna, bio bih mu zahvalan.. :) 

Moj PC  
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice