Ein kleines rätsel



  • Hier ein kleines C-Rätselchen 😃

    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
       int i, n = 20;
       for(i=0; i<n; i--)
          putchar('.');
       putchar('\n');
       return 1;
    }
    

    Der Code soll durch einsetzen eines Zeichens schlussendlich 20 Punkte ausgeben.

    Viel Spass 😃

    grüsse



  • Hmm, mal sehen...
    Ich würde mal folgendes Vorschlagen:

    #include <stdio.h>
    
    #include <stdio.h>
    
    int main(int argc, char *argv[])
    {
       int i, n = 20;
       for(i=0; -i<n; i--)
          putchar('.');
       putchar('\n');
       return 1;
    }
    

    Man muss einfach die Bedingung der for()-Schleife invertieren, sprich aus
    for(i=0; i<n; i--)
    einfach
    for(i=0; **-**i<n; i--)
    machen, dann klappt's einwandtfrei 😉



  • Hatten wir scho´mal vor 3 Wochen oder so.



  • jo, ich hab auch noch eins:
    was macht diese funktion 😕

    int was_macht_die (char *a, char *b) 
    { 
        char *t = a; 
        while (*++b && *a) 
            a = 1 + (223 & (*b - *a) ? t-1 : a); 
        return !*a; 
    }
    

    wer's rauskriegt darf sie behalten 😉



  • Ich würde sagen, dass die Funktion nichts macht, da den dereferenzierten char-Pointern nichts zugewiesen wird. Und da die Pointeradressen by value übergeben werden, haben die Änderungen keinen Effekt. Der Rückgabewert gibt an, ob a kein leerer String ist, also das erste Element nicht null ist.



  • masterofx32 schrieb:

    Ich würde sagen, dass die Funktion nichts macht, da den dereferenzierten char-Pointern nichts zugewiesen wird.

    das heisst doch nix. strlen() z.b. ändert auch nichts am übergebenen string.

    masterofx32 schrieb:

    Und da die Pointeradressen by value übergeben werden, haben die Änderungen keinen Effekt.

    wie gesagt, die originaldaten werden nicht verändert, aber die funktion macht trotzdem was. aber was???



  • net schrieb:

    jo, ich hab auch noch eins:
    was macht diese funktion 😕

    Irgend was relativ unsauberes und sinnloses? 0 oder 1 zurückgeben?



  • groovemaster schrieb:

    Irgend was relativ unsauberes und sinnloses?

    unsauber vielleicht, aber nicht sinnlos..

    groovemaster schrieb:

    0 oder 1 zurückgeben?

    naja, aber das reicht nicht als antwort



  • Ich habe nur beschrieben, was die Funktion nach außen hin macht. An den char-arrays verändert sie nichts und gibt diesen wert zurück. Was sie da rumrechnet, interessiert mich nicht, da es von außen meiner Meinung nach keine Bedeutung hat 🙂
    Die Funktion der Funktion kann also nur über den Rückgabewert bestimmt werden.



  • masterofx32 schrieb:

    Was sie da rumrechnet, interessiert mich nicht...

    das ist doch das rätsel. ...aber es zwingt dich ja keiner mitzumachen 😉

    masterofx32 schrieb:

    ...da es von außen meiner Meinung nach keine Bedeutung hat 🙂

    doch, hat es. die funktion macht was sinnvolles :p



  • Ja, ich sehe schon, dass ich mich bezüglich des Rückgabewertes geirrt habe, ich knobel dann mal weiter 🙂



  • net schrieb:

    naja, aber das reicht nicht als antwort

    OK, habs mir jetzt mal etwas näher angeschaut. So richtig schlau daraus werd ich trotzdem nicht. Am ehesten sieht es noch nach einer case-insensitiven strstr Implementierung aus. Aber selbst dafür wäre es echt mies.



  • hmm...

    gibt 1 zurück wenn a ident mit b ist, nur das a upper case und b lower case ist?

    Also 1 bei:

    a = "HALLO"
    b = "hallo"

    und 0 bei:

    a = "HALLO"
    b = "Hallo"

    a = "hallo"
    b = "HALLO"

    Edit: argh das wars denke ich doch nicht ganz...



  • groovemaster schrieb:

    OK, habs mir jetzt mal etwas näher angeschaut. So richtig schlau daraus werd ich trotzdem nicht. Am ehesten sieht es noch nach einer case-insensitiven strstr Implementierung aus. Aber selbst dafür wäre es echt mies.

    ja, du hast es 👍 die funktion soll ausspucken ob a in b vorkommt.
    ist sogar'n fehler drin, das erste zeichen von b wird nicht beachtet. danke mastercracker 😉



  • net schrieb:

    ist sogar'n fehler drin, das erste zeichen von b wird nicht beachtet.

    Nicht nur deswegen ist die Implementierung mies, da sind noch mehr Fehler drin. Wenn zB a="Hallo" und b="123hallo456" ist, wird korrekterweise 1 ausgegeben. Wenn aber a="hallo" und b="123Hallo456" ist, dann nicht. Warum? Dieses Rätsel überlass ich einfach mal dir. 😉


Anmelden zum Antworten