Top-down er en metode der ofte bruges i udvikling af større programmer.
Den går ud på at man udsætter problemet og samtidig får lavet en struktur i programmet,
således at der er nogle få hovedprocedurer som så kalder de andre funktioner/procedurer når de har brug for dem.
Strukturen kan fx se sådan ud:
Man laver et regne program og vil ikke sidde og lave alle funktionerne før man har den grundlæggende ramme.
Derfor starter man fx sådan:
Procedure Udregn;
begin
laesinfo;
skrivinfo;
udregn;
skrivresultat;
end;
Desuden skriver vi under var følgene:
tal: array [0..1] of integer;
som er de tal vi vil arbejde med.
Så har man udsat problemerne lidt og samtidig fundet den struktur man vil arbejde udfra.
Dernæst kan man så lave de enkelte procedurer/funktioner:
function laesinfo: string;
begin
result:=edit1.text;
end;
nu kan man så sætte functionen validerinfo til at arbejde med resultatet fra laesinfo:
Procedure Udregn;
begin
skrivinfo(laesinfo);
udregn;
skrivresultat;
end;
dernæst laves så functionen der validerer data:
procedure skrivinfo(info: string);
var i,j: integer;
begin
j:=0;
for i:=1 to length(info) do
case info[i] of
'0'..'9': tal[j]:=strtofloat(info[i]);
'+': begin operator:=addition; inc(j); end;
end;
end;
Da vi brugte en ny variabel operator, skal vi lige tilføje denne type til uniten:
der hvor man normalt skriver globale variabler skrives nu følgende:
type operator = (addition,subtraktion,ingen);
nu har vi gjort det muligt også at lave subtraktion, så denne del adderes til funktionen validerinfo:
procedure skrivinfo(info: string);
var i,j: integer;
begin
j:=0;
for i:=1 to length(info) do
case info[i] of
'0'..'9': tal[j]:=strtofloat(info[i]);
'+': begin operator:=addition; inc(j); end;
'-': begin operator:=subtraktion; inc(j); end;
end;
end;
nu skal resultatet så beregnes:
function udregn: integer;
begin
result:=0;
case operator of
addition: result:=tal[0]+tal[1];
subtraktion: result:=tal[0]-tal[1];
end;
end;
Så mangler vi kun at skrive resultatet:
procedure skrivresultat(resultat: integer);
begin
edit1.text:=inttostr(resultat);
end;
>
Så skal det hele kædes sammen:
<
Procedure Udregn;
begin
skrivinfo(laesinfo)
skrivresultat(udregn);
end;
Dernæst fjernes der bugs:
Hvis brugeren taster ord ind i stedet for tal og +/- så sig det:
procedure skrivinfo(info: string);
var i,j: integer;
begin
j:=0;
for i:=1 to length(info) do
case info[i] of
'0'..'9': tal[j]:=strtofloat(info[i]);
'+': begin operator:=addition; inc(j); end;
'-': begin operator:=subtraktion; inc(j); end
else
showmessage('Du skal skrive 2 tal separeret af et +/-!');
end;
end;
Skriv 0 som default talværdi for at undgå en warning med at variablerne
muligvis ikke er tildelt nogen værdi:
dobbeltklik på formen, således at denne tekst fremkommer:
Procedure form1.create(sender: Tobject);
begin
end;
ændr den til:
Procedure form1.create(sender: Tobject);
var i: integer;
begin
for i:=0 to 1 do tal[i]:=0;
operator:=ingen;
end;
Sørg for at brugeren taster to tal OG en operator:
function udregn: integer;
begin
result:=0;
case operator of
addition: result:=tal[0]+tal[1];
subtraktion: result:=tal[0]-tal[1];
ingen: showmessage('Du skal angive en operator ?/- !');
end;
end;
Nu er der taget forbehold for en del af de fejl som en uopmærksom bruger kan komme til at lave...
Programmet kan nu udvides meget simpelt, da operatorerne og tallene er to globale variabler,
se programmet for mere info!