Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Kommen solche Ausdrücke eigentlich öfter vor?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
20.12.2007, 19:29 Uhr
Hans
Library Walker
(Operator)


Hi,

ich bin in den letzten Tagen mal auf 'ne alte Klausur im Fach Datenverarbeitung gestossen. Da geht es bei einer Frage um die Klammerung von Ausdrücken; mich interessiert aber viel mehr die Frage, was die Profis wie ao oder beefy von solchen Ausdrücken halten, und wie häufig solche Ausdrücke ihrer Meinung nach in der Praxis sind. Ich zitier mal die Aufgabe:

Zitat von DV-Klausur:

C arbeitet bedingte Ausdrücke von rechts ab.
Wie denkt sich C also in folgendem Ausdruck die Klammerung
a<b ? c<d : e<f ? g : h
Wie wäre diese Klammerung bei Abarbeitung von links

Was ergibt also c=='B' ? 2 : c=='0' ? 8 : 10 bei Abarbeitung von rechts
für c='B' und für c='0'

Was ergäbe es bei Abarbeitung von links
für c='B' und für c='0'


Ich hab damals in den Lösungen damals (1993) geschrieben:

Zitat von Lösungsblatt:

C arbeitet bedingte Ausdrücke von rechts ab.
Wie denkt sich C also in folgendem Ausdruck die Klammerung
a<b ? c<d : ( e<f ? g : h )

Wie wäre diese Klammerung bei Abarbeitung von links
( a<b ? c<d : e<f ) ? g : h

Was ergibt also c=='B' ? 2 : c=='0' ? 8 : 10 bei Abarbeitung von rechts
für c='B' und für c='0'
.....2.................8
Was ergäbe es bei Abarbeitung von links
für c='B' und für c='0'
......8................8 (wenn ich mich nicht irre...!)


Als Bemerkung hatte ich dabei geschrieben:

Zitat von mir:

Da wo »(wenn ich mich nicht irre...!)« hinter steht, bin ich mir nicht 100%ig sicher, hoffe aber das es stimmt. Ich hatte auch keine Lust mehr so sehr darüber nachzudenken, weil ich diese Frage für rein Akademisch halte, weshalb sie beim praktischen Programmieren sowieso nicht so sehr interessiert.


Lag, bzw. liege ich mit dieser Vermutung eigentlich richtig, oder habt ihr andere Erfahrungen?
Mir sind solche Ausdrücke seitdem jedenfalls nicht mehr begegnet.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 20.12.2007 um 19:35 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
20.12.2007, 19:38 Uhr
xXx
Devil


Hmm das ganze ist ja nur eine verkürzte Schreibweise von (ok in diesem Fall zumindest :P )

C++:
if (a < b)
    return c < d;
else
    if (e < f) return g;
    else return h;
Je nach Einfachheit der Abfrage kann man sowas gerne schonmal nutzen ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.12.2007, 20:40 Uhr
0xdeadbeef
Gott
(Operator)


Ach doch, sowas kann schon mal vorkommen. Außerdem trainiert es ja nicht nur das Verständnis dieses speziellen Operators, sondern auch das anderer. Zugegeben, im Zweifel kann man immer noch selbst explizit Klammern setzen, aber wenn du anderer Leute Code liest, hilft dir das herzlich wenig. Denk zum Beispiel mal an sowas wie

C++:
if(a < b && b < c ? false : true) {
  ...
}


...da ist es dann schon wichtig, zu wissen, welche Operatoren stärker binden als andere. Oder, besonders beliebt

C++:
x >> y & 1


...und jetzt stell dir mal zum Beispiel etwas wie

C++:
x >> y > 10 ? 10 : y & 1


vor. (Ja, da wären für eine sinnvolle Auswertung tatsächlich Klammern nötig. Ist doch gut, das zu wissen, oder?)

Ich würde die Ausdrücke da oben wahrscheinlich eher so formulieren, dass ich keine solchen Endüberhänge hätte, also als

C++:
!bed1 ? bed2 ? a : b : c


...das macht es etwas lesbarer, aber vorkommen kann sowas in der Realität schon auch mal. Wenn auch meistens wohl bei Codern der alten Garde, zu deren Zeit Einfachheit noch nicht als eine Tugend gelehrt wurde
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.12.2007, 23:02 Uhr
Pablo
Supertux
(Operator)



Zitat von 0xdeadbeef:

Ich würde die Ausdrücke da oben wahrscheinlich eher so formulieren, dass ich keine solchen Endüberhänge hätte, also als

C++:
!bed1 ? bed2 ? a : b : c


...das macht es etwas lesbarer, aber vorkommen kann sowas in der Realität schon auch mal. Wenn auch meistens wohl bei Codern der alten Garde, zu deren Zeit Einfachheit noch nicht als eine Tugend gelehrt wurde


Grad heute musste ich einen solchen Ausdruck benutzen, allerdings 8 fach geschachtelt, da habe ich überall Klammern gesetzt (sah danach eher wie ein LISP Ausdruck aus). Manchmal hat an keine andere Wahl als das zu benutzen (in der Form)


C++:
#define sensor_get_value(sensor) \
  (sensor->type == I8 ? sensor->data->i8 : (sensor->type == U8 ? sensor->data->u8 : ...))



das war übel...
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.12.2007, 23:08 Uhr
0xdeadbeef
Gott
(Operator)



Zitat:

THE LESSER-KNOWN PROGRAMMING LANGUAGES #12 -- LITHP
This otherwise unremarkable language is distinguished by the absence of an "S" in its character set; users must substitute "TH". LITHP is said to be useful in protheththing lithtth.


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
20.12.2007, 23:40 Uhr
ao

(Operator)



Zitat:
a<b ? c<d : e<f ? g : h

Solchen Code zu lesen ist wie anderen beim Onanieren zuzugucken.

Das sind keine Prüfungsfragen, das sind Anti-Beispiele. Wer sich sowas ausdenkt, hat bestimmt im Leben noch kein Programm geschrieben, das an Kunden verkauft oder auf Produktivsystemen installiert wurde. Dann würden ihm nämlich bessere Aufgaben einfallen.

Zitat:
Mir sind solche Ausdrücke seitdem jedenfalls nicht mehr begegnet.

Mir auch nicht, und der Grund ist bestimmt nicht, dass ich nur von schlechten Programmierern umgeben bin, im Gegenteil.

Zitat:
weshalb sie beim praktischen Programmieren sowieso nicht so sehr interessiert.

Interessant wäre nur, welcher Kollege das verbrochen hat. Weil ich den nämlich bitten würde, mir die Zeile zu erklären. Und zwar in der Kaffeeküche, während noch mehrere andere dabeistehen ...

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
20.12.2007, 23:42 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von ao:

Das sind keine Prüfungsfragen, das sind Anti-Beispiele. Wer sich sowas ausdenkt, hat bestimmt im Leben noch kein Programm geschrieben, das an Kunden verkauft oder auf Produktivsystemen installiert wurde. Dann würden ihm nämlich bessere Aufgaben einfallen.


Oh, du wärst erstaunt, was mir da schon so alles über den Weg gelaufen ist...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.12.2007, 23:54 Uhr
ao

(Operator)



Zitat von Pablo:

C++:
#define sensor_get_value(sensor) \
  (sensor->type == I8 ? sensor->data->i8 : (sensor->type == U8 ? sensor->data->u8 : ...))



8-fach geschachtelt, sagst du? Also wenn alle 8 Datentypen mit gleicher Häufigkeit vorkommen, darfst du im statistischen Mittel damit rechnen, dass Vergleich und Verzweigung jeweils 4,5-mal angewendet werden müssen, bis du an der richtigen Stelle gelandet bist. Ich wage zu behaupten, dass ein switch-clause performanter wäre.


Bearbeitung:
Moment, das ist Quatsch. Auch ein switch wird in Maschinensprache als Kette von Verzweigungen realisiert. Ich kenne keinen Prozessor, der sowas wie eine switch-Instruction hat. Also vergesst das am besten wieder.


ao

Dieser Post wurde am 21.12.2007 um 00:19 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.12.2007, 00:02 Uhr
ao

(Operator)



Zitat von 0xdeadbeef:
Oh, du wärst erstaunt, was mir da schon so alles über den Weg gelaufen ist...

ja, mir auch. Aber das waren immer genau die Programme, die einen Riesenhaufen Ärger gemacht haben, die endlos Zeit verschlungen haben, ohne jemals wirklich stabil zu sein. Bis wir sie endlich entnervt neu geschrieben haben.

Dieser Post wurde am 21.12.2007 um 00:05 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.12.2007, 02:41 Uhr
Hans
Library Walker
(Operator)



Zitat von 0xdeadbeef:
Außerdem trainiert es ja nicht nur das Verständnis dieses speziellen Operators, sondern auch das anderer.


Das bezweifel ich auch gar nicht, und ich glaube, darum ging es dem Menschen auch zu einem Teil.

Zitat von 0xdeadbeef:
Zugegeben, im Zweifel kann man immer noch selbst explizit Klammern setzen, aber wenn du anderer Leute Code liest, hilft dir das herzlich wenig.


stimmt. (Obwohl es nicht ganz hierher passt, aber Programme wie indent hat man ja nicht umsonst geschrieben.)

Zitat von 0xdeadbeef:
... aber vorkommen kann sowas in der Realität schon auch mal. Wenn auch meistens wohl bei Codern der alten Garde, zu deren Zeit Einfachheit noch nicht als eine Tugend gelehrt wurde

Ja, das mit der alten Garde trifft es genau. Ich weis es nicht mehr 100%ig, aber ich glaube, das war die letzte Klausur, die dieser Prof schreiben lies. Danach ist er in Rente gegangen. Hab auch keine Ahnung, ob er noch unter den Lebenden weilt, - dann müsste er jetzt so um die 80 sein.
---

Zitat von ao:
Das sind keine Prüfungsfragen, das sind Anti-Beispiele.

Och, der hatte noch mehr solcher Fragen auf Lager...

Zitat:
Wer sich sowas ausdenkt, hat bestimmt im Leben noch kein Programm geschrieben, das an Kunden verkauft oder auf Produktivsystemen installiert wurde. Dann würden ihm nämlich bessere Aufgaben einfallen.

Kann ich nicht beurteilen.

Zitat von ao:
Interessant wäre nur, welcher Kollege das verbrochen hat. Weil ich den nämlich bitten würde, mir die Zeile zu erklären. Und zwar in der Kaffeeküche, während noch mehrere andere dabeistehen ...

Also ich will hier keine Namen nennen, weil man mir das u.U. übel nehmen könnte. Aber der konnte das. Der hat's nicht nur in seinen Vorlesungen gebracht, der hat's auch im Praktikum noch mal erklärt.

Eine andere Sorte beliebter Frage war diese:

Zitat:
Was druckt printf ("%06o 06o",-59.2); ?

(Antwort: 141554 146314 auf einer PDP-11)

bzw. anders herum:

Zitat:
Was druckt printf ("%0.6e",0136600,-65636);

(Antwort: -1.562E-02 auf einer PDP-11)
Und wenn man da nicht weiss, wie Fliesspunktzahlen im Rechner codiert sind, ist man aufgeschmissen...
Ach ja, auf dem PC sehen die Ergebnisse anders aus, weil die Floatingpoints anders normiert werden (1.0 statt 0.1), und die Konstanten vom Compiler anders interpretiert werden können. In der Aufgabenstellung wird davon ausgegangen, das es sich um 16-bit integer handelt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 21.12.2007 um 02:47 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: