Programeer opdrachtenOpdracht : opdr2b_pascal.txt

Terug naar de inzendingen
Opdracht 2b,Pascal Schiks
21-Jan-2005
 Om naar ruim 15 jaar weer eens iets in PASCAL te proberen,
 Heb ik opdracht 2b ook gemaakt.
 Het programma is op zich vrij eenvoudig.
 Ik heb zelf functies moeten maken om tekst te kunnen omkeren,
 in woorden te kunnen splitsen en om te bepalen of het een palindroom betreft
 Daarna was het zo gepiept.
 1 
*****palindroom.pas*****
  
 2{
 3  Title    : palindroom.pas
 4  Function : Mijn oplossing in PASCAL voor opdracht 2b
 5  Author   : Pascal Schiks (C) 2005 GNU/GPL
 6}
 7Program Palindroom;
 8
 9{ Zet een woord achterste voren neer }
 10Procedure keerom(var tekst : String);
 11Var
 12  I:Integer;
 13  L:Integer;
 14  C:Char;
 15Begin
 16  L:=Length(tekst);
 17  For I:=1 to L div 2 Do
 18  Begin
 19   C:=tekst[L+1-I];
 20   tekst[L+1-I]:=tekst[I];
 21   tekst[I]:=C; 
 22  End;
 23End;
 24
 25{ return True als het woord een palindroom is }
 26Function ispalindroom(tekst :String) : Boolean;
 27Var 
 28  omgekeerd : String;
 29Begin
 30  omgekeerd:=tekst;
 31  keerom(omgekeerd);
 32  ispalindroom:=(Lowercase(tekst)=Lowercase(omgekeerd));
 33End;
 34
 35{ return Nth woord uit Tekst }
 36Function nsplit(tekst:String; N:Integer) : String;
 37Var
 38  woordteller : Integer;
 39  woordpointer: Integer;
 40  tekstpointer: Integer;
 41Begin
 42  woordteller:=0;
 43  woordpointer:=0;
 44  tekstpointer:=0;
 45  nsplit:='';
 46  Repeat ;
 47    tekstpointer:=tekstpointer+1;
 48    If((tekst[tekstpointer] = ' ') OR (tekstpointer=1)) Then
 49    Begin
 50      woordteller:=woordteller+1;
 51      if(tekstpointer>1) Then
 52        tekstpointer:=tekstpointer+1;
 53    End;
 54    if(woordteller=N) Then
 55    Begin
 56      woordpointer:=woordpointer+1;
 57      nsplit:=nsplit+tekst[tekstpointer];
 58    End;
 59  Until((tekstpointer>=length(tekst)) OR (woordteller>N));
 60End;
 61
 62{ Hoofd programma }
 63Var
 64  woordteller:Integer;
 65  woord:String;
 66  zin:String;
 67Begin
 68  Writeln('Palindroom, Opdracht 2b van Pascal');
 69
 70  zin:='In deze programeer opdracht Lepel staan naast gewone nepapen woorden ook een paar topspot palindromen meeneem droogoord';
 71
 72  { Loop de zin woord voor woord door } 
 73  woordteller:=0;
 74  Repeat
 75    woordteller:=woordteller+1;
 76    { bekijk woord nr woordteller }
 77    woord:=nsplit(zin, woordteller);
 78    If(Not ispalindroom(woord)) Then
 79      keerom(woord)
 80    Else
 81    Begin { Eerste en laatste letter uppercase }
 82      woord[1]:=Upcase(woord[1]);
 83      woord[Length(woord)]:=Upcase(woord[Length(woord)]);
 84    End;
 85    { laatste woord is null lang, ter voledigheid maar even checken }
 86    if(Length(woord)<>0) Then
 87      Write(woord,' ');
 88  Until(Length(woord)=0);
 89  writeln;
 90End.
 91