progrmm tut nichts



  • hi leute!

    ich hab ein code geschrieben, der mit einer funktion ein array befüllt und mit einer 2ten die zahlen mit einem dreiecktausch vertauschen soll.

    wärend das befüllen ohne probs geht tauscht er aber nicht.
    als ich einen printf als kontrolle einfügte viel mir auf das die funktion trotz aufruf nicht ausgeführt wird.

    liegt es am code oder am compiler??

    ps: benutze bloodsheet

    #include <stdio.h>
    #include <stdlib.h>
    
    void array_fuell (int* ptr)
    {
      int ger=19;
      int unger=0;
      int i;
    
      for (i=1;i<=20;i++) {
    
          if (i%2==0) {
    
             ptr[ger]=i;
             ger--;     
          }
          else {
    
             ptr[unger]=i; 
             unger++;
          } 
    
      }
    }
    
    void array_tausch (int* ptr)
    {
         int buff;
         int i;
         int range=19;
    
         for (i=0;i>=19;i++) {
    
             printf("%d",buff);
             buff=ptr[range];
             ptr[range]=ptr[i];
             ptr[i]=buff;
             range --;
    
         }
    }
    
    int main(void)
    {
      int array[20];
      int i;
    
      array_fuell(array);
    
      for (i=0;i<=19;i++) {
    
          printf("%d ",array[i]);
    
      }
    
      printf("\n");
      array_tausch(array);
    
      for (i=0;i<=19;i++) {
    
          printf("%d ",array[i]);
    
      }
    
      getch();	
      return 0;
    }
    

    danke leutz



  • Ich sage jetzt nicht, dass das schauerlicher Code ist weil er völlig sinnfrei zu sein scheint und die Funktionen arrays bearbeiten, ohne die Länge übergeben zu bekommen und...

    Das hier jedenfalls klappt wohl nicht, sondern bricht sofort ab:

    for (i=0;i>=19;i++)
    


  • der sinn stand hier nie zur debatte...

    und so wie das ganze angelegt ist brauche ich keine array länge... bzw kommt das alles erst beim optimieren falls ich das überhaubt noch tue.
    ist ja eine schulaufgabe die haben nie viel sinn ausser üben.

    aber thx für den schleifen tipp! anscheinend betriebsblind.. 👍



  • Dein Fehler liegt in deiner Austausch-Funktion:
    Wenn du nicht den Fehler mit dem >= gemacht hättest, würdest du die Zahlen
    zweimal tauschen! Daher wäre die Reihenfolge wieder identisch.

    0 <--> 19
    1 <--> 18
    ...
    9 <--> 10
    10 <--> 9
    11 <--> 8
    ...
    18 <--> 1
    19 <--> 0
    

    Daher solltest du deine Funktion wie folgt ändern:

    void array_tausch (int* ptr)
    {
         int buff;
         int i;
    
         for (i=0; [b]i<10[/b]; i++) {
             buff=ptr[19-i];
             ptr[19-i]=ptr[i];
             ptr[i]=buff;
         }
    }
    

    Dies sollte funktionieren.
    Gruß mcr


Anmelden zum Antworten