Silloinen ohjelma koostui rivinumeroiduista komennoista, jotka ohjelma suoritti peräjälkeen



Samankaltaiset tiedostot
Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Ohjelmoinnin perusteet Y Python

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Luento 5. Timo Savola. 28. huhtikuuta 2006

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Java-kielen perusteita

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Ohjelmoinnin peruskurssi Y1

Luvuilla laskeminen. Esim. 1 Laske

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Harjoitustyö: virtuaalikone

Python-ohjelmointi Harjoitus 2

Ohjelmoinnin peruskurssi Y1

NOKEVAL SCL. Käyttöohje

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Kielioppia: toisin kuin Javassa

Ohjelmoinnin perusteet Y Python

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

LUKUJA, DATAA KÄSITTELEVÄT FUNKTIOT JA NIIDEN KÄYTTÖ LOGIIKKAOHJAUKSESSA

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot

Tutoriaaliläsnäoloista

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet, syksy 2006

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Ohjelmoinnin perusteet Y Python

Harjoitus 2 (viikko 45)

Ohjelmoinnin peruskurssi Y1

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Ohjelmoinnin perusteet Y Python

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

811120P Diskreetit rakenteet

Ohjelmoinnin perusteet Y Python

4. Lausekielinen ohjelmointi 4.1

Muuttujien määrittely

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Ohjelmoinnin peruskurssi Y1

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

OpenOffice.org Base 3.1.0

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmoinnin perusteet Y Python

TAMPEREEN TEKNILLINEN YLIOPISTO

Java-kielen perusteet

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Algoritmit 1. Luento 3 Ti Timo Männikkö

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Ohjelmoinnin perusteet Y Python

11. Javan toistorakenteet 11.1

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

TAMPEREEN TEKNILLINEN YLIOPISTO

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

Johdatus Ohjelmointiin

Excel funktiot. Sisällys

Transkriptio:

BASIC-ohjelmointikieli E.Korhonen Katsaus Basic-ohjelmointikielen kehitykseen: Basic-ohjelmointikieli levisi opiskelijoiden ohjelmoinnin harjoittelukieleksi 1970- luvulla ja jokaiseen kotitietokoneeseen mikrotietokoneiden myötä 1980-luvun alussa. Joissakin koneissa, kuten legendaarisessa Commodore 64:ssa, se oli oikeastaan käyttöjärjestelmän asemassa. Ohjelmoituja sovellutuksia: tekstinkäsittelyä ja pelejä, ajettiin kääntävän BASIC-tulkin avulla. Silloinen ohjelma koostui rivinumeroiduista komennoista, jotka ohjelma suoritti peräjälkeen 100 PRINT KERRO NIMESI 110 INPUT N$ 120 PRINT HASSU NIMI ;N$ Ohjelmaan kuuluivat rivinumerot, ja käyttöliittymä järjesti ohjelman aina rivinumeroiden mukaiseen järjestykseen. Hyppyosoitteena käytettiin rivinumeroita. 130 GOTO 100 Ensimmäiset työstökoneiden tietokoneliitännät Suomessa, tietokoneille talletettujen ohjelmien vaihdot NC-koneille, ja ohjelmointi NC-kooditekstinä, tehtiin 1980-luvun alussa näillä koneilla ja BASIC-ohjelmilla, Ylivieskan teknillisen oppilaitoksen vanhimman robotin, 1980-luvulla tehdyn portaalirobotin, ohjelmointikieli on hyvin lähellä perus-basicia lisättyinä liikekäskyillä: 200 MOVEXYZ(1000,1000,200) Ja tulojen ja lähtöjen lukemista ja asettamista 300 IF INP(47)=0 THEN GOTO 300 320 OUT(45)=1 (Jos tulon 47 arvo on nolla, hypätään takaisin riville 300. Kun tulon arvo muuttuu

ykköseksi, jatketaan eteenpäin, ja asetetaan päälle lähtö 45.) Muuttujien nimillä on portaalirobotissa sama rajoitus kuin joissakin laskimissa: Vain isoja kirjaimia ja korkeintaan kirjain ja numero 400 X1=X0+I*100 410 MOVEX(X1) IBM PC:n ja myöhemmin AT:n myötä 1980-luvun puolivälissä tulivat tietokoneisiin mukaan kehittyneemmät Basicin versiot, Basica ja GWBasic. Niiden mukana tulleet asialliset parannukset ohjelmointiin olivat pienet, ympäristö vain muuttui standardisoiduksi PC:ksi edellisten merkkikohtaisten viritelmien jälkeen. 1980-luvun loppupuolella Borland toi markkinoille menestyksekkäitten Turbo Pascalin ja Turbo C:n rinnalle Turbo Basic-ohjelmointikielen ja Microsoft kilpailevan Quick Basicin. Nämä tekivät teknillisen hyppäyksen Basic-kielen kehityksessä tarjotessaan rivinumeroista riippumattoman ohjelmoinnin ja kääntäjän, jotka kilpaileviin Pascal ja C-kieliin kuuluivat luonnostaan. Kääntäjän avulla alunperin tekstinä laadittu ohjelmakoodi muutetaan konekieliseksi, itsenäisenä ajettavaksi.exe sovellutukseksi, DOS tai nykyisin Windows-ympäristössä. Käännetty ohjelma on huomattavasti tulkkaavaa nopeampi toiminnaltaan, millä on merkitystä paljon laskentaa, porttiliikennettä tms. vaativissa sovellutuksissa. Käännösvaiheessa voidaan myös ottaa käyttöön ohjelmalle valmiiksi laadittuja lisäkirjastoja, lisätoimintoja. Visual Basicin.exe koodi ei kylläkään ole konekieltä, vaan sitä tulkataan ajon aikana ja siksi se on hidasta Quick Basicin ilman kääntäjää oleva, tulkkaava versio QBasic on kuulunut Doskäyttöjärjestelmäpakettiin 80-luvun lopusta lähtien Rivinumeroinnista riippumaton ohjelmakoodi puolestaan tekee mahdolliseksi rakenteellisen ohjelmoinnin, ohjelman pilkkomisen erilaisiin toiminnallisiin osiin, aliohjelmiin, joita kutsutaan parametrien avulla, ja jotka palauttavat arvon. Rivinumeroinnista luopumisen jälkeen ohjelman etenemistä ohjataan pääasiassa aliohjelmakutsuilla ja tarvittaessa hyppyosoitteilla: ON ERROR GOTO LOPPU

määrittely ohjelman alussa. Ohjelmakoodia.. LOPPU: sanan tuntee osoitteeksi kaksoispisteestä : close suljetaan tiedostot ja portit END Ohjelman loppu Aiemmin mainituissa Basic-versioissa ääkköset kelpasivat vain merkkijonojen sisältöön, ei vielä muuttujiin eikä hyppyosoitteisiin. Visual Basic 1990-luvun puolivälissä läpimurron tehnyt Microsoftin Visual Basic (Markkinoilla on nyt versio 6.0, jonka erot edellisiin 3.0 ja 4.0 versioihin ovat pienet) tuntee lähes koko vanhempien Basic-kielten käskykannan ja paljon lisää ja osaa seurata enimmäkseen vanhojenkin ohjelmien rakennetta. Ongelmia aiheuttavat lähinnä suorat laiteohjaukset portteihin, muistiin ja näyttöön ja muuttujien näkyvyysalueet. Vanha viivekomento Delay on myös jätetty syrjään, mikä hankaloittaa laiteohjauksessa tarpeellisten viiveiden ohjelmointia. Ajatuksellisesti Visual Basic lähestyy käyttäjää eri tavalla kuin aikaisemmat ohjelmat: Vanhat Basic-ohjelmat (Niin myös Pascal, C, Fortran ja LISP) etenevät käynnistyksen jälkeen rivi riviltä, jäävät johonkin odottamaan käyttäjän syöttämää arvoa ja jatkavat edelleen, hyppäävät ehtojen mukaan mahdollisesti alkuun. Visual Basic-käyttöliittymä reagoi tapahtumiin, keskeytyksiin Visual Basic on rakennettu käyttöliittymältään keskeytysajatuksen pohjalle. Ohjelman käyttöliittymä odottaa käyttäjän tekemää tapahtumaa, esim. johonkin kontrolliin vaikuttamista, painikkeen klikkaamista. Painikkeen klikkaaminen aktivoi painikkeeseen liitetyn aliohjelman suorittamisen. Visual Basicin kilpailijoiksi ovat ilmestyneet Borlandin Delphi (tehty Pascal-pohjalle ja Visual C++, tehty C-kielen pohjalle) Kontrolleihin vaikuttamisella käynnistettävät aliohjelmat ovat rakenteeltaan sitten

perinteisempää Basic-koodia muistuttavia, SUB(). END SUB aliohjelmia. Selvimpinä eroina perinteisiin Basic-ohjelmiin ovat viittaukset lomakkeella oleviin kontrolleihin: Leveys = Val(Text1.Text) Sijoituslause toimii niin kuin perinteisen Basicin sijoituslause: Oikean puolen arvo sijoitetaan vasemman puolen muuttujalle. Text1.Text viittaa teksti-ikkunaan Text1 (kontrollin nimi) kirjoitettuun ominaisuuteen.text, joka voi olla käyttäjän syöttämä lukuarvo, näkyy tekstinä Jotta tekstiä voidaan käsitellä lukuna Leveys, sen arvo, value pitää lukea funktiolla Val( ) Toinen ero on muuttujien näkyvyys: Välillä Sub().. End Sub siellä käsitellyllä muuttujalla, esim Leveys on sille syötetty arvo. Muualla ohjelmassa, muissa aliohjelmissa, muuttujan Leveys arvoa ei tunneta ja sitä pidetään todennäköisesti nollana. (Jos ei erikseen käydä määrittelemässä ohjelmalle muuttuja Leveys sellaiseksi, että sen arvo tunnetaan kaikkialla) Visual Basic on samalla myös Microsoft Accessin ja Excelin sovellutusten ohjelmointikieli. Haluttaessa voidaan näihin ohjelmoida tapahtumia esim. laskun viitenumeron tarkistussumman laskenta koodaamalla tapahtuma Access-raporttiin Basicin käskyillä. Ohjelman pilkkominen kontrolleja seuraavaksi rivi riviltä etenevän, pääohjelman ja aliohjelmakutsujen mukaan etenevän sijasta tekee siitä helposti sekavan, vaikean hallita. Siksi Visual Basic sopii lähinnä pieniin, yhden ihmisen tekemiin sovellutusohjelmointitehtäviin, koneiden käyttöliittymiin jne.

Basicin muuttujat: Kaikilla ohjelmassa käytettävillä muuttujilla on nimi, muutaman merkin mittainen merkkijono. Aikaisemmin ääkkösiä piti välttää, mutta ei enää Windows95 ympäristöstä ja Visual Basicista alkaen Muuttujanimissä ei edelleenkään siedetä välilyöntejä, väliviivoja (sekoittuu miinusmerkkiin) eikä pisteitä. Väliviivan sijasta voidaan haluttaessa käyttää alaviivaa Suurin_Arvo = 1000 Basic toisin kuin C ja Lisp ei erottele suuria ja pieniä kirjaimia, joten niiden käytölle ei ole sääntöjä. Luettavuutta helpottaa erikokoisten kirjainten sopiva yhdistely Portaalirobotin MS Basic ei hyväksi lainkaan pieniä kirjaimia (Sama koskee yleisesti NC-koneita ja osin liikeohjaimia) Muuttujanimet ovat useimmiten kirjaimien ja numeroiden yhdistelmiä: A, A1, Alku, loppu, kerroin jne ovat lukuja Tarkemmin ottaen lukutyyppisiä muuttujia on vielä muutamaa eri lajia, kokonaislukuja ja liukulukuja eri pituisina. A=10 Muuttujalle A sijoitetaan lukuarvo 10 Kerroin=0.5 Desimaalipiste eikä pilkku Input "Montako ",Loppu Kysymys ja talletus muuttujaan Loppu A%, Alku% jne% % tarkoittaa kokonaislukuja, Integer (edellisiä nopeampia käsitellä, vähemmän muistiavieviä, alue n. 320000.+32000) A%=8

DIM Lavoja as Integer Muuttujan esittely kokonaisluvuksi Kokonaislukujen lukualue Integer kattaa luvut n. 32000 (+32000. Jos nämä eivät riitä, esim pulssilaskennassa, pitää käyttöön ottaa tyyppi Long Integer, nimessä &, Pulssit& jne, jossa on kaksinkertainen määrä bittejä ja lukualue nousee toiseen potenssiin. Integer-lukutyyppiä käytetään tyypillisesti luonnollisille luvuille, kappalemäärille, järjestysnumeroille jne. Järjestysnumeroksi desimaaliluku 0.5 tms ei kelpaakaan. Jos luvun tyyppiä ei määritellä tarkemmin, sitä käsitellään liukulukuna. (Kerroin x 10 potenssiin potenssi) Tästä on harmia silloin, kun laskutoimitusten jälkeen tulee pyöristysvirheitä, ja arvoksi tai järjestysnumeroksi esim 4.99999, tai kun pitäisi käsitellä tarkasti suuria kokonaislukuja kuten pulssimääriä. Useimmiten lukutyyppiset muuttujat toimivat kuitenkin hankaluuksitta ilman tyyppimäärittelyä, kunhan ei syötetä mielettömiä arvoja. A$, Mjono$, Polku$, Nimi$ Ovat merkkijonoja A$="ALKU" Polku$="C:\PB\" Input "Nimesi ",Nimi$ Nimi$=Text1.Text Vanhaa Basicia Visual Basic-lause Tiedosto$="Tiedot.lst"

INDEKSOIDUT MUUTTUJAT: Indeksoituun muuttujaan viitataan nimen ja indeksin, järjestysnumeron avulla A(i) Lukuja A(1), A(2)... A%(2) Kokonaislukuja A%(1), A%(2) jne DIM Nimi$(100) as String varaudutaan sataan nimeen ohjelman esittelyosassa Nimi$(nro%)= Merkkijonoja Nimi$(1), Nimi$(2) jne Nimi$(1)= Eero Taulukko$(1,2) Merkkijonotaulukko Kun käytetään indeksointia, samalla muuttujan nimellä voidaan osoittaa eri muuttujiin, kuten 1- tai 2-ulotteisen taulukon eri ruutuihin, joissa rivi- ja sarakenumero ovat indekseinä. Etunimi$=Taulukko$(i%,1) Sukunimi$=Taulukko$(i%,2) Tässä i% voisi olla juokseva numero esim 0-100 Jos indeksoitujen muuttujien lukumäärä, järjestystä osoittava indeksi on suurempi kuin 10, ohjelman alussa on tehtävä muistin varaus DIM-lauseella, esim DIM A%(1000) DIM Nimi$(100) Samanlainen DIM-esittely Visual Basic-ohjelman General-alueella tekee muuttujan arvon näkyväksi koko ohjelmassa. Indeksoidut kontrollit VB:ssa Visual Basicin kontrolleja kopioitaessa ohjelma kysyy, tehdäänkö kontrolleista Array,

tämä tarkoittaa indeksoitua kontrollia. Myönteinen vastaus tuottaa indeksoidun kontrollijoukon, jota on helppo käsitellä ohjelmallisesti: Text1(0). Text1(1). jne

Muuttujan arvon asettaminen Ohjelmointikielten sijoituslause on yleensä tyyppiä: A = 10 A = A+1 Pituus = Len(Luetturivi$) Ala = Pi*(D/2)^2 Se tarkoittaa, että katsotaan = merkin oikealla puolella olevien muuttujien senhetkinen arvo ja tehdään tarvittavat matemaattiset operaatiot. Lopputulos sijoitetaan vasemmanpuoleisen muuttujan arvoksi Siksi matemaattisesti järjetön lause sopii ohjelmointiin oikein hyvin A = A+1 Matematiikassa on todella vaikea löytää lukua, johon voidaan lisätä yksi ja se silti säilyy ennallaan. Ohjelmoinnissa lause tarkoittaa sitä, että luetaan muuttujan A arvo ja sijoitetaan sen paikalle yhtä suurempi luku. Sijoituslauseella asetetaan aina = Merkin vasemmanpuoleinen arvo, ei oikeanpuoleista A = B Asettaa A:n arvon B:n mukaiseksi, ei päinvastoin. = merkin oikealla puolella on usein kasa funktiokutsuja, jotka palauttavat arvon. Funktio Len( ) palauttaa sille syötetyn merkkijonon pituuden. Pituus=Len(Merkkijono$) Jotta sijoitus onnistuisi ja = merkin oikean puolen arvo voidaan sijoittaa vasemman puolen muuttujalle, näiden täytyy olla muuttujatyypiltään samanlaisia: Kokonaislukutyyppiseen muuttujaan nimenpituus voidaan sijoittaa luku, esim

Nimenpituus = Len(Nimi$). Merkkijonomuuttujaan Nimi$ voidaan lukea esim Visual Basicin teksti-ikkunaan kirjoitettu teksti Nimi$ = Text1.Text Funktion palauttama arvo ja sen tyyppi määritellään funktion sisällä. Matemaattiset funktiot palauttavat yleensä luvun. Minkätyyppinen luku saadaan palautteena, vaihtelee. Merkkijonoja käsittelevät funktiot palauttavat usein merkkijonon. Merkkijono$= Eero Korhonen Alku$=Left$(Merkkijono$,3) Vasemman laidan 3 merkkiä Eer Merkki4$=Mid$(Merkkojono$,4,1) Tulee neljäs merkki o Jos muuttujalle ei aseteta mitään arvoa, se on nolla, satunnainen tai edellisellä käyttökerralla muistiin jäänyt arvo. Viimeinen on tyypillinen tilanne esim. robotiikassa. Koneen omaan muistiin, rekisteriin kirjoitettu säilyy kunnes se tietoisesti muutetaan tai nollataan. Siksi ohjelman käyttämät muuttujat kannattaa ohjelmallisesti nollata ennen niiden käyttöönottoa, esim MenossaOlevaLava = 0

BASICIN TAVALLISIMMAT LUUPIT Luuppi = Silmukka, jota ohjelma kiertää ehtojensa mukaan Halutun toistomäärän tekevä luuppi on useissa ohjelmointikielissä For Next For-Next rajattua ohjelmanosaa kierretään for-lauseessa määritetyn ehdon mukaan Esim: summa=0 alkuarvon nollaus luuppi kierretään muuttujan i arvoilla 1,2,3 jne 10 For i = 1 to 10 'luupin alku summa = summa + i next i 'luupin loppu print "Lukujen 1 10 summa on ";summa For-luupista päästään ulos haluttaessa sen sisällä olevalla goto-hypyllä tai ehtolauseella If (..mikälie ehto) then exit for Esim. Laippojen poiminta-ja pinoamiskorkeuden laskeminen portaalirobotilla 200 CLS 210 INPUT "LAIPPOJA PINOSSA ",N 220 INPUT "LAIPANPAKSUUS ",L1 230 Z1=500 (Kuormalavan pinnan z-koordinaatti)

240 FOR I=1 TO N (poimitaan kaikki) 250 Z2=Z1-( N-I )*L1 (poimintakorkeus) ajo poimintapaikkaan ja kappaleen poiminta mukaan MOVEZ(Z2) 300 Z3=Z1-I*L1 (pudotuskorkeus) ajo pudotuspaikkaan ja kappaleen pudotus MOVEZ(Z3) NEXT I END

Esim. Sanan kääntäminen takaperin (Palindromin teko) VB:llä Lomakkeelle tarvitaan kaksi tekstiruutua Text1 ja Text2 Käännös saa tapahtua esim kun tekstiruudun Text1 sisältö muuttuu Sub Text1_Change() Sana$ = Text1.Text Pituus = Len(Sana$) Nurin$ = aloitetaan tyhjästä merkkijonosta if pituus>1 then For i = Pituus to 1 step 1 luetaan merkit takaperin Merkki$ = Mid$(Sana$,i,1) merkit käsittelyyn yksi kerrallaan Nurin$ = Nurin$ + Merkki$ Lisätään Merkki$ merkkijonoon Nurin$ Next i Text2.Text = Nurin$ end if End Sub

Epämääräiseen määrään toistokertoja sopii While-Wend luuppi, jota kierretään, kun ehto on tosi Esim. Tekstitiedoston luku ja Näyttäminen listaikkunassa VB:llä Ruudulla tarvitaan 3 alkiota: Toiminnan käynnistävä komentopainike (Command Button) CommonDialog alkio, jolla Windowsissa etsitään tiedostoja Listaikkuna List1 Komentopaikikkeen klikkaamisella aktivoituvaksi koodiksi sopii esim: Sub Command1_Click() CommonDialog1.Filter= (*.*) *.* CommonDialog1.FilterIndex=1 CommonDialog1.Action=1 avataan lukemista varten, kirjoitus olisi 2 Tiedosto$ = Tiedosto$ = CommonDialog1.FileName If Tiedosto$ <> jos on valittu tiedoston nimi List1.Clear listaikkunan putsaus

Open Tiedosto$ for input as #1 'tiedoston avaus While NOT EOF(1) 'luetaan tiedoston loppuun saakka Line input #1,Rivi$ luetaan tiedosto rivi kerrallaan ja talletetaan kunkin rivin teksti muuttujaan Rivi$ List1.AddItem Rivi$ Lisätään rivi alkioksi listaikkunaan Wend close #1 While Wend alueen loppu 'tiedoston sulku end if oliko valittu tiedosto End sub Aliohjelman loppu

While-wend-luupille voidaan antaa mikä tahansa suoritusehto: While Ulos<>1 ohjelmaa... luupista poistutaan vasta kun muuttuja Ulos saa arvon 1, esim homma tehty loppuun Wend Vanhoissa Basic ohjelmissa käytettiin paljon GOTO-hyppyjä Niillä on vieläkin omat käyttökohteensa esim Ohjelman alussa On Error GOTO Katsovirhe GOTO-käskyä vastaavat ehdottomat ja ehdolliset hyppytoiminnat kuuluvat myös useiden koneohjausten ohjelmakäskyihin. Goto-hypyn muoto QBasicissa ja Visual Basicissa on: Alku: 'Hyppyosoite ohjelmaa... If Lopetetaan=1 then goto ulos GOTO Alku 'Ehdoton hyppy alkuun Ulos: End tai vaihtoehtoisesti Alku: End Ohjelmaa If Ulos<>1 then GOTO Alku 'Ehdollinen hyppy

Aliohjelmakutsu, jolla käväistään suorittamassa aliohjelma ja jatketaan sitten ohjelmaa kutsua seuraavalta riviltä on Basiceissa GOSUB Pääohjelmassa GOSUB Aliohjelmannimi END Aliohjelmannimi: tunnetaan nimeksi kaksoispisteestä palataan takaisin, kun löydetään loppumerkki RETURN

PORTTILIIKENNE Tietokoneen ohjaamassa automaatiossa keskeisessä liitäntään, sarjaliikenneporttiin kirjoitetaan perinteisissä ohjelmointikielissä niin kuin kirjoitetaan avattuun tiedostoon. Portti avataan kirjoittamista varten kuten tiedosto, kertoen samalla liikenneparametrit ja mahdollisesti kättelyt Useassa Basicissa portinavaus tehdään muodossa Open COM2:9600,N,8,1,RS,CS,DS,CD as #1 Tämän jälkeen porttiin voidaan kirjoittaa Print #1, NCohjelmanrivi$ Print #1 komento kirjoittaa porttiin rivin ja heittää perään rivinvaihtomerkit Vastaavasti portista voidaan myös lukea Visual Basicissa em menettely ei toimi, vaan porttiin kirjoitetaan Windows-ohjaimien avulla. Porttiliikennettä varten on oma kontrolli, ensimmäinen niistä on nimeltään MSComm1. Sille kerrotaan ominaisuuksiksi vähintään liikenneparametrit, käytetty portti ja kättelytyyppi. Tavallisimmin koneiden tiedonsiirtoon käytetään porttia COM2, koska COM1 on usein hiiren käytössä. Kontrollin nimellä MSComm1 ei ole tekemistä portin kanssa. Käyttöä varten portti on avattava esim lomaketta avattaessa Sub Form_Load() MSComm1.PortOpen=True

End sub Ja käytön jälkeen se kannattaa sulkea MSComm1.PortOpen=False Windows sallii vain yhden sovellutuksen kerrallaan hallita sarjaliikenneporttia, ja avoin portti estää mm. Windowsin omien terminaaliohjelmien käytön. Esim. Listaikkunan sisällön syöttäminen porttiin Edellä kuvattu tekstitiedoston haku listaikkunaan sopii yksinkertaiseksi NC-ohjelman siirto-ohjelmaksi, kun se täydennetään tiedonsiirto-ominaisuudella. Lomakkeella pitää olla tiedonsiirtoobjekti MsComm1, jolle on määritelty sopivat liikenneparametrit, esim Portti 2 9600,E,7,1 Portti avataan esim lomaketta ladattaessa (Windows sallii vain yhden hallintaohjelman portille kerrallaan) Sub Form_Load() MsComm1.PortOpen = True End sub Sub LähetäKoodi_Click() Komentopainikkeelle sijoitettu koodi For i=0 to List1.ListCount-1 listan rivinumerot juoksevat nollasta lähtien List1.ListIndex=i Millä rivillä ollaan menossa

MSComm1.Output=List1.Text+chr$(13)+chr$(10) rivin perään Enter-rivinvaihtomerkit CR ja LF End Sub next i

Jotkin laitteet vaativat monimutkaisemman protokollan tarkistussummineen Esim Omron CPM1:n datamuistin kirjoittaminen ja lukeminen Kirjoitusprotokolla alkaa merkkijonolla @00WD0000 joka on kirjoitettu tekstiruutuun Text1 Datamuistiin kirjoitettava uusi arvo esim 0050 kirjoitetaan tekstiruutuun Text2 Merkkijono tarkoittaa logiikan nro 00 Datamuistin kirjoittamista osoitteesta DM0000 alkaen Perään pitää sitten lisätä uusi arvo neljällä Heksadesimaalimerkillä Näiden perään liitetään kahden heksadesimaalimerkin pituinen tarkistussumma, * ja Enter Lomakkeelle tarvitaan kaksi tekstiruutua tiedon syöttöön Text1 ja Text2 Datamuistia kirjoitettaessa tekstiruutuun Text1 kirjoitetaan lukukomento @00WD0000 ja samaa datamuistia luettaessa @00RD0000 Datamuistia kirjoitettaessa tekstiruutuun Text2 kirjoitetaan uusi arvo esim 50 ja datamuistia luettaessa siihen kirjoitetaan luettavien muistisanojen määrä esim 1 kaksi tarvitaan tekstiruutua palautteen lukemiseen Text3 ja Text4

Porttiin liikennöimiseen tarvitaan objekti Mscomm1, jonka ominaisuudet ovat esim Portti 2 9600, E,7,2 (Baudit, pariteetti Even, 7 Databittiä, 2 stop.bittiä) Portin lukemiseen sopii ajastin, Timer1, jonka käyntiväli, interval on esim 1000 millisekuntia Komentopainike aktivoi viestin kirjoittamisen, sen nimeksi esim KirjoitaViesti (Nimessä ei saa olla välilyöntejä) Ohjelmakoodiksi riittää: Private Sub Form_Load() MSComm1.PortOpen = True Timer1.Enabled = True End Sub Private Sub KirjoitaViesti_Click() Komentopainikkeen koodi Timer1.Enabled = False uusiarvo$ = Right$("0000" + Trim(Text2.Text), 4) Edellinen rivi tekee esim tekstistä 50 merkkijonon 0050 Kokoteksti$ = Text1.Text + uusiarvo$ Tarkistussumma lasketaan XOR-opetaariolla merkkijonon kaikille merkeille peräjälkeen tarksumma = 0 pituus=len(kokoteksti$) Katsotaan viestin pituus For i = 1 To pituus

merkki = Mid$(Kokoteksti$, i, 1) Yksi merkki kerrallaan käsittelyyn Next i tarksumma = tarksumma Xor Asc(merkki) Tarkhex$ = Hex$(tarksumma) Luku Heksadesimaalimerkiksi Tarkhex$=Right$( 00 +Tarkhex$,2) tarvitaan aina kaksi merkkiä, tämä lisää tarvittaessa nollia eteen ja jättää jäljelle 2 merkkiä Porttiin kirjoitetaan tekstilitania, perään tarkistussumma, * ja Enter End Sub MSComm1.Output = Kokoteksti$ + Tarkhex$ + "*" + Chr$(13) Timer1.Enabled = True Käynnistetään porttia lukeva ajastin Private Sub Timer1_Timer() Tämä koodinpätkä suoritetaan aika-ajoin Kun Timer1 on Enabled Vastaus$ = MSComm1.Input Portin sisältö Text3.Text = Vastaus$ Näkyviin ruudulle Etsitään vastauksesta olennainen tieto If Len(Vastaus$) > 10 Then Maara$ = Right$(Vastaus$, 12) Luku$ = Left$(Maara$, 4)

End Sub End If Text4.Text = Luku$

Lyhyt yhteenveto BASICien peruskäskykannasta, jossa on pieniä versiokohtaisia eroja ABS( n ) luvun n absoluuttiarvo, etumerkitön luku ASC( merkki$ ) merkin Ascii-arvo, luku arvoltaan 0-255 ATN( n ) CHR$( n ) kulman arcus-tangentti, palauttaa arvon -pi/2.pi/2, kulman radiaaneina 90 asteen tasajaolla erikoistapauksissa virhetilanne tai väärä tulkinta ascii-numeron n mukainen merkki tavallisimpia erikoismerkkejä ovat rivinvaihtomerkit yms, joita pitää kirjoittaa näillä MsComm1.Output = Chr$(13) Tabulaattori$ = chr$(9) Enter$ = Chr$(13) + Chr$(10) Carriege Return ja Line Feed CLOSE #n CLS COS( n ) DATE$( ) DIM vektori( n) Tiedoston #n sulkeminen Ruudun putsaus kulman n (radiaaneja) kosini päivämäärä indeksoidun muuttujan muistinvaraus EOF( #n ) end-of-file tieto luettaessa tiedostosta #n While not EOF(1)

Line input #1, Rivi$ List1.AddItem Rivi$ Wend END EXP( n ) ohjelman loppu e^n FOR...NEXT luuppi For i=1 to 10 Print i next i GET #h, n GOSUB osoite random access muistinluku tiedostosta #h tavu n aliohjelmakutsu IF PortissaOnTavaraa then Gosub LueSisältö GOTO osoite hyppykäsky if OnAikaLopettaa then Goto Loppu IF THEN ehdollinen toiminta kirjoitetaan perään IF I<10 THEN rivi=1 Jos yksi rivi, kirjoitetaan samalle riville Jos rajataan useampi rivi, ehtorivi lopetaan Then seuraaville riveille koodia End If IF THEN ELSE

END IF Inkey$ Monimutkaisempi rakenne Näpäytetty merkki Merkki$=Inkey$ INP(portti) I/O-portista luettu tavu (Ei Visual Basic) PrintteriPortinTila=INP(889) INPUT luettu merkkijono Enteriin saakka INPUT #h,muuttuja luetaan avatusta tiedostosta nro #h arvo muuttujalle INPUT$( #h, n ) luetaan n merkkiä avatusta tiedostosta nro #h INSTR(merkkijono$,merkit$) etsitään merkkijonosta sisältö merkit$ ja palautetaan löytökohta 1, jos ei löydy, palautetaan 0 PilkunPaikka=Instr(Merkkijono$,, ) INT( n ) luku n katkaistuna kokonaisluvuksi jos halutaan pyöristys ylöspäin, lisätään 0.5 Sopii hyvin myös desimaalien määrän rajoittamiseen, seuraavassa kahteen Luku=2/3 Luku=Int(100*Luku+.5)/100 tulee lujasti desimaaleja desimaalit vähenevät KILL tiedosto$ Tuhoaa tiedoston tiedosto$, jos se on olemassa, muuten tulee virhetila LEFT$( merkkijono$, n ) merkkijonon vasemmasta laidasta n merkkiä jos ei riitä, virhetila if len(merkkojono$)>3 then Alku$=Left$(Merkkijono$,4) end if

LEN( merkkijono$ ) merkkijonon$ pituus LINE INPUT LOG( n ) rivin lukeminen tiedostosta rivinvaihtomerkkiin saakka luonnollinen logaritmi n:stä LCASE$( merkkijono$ ) merkkijonos$ pikkukirjaimilla MID$( merkkijono$,i,n) merkkijonosta otettu pätkä, n merkkiä paikasta i alkaen pituus=len(merkkijono$) for i=1 to pituus Merkki$=Mid$(merkkijono$,i,1) print asc(merkki$) next i OPEN avaa tiedosto tai portti (portti ie VB:ssa käy näin) Open MikäHyvänsä.txt for input as #1 While not EOF(1) line input #1,rivi$ print rivi$ Wend Close #1 OPEN "COMn:..." tietoliikenneportin avaus (Ei VB:ssa näin) Open Com2:9600,n,8,1,rs,cs,ds,cd as #2 OUT portti, tavu tavun kirjoittaminen porttiin tai muistitavuun (Ei VB:ssa) Portti=888 LPT1:n tavallinen osoite Out Portti,255 Kaikki bitit päälle PRINT printtaa lomakkeelle tai näyttöön PRINT #h,muuttuja muuttujan arvon kirjoittaminen numerolle #h avattuun tiedostoon tai porttiin (Porttiin ei VB:ssa mene näin) PUT #h, n random access tiedostoon #h kirjoitetaan n tavu

REDIM RETURN indeksoidun muuttujavektorin uudelleen määrittäminen aliohjelman viimeinen rivi, paluu GOSUB kutsua seuraavalle riville RIGHT$( merkkijono$, n ) n merkkiä merkkijonon oikeasta laidasta, virhetila, jos ei riitä merkkejä RND Satunnaisluku 0 vähän alle 1, joka kannattaa alustaa, jotta ei toista itseään Esim KertolaskunKyselijä: Randomize Timer vastaus=0 while vastaus<>9999 print 9999 lopettaa arvokysymys: Luku1=int(10*RND)+1 tulee 1 10 Luku2=int(10*RND)+1 tulee 1 10 kysy: print Luku1; * ;Luku2; = input vastaus if vastaus=luku1*luku2 then print Hyvä goto arvokysymys end if print Yritä uudelleen goto kysy wend SIN( n ) kulman n (radiaaneja) sini

SQR(n) STR$( n ) luvun n neliöjuuri. n ei saa olla negatiivinen luku n merkkijonoksi, ascii-merkeiksi Text1.Text=Trim$(Str$(luku)) TAN( n ) TIME$( ) kulman n (radiaaneja) tangentti Nykyinen tietokoneen aika merkkijonona TRIM$( merkkijono$ ) UCASE$(Merkkijono$) putsaa merkkijonon välilyönneistä, tarpeen etenkin lukuja muutettaessa merkkijonoksi, muuten tyhjä etumerkin paikka kiusaa Merkin tai merkkijonon muutos isoille kirjaimille Line input #1,Merkkijono$ If Instr(Ucase$(Merkkijono$), POLYLINE )>0 then end if Tämä suoritetaan olipa Polyline-teksti kirjoitettu pienellä tai isolla Ucase$ tekee siitä ison VAL( merkkijono$ ) merkkijonon tulkinta luvuksi Jos alkaa muilla kuin numeromerkeillä, palautetaan 0 WHILE...WEND luuppi Merkkijono$=text1.text pulssejamillille=100 ajomillit=val(merkkijono$) pulssit=pulssejamillille*ajomillit laskentaa voidaan tehdä vain luvuilla