Seuraavassa esimerkissä on ohjelma, joka ensin tekee viisipaikkaisen kokonaislukutaulukon:
0
|
1
|
2
|
3
|
4
|
0
|
3
|
6
|
9
|
12
|
3 lukua mahtuu alle 10 näiden summa on 9 Luvut on: 6 3 0
silmu.cpp - esimerkki silmukoista#include <iostream.h> const int TKOKO=5; const int RAJA=10; void alusta(int luvut[], int n, int kasvu) /* Alustetaan taulukko sarjalla 0,kasvu,2*kasvu... */ { int i,luku=0; for (i=0; i<n; i++) { luvut[i] = luku; luku += kasvu; } } int montako_mahtuu(const int luvut[], int n, int raja) /* Mihin asti lukujen summa ei ylitä rajaa */ { int i=0,summa=0; do { summa += luvut[i]; } while ( summa < raja && ++i < n ); return i; } int summaa(const int luvut[], int n) { int i=0,summa=0; while ( i < n ) { summa += luvut[i]; i++; } return summa; } void tulosta(ostream &os, const int luvut[],int n) /* Tulostaa taulukon nurinpäin */ { int i; for (i=n-1; i>=0; i--) os << luvut[i] << " "; os << endl; } int main(void) { int luvut[TKOKO],n; alusta(luvut,TKOKO,3); n = montako_mahtuu(luvut,TKOKO,RAJA); cout << n << " lukua mahtuu alle " << RAJA << " näiden summa on " << summaa(luvut,n) << endl; cout << "Luvut on: "; tulosta(cout,luvut,n); return 0; } |
silmu.dpr - esimerkki silmukoistaprogram Silmu; uses WinCRT; const TKOKO=5; const RAJA=10; { Seuraavalla korvataan C:n ++i } function esi_lisaa(var i:integer):integer; begin inc(i); esi_lisaa := i; end; procedure alusta(var luvut:array of integer; n,kasvu:integer); { Alustetaan taulukko sarjalla 0,kasvu,2*kasvu... } var i,luku:integer; begin luku := 0; for i:=0 to n-1 do begin luvut[i] := luku; inc(luku,kasvu); end; end; function montako_mahtuu(const luvut:array of integer; n,raja:integer):integer; { Mihin asti lukujen summa ei ylitä rajaa } var i,summa:integer; begin i := 0; summa := 0; repeat summa := summa + luvut[i]; until ( summa >= raja ) or ( esi_lisaa(i) >= n ); montako_mahtuu := i; end; function summaa(const luvut:array of integer; n:integer):integer; var i,summa:integer; begin i := 0; summa := 0; while ( i < n ) do begin inc(summa,luvut[i]); inc(i); end; summaa := summa; end; procedure tulosta(var f:textfile; const luvut:array of integer; n:integer); { Tulostaa taulukon nurinpäin } var i:integer; begin for i:=n-1 downto 0 do write(f,luvut[i],' '); writeln(f); end; { Pääohjelma: } var luvut : array[0..TKOKO-1] of integer; n : integer; begin alusta(luvut,TKOKO,3); n := montako_mahtuu(luvut,TKOKO,RAJA); writeln(n,' lukua mahtuu alle ',RAJA, ' näiden summa on ',summaa(luvut,n)); write('Luvut on: '); tulosta(output,luvut,n); end. |
var T: array[Boolean] of array[1..10] of array[3..6] of Real; { on sama kuin: } var T: array[Boolean,1..10,3..6] of Real; { Alkioon viitataan joko } r := T[True][3][5]; {tai} r := T[True,3,5];
Low (luvut); { aina 0 riippumatta varsinaisen taulukon alarajasta } High(luvut); { 4, eli alkuperäisen taulukon koko-1 } SizeOf(luvut); { 10 tai 20 riippuen onko 16 vai 32-bittinen kääntäjä }
tulosta(output,[1,2,4,8,16],5);
repeat { repeat edelleen väärin, koska jos n=0, viitataan lait.alkioon } summa := summa + luvut[i]; if ( summa >= raja ) then break; i := i + 1; until ( i >= n );