Kasutaja:M2s17/meeldetuletused
Sisukord |
[redigeeri] VB vajalik teada
[redigeeri] Positsioneerimine
Et saada andmeid õigele kohale ja sobivas pikkuses, on palju võimalusi, kuid soovitan kasutada järgnevat: Väljastatavatele andmetele liidetakse otsa rida tühiku tähemärke, ja saadud stringis väljastatakse soovitud arv tähemärke, alustades vasakult.
Const d$ = " " Const soovitud_tähemärkide_arv% = 15 Console.WriteLine(Left(väärtus & d, soovitud_tähemärkide_arv)
[redigeeri] Vigade püüdmine
Näiteks massiivi skoobi deklareerimisel, võib esineda vigasid, mis võivad olla lihtne kinni püüda järgnevalt:
Try ReDim m(arv, n + IIf(n > 0, 1, 0)) Catch haha As OverflowException Console.WriteLine(viga(10)) vigane = True Catch haha As OutOfMemoryException Console.WriteLine(viga(11)) vigane = True End Try
[redigeeri] Ebatäpsuse parandamine
Suurte andmetüüpide korral võib arvuti hakata eksima (Näiteks 3=2,99(9)). Selle saab korda ümardamise teel
Dim f as double = Math.Round(2.9999999, 3, MidpointRounding.ToEven)
[redigeeri] Massiivi väärtustamine funktsiooni abiga
Meeldetuletuseks, ByRef võimaldas muuta olemasoleva muutuja/massiivi väärtuseid, samas kui ByVal lõi funktsiooni täitmise ajaks uue muutuja, mis pole seotud alg muutuja/massiiviga.
Sub lisa_massiivi(ByRef m(,), ByVal i, ByVal x, ByVal y) m(0, i) = x m(1, i) = y End Sub
[redigeeri] VBA (Exel)
[redigeeri] Kuidas muuta makroga lahtri sisu
Peamiselt on 4 erinaevat laadi väärtustele juurdepääsuks. Esimene on määrata ära x ja y arvuline kordinaatasend, teine on määrata ära lahtri täheline nimetus, kolmas lühikirjapanek ja neljas ise nimetatud lahtri väärtustamine.
1) Cells(1, 1) = 1 2) Range("B2") = 2 3) [C3] = 3 4) Range("lahter") = 2
[redigeeri] Mis funktsioonid on erinevad võrreldes keskonna funktsioonidega
Kasutatavamatest funktsioonidest on 1) ruutjuur sqr = sqrt 2) aste pow() = ^
[redigeeri] Mida kujutab enesest i
Tegemist on tavalise kordajaga, mida üldiselt kasutatakse kui massiivi/lahtri/veerud loendurit. Tema olemusest aru saamisest tuleb arus saada, et programeerimises antakse väärtused paremalt vasakule.
Kui vaatata muutujat, siis tema ülessandeks oleks väärtuseid hoida. Et ta saaks loenduriks, peaks ta hakkama süstemaatiliselt muutuma. Tavaliselt on selle süsteemiks korduslause nt:
dim i as integer do i=i+1 loop until i>10
, see koodike näitab kuidas i hakkab süstemaatiliselt muutuma.
- Deklareerides i täisarvuna, saab ta oma väärtuseks 0.
- Täites esimest kora kordust, saab i väärutseks i olemasolev väärtus +1.
- Nüüd on i väärtus 1, ta on väiksem, kui 10 siis jätkatakse kordust.
- Seekord saab i uueks väärtuseks i olemasolev väärtus (mis on 1) +1.
- Nüüd on i väärtus 2, ta on väiksem, kui 10 siis jätkatakse kordust.
- Seekord saab i uueks väärtuseks i olemasolev väärtus (mis on 2) +1.
- Nüüd on i väärtus 3, ta on väiksem, kui 10 siis jätkatakse kordust.
- ...
- Seekord saab i uueks väärtuseks i olemasolev väärtus (mis on 8) +1.
- Nüüd on i väärtus 9, ta on väiksem, kui 10 siis jätkatakse kordust.
- Seekord saab i uueks väärtuseks i olemasolev väärtus (mis on 9) +1.
- Nüüd on i väärtus 10, ta ei ole väiksem, kui 10 ja väljutakse kordusest.
[redigeeri] Korduslause for
Kui on vaja luua korrutiste tabel (20 arvuline), kasutades for korduste tsüklit, siis tehakse seda nõnda:
For i = 1 To 20 For j = 1 To 20 Cells(i, j) = i * j Next j Next i
See võib tunduda hea lahendus, kuid seda ta ei ole. Mis eelnevaga on valesti tehtud, on see, et erinevate lahtrite poole on pöördututd 400 korda. Kuna objekti poole pöördumine võtab aega, siis et kiirendada protsessi tuleks pöördumisi vähendada.
Näide 2, siin pöördutakse objekti poole 1 kord ja antakse kõik väärtused üle. Vaheväärtused tõstame massiivi, ja pärast ütleme kuhu tuleks massiivist andmeid panna. Tulemuseks on momentaalne väärtuse kuvamine keskkonda.
Dim m(19, 19) As Long For i = 1 To 20 For j = 1 To 20 m(i - 1, j - 1) = i * j Next j Next i Range("A1:T20") = m()
[redigeeri] A1 tähistus
Tähistust kasutatakse omaduse range() abiga. nt:
range("A1")="sisu" 'lahtri a1 väärtuseks määratakse "sisu" range("A1:A3")="sisu" 'lahtrite a1,a2,a3 väärtuseks määratakse "sisu" range("A1:A3,C1:C3")="sisu" 'lahtrite a1,a2,a3,c1,c2,c3 väärtuseks määratakse "sisu" range("A:A")="sisu" 'kõigi veerul a paiknevate lahtrite väärtuseks määratakse "sisu"
[redigeeri] Jacksoni Skeem
Skeemi puhul on välja toodud tingimused, mille variantidel on väikesed nullid paremal nurgas. Korduses olevate lausetel on paremal üleval nurgas tärn. Halli taustaga on kujutatud alamprogramme ja funktsioone.
Programmi käskude täitmise järjekord liiguvad vasakult paremale ja ülalt alla.
[redigeeri] Programmeerimiskeel C
[redigeeri] Kuidas määrata komakohtade arv
Meeldetuletuseks, et komakohtade kuvamise pikuse üle saab otsustada vaid siis, kui tegemist on murdarvuga, mitte täisarvuga (int). Võib tekkida komplikatsiooone, kui soovid kahe long arvutüübiga väärtustada double arvtüübiga muutujat.
Näites on kasutatud arvutüüpi double ja väljastatud on arvu täispikkus on 9 arvukohta, koos 2 komakohaga ehk %9.2lf. Analoogselt tuleb teha ka teistel juhtudel - %[arvu_täispikkus].[komakohti][arvutüüp]. Näide:
void kuva(double a, double b, double c) { printf("Kui jagame %9.2lf arvuga %9.2lf on tulemuseks %9.2lf\n",a,b,c); return; }
[redigeeri] Kood on nagu korras, aga millegi pärast on midagi viga
Programeerimiskeel C on selles suhtes üsna värvikas ja võimalusi on palju.
[redigeeri] Tingimused
Ka pole tingimused samased teiste keeltega. Näiteks tuleb kasutada järgnevaid märke, et võrrelda:
vähem kui < vähem või samapalju <= rohkem kui > rohkem või samapalju >= samane == mittesamane != mitte ! ja && või ||
[redigeeri] Funktsioonide deklareerimine
Kompilleerides programmi läheb vaja, et kompilleeritaval funktsioonil oleksid atribuut funktsioonid ennem teda juba deklareeritud. Funktsiooni deklareerimisel jäetakse muutujad välja, kud kuvatakse nende tüübid.
arvuta(double, double, double); kuva(double, double, double); void arvuta(double a, double b, double c) { sisu; kuva(a,b,c); } int main(void) { sisu; arvuta(a,b,c); }
[redigeeri] Tüüpide korrektsus
Üsna tihti võib probleemiks olla tüüpide sobimatus ja sellest tingitud tulemused.
void arvuta(long a) { printf("Arvu väärtus on %5,4lf", a); return; } int main(void) { integer arv=3,14123614683968; arvuta(arv); }
Näites tehtud vead:
- Täisarv (integer), ei saa omada komakohti.
- Funktsiooni muutuja ei ühit välja kutsuja poolt pakutava muutuja failitüübiga.
- Arv soovitakse kuvada double suurusega, kui ta seda pole.
- Arvu komakohtada määramisel on täiskohtade ja komakohtade numbrite vahel punkt mitte koma.
[redigeeri] Suured tähed ja väikesed tähed
See võib tunduda üsna imelikuna, kuid C teeb vahet selle, kui sa kirjutad PrintF(sisu); ja printf(sisu);. Seega tasuks alati üle kontrollida, et tähesuurused oleksid samased kogu koodi kestel.
[redigeeri] Tähemassiivide ja stringide väärtustamine
Siin tuleb tähele panna, et ühel juhul on tegemist chr tüüpi viidaga ja teisel juhul kindla suurusega tähtede massiiviga. Algajale võib tekkida küsimus - "mis vahe siin on?", nõnda oleks soovitatav üle vaadata. mis viidad on ja kuidas nad töötavad.
char *m; char n[20]; m="hello"; strcpy(n,"hello"); printf("%s\n",m); printf("%s\n",n);
M puhul on tegemist viidaga, talle ei ole määratud suurust, vaid tema alguspunkt. M'i saab väärtustada tavaliselt m="väärtus";
N puhul on tegemist tähemärgi tüüpi massiiviga. Massiivi ei saa otse väärtustada viisil m="väärtus", selleks tuleb kasutada funktsiooni, mis paneb antud väärtuse täht tähe haaval massiivi.
See on üsna tüüpiline vigam, mida algajad C programmeerijad tihti võivad teha - ajada m ja n sassi.