|
[ dr.zmaj @ 03.03.2009. 10:03 ] @
| Zelim da napisem program koji bi pamtio odnosno ucio pokrete koje bi zadavao preko tastera. Radi se o robot ruci, koja ima cetiri motora. Program imam u QBasic-u koji omogucava pamcenje duzine pritisnutog tastera za odredjeni motor. Nakon zadavanja putanje za sva cetiri motora, program omogucava da robot samostalno ponovi zapamcenu putanju. Kako to odraditi u VBasic-u. Da li neko ima ideju. |
[ stefanpn @ 03.03.2009. 15:59 ] @
Moguće je i imam ideju, tačnije znam i kako.
Počni da radiš pa gde zapne, pomoćićemo...
[ rgdrajko @ 03.03.2009. 21:23 ] @
Verzije basica(Microsoft) idu ovako: gwbasic, qbasic, visual basic, vb.net. Prema tome bez problema mozes ucitati taj tvoj program u visual basic vb6 i uz sitne korekcije program ce odmah raditi.
[ stefanpn @ 04.03.2009. 00:21 ] @
Rajko ne slažem se sa tobom.
Visual Basic 6 je object oriented, event driven, programski jezik za windows platformu (osim verzije 1.0), dok je QBasic proceduralno orijentisan i sasvim drugačije koncipiran (OS: DOS).
Program, koji pod QBasic-om može da očitava pritisnute tastere:
Code:
Do While Not [uslov]
key = Inkey$
...
Loop
kod Visual Basic-a, imamo event Object_KeyDown ili Object_KeyPress na čije se dešavanje izvršava određeni podprogram:
Code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
...
End Sub
VB nema ugrađenu GFX biblioteku kao QBasic, tako da bi se i deo programa koji daje bilo kakav grafički prikaz morao prepraviti.
Sama komunikacija sa uređajem bi verovatno morala biti odrađena drugačije u Visual Basic-u.
U QBasicu može da se koristi:
Code:
Open "Com1" For xxxx as xx
...
Close
ali je to pod Visual Basic-om jako ne preporučljivo, iz prostog razloga što je teško kontrolisati komunikaciju, i "vrebati" trenutak kada se očekuje da stignu podaci. Alternativa je MSComm ili API pozivi, koji ne postoje u QBasicu, što znači još puno ispravki u ovom delu.
Ovo što sam naveo samo samo neki od razloga zašto bi program morao "malo više" da se prepravi da bi bio uspešno izvršen pod Visual Basic Runtime-om. Ukoliko sam nešto propustio i zabrljao ne zamerite, pišem posle malo alkohola i bančenja, tako da je ovo skoro sve što mi je palo na pamet, a siguran sam da sam još 10 stvari zaboravio...
Ukoliko je potrebno da se program uz što manje prepravki "natera" da radi kao Windows ili Linux aplikacija toplo preporučujem FreeBASIC.
[ rgdrajko @ 04.03.2009. 07:34 ] @
Nisi u pravu, Qbasic je nizi od VB6 ali potpuno kompatibilan jer je vb6 nastao iz Qbasica i uz odredjene sitne logicke ispravke svaki Qbasic program ce raditi u VB6.
Probaj ako poznajes dobro oba jezika da Qbasc izvrsis na VB6, pri tome ces morati da prilagodis staru logiku Qbasica logici VB6 za neke komande. To prilagodjavanje je lako i brzo ako dobro poznajes oba ta jezika.
Nakon toga kada program proradi onda bi trebalo taj isti program napisati kao objektni program ispocetka na osnovu iskustava u vezi te problematike koje si stekao u Qbasic programu.
Mozda je ova ispravka teska za one koji slabo poznaju oba jezika.
[ stefanpn @ 04.03.2009. 12:06 ] @
Kojim slučajem poznajem oba programska jezika i to vrlo, vrlo dobro. Uzmi iole komplikovaniji QBasic program i probaj da ga nateras da se izvrši kao VB program videćeš šta ti govorim.
Visual Basic je nastao pod uticajem QBasic-a, ne i iz njega... Možda je ta kompatibilnost bila veća u verziji Visual Basic 1.0 ali se to sa novijim verzijama promenilo.
Nibbles.bas
Pošto je to tako lako, zašto ne bi prepravio ovo za nas, kao mali sam mnogo voleo da igram ovu igricu, čak sam je i prepravljao malo kad mi originalna verzija dosadi.
Uvidećeš da je prevođenje ovog koda u VB6 kod zahtevno i shvatićeš o čemu ti pričam.
BTW. Prevođenje je sasvim moguće! Ali ćeš to brže prevesti u C nego u Visual Basic.
Edit: izbrisan program i smešten u attachment.
[Ovu poruku je menjao stefanpn dana 04.03.2009. u 20:17 GMT+1]
[ Eurora3D Team @ 04.03.2009. 12:19 ] @
Mislim da bi bilo najlakse da se ovo prevede u FreeBasic ... a i inace u vezi ove teme , mozda bi taj QBasic program bilo bolje prevesti u FreeBasic nego u VB6, ako FreeBasic ima neku ugradjenu podrsku za comm portove.
[ rgdrajko @ 04.03.2009. 15:36 ] @
Citat: stefanpn:
' Q B a s i c N i b b l e s
'
...
Ma nije problem da to uradim, samo trenutno nemam vremena. Mozda bi bilo najbolje kada bih uradio konvertor fajlova iz Qbasica u VB6.
[ stefanpn @ 04.03.2009. 15:50 ] @
Ne bih da budem nepristojan i započinjem raspravku.
Ali nisam ja ni rekao da je problem da se to uradi već da nije tako jednostavno kao što si ti misliš.
Citat: rgdrajko: ...Qbasic je nizi od VB6 ali potpuno kompatibilan jer je vb6 nastao iz Qbasica...
Ovo je potpuno netačna izjava.
QBasic je jezik "viskokog nivoa" kao i Visual Basic. Ako misliš na to da je QBasic niži samo zato što je stariji onda nisi u pravu.
Pogledaj o čemu ti govorim: ovde.
QBasic i Visual Basic NISU KOMPATIBILNI!!!
Visual Basic 6 je object oriented, event driven, programski jezik za windows platformu (osim verzije 1.0), dok je QBasic proceduralno orijentisan, ne struktuiran programski jezik za DOS platformu.
Citat: rgdrajko: Mozda bi bilo najbolje kada bih uradio konvertor fajlova iz Qbasica u VB6.
Super, uradi to! Proslavićeš se.
[ Shadowed @ 04.03.2009. 16:23 ] @
Nemoj da se nerviras 
Pogotovo ne zbog Rajka 
[ Aleksandar Ružičić @ 04.03.2009. 19:09 ] @
Ja bih, takodje, jako voleo da vidim QBasic -> VB6 konvertor, a znajuci Rajka i njegovo 50-godisnje iskustvo u programiranju (ukljucujuci tu i verzije qbasica koje su postojale pre nastanka majkrosofta) ja verujem da je on jedini covek kome bi to poslo za rukom.
Zato, Rajko imas od mene punu (nazalost, samo moralnu) podrsku za taj poduhvat.
@stefanpn: ako te ne mrzi, molim te sacuvaj onaj qbasic kod kao fajl i uploaduj ga uz poruku a onaj kod izbaci iz poruke. ovako je tema bespotrebno teska za citanje...
[ rgdrajko @ 04.03.2009. 19:54 ] @
Zanimljivo, moderatori su se konacno pojavili, mada ih danima nisam video ni u jednoj temi. Hvala bogu, zivi ste.
[ rgdrajko @ 04.03.2009. 20:06 ] @
Citat: Aleksandar Ružičić: ... a znajuci Rajka i njegovo 50-godisnje iskustvo u programiranju
Zbog ovakvih uvreda sam vec jednom otisao sa foruma pa zbog njih idem i sada.
Smatram da moderatori ne bi trebalo da vredjaju i ponizavaju clanove ovog foruma.
Leci se covece, leci te svoje komplekse i nacuci se da budes lepo vaspitan.
[ Shadowed @ 04.03.2009. 20:16 ] @
Jednom?
[ stefanpn @ 04.03.2009. 20:29 ] @
Rajko, ja nisam moderator ali ti stvarno nisi u pravu sto se tice ovoga. Kad si uvideo da si pogresio mogao si lepo da priznas a ne da odmah menjas temu na to kako te moderatori maltretiraju.
BTW: Mogao bi sav ovaj off-topic da se obrise...
[ dava @ 04.03.2009. 21:32 ] @
haha... e dugo si i traj'o ovaj put.
I da, bice da si vec dva puta odlazio, ovo je treci :)
[ Aleksandar Ružičić @ 04.03.2009. 22:28 ] @
ih Rajko, pa sto si se uvredio? Ako sam omasio za koju godinu ja ti se evo iskreno izvinjavam, nisam namerno. A ako nije istina da imas visedecenijsko iskustvo onda si sam kriv, jer si se istim dicio ovde nebrojeno puta.
[ dr.zmaj @ 08.03.2009. 19:00 ] @
O cemu ovde vi pricate. Nemojte se prepucavati ovde nego pomazite svojim idejama. Normalno je da neke stvari iz QBasic-a mogu da rade i da ima slicnosti sa VBasic-om, ali iole ozbiljniji kod zahteva kompletnu promenu. Evo kod u QBasic-u:
Code:
Dim a(1000, 2)
Do
Cls
izlaz = 888: ' ili 956
x = 1
l = 19
GoSub okvir
GoSub okvir2
x = 25
l = 21
GoSub okvir
GoSub okvir2
x = 50
l = 21
GoSub okvir
GoSub okvir2
GoSub legenda
x = 25
GoSub radi
x = 50
GoSub ponavlja
Loop
End
' ---------------------------------------------------------------
legenda:
y = 6
LOCATE 3, 5: Print "R O B O T"
LOCATE y + 3, 3: Print "2 = natrag"
LOCATE y + 5, 3: Print "8 = napred"
LOCATE y + 7, 3: Print "6 = okret levo"
LOCATE y + 9, 3: Print "4 = okret desno"
LOCATE y + 11, 3: Print "5 = stoj"
LOCATE y + 13, 3: Print "0 = prekid ucenja"
LOCATE y + 15, 5: Print "ESC = izlaz"
LOCATE 3, 35: Print "UCI"
LOCATE 3, 58: Print "PONAVLJA"
LOCATE y + 7, 27: Print "Korak :"
LOCATE y + 9, 27: Print "Izlaz:"
LOCATE y + 11, 27: Print "Vreme:"
LOCATE y + 13, 27: Print "Trajanje:"
LOCATE y + 7, 52: Print "Korak :"
LOCATE y + 9, 52: Print "Izlaz:"
LOCATE y + 11, 52: Print "Vreme:"
LOCATE y + 13, 52: Print "Trajanje:"
Return
' --------------------------------------------------------------
okvir:
y = 7
lin$ = "": raz$ = ""
For i = 1 To l
lin$ = lin$ + Chr$(205)
raz$ = raz$ + Chr$(32)
Next i
up$ = Chr$(201) + lin$ + Chr$(187)
dn$ = Chr$(200) + lin$ + Chr$(188)
vt$ = Chr$(186)
LOCATE y, x: Print up$
For i = 1 To 15
LOCATE y + i, x: Print vt$ + raz$ + vt$
Next i
LOCATE y + 16, x: Print dn$
Return
' ---------------------------------------------------------------
okvir2:
y = 1
lin$ = "": raz$ = ""
For i = 1 To l
lin$ = lin$ + Chr$(205)
raz$ = raz$ + Chr$(32)
Next i
up$ = Chr$(201) + lin$ + Chr$(187)
dn$ = Chr$(200) + lin$ + Chr$(188)
vt$ = Chr$(186)
LOCATE y, x: Print up$
For i = 1 To j + 3
LOCATE y + i, x: Print vt$ + raz$ + vt$
Next i
LOCATE y + 4, x: Print dn$
Return
' ---------------------------------------------------------------
radi:
LOCATE 9, 27: Print "START"
LOCATE 11, 27: Print "Bilo koja tipka."
q$ = INPUT$(1)
y = 7
a(0, 1) = 0
a(0, 2) = 0
OUT izlaz, 0
t0 = Timer
i = 1
Do
q$ = INPUT$(1)
If q$ = "8" Then w = 10
If q$ = "2" Then w = 5
If q$ = "6" Then w = 6
If q$ = "4" Then w = 9
If q$ = "5" Then w = 0
If q$ = "0" Then Exit Do
If Asc(q$) = 27 Then End
a(i, 1) = w
a(i, 2) = Timer - t0
OUT izlaz, w
LOCATE 6 + y, x + 15: Print USING; "###"; i
LOCATE 8 + y, x + 15: Print USING; "###"; a(i, 1)
LOCATE 10 + y, x + 15: Print USING; "###.##"; a(i, 2)
LOCATE 12 + y, x + 15: Print USING; "###.##"; a(i, 2) - a(i - 1, 2)
i = i + 1
Loop
OUT izlaz, 0
a(i, 1) = 0
a(i, 2) = Timer - t0
n = i - 1
Return
' --------------------------------------------------------------
ponavlja:
LOCATE 9, 52: Print "START"
LOCATE 11, 52: Print "Bilo koja tipka."
q$ = INPUT$(1)
y = 7
t0 = Timer
For i = 0 To n
t1 = Timer
LOCATE 6 + y, x + 15: Print USING; "###"; i
LOCATE 8 + y, x + 15: Print USING; "###"; a(i, 1)
LOCATE 10 + y, x + 15: Print USING; "###.##"; a(i, 2)
Do
OUT izlaz, a(i, 1)
If Timer - t0 >= a(i + 1, 2) Then Exit Do
Loop
LOCATE 12 + y, x + 15: Print USING; "###.##"; Timer - t1
Next i
OUT izlaz, 0
Return
Mene zanima kako da resim u VB da pamti koliko sam drzao pritisnut taster za odredjenu kretnju.
[Ovu poruku je menjao Aleksandar Ružičić dana 08.03.2009. u 23:40 GMT+1]
[ Aleksandar Ružičić @ 08.03.2009. 22:39 ] @
1. na KeyDown zapamtis trenutno vreme (u milisekundama ti je najbolje) u neku globalnu promenljivu
2. na KeyUp od trenutnog vremena oduzmes vreme koje ti se nalazi u globalnoj promenljivoj i ta razlika ti je mera koliko dugo je taster bio pritisnut
[ dr.zmaj @ 10.03.2009. 20:00 ] @
Video sam na internetu i skino sam fajl koji omogucava kodu pisanom u QBasic-u, na racunaru koji radi pod XP-om, da pristupa paralelnom portu, ali vezija koju sam ubacio na racunar je ogranicena tako da radi otprilike samo desetak minuta, pa onda opet mora racunar da se restartuje. Verzija mora da se plati. Da li zna neko nesto slicno i gde moze da se skine. Mislim da se zove DOSLpt ili tako nesto.
[ stefanpn @ 12.03.2009. 13:54 ] @
FreeBASIC
Jednostavno kompajliraj ovo sa "-lang qb" opcijom i radiće po Windows-om  , a može i pod Linux-om.
[ dr.zmaj @ 23.03.2009. 08:18 ] @
Ne moze, javlja error74
[ stefanpn @ 23.03.2009. 17:16 ] @
Greška 74, znači da su ti ne važeći parametri komandne linije.
Kako pozivaš "fbc.exe", sa kojim parametrima?
Probaj ovako:
Code:
fbc.exe -lang qb "imedatoteke.bas"
[ dr.zmaj @ 29.03.2009. 15:29 ] @
Hvala uspelo je i radi kako treba, ostvarena je komunikacija sa paralelnim portom. Skino sam i neke editore u kojima se moze ucitati ili pisati kod, a koji navodno kompajliraju u freebasicu. Ucitam ja taj kod i pokusam da ga pokrenem, otvori se pocetni meni koda ali kada pokusam da pomocu tastera pokrenem motore javlja gresku, ali sada to i nije bitno kada sam iz komandne linije uspeo da kompajliram taj isti kod.
[ stefanpn @ 30.03.2009. 00:35 ] @
Stvar je u tome što ti uz FBIde dolazi starija verzija compilera, instaliraj samo IDE ne i compiler koji dolazi uz njega (verzija 0.15).
A možda si zaboravio da naglasiš da treba da kompajlira u QB compatibility modu.
Za FBIde ti Compiler Command treba da izgleda ovako: "<$fbc>" "<$file>" -lang qb
Probaj JellyFB ili FBEdit.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|