[Novize] Bewertung der Problemlösung
-
...
-
Swordfish schrieb:
Deutsch und Englisch für Bezeichner zu mischen ist nicht die feine englische
Ist unsinnig oder gehört plausibel erklärt, warum das nicht gut sein soll!
-
...
-
Falke88 schrieb:
So würde die Zahl "5" eine Tabelle ausgeben welche 5 Reihen und 5 Zeilen besitzt. Jede Zelle dieser Tabelle wäre das Produkt der Multiplikation dieser Reihen/Zeilen Nummern.
Bei euch beiden sehe ich aber anhand der Startwerte und der Schleifenbedingung eine extra Zeile/Spalte.
Hier wären aber nur 5 Zeilen/Spalten gefragt und ihr bräuchtet keine if/elsen. :p
Kompakt, weniger gut lesbar/verständlich:int main(void) { int size = 5; int i = 1, j = i, n = 1; while ( n <= size*size ) n % size ? ( printf ("%3d", j), j += i, n++ ) : ( printf ("%3d", j), putchar('\n'), i++, j = i, n++ ); return 0; }
-
...
-
Noch schwerer lesbar, noch unverständlicher.
Und zwei Variable weniger
-
i % size ? "" : "\n"
den Part finde ich gut - demnach wenn nonzero dann passiert nichts und bei zero i=5 % size=5 = 0 - dann false und "\n" als Zeilensprung.
Hier verstehe ich das %5d aber nicht
printf( "%5d%s", ( ( i - 1 ) / size + 1 ) * ( ( ( i - 1 ) % size ) + 1 )
bzw. ich weiss nicht genau was der format specifier %5d bedeutet... bringt der sowas wien tab in 5 sprüngen oder begrenzt er wie %.2f die höhe der ganzzahl...was eigentlich sinnfrei wäre oder...
Brauche nur dort Aufklärung
-
Das gibt eine Dezimalzahl rechtsbündig mit minimal 5 Stellen aus.
Ist die Zahl kleiner wird mit Leerzeichen aufgefüllt.
-> http://www.cplusplus.com/reference/cstdio/printf/
-
Swordfish schrieb:
berniebutt schrieb:
Swordfish schrieb:
Deutsch und Englisch für Bezeichner zu mischen ist nicht die feine englische
Ist unsinnig oder gehört plausibel erklärt, warum das nicht gut sein soll!
Ich habe nicht gesagt es sei gut oder schlecht. Ich habe gesagt es sei kein toller Stil (... und Geschmack ist streitbar). Bist Du anderer Meinung?
Ja, ich bin anderer Meinung! Als Bezeichner für englischsprachige Sachen - wie size, row, column, count - nimmt man diese. Für alle anderen Bezeichner
wählt man besser die eigene Sprache. Es macht wenig Sinn, z.B. in einem deutschsprachigen Buchhaltungsprogramm für die Mehrwertsteuer (Mwst)
Value Additional Tax (VAT) zu verwenden.Dieses Nebenthema kann abgehakt werden!
-
Grüß Gott,
ich traue mich wieder einmal hervor und bewundere die Diskussion über diese Aufgabe. Viele der Vorschläge würden vordere Plätze im Obfucated C Context für Einzeilenprogramme belegen, oder doch in der Kategorie "minimale Anzahl von Variablen". Aber sind sie auch laufzeitoptimal?
Hier mein Vorschlag, der 90% der Multiplikationen einspart. Die Addition
nSpalte+=nZeile
entsprichtnSpalte++
, kostet also (fast) nichts. In Zeile 13 entällt dagegen die Multiplikation.Sicher ist das Programm wie immer nicht normgerecht (im Sinne der Normen aus dem letzten Jahrtausend). Auch habe ich mir das Einlesen gespart und erst einmal durch eine Präprozessorkonstante ersetzt.
/*U038_EinmalEins1.c : Einstiegspunkt der Konsolenanwendung*/ /*Programm optimieren: Optimierte Version*/ #include <stdio.h> #define NMAX 10 int main() { int nZeile,nSpalte; for (nZeile=1;nZeile<=NMAX;nZeile++) { for (nSpalte=nZeile;nSpalte<=NMAX*nZeile;nSpalte+=nZeile) { /*optimiert der Kompiler nicht, dann Zwischenvariable anlegen*/ fprintf_s(stdout,"%3d ",nSpalte); } /*nSpalte*/ fprintf_s(stdout,"\n"); /*Zeile abschliessen*/ } /*for*/ return 0; } /*main*/
Normalerweise optimiert ein guter Kompiler die Zeile 12, indem er erkennt, dass das Abbruchkriterium konstant bleibt und legt versteckt eine Variable an. Ganz vorsichtige Programmierer fügen vor die Zeile 12 eine weitere Variable ein, um diese dann für
NMAX*nZeile
zu verwenden.