 
 
 
 
 
 
Edellisen esimerkin aliohjelmat on kirjoitettu omaan tiedostoonsa, joka C++:ssa pitää muistaa linkittää mukaan. Otsikkotiedostossahan on tiedot vain kääntämistä varten. Pascalin unitissa on sekä otsikkotiedot päämodulin kääntämiseksi, että varsinainen toteutus. Tarvittaessa voidaan tietysti jakaa käännettyä modulia (ali.dcu, Delphi Compiled Unit).
#ifndef ALI_HPP #define ALI_HPP double average(int a, int b); int bigger(int a, int b); void swap(int &a,int &b); #endif
	#include "ali.hpp"
	
	double average(int a, int b)
	{
	  return (a+b)/2.0;
	}
	
	int bigger(int a, int b)
	{
	  if ( a > b ) return a;
	  return b;
	}
	
	// Vaihdetaan luvut keskenään
	void swap(int &a,int &b)
	{
	  int t;
	  t = a; a = b; b = t;
	}
ali.pas - Pascal aliohjelmat
	unit Ali;
	
	interface
	
	  function average(a,b:integer):real;
	  function bigger(a,b:integer):integer;
	  procedure swap(var a,b:integer);
	
	implementation
	
	function average(a,b:integer):real;
	begin
	  average := (a+b)/2.0;
	end;
	
	function bigger(a,b:integer):integer;
	begin
	  bigger := b;
	  if ( a > b ) then bigger := a;
	end;
	
	{ Vaihdetaan luvut keskenään }
	procedure swap(var a,b:integer);
	var t:integer;
	begin
	  t := a; a := b; b := t;
	end;
	
	end. { Unitin lopetus } end.
 
- 	aliohjelmamodulissa (unit) on interface
- osa, jonka alla on lueteltu modulin ulkopuolelle näkyvät
määritykset
- 	implementation
- osassa on varsinainen toteutus
- 	moduli lopetetaan end. (huom. piste)
- 	modulissa voi olla alustusosa
initialization
alustus; end., joka suoritetaan kun moduli ladataan muistiin
- 	Delphi 2.0:ssa voi lisäksi olla finalization
- osa, joka suoritetaan kun moduli poistuu muistista
- 	aliohjelman otsikkorivi loppuu AINA puolipisteeseen ;
- 	sijoitusoperaattorina on :=
- 	yhtäsuuruusvertailu tehdään operaattorilla =
- 	kommenttisulkuina on {}
tai vaihtoehtoisesti (* ... *)
- 	Delphi 2.0:ssa rivikommenttina toimii myös //,
käyttöä kannattaa ehkä välttää, koska
tämä ei toimi Delphi 1.0:ssa
- 	aliohjelmia on kaksi tyyppiä:  procedure
ja function.
- 	procedure vastaa C:n void
- funktioita
- 	parametrilistan
erotin on puolipiste ;
- 	parametrilistoissa
voidaan kirjoittaa useita muuttujia pilkulla erotettuna ennen parametrin tyypin
ilmaisemista
- 	reaalilukutyyppi on real,
voidaan käyttää myös double.
- 	funktion paluuarvo sijoitetaan funktion nimeen.  Sijoituksia voi olla
useita, joista viimeisenä tehty jää voimaan.
- 	paluuarvolle on myös lokaali muuttuja Result,
jolle voidaan sijoittaa ja jota voidaan käyttää lausekkeen
oikeallakin puolella
		function bigger(a,b:integer):integer;
		begin
		  Result := b;
		  if ( a > Result ) then Result := a;
		end;
- 	funktio ja aliohjelma voidaan lopettaa exit-
lauseella, jolloin funktion arvoksi jää viimeisen sijoituksen arvo
- 	aliohjelmilla on kahta eri parametrityyppiä: arvoparametrit
(C:ssä on vain näitä, call by value)
ja muuttujaparametrit
(call by reference).
 Muuttujaparametrit ovat samoja kuin C:ssä parametrin välitys
osoittimien
avulla.  C++:ssa vastine on referenssi (&).
 Muuttujaparametrit ilmaistaan parametrilistassa var
- sanalla.
- 	parametritonta aliohjelmaa kutsutaan ilman sulkuja, esim: writeln;
- 	aliohjelmien sisään voidaan kirjoittaa omia "apu"aliohjelmia,
jotka voivat käyttää "isäntänsä" muuttujia ilman
parametrin välitystä
Malliohjelma saadaan toimimaan
muuttamattomana myös Delphi 2.0:ssa
seuraavasti:
- 1.
- Kirjoitetaan tiedosto WinCRT.pas
Delphin lib
- hakemistoon:
		unit WinCRT;
		interface
		implementation
		initialization 
		finalization
		  readln; { Tämä jos halutaan pysähtyvän ennen ohjelman loppua }
		end.
- 2.
- Laitetaan päälle optio: Project|Options|Linker|Generate console
application.  Tämä voitaisiin korvata myös
lisäämällä ohjelman alkuun kääntäjän
optiorivi {$APPTYPE CONSOLE},
mutta tällöin ohjelma ei kääntyisi Delphi 1.0:ssa
ilman virheitä.  unittiin laitettuna tämä koodissa oleva
optio ei hyödytä kuin niillä kerroille, jolloin koko ohjelma
rakennetaan uudelleen (build all).
- 3.
- valitettavasti konsoliohjelman pääohjelmaa ei jostakin
syystä voi debugata Delphi 2.0:ssa, aliohjelmia voi kyllä,
mikäli niihin laittaa keskeytyskohdan
- 4.
- kun ohjelma ajetaan, avautuu konsoli- ikkuna, joka sulkeutuu ohjelman
lopuksi. Jos ikkuna halutaan jäävän näkyväksi, voidaan
WinCRT:n lopettamisosaan tai ohjelman loppuun tilapäisesti laittaa kutsu
readln.
 
 
 
 
 
