Charlie: Übersetzen von C in PHP

Aloa,

wer kann mir folgenden Code in PHP übersetzen:

i : = 4;
DO WHILE KONTO (i) = 0
i : = i + 1;
END;
C2 : = i mod 2;
D2 : = 0;
A5 : = 0;
DO WHILE i < 10
CASE KONTO (i) OF
0:
KONTO (i) : = 5;
1:
KONTO (i) : = 6;
5:
KONTO (i) : = 10;
6:
KONTO (i) : = 1;
END;
Seite 42
Kennziffer Berechnungsmethode für Prüfziffern
noch
87
IF C2 = D2 THEN
BEGIN
IF KONTO (i) > 5 THEN
BEGIN
IF C2 = 0 AND D2 = 0 THEN
BEGIN
C2 : = 1;
D2 : = 1;
A5 : = A5 + 6 - (KONTO (i) - 6);
END ELSE
BEGIN
C2 : = 0;
D2 : = 0;
A5 : = A5 + KONTO (i);
END
END ELSE
BEGIN
IF C2 = 0 AND D2 = 0 THEN
BEGIN
C2 : = 1;
A5 : = A5 + KONTO (i);
END ELSE
BEGIN
C2 : = 0
A5 : = A5 + KONTO (i);
END
END;
END ELSE
BEGIN
IF KONTO (i) > 5 THEN
BEGIN
IF C2 = 0 THEN
BEGIN
C2 : = 1;
D2 : = 0;
A5 : = A5 - 6 + (KONTO (i) - 6);
END ELSE
BEGIN
C2 : = 0;
D2 : = 1;
A5 : = A5 - KONTO (i);
END
END ELSE
BEGIN
IF C2 = 0 THEN
BEGIN
C2 : = 1;
A5 : = A5 - KONTO (i);
END ELSE
BEGIN
C2 := 0;
A5 := A5 - KONTO (i);
END
END;
END;
i := i + 1;
END
Seite 43
Kennziffer Berechnungsmethode für Prüfziffern
noch
87
DO WHILE A5 < 0 OR A5 > 4
IF A5 > 4 THEN
BEGIN
A5 := A5 - 5;
END ELSE
BEGIN
A5 := A5 + 5;
END
END;
IF D2 = 0 THEN
BEGIN
P := TAB1 (A5);
END ELSE
BEGIN
P := TAB2 (A5);
END
IF P = KONTO (10) THEN
BEGIN
Prüfziffer OK;
END ELSE
BEGIN
IF KONTO (4) = 0 THEN
BEGIN
IF P > 4 THEN
BEGIN
P := P - 5;
END ELSE
BEGIN
P := P + 5;
END
IF P = KONTO (10) THEN
BEGIN
Prüfziffer OK;
END
END;
END

danke+lg
Charlie

  1. Aloha,
    ich hab dir jede Zeile C-Code in PHP übersetzt:

    So das wars. Das war aber einfach. By the way: Da steht keine einzige Zeile C-Code.
    Grüße Noodles

  2. Ich glaube da bleibt dir nichts anderes übrig, als das ganze Mauell zu manchen. Es gibt evtl. Programme, die das machen (ich kenne keins), aber ich bezweifle, dass die das so gut wie ein Mensch hinkriegen

  3. 你好 Charlie,

    ich bezweifle, dass das jemand kann. Das ist schonmal kein C. Es sieht teilweise so aus wie Pascal, aber Konstrukte wie “KONTO (i) : = 5;”
    verwirren mich, das kenne ich eigentlich nicht aus Pascal. Ist das
    vielleicht Pseudo-Code?

    再见,
     CK

    --
    Der Mund ist das Portal zum Unglück.
    http://wwwtech.de/
    1. Hallo Christian,

      ich bezweifle, dass das jemand kann. Das ist schonmal kein C. Es sieht teilweise so aus wie Pascal, aber Konstrukte wie “KONTO (i) : = 5;”

      Vermutlich ist es ein Array. In ADA greift man auf Arrayelemente Beispielsweise auch so zu. (Es ist aber auch kein ADA)
      Was mich besonders wundert, ist das Leerzeichen zwischen : und =
      Ein leerzeichen in einem Operator ist schon sehr ungewöhnlich.

      Grüße

      Daniel

      1. 你好 Daniel,

        ich bezweifle, dass das jemand kann. Das ist schonmal kein C. Es sieht
        teilweise so aus wie Pascal, aber Konstrukte wie “KONTO (i) : = 5;”
        Vermutlich ist es ein Array. In ADA greift man auf Arrayelemente
        Beispielsweise auch so zu. (Es ist aber auch kein ADA)

        Das kann sein, ja, aber dann ist es mit Sicherheit kein Pascal :)

        Was mich besonders wundert, ist das Leerzeichen zwischen : und =
        Ein leerzeichen in einem Operator ist schon sehr ungewöhnlich.

        Ja, das stimmt.

        Ich sags ja -- Pseudocode ;-)

        再见,
         CK

        --
        Zu wissen, was wir nicht wissen, ist die Quelle der Weisheit.
        http://wwwtech.de/
        1. Hi Daniel, ck,

          ich bezweifle, dass das jemand kann. Das ist schonmal kein C.

          ich habs mal in gültiges C Übersetzt... dann sollte dem OP das transformieren in PHP ja schonmal leichter fallen *fg*...

          #define DO
          #define END }
          #define WHILE(a) while(a) {
          #define THEN
          #define BEGIN {
          #define AND &&
          #define OR ||
          #define mod %
          #define OF {
          #define CASE switch
          #define IF if
          #define ELSE else

          #define KONTO(i) (*(konto+(i)))
          #define TAB1(i) (*(tab1+(i)))
          #define TAB2(i) (*(tab2+(i)))

          char *konto="12345678901";  /* TODO: replace with actual values */
          char *tab1="12345678901";
          char *tab2="12345678901";

          int i,C2,D2,A5,P;

          main()
          BEGIN
          i = 4;
          DO WHILE (KONTO (i) == 0)
          i = i + 1;
          END;
          C2 = i mod 2;
          D2 = 0;
          A5 = 0;
          DO WHILE (i < 10)
          CASE (KONTO (i)) OF
          case 0:
          KONTO (i) = 5; break;
          case 1:
          KONTO (i) = 6; break;
          case 5:
          KONTO (i) = 10; break;
          case 6:
          KONTO (i) = 1; break;
          END;
          /*Seite 42
          Kennziffer Berechnungsmethode für Prüfziffern
          noch
          87*/
          IF (C2 == D2) THEN
          BEGIN
          IF (KONTO (i) > 5) THEN
          BEGIN
          IF (C2 == 0 AND D2 == 0) THEN
          BEGIN
          C2 = 1;
          D2 = 1;
          A5 = A5 + 6 - (KONTO (i) - 6);
          END ELSE
          BEGIN
          C2 = 0;
          D2 = 0;
          A5 = A5 + KONTO (i);
          END
          END ELSE
          BEGIN
          IF (C2 == 0 AND D2 == 0) THEN
          BEGIN
          C2 = 1;
          A5 = A5 + KONTO (i);
          END ELSE
          BEGIN
          C2 = 0;
          A5 = A5 + KONTO (i);
          END
          END;
          END ELSE
          BEGIN
          IF (KONTO (i) > 5) THEN
          BEGIN
          IF (C2 == 0) THEN
          BEGIN
          C2 = 1;
          D2 = 0;
          A5 = A5 - 6 + (KONTO (i) - 6);
          END ELSE
          BEGIN
          C2 = 0;
          D2 = 1;
          A5 = A5 - KONTO (i);
          END
          END ELSE
          BEGIN
          IF (C2 == 0) THEN
          BEGIN
          C2 = 1;
          A5 = A5 - KONTO (i);
          END ELSE
          BEGIN
          C2 = 0;
          A5 = A5 - KONTO (i);
          END
          END;
          END;
          i = i + 1;
          END
          /*Seite 43
          Kennziffer Berechnungsmethode für Prüfziffern
          noch
          87*/
          DO WHILE (A5 < 0 OR A5 > 4)
          IF (A5 > 4) THEN
          BEGIN
          A5 = A5 - 5;
          END ELSE
          BEGIN
          A5 = A5 + 5;
          END
          END;
          IF (D2 == 0) THEN
          BEGIN
          P = TAB1 (A5);
          END ELSE
          BEGIN
          P = TAB2 (A5);
          END
          IF (P == KONTO (10)) THEN
          BEGIN
          /*Prüfziffer OK*/;
          END ELSE
          BEGIN
          IF (KONTO (4) == 0) THEN
          BEGIN
          IF (P > 4) THEN
          BEGIN
          P = P - 5;
          END ELSE
          BEGIN
          P = P + 5;
          END
          IF (P == KONTO (10)) THEN
          BEGIN
          /*Prüfziffer OK*/;
          END
          END;
          END
          END

          Es sieht teilweise so aus wie Pascal...
          ...(Es ist aber auch kein ADA)
          Ich sags ja -- Pseudocode ;-)

          die relativ planlos eingestreuten ; nach den END sprechen dagegen, das fehlenden ; nach "C2 : = 0" spricht dafür, dass das ungetestet ist... (ist sonst allerdings der einzige Syntaxerror gewesen, evtl. hat der OP sich da auch nur vertippt?)

          Gruß,
            Carsten

          P.S.: was dieser Gruselcode macht hab ich mir nicht weiter angesehen ...

          1. 你好 Carsten,

            ich bezweifle, dass das jemand kann. Das ist schonmal kein C.

            ich habs mal in gültiges C Übersetzt... [...]

            Hatte mir auch ueberlegt, ob ich das posten soll, habs dann aber
            gelassen weil ich nicht weiter in dieselbe Kerbe wie Noodles hauen
            wollte ;-)

            再见,
             CK

            --
            Auf der ganzen Welt gibt es nichts Weicheres und Schwaecheres als Wasser. Doch in der Art, wie es dem Harten zusetzt, kommt nichts ihm gleich.
            http://wwwtech.de/
  4. Hallo zusammen,

    mich hats jetzt so interessiert, was der Spass eigentlich sein soll, dass ich mal Google bemüht habe. Es handelt sich wohl um eine Methode
    zur Prüfung von Kontonummern auf ihre Richtigkeit. Zu finden bei unserer guten alten Bundesbank. Wens also interessiert:
    http://www.bundesbank.de/download/zahlungsverkehr/zv_pz200412.pdf

    Aber allein die Art, wie das Script von charlie ins Forum hingerotzt wurde, lässt mir immer noch die Hutschnur hochgehen:
    Er weiß nicht um welche Sprache es sich handeln soll,
    er will sich nicht mal bemühen das Script selbst zu schreiben,
    es sind sogar die Seitenzahlen im Code, die man selbst rausfiltern darf,... ich könnt mich aufregen....

    Nichtsdestowenigertrotzdem einen schönen Abend
    Noodles

  5. Das alles ist, wie meine Vorgänger schon sagten - _absolut_ kein C.
    Aber mir fällt einiges auf, was ich früher mal gelernt habe, und hier wiedersehe:

    -Alles GROß geschrieben
    -Es wurde streng nach Zeilen gegangen
    -IF C2 = 0 THEN:
       1. Wenn es C wäre, müsste es == heißen
       2. Warum "THEN"?
               Diese beiden Punkte sind Anzeichen für BASIC ...
    -BEGEIN und END ????

    • Keine schließende - } - und öffnende - { - runde Klammer?

    Also, ich kam zu folgenden Entschluss:

    Es ist QBASIC !

    Die erste Programmiersprache, die ich je in meinem Leben gelernt habe. Was ich noch alles im Hirn drinhab von früher erstaunt mich immer wieder :)

    1. 你好 torben,

      Also, ich kam zu folgenden Entschluss:

      Es ist QBASIC !

      Mit absoluter Sicherheit kann ich dir sagen: es ist _kein_ QBASIC.

      Die erste Programmiersprache, die ich je in meinem Leben gelernt habe.

      Dito.

      再见,
       CK

      --
      Die Wirklichkeit hat weder ein Inneres, noch ein Äußeres, noch ein Zentrum.
      http://wwwtech.de/
      1. Mit absoluter Sicherheit kann ich dir sagen: es ist _kein_ QBASIC.

        Meinentwegen, aber es ist eine BASIC-Sprache. In welcher Basic-Sprache ist denn BEGIN und END verankert?

        1. Hallo torben,

          Meinentwegen, aber es ist eine BASIC-Sprache.

          Definitiv nicht. Der Zuweisungsoperator hier im Quellcode ist :=, bei BASIC ist der Zuweisungsoperator =.

          In welcher Basic-Sprache ist denn BEGIN und END verankert?

          BEGIN in keiner, die ich kenne. Und END auch nur bei ENDIF etc.

          Viele Grüße,
          Christian