Kleinste und Größte Zahl ermitteln



  • for(;p---a;*p<kl?kl=*p:0);
    

    kann mir das mal wer übersichtlicher aufschreiben??
    sowas hab ich noch nie gesehen

    ;p---a;
    

    der rest ist mir klar 🙂



  • ;p---a;
    

    Sowas hab ich auch noch nie gesehen....das ist ja noch schlimmer als das was ich schreibe 😃



  • int s,z,m;int t1=1;int k=0;int ze=2;int sp=2;int merker=0;int m2,m3,m4;int i=1;int h=0;
    int j=1;int n1=2;int t=4;int l1=1;int l2=2;int z1=1;int g=0; int g2=0; int g3=0; int g5=0;int n2=0;
    

    das wast du schreibst ist aber sicher nicht so sclimm wie das hier oder :-))
    hab ich von http://www.c-plusplus.net/forum/viewtopic-var-t-is-110196.html das ist echt krass 😃



  • ok, ihr l33ten checkaz

    p = a+sizeof(a)/sizeof(*a);
    for(;p---a;*p<kl?kl=*p:0);
    

    ein for loop hat die form for(x;y;z)
    x wird am anfang ausgeführt, z zwischen jeder ausführung des blocks (den es hier nicht gibt) und y ist die bedingung.
    also jetzt der hauptteil:

    (*p < kl) ? (kl = *p) : 0
    

    was der trinärop zurückgibt, ist egal. wichtig ist nur die zuweisung.

    am anfang zeigt p um ein element über das array hinaus.
    vor dem eintritt wird die bedingung (p-- - a) geprüft.
    die ist !=0 und dekrementiert danach p, damit zeigt p jetzt auf ein element im array.
    jetz wird der code oben ausgeführt.

    wenn wir bei (p == &a[1]) angekommen sind, trifft (p-- - a) noch zu, aber nach der auswertung ist p==a. bei der nächsten auswertung kommt null raus.

    ok, war ne miese erklärung aber sprache muss man sprechen und nicht erklären.



  • aber mann kann sprache auch schön sprechen
    und nicht so verunzelt wie

    p = a+sizeof(a)/sizeof(*a);
    for(;p---a;*p<kl?kl=*p:0);
    

    wo man nur die haelfte versteht



  • es ist auch nicht dazu gedacht, lesbar zu sein.
    http://beej.us/guide/c/src/bgc.html#intro

    aber es zeigt, wie viel man mit so wenig zeichen sagen kann.
    in gewisser weise hilfts auch der ausführungsgeschwindigkeit.



  • nöö ich glaub nicht dass das was bei der ausfürungsgescheindigkteit aendert muss ja kompiliert werden, es gibt zwar viele arten einen code schneller machen zu können aber die schreibweise ist es sicher nicht...



  • --linuxuser-- schrieb:

    int s,z,m;int t1=1;int k=0;int ze=2;int sp=2;int merker=0;int m2,m3,m4;int i=1;int h=0;
    int j=1;int n1=2;int t=4;int l1=1;int l2=2;int z1=1;int g=0; int g2=0; int g3=0; int g5=0;int n2=0;
    

    das wast du schreibst ist aber sicher nicht so sclimm wie das hier oder :-))
    hab ich von http://www.c-plusplus.net/forum/viewtopic-var-t-is-110196.html das ist echt krass 😃

    Was ist daran so krass?...ok umständlich aber es gibt bei weitem schlimmeres...der code ist übrigens von mir.hab die deklarationen nur so angelegt aus platzgründen....



  • for(;p---a;*p<kl?kl=*p:0);

    Noch mal zum "p---a". Woher weiß der Compiler denn, ob "p- (--a)" oder "(p--) -a" gemeint ist?

    Afaik hat doch --x eine höhere Priorität als x--, oder?



  • Reyx schrieb:

    for(;p---a;*p<kl?kl=*p:0);

    Noch mal zum "p---a". Woher weiß der Compiler denn, ob "p- (--a)" oder "(p--) -a" gemeint ist?

    Afaik hat doch --x eine höhere Priorität als x--, oder?

    das hat nix mit der priorität zu tun sondern mit dem scanner des compilers.
    es geht darum, ob er es als

    p-- - a
    

    oder als

    p - --a
    

    liest. er liest es als ersteres.


Anmelden zum Antworten