FreeBASIC programiranje, pitanja i odgovori

poruka: 47
|
čitano: 17.357
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Za one koji ne znaju FreeBASIC je open source kompajler za Windows, DOS i Linux. Sintaksa je vrlo slična QuickBASIC-u s time da je ovaj itekako unaprijeđen. Ima značajke objektno-orjentiranog programiranja kao što su metode, konstruktori, dinamičko alociranje memorije, klase...

FreeBASIC ima vlastitu grafičku biblioteku FBgfx sa kojom je jednostavno prikazivati osnovne grafičke funkcije.

Sve u svemu, jezik je vrlo jednostavan za korištenje, možda su ga neki već koristili. Preporučujem ga onima koji počinju programirati.

 

Neki primjeri:

 

Hello, world:

? "Hello, World!

Sleep

 

Grafika:

ScreenRes 640, 480

Line(0, 0)-(100, 100), 1, BF

? "Hello, World!"

Circle(10, 10), 20, 2

PSet(50, 15), 4

Sleep

 

Varijable:

Dim As Integer polje(15), i

 

For i=0 To 15

  polje(i) = Int(Rnd(1)*10000)

Next

 

For i=0 To 15

  ? i & " = " & polje(i)

Next

 

Sleep

 

Klase:

Type ucenik

  godina  As Integer

  prosjek As Single

  razred  As Integer

  ime    As String

  prezime As String

  godiste As Integer

End Type

 

Dim As ucenik pero

 

With pero

  .godina  = 17

  .prosjek = 4.7

  .razred  = 3

  .ime    = "Pero"

  .prezime = "Peric"

  .godiste = 1994

End With

 

? "Ovo je ucenik " & pero.ime & " " & pero.prezime & " roden " & pero.godiste & ". godine, te ima " & pero.godina & " godina."

? pero.ime & " ide u " & pero.razred & ". razred."

? "Prosjek mu je " & pero.prosjek & "."

Sleep

 

WinAPI:

#Include Once "windows.bi"

 

Dim Shared As HINSTANCE hInst

hInst = GetModuleHandle(NULL)

 

Function WndProc(hWnd As HWND, msg As UINT, wParam As WPARAM, lParam As LPARAM) As LRESULT

  Select Case msg

   Case WM_CREATE

    MessageBox(hWnd, !"Pozdrav BUG-u!\nKlikni OK za početak!", "Pozdravna poruka", MB_OK Or MB_ICONASTERISK)

 

   Case WM_PAINT

    Dim As PAINTSTRUCT ps

 

    BeginPaint(hWnd, @ps)

     SelectObject(ps.hdc, GetStockObject(DEFAULT_GUI_FONT))

     DrawText(ps.hdc, @"Podrav BUG-u!", -1, @ps.rcPaint, DT_CENTER Or DT_VCENTER Or DT_SINGLELINE)

    EndPaint(hWnd, @ps)

 

   Case WM_DESTROY

    PostQuitMessage(NULL)

 

  End Select

 

  Return DefWindowProc(hWnd, msg, wParam, lParam)

End Function

 

Dim As MSG    uMsg

Dim As WNDCLASS wcls

Dim As HWND    hWnd

 

With wcls

  .style      = CS_HREDRAW Or CS_VREDRAW

  .lpfnWndProc   = Cast(WNDPROC, @WndProc)

  .hInstance    = hInst

  .hIcon      = LoadIcon(NULL, IDI_EXCLAMATION)

  .hCursor     = LoadCursor(NULL, IDC_ARROW)

  .hbrBackground = GetStockObject(WHITE_BRUSH)

  .lpszMenuName  = NULL

  .lpszClassName = StrPtr("WindowClass")

End With

 

If RegisterClass(@wcls) = FALSE Then

  MessageBox(NULL, "RegisterClass(@wcls) FAIL!", "Error!", MB_OK Or MB_ICONERROR)

  End

EndIf

 

hWnd = CreateWindowEx(NULL, "WindowClass", "Pozdrav BUG", WS_OVERLAPPEDWINDOW Or WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInst, NULL)

UpdateWindow(hWnd)

 

While GetMessage(@uMsg, NULL, NULL, NULL) <> FALSE

  TranslateMessage(@uMsg)

  DispatchMessage(@uMsg)

Wend

 

Download compilera: http://www.freebasic.net/get

I toplo preporučujem FbEdit kao IDE: http://sourceforge.net/projects/fbedit/

 

Slobodno postajte pitanja, odgovore, projekte, primjedbe itd...

 

0100001001101111011010100110000101101110
Poruka je uređivana zadnji put ned 10.6.2012 18:42 (Boky).
Moj PC  
6 1 hvala 3
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Ucxim programiranje u FreeBasicu, i zanima me razlika izmedju koristenja naredbe SLEEP i TIMER,

posebno pri izvodjenju petlji u primjeni na robotiku.

 

Cxini mi se da je TIMER bolja pa i preciznija naredba, ali u Help-Manualu pod TIMER pisxe:

 

"Note: if the program must wait for periods of 0,1 second or more, SLEEP should be used instead,

as this allows other programs to run during the waiting period."

 

Ovo me jako zainteresiralo - naime prvo ne razumijem zasxto za periode od 0,1 sec 'i visxe'

treba koristiti SLEEP - kada TIMER radi na 10 decimala?, a drugo - da li je mogucye da za vrijeme SLEEP

naredbe program izvrsxava i neke druge zadatke - koji bi se odnosili na neke druge izlaze (OUT 888,...) ??

 

sx.

 

 

 

 

 

 

16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Naredba Sleep, pauzira program na određeni broj tisunćinki. Dok naredba Timer vraća vrijednost koliko je sekundi prošlo od neke referentne vremenske točke.

Sleep pauzira sve procesorske naredbe za program koji se izvršava, a ako koristiš Timer u ovoj varijanti:

Dim As Double t

 

t = Timer

 

While Timer < t+5

Wend

Primjetiti ćeš u task manager-u da korištenje CPU-a za tvoj program poraste, dok kod korištenja samo Sleep 5000, korištenje CPU-a je 0.

Naravno Timer je precizniji kad se koriste neke petlje i ako se više puta treba izmjeriti prolaz vremena od neke točke. Ali da bi se izbjegao rast korištenja CPU-a najbolje je staviti Sleep 1 u petlju, npr.:

Dim As Double t

 

t = Timer

 

While Timer < t+5

Sleep 1

Wend

0100001001101111011010100110000101101110
Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Hvala.

Znači bolje SLEEP.

 

Npr:

 

DO

.....

SLEEP 1

LOOP

 

 

16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Da, ako imaš, ali naravno ako u tom primjeru:

DO

...

SLEEP 1

LOOP

 

negje u te tri točke ... imaš izlazak iz petlje, da se ne bi ponavljalo beskonačno.

0100001001101111011010100110000101101110
Moj PC  
0 0 hvala 1
11 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Pitanje o jeziku:

Obzirom da je FBasic open source, da li bi se nekako mogle postaviti naredbe da budu na hrvatskom, i kako?

 

Npr: run - kreni, if - ako,...i slicxno?

 

 

 

 

 

Poruka je uređivana zadnji put sub 27.10.2012 10:59 (sxtef).
 
0 0 hvala 0
16 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Naravno da je moguće. Nije potrebno mjenjati jezik, samo se napravi datoteka kao ova npr:

 

hrvatski.bi

 

 

#Define Ako_je    If

#Define Onda     Then

#Define Inace     Else

#Define Kraj_Ako   EndIf

#Define Deklariraj  Dim

#Define Kao      As

#Define Cijeli_Broj Integer

#Define Unos     Input

#Define Ispisi    Print

#Define Spavaj    Sleep

 

 

primjer.bas

 

#include "hrvatski.bi"

Deklariraj Kao Cijeli_Broj visina, sirina, povrsina

 

Unos "Unesi visinu pravokutnika: ", visina

Unos "Unesi sirinu pravokutnika: ", sirina

 

povrsina = visina*sirina

 

Ako_je povrsina > 100 Onda

  Ispisi "Povrsina je veca od 100 i iznosi: " & povrsina

Inace

  Ispisi "Povrsina je manja ili jednaka 100 i iznosi: " & povrsina

Kraj_Ako

 

Spavaj

 

 

Pomoću naredbe #define se definiraju nova imena naredbi u "hrvatski.bi" datoteci, zatim se ona u "primjer.bas" includa i mogu se koristiti te naredbe.

 

 

0100001001101111011010100110000101101110
Poruka je uređivana zadnji put sub 27.10.2012 13:49 (Boky).
11 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Da, sve radi, samo kad bi josx i hr-naredbe bile boldane...?

 
0 0 hvala 0
16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Kako misliš boldane?

0100001001101111011010100110000101101110
Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Kad se u FBIde upisuju engleske komande (sleep, if...then, itd) one se odmah pojavljuju podebljane (boldane) - tako ih program oznacava kao naredbe, kao sxto je npr ono u navodnicima crveno. Nije to nesto bitno, ali ako bi se moglo postici bez velikih komplikacija bilo bi mislim dobro, cisto radi orjentacije u programima.

 

Poruka je uređivana zadnji put ned 4.11.2012 16:46 (sxtef).
14 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori
Boky kaže...

Kako misliš boldane?

Ma misli da mu ih IDE oznaći kao keyworde (oboja, podeblja, što već...)

 

sxtef kaže...

Kad se u FBIde upisuju engleske komande (sleep, if...then, itd) one se odmah pojavljuju podebljane (boldane) - tako ih program oznacava kao naredbe

Pa vidi negdje u opcijama možeš li dodavati nove keyworde. Svaki IDE koji drži do sebe to omogućava. Iako, ne vidim zbog čega sve to uopće radiš. Koristi jednostavno originalne keyworde, a ne prevoditi programski jezik.

Oscar-Mike-Golf Whiskey-Tango-Foxtrot
16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Ako koristiš FBEdit, onda u Options/Code Editor pod Sintax, Group tamo u listboxu di piše C0, C1... odabereš Custom1, 2 ili 3... i onda desno pod Active imaš textbox di upišeš svoj keyword i sa gumbom Add ga dodaš u popis. Klikneš na kraju na OK i to je to.

0100001001101111011010100110000101101110
Moj PC  
0 0 hvala 1
12 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Možda samo želi eksperimentirati, ali zaista nevidim razloga za takvo što...

11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

U FBIde izgleda nema, ali sam presao na FBEdit i tamo nasao. Radi.

Hvala!

 

 

11 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Može mi netko pomoć? Trebam napisat program koji će mi od 4 unesena broja ispisati onoga najvećega. Probala sam na milijun načina i svaki put mi ima barem jedan error. Ovo je najbliže pravilnom načinu što sam uspjela.

 

DIM as integer a, b, c, d

INPUT a, b, c, d

 

if a>b then

if a>c then

else

if b>c then

if b>d then PRINT "b je najveci"

else

if c>d then PRINT "c je najveci"

if a>d then PRINT "a je najveci"

else PRINT "d je najveci"

 
0 0 hvala 0
16 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Dim As Integer br(1 To 4), i, n, max

 

For i=1 To 4

  ? "Unesi " & i & ". broj: ";

  Input "", br(i) 

Next

 

For i=1 To 4

  If br(i) > max Then

   n = i

   max = br(i)

  EndIf

Next

 

? "Najveci broj je " & n & ". uneseni po redu i iznosi: " & max

Sleep

 

Prvo definiramo 3 varijable:

br - polje od 4 broja, 1 do 4

i - brojač za for petlju

n - pamti poziciju broja

max - najveći broj

 

U prvoj for petlji unosimo brojeve u polje br, od 1. do 4. mjesta što nam je definirano sa i varijablom.

 

U drugoj for petlji gledamo koji nam je najveći broj max, i na kojoj je poziciji n.

Ovo if grananje nam govori ako je broj br na poziciji i veći od broja max (koji je 0 na početku), onda će se taj broj zapisati pod max, a ako je manji od max ništa se neće dogoditi, tako će nam max ostati uvijek najveći.

Naravno ako je taj uvijet točan pod if i varijabla n će poprimiti vrijednost varijable i koja nam govori koji je to broj po redu koji je unjet.

 

I na kraju ispišemo sa naredbom print (ili ? skraćeno).

I sa sleep pauziramo.

 

Ima li još nešto nejasno? 

0100001001101111011010100110000101101110
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Sve je jasno. Al postoji li ikoji način da to napravimo ovo kako sam ja pokušala? Tek sam počela učit basic i ovo mi se čini puno teže nego moj način (ako je uopće moguće na moj način to riješit).

16 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Naravno da se može, dok trebaš unjeti 4 broja nije problem. Ali da se treba unjet recimo 100 brojeva onda bi se moralo pisati if grananje za svih 100.

Evo riješenja:

 

 

Dim As Integer a, b, c, d

Input "Unesi 4 broja (odvojena razmakom): ", a, b, c, d

 

If a>b And a>c And a>d Then

 ? "a je najveci"

ElseIf b>a And b>c And b>d Then

 ? "b je najveci"

ElseIf c>a And c>b And c>d Then

 ? "c je najveci"

ElseIf d>a And d>b And d>c Then

 ? "d je najveci"

EndIf

 

Sleep

0100001001101111011010100110000101101110
16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

To bi se lakše napisalo sa jednom funkcijom max, sa uvođenjem varijable max kod upisa, sa izmjenom vrijednosti varijabli, ali predpostavljam da vježbaš if - else grananje, pa zato inzistiraš na if-else za četiri varijable.

 

Samo razmišljaj logički:

1. ako je a veći od ostalih - onda je a

2. ako smo a eliminirali, onda gledamo da li je b veći od ostale dvije varijable - ako jest - onda je b

3. ako smo b eliminirali onda gledamo da li je c veći od d - ako jest - onda je c

4. ako smo c eliminirali - preostaje nam da je d najveći

(ovaj kod lako pretvoriš u FreeBasic)

 

#include<iostream>
using namespace std;

int main()

{
    int a,b,c,d;
    cin>> a >> b >> c >> d;
    if(a>b && a>c && a>d) cout<< a;
    else if(b>c && b>d) cout<< b;
    else if(c>d) cout<< c;
    else cout<< d;
    return 0;
}

Poruka je uređivana zadnji put sri 14.11.2012 15:13 (Floki).
 
1 0 hvala 0
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Ja sam točno tako bila i napravila, ali je profesor rekao da je to teži način zato što kompjuteru zadajemo više posla (u biti je reko da ima previše if-ova) i da moramo to skratit da kompjuteru bude lakše. 

 

 

 

http://img855.imageshack.us/img855/7094/20121114183805.jpg

16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Ako te dobro kužim, ti hoćeš if-else provjeru, bez tramakivanja varijabli, bez niza i bez funkcija, s tim da ti izbaci ime varijable.

Za to ti je minimum tri provjere, onako kako si počela, nije problem, ako to hoćeš, mogu ti staviti.

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Ajde molim te, ako imaš vremena. :)

16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Evo, koju god kombinaciju ubaciš imaš tri provjere, a tri provjere jesu minimum.

 

 

#include<iostream>
using namespace std;

int main()
{
    int a, b, c, d;
    cin>> a >> b >> c >> d;
    if(a>b)
    {
       if(c>d)
       {
          if(a>c) printf("A\n");
          else printf("C\n");
       }
       else if(a>d) printf("A\n");
       else printf("D\n");
    }
    else if(c>d)
    {
       if(b>c) printf("B\n");
       else printf("C\n");
    }
    else
    {
       if(b>d) printf("B\n");
       else printf("D\n");
    }
    return 0;
}

 

 

 
0 0 hvala 0
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Ovo je u C++-u, jel? Kako bi to išlo u basicu?

16 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori
AlexaGB kaže...

Ovo je u C++-u, jel? Kako bi to išlo u basicu?

ne znam, bitno ti je skužiti logiku grananja, pa je onda primjeni u sintaksi jezika kojeg koristiš, to su samo if-else grane, ništa drugo.

16 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Ovo je direktan prijevod s C++-a, od kolege Floki-ja:

 

Dim As Integer a, b, c, d

Input a, b, c, d

 

If a>b Then

  If c>d Then

   If a>c Then

   Print "A"

 Else

    Print "C"

 EndIf

 ElseIf a>d Then

   Print "A"

 Else

   Print "D"

 EndIf

ElseIf c>d Then

  If b>c Then

   Print "B"

  Else

   Print "C"

  EndIf

Else

  If b>d Then

   Print "B"

  Else

   Print "D"

  EndIf

EndIf

 

Sleep

0100001001101111011010100110000101101110
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Hvala ;)

11 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Može mala pomoć? Trebam napraviti algoritam koji će učitati koordinate dviju točaka u ravnini i ispisati: a) udaljenost tih dviju točaka, b) jednadžbu pravca kroz te dvije točke i c) koordinate polovišta dužine s učitanim točkama kao krajnjim.

 

Pod a mislim da znam. To treba po pitagorinom poučku, jel da? 

 

Pod b znam da je jednadžba pravca y=ax+b, al nemam pojma kako to uvrstit u zadatak.

 

Pod c nemam pojma kako bi izračunala.

 
0 0 hvala 0
16 godina
neaktivan
offline
FreeBASIC programiranje, pitanja i odgovori

Ovo je nekako meni najbrži način:

 

Type tocka

  x As Double

  y As Double

End Type

 

Function udaljenost(t1 As tocka, t2 As tocka) As Double

  Return Sqr((t1.x - t2.x)^2 + (t1.y - t2.y)^2)

End Function

 

Function jednadzba_pravca(t1 As tocka, t2 As tocka) As String

 Dim As Double t

 

 t = (t2.y - t1.y)/(t2.x - t1.x)

 

 Return "y = " & t & "x - " & t*t1.x+t1.y

End Function

 

Function poloviste_duzine(t1 As tocka, t2 As tocka) As tocka

 Dim As tocka pol

 

 pol.x = (t1.x + t2.x)/2

 pol.y = (t1.y + t2.y)/2

 

 Return pol

End Function

 

' Pocetak programa:

Dim As tocka prva, druga, polov

Dim As Double udalj

Dim As String jedn

 

? "Unesi koordinate tocaka: x y"

Input "1. tocka: ", prva.x, prva.y

Input "2. tocka: ", druga.x, druga.y

 

udalj = udaljenost(prva, druga)

jedn  = jednadzba_pravca(prva, druga)

polov = poloviste_duzine(prva, druga)

 

? "Udaljenost tocaka: " & udalj

? "Jednadzba pravca: " & jedn

? "Poloviste tocaka: (" & polov.x & ", " & polov.y & ")"

 

Sleep

 

 Ako što nije jasno, pitaj...

 

0100001001101111011010100110000101101110
Moj PC  
0 0 hvala 0
11 godina
neaktivan
offline
Re: FreeBASIC programiranje, pitanja i odgovori

Tek sam ti sad ovaj odgovor vidjela. Ja sam to napravila malo drugačije. Lijepo sam si to na papir nacrtala i gledala kako bi to matematički riješila pa sam se onda sjetila i kako mogu isprogramirat to. :)

 

 

'deklaracija varijabli:

Dim As Integer x, x1, x2, x3, y, y1, y2, y3, a, b, d

 

'unos podataka:

Input "Koordinate tocke A na pravcu x:"; x1

Input "Na pravcu y:"; y1

Input "Koordinate tocke B na pravcu x:"; x2

Input "Na pravcu y:"; y2

 

'racunamo udaljenost izmedu tocaka:

d=Sqr((x2-x1)^2+(y2-y1)^2)

? "Udaljenost izmedu tocaka je:"; d

 

'racunamo jednadzbu pravca:

a=(y2-y1)/(x2-x1)

b=y1-a*x1

y=a*x+b

? "Jednadzba pravca kroz tocke A i B je: y="; y

 

'racunamo koordinate polovista duzine s ucitanim tockama kao krajnjim:

x3=(x1+x2)/2

y3=(y1+y2)/2

? "Koordinate polovista duzine na pravcu x:"; x3 ; " , a na pravcu y:" ; y3

 

GetKey()

 

Poruka je uređivana zadnji put sri 28.11.2012 19:33 (AlexaGB).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice