Nieuws
Foto's
Artikelen
Componenten
Applicaties
Kleinkunst

Palindromen

Wat is een palindroom

Een palingdroom is een getal of een woord dat we langs twee kanten kunnen lezen en toch dezelfde klank behouden. Voorbeelden hiervan zijn lepel, 1001, 5445, kok,… Het palindroom probleem kan op een 3-tal manieren opgelost worden. De meestgebruikt methode is het aflopen van alle getallen tussen 1 en 999999 en het eerste cijfer vergelijken met het laatste, het tweede met het voorlaatste, ... totdat er een verschil optreedt. Als je het midden bereikt zonder dat er verschillen waren, dan is het getal een palindroom (1). Een andere methode is de helft van het getal af te knippen, dit om te keren en er achteraan bij te plakken. Is dit getal hetzelfde als het originele getal dan is het een palindroom (2). De snelste methode is het zelf aanmaken van palindromen (3).

Voorbeelden in verschillende programmeertalen

Hieronder volgen enkele programma’s die het 2de algoritme gebruiken. Deze programmetjes hebben we op snelheid getest. De testen zullen niet helemaal correct zijn, maar geven toch een vrij goed beeld van de kracht van de huidige programmeertalen. Verder herken je duidelijk in alle talen dezelfde structuren en overeenkomsten.

Delphi 3

// Delphi 3
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  i, j, lengte, midden : integer;
  palindroom : string;
begin
  Listbox1.Items.Clear;
  for i:=1 to 99999 do
  begin
    palindroom:=IntToStr(i);
    lengte:=Length(palindroom);
    midden:=(lengte+1) div 2;
    j:=0;
    repeat
      inc(j);
    until (j=midden) or (palindroom[j]<>palindroom[lengte-j+1]);
    if palindroom[j]=palindroom[lengte-j+1] then
      Listbox1.Items.Add(palindroom);
  end;
end;

C++Builder

// C++Builder
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
  int i, j, lengte, midden;
  ListBox1->Items->Clear();
  for (i = 1; i < 100000; i++) {
    str=IntToStr(i);
    lengte=StrLen(str.c_str());
    midden=(lengte+1) / 2;
    j=1;
    while (j < midden && str[j]==str[lengte-j+1]) {
      j++;
    }
    if (str[j] == str[lengte-j+1]) {
      ListBox1->Items->Add(str);
    }
  }
}

Visual Basic 5

' Visual Basic 5
Private Sub Command1_Click()
  Dim i, j, lengte, midden As Integer
  Dim palindroom As String
  List1.Clear
  For i = 1 To 99999
    palindroom = i
    lengte = Len(palindroom)
    midden = (lengte + 1) / 2
    j = 0
    Do
      j = j + 1
    Loop While j < midden And Mid$(palindroom, j, 1) = Mid$(palindroom, lengte - j + 1, 1)
    If Mid$(palindroom, j, 1) = Mid$(palindroom, lengte - j + 1, 1) Then
      List1.AddItem (palindroom)
    End If
  Next i
End Sub

JavaScript

// JavaScript
function Palindromen()
{
  for (var i = 1; i < 100000; i++) { 
    str=i+"";
    lengte=str.length;
    midden=lengte % 2;
    j=0;
    while (j < midden && str.substring(j,j+1) == str.substring(lengte-1-j,lengte-j)) {
      j++;
    }
    if (str.substring(j,j+1) == str.substring(lengte-1-j,lengte-j)) {
      document.writeln(i," ");
    } 
  }
}

VBScript

// VBScript
Sub Palindromen()
  For i = 1 To 99999
    palindroom = i
    lengte = Len(palindroom)
    midden = (lengte + 1) / 2
    j = 0
    Do
      j = j + 1
    Loop While j < midden And Mid(palindroom, j, 1) = Mid(palindroom, lengte - j + 1, 1)
    If Mid(palindroom, j, 1) = Mid(palindroom, lengte - j + 1, 1) Then
      Document.Writeln palindroom
    End If
  Next
End Sub

Snelheid

Programmeertaal Snelheid Opmerking
Delphi 3
+++
Zeker en vast de snelste uit de rij
C++ Builder
+++
Benaderd Delphi maar de code is iets ingewikkelder
Delphi 1
++
Iets tragen dan de 32-bit versie van Delphi
Pascal (DOS)
+
Scoort vrij goed
Cobol (DOS)
+
Raar maar waar
Visual Basic 5
-
Visual Basic scoort niet zo goed, het is dan ook maar een interpreter
VBScript

---
Is zeer traag t.o.v van gewone programmeertalen, maar steunt dan ook helemaal op de interpreter van de webbrowser
JavaScript
---
Was ietsje tragen dan VBScript