Übersetzen von C in PHP
Charlie
- 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
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
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
你好 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
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
你好 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
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 ...
你好 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
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
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 ????
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 :)
你好 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
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?
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