Eingabe nicht speichern



  • HansKlaus schrieb:

    für den anfang nicht schlecht. gibts irgendwie warnungen vom compiler? stürzt es irgendwie ab?

    Nein das Programm läuft ohne Probleme aber ich weiß dass ich nicht alles richtig gemacht habe.



  • Deshalb ist die Aufgabenstellung auch Scheiße. Dein Lehrer widerspricht sich in der Aufgabenstellung: Array hat immer eine feste unveränderliche Länge <> variable unbekannte Anzahl von Elementen

    (ich muss alle auszuführenden Aktionen als Funktionen formulieren)

    Das wiederum ist sehr sinnvoll.
    Du musst dir Gedanken machen, was die einzelnen Funktionen machen sollen und dafür für Parameter brauchen: nennt sich Programmdesign.

    int main()
    {
    Arraydefinition
    
    funktion_Einlesen_von_Zahlen(... ... ...);
    ...
    funktion_Kopieren_Absolutbetraege(... ... ...);
    
    return 0;
    }
    


  • Maziar schrieb:

    Wutz schrieb:

    Außerdem musst du bei Verwendung von Arrays deren Länge berücksichtigen und nicht mehr Eingaben zulassen, als das Array aufnehmen kann.

    Hast du gar nicht befolgt.

    Das Problem hier ist ich weiß ja nicht wie viele Eingaben der Benutzer macht, deshalb kenne ich die Array Länge erst den Eingaben.

    Ein Array ist nach seiner Definition nicht in der Größe oder seinem Ort änderbar.

    Demnach musst du wissen, wieviel Daten du in dem Array maximal ablegen kannst.
    (Es geht nicht darum, wieviel Daten du darin abgelegt hast)
    Und diese Information musst du der Funktion mitteilen.

    Es sei denn, du hast schon mit dynamischer Speicherverwaltung gearbeitet.

    Maziar schrieb:

    HansKlaus schrieb:

    für den anfang nicht schlecht. gibts irgendwie warnungen vom compiler? stürzt es irgendwie ab?

    Nein das Programm läuft ohne Probleme aber ich weiß dass ich nicht alles richtig gemacht habe.

    Irgendwo rufst du die Funktion array mit einem Array als Parameter auf.
    Dieses Array hat eine Größe. gib einfach (deutlich ) mehr Daten ein.

    Nebenbei ist das Array a in deiner Funktion vollkommen nutzlos.



  • Vielleicht ist es besser wenn ich den kompletten Code euch zeige:

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 50
    
    int i, count = 0;
    
    int arrayeingabe(int x[]){ 
    
      while(1){
        printf ("Bitte geben Sie die %d. Zahl ein: ", count+1);
        scanf ("%d", &x[count]);
    
        if (x[count] == 0)
        {
    	  printf ("\nIhre Eingabe:\n\n");
    	  count--;
          break; 
        }
        count++;
      }
      int a[count];
    
      for(i=0; i<=count; i++){
      	if(x[i]!=0){
    	  a[i]=x[i];}
    	  else 
    	  break;
      }
    
      for (i = 0; i<=count; i++)
      {
    
          printf ("%d. Zahl: %d\n", i+1, a [i]);
    
      }
      return a[count];
    
    }
    
    int mittelwert(int a[]){
    	int b=0; 
    	double m;
      for (i = 0; i<=count; i++)
      {
    
          b+=a[i];
    }
    m = (double)b / i;
    printf("%d\n", b);
    printf("%.2f\n", m);
    }
    
    int bignum(int a[]){
    	int big = 1;
    	  for (i = 0; i<count; i++)
      {
    
          if(a[i]>a[i+1] && a[i]>big)
          big = a[i];
          else if(a[i+1]>a[i] && a[i+1]>big)
          big = a[i+1];
    
      }
      printf("Die größte Zahl lautet: %d\n", big);
    }
    
    int minnum(int a[]){
    	int min = 1;
    	  for (i = 0; i<count; i++)
      {
          if(a[i]<a[i+1] && a[i]<=min)
          min = a[i];
          else if (a[i+1]<a[i] && a[i+1] <= min)
          min = a[i+1];
    
      }
      printf("Die kleinste Zahl lautet: %d\n", min);
    }
    
    int main(){
    	int a[MAX];
    	arrayeingabe(a);
    	mittelwert(a);
    	bignum(a);
    	minnum(a);
    return 0;
    }
    


  • Deine Minimum und Maximum-Funktionen sind zu kompliziert, wenn nicht sogar falsch.

    DirkB schrieb:

    Du verwendest global Variablen. Das ist schlecht.
    Du nennst die auch noch i. Das grenzt an Wahnsinn.

    Nutze den Rückgabewert der Funktionen.
    Mache in den Funktionen nur die Berechnung und mach die Ausgabe in der rufenden Funktion.

    I.A. gibt man die Größe des Arrays oder die Anzahl der gültigen Elemente an und nicht den maximalen Index.



  • DirkB schrieb:

    Nutze den Rückgabewert der Funktionen.
    Mache in den Funktionen nur die Berechnung und mach die Ausgabe in der rufenden Funktion.

    Würde ich gerne weiß aber nicht wie 😞



  • Indem du der Funktion einen oder mehrere werte übergibst, die Verarbeitung durchführst und das Ergebnis zurück gibst und dann einer Variable in Main zuweist. Guck dir nochmal das Skript an!



  • double mittelwert(int a[], unsigned int anzahl) {  // size_t statt unsigned int wäre besser
      double m = 0;
      for (i = 0; i<anzahl; i++)
      { m += a[i];
      }
      if (anzahl > 0)
        m /= anzahl;
    
      return m;
    }
    

    Aufruf z.B. mit

    printf("Der Mittelwert beträgt %f\n", mittelwert(a, count));
    


  • Maziar schrieb:

    ... ich muss im Studium ein Programm schreiben das solange ganze Zahlen einliest bis eine Null eingegeben wird, die Null soll nicht im Array gespeichert werden.

    Maziar schrieb:

    Vielleicht ist es besser wenn ich den kompletten Code euch zeige:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 50
    
    int i, count = 0;
    
    int arrayeingabe(int x[])
    { 
      while(1){
        printf ("Bitte geben Sie die %d. Zahl ein: ", count+1);
        scanf ("%d", &x[count]);
     	
        if (x[count] == 0)
        {
    	  printf ("\nIhre Eingabe:\n\n");
    	  count--;
          break; 
        }
        count++;
      }
      int a[count];
      
      for(i=0; i<=count; i++){
       ...
    

    Wenn Du nicht weist wie viele Zahlen insgesammt kommen, benötigst du in C eine dynamische Datenstruktur wie eine verkettete Liste.

    Da du aber das Limit MAX in deinem Code definierst und das Array auch diese Grösse hat müsste diese Maximalgrösse irgendwo geprüft werden.

    Könnte ungefähr so aussehen:

    int arrayeingabe(int x[])
    { 
      int i, k;
      for(i=0; i<MAX; i++) {
        printf ("Bitte die %d. Zahl eingeben: ", i+1);
        scanf ("%d", &k);
    
        if(k == 0)
           break; 
    
        x[i] = k;
        }
      return i;
    }
    

    Sichererer wäre es zu dem beim Aufruf die Länge anzugeben:

    unsigned arrayeingabe(int *x, unsigned len);
    


  • Danke Leute die Beiträge haben mir viel geholfen.


Anmelden zum Antworten