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

Jacksoni skeem
Suurenda
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:

  1. Täisarv (integer), ei saa omada komakohti.
  2. Funktsiooni muutuja ei ühit välja kutsuja poolt pakutava muutuja failitüübiga.
  3. Arv soovitakse kuvada double suurusega, kui ta seda pole.
  4. 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.