Topdown programmering i Delphi

Tags:    delphi
Skrevet af Bruger #1924 @ 18.08.2002
Top-down

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!



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (1)

User
Bruger #1474 @ 15.11.03 18:56
Er det bare mig eller er det ikke verdens aeldste maade at programmere paa! Takket vaere objekt-orienteret programmering er vi fri for at gore det paa den maade. Da man programmerede i Dos, var den eneste mulighed nemlig "Top-Down"... Men det er vel en smags sag. Jeg synes bare at hvis man i lige vel bruger et objekt-orienterede programmerings sprog som Delphi, hvorfor saa ikke udnytte den, det var noget andet hvis du havde programmeret i C# (Ikke at tage C++ som forveksling).
Du skal være logget ind for at skrive en kommentar.
t