Suche Max in Array [i][k]



  • Hallo Freunde der C-Programmierung,
    Ich beschäftige mich seit etwa einem Monat mit der Programmierung mit c bin mittlerweile bei Array's angekommen und habe ein kleines Problem.
    Ich habe ein 2 Dim Array [4][8], habe die Daten zur Eingabe eingegeben bzw. eingelesen, ausgegeben und auch schon von den Daten jeweils ein Mittelwert berechnet.

    Was ich jetzt Suche ist das max der eingegeben Werte, meine Idee war dazu: max=stunden[i][k];
    for(i=0; i<4; i++);
    {
    for (k=0; k<7; k++);
    {
    if (stunden[i][k]>max) max=stunden[i][k];
    }
    }

    Wo habe ich einen Fehler? Ich hoffe ihr könnte mir helfen oder muss ich komplett anders an das max heran gehen?
    Danke für eure Hilfe.


  • Mod

    In der ersten Zeile muss das max = stunden[0][0]; heißen. Ansonsten: Genauere Fehlerbeschreibung. "Wo habe ich einen Fehler?" ist keine brauchbare Fehlerbeschreibung. Außerdem: Bitte die Codetags nutzen (unter dem 😡 -Smiley)



  • Wo habe ich einen Fehler?

    max ist nicht initialisiert und Semikolon nach for weglassen.



  • Leipzigerjunge schrieb:

    Wo habe ich einen Fehler?

    Wenn Du nicht uralt C programmierst, definierst Du auch Deine Variablen so lokal wie möglich, z.B. die Variable i:

    for(int i=0; i<4; ++i){ /* ... */ }
    

    Vergleich das mit Deiner for-Schleife.

    Danach sollte der Compiler auch gleich über einen klitzekleinen Fehler in Deinem Code stolpern, der ein richtiger Showstopper ist. 🙂



  • Dazu mal ne blöde Frage:

    bei

    for (int i=0; i<5; i++){
    

    Bringt meine IDE / Compiler :
    [Error] 'for' loop initial declarations are only allowed in C99 mode

    Macht das irgendeinen Unterschied? Also wenn ich jetzt den C99 Mode aktiviere, ist der Code immer noch Standardtkonform oder?


  • Mod

    beginner_offl schrieb:

    Macht das irgendeinen Unterschied? Also wenn ich jetzt den C99 Mode aktiviere, ist der Code immer noch Standardtkonform oder?

    Es ist halt C99-Code. Das ist auch standardisiert. Aber du kannst den Code dann eventuell nicht mehr mit einem reinen C89-Compiler (Microsoft 👎 ) übersetzen.



  • Ja klar ist der Standardkonform. Nach dem Standard von 1999.

    Allerdings können Compiler, die diesen Standard nicht unterstützen, mit deinem Programm evtl. nichts anfangen.

    Mittlerweile gibt es C11.

    Schau mal im Thras : Linkliste für Neulinge nach.
    Da gibt es Links zu den Drafts der Standards.



  • Die Bedingung für die 2. for-Schleife muss k < 8 statt k < 7 sein.



  • Zu der genaueren Fehler Analyse:
    Also es ist eine Tabelle wo ich die Stunden von einem Pendler von 7 Tagen pro Woche (4 Wochen) erfassen (einlesen) soll.
    Anschließend die eingegeben Werte ausgeben, den Mittelwert pro Woche berechnen, den max eingegeben Wert ausgeben, in welcher Woche der max Mittlere Wert ist und wie hoch dieser ist.
    Ich habe schon alles bis auf den max Wert der eingegeben wurde & die Woche mit dem max mittleren Wert ausgeben.

    Danke für eure Antworten, also max ist definitiv initialisiert. Ok dass mit dem max = stunden[0][0]; werde ich gleich mal ausprobieren ob es so schon klappt.

    @ 7 -->8
    Dass werde ich auch probieren, allerdings hatte ich dass bewusst nicht gemacht weil in der 8. Spalte die berechneten Mittelwerte stehen (welche ich schon separat berechnet habe) und ich die nicht mit suchen lassen wollte.



  • Danke für eure Hilfe. 😃 Ich konnte das max finden.

    Ich probiere jetzt noch die entsprechende Woche mit dem größten Mittelwert anzeigen zu lassen. Sollte ich da noch Sorgen habe melde ich mich wieder aber erst mal ein großen DANKE. 👍



  • Ich habe jetzt die ganze Zeit hin und her überlegt und programmiert aber bekomme es nicht hin... 😞

    Ich habe ja nun alle Werte berechnet, das Programm hat mir ausgegeben wie hoch der höchste Mittelwert ist (in float vereinbart) und nun soll mir das Programm ausgeben in welcher Woche (habe da int vereinbart) der max Mittelwert liegt (1-4). Wie kann ich dass miteinander verbinden?

    Meine letzte Überlegung war:

    maxwmittel=i;
    

    aber da kommt nur eine 0 bei heraus.
    Die Ermittlung des max Mittelwertes sieht bei mir so aus:

    wochemax = wmittel[0];										//Ermittlung größter Mittelwert
    	if (wmittel[1]> wochemax) wochemax=wmittel[1];
    	if (wmittel[2]> wochemax) wochemax=wmittel[2];
    	if (wmittel[3]> wochemax) wochemax=wmittel[3];
    

    Ich hoffe ihr könnt mir bei dem letzten auch helfen oder habe ich beim vereinbaren etwas vergessen?

    int i, k;
    float wmittel[4], sum, maxdauer, maxwmittel, wochemax, stunden[4][8];
    


  • int woche = 0;
    ...
    if (wmittel[1]> wochemax) 
    { wochemax=wmittel[1];
      woche = 1;
    ]
    if...
    

    Da bietet sich aber auch eine Schleife an.



  • Danke dafür, probiere ich aus.
    Ich hatte verschiedene Schleifen ausprobiert, hat aber nicht so funktioniert zumindest bisher nicht. Wie würdest du die Schleife machen? Ähnlich der vom ermitteln des max eingeben Wertes?



  • Ja.

    wochemax = wmittel[0];  
    woche    = 0;
    for(i=1; i<4; i++);
    { if (wmittel[i]> wochemax)
      { wochemax=wmittel[i];
        woche = i;
      }
    }
    


  • Danke DirkB für deinen Post.
    Ich habe jetzt hin und her probiert aber wenn z.B. der höchste Mittelwert in der 4. Woche ist, kommt als Ergebnis 3 heraus, wenn er in der 3. Woche ist kommt 2 heraus usw. nur bei der 1. Woche stimmt es.
    Habe da den "Fehler" noch nicht finden können und probiere nun dass mit der

    if
    

    Anweisung aus.



  • Die Variable 'woche' in DirkB's Code bezeichnet den nullbasierten Index, also von 0 - 3. Du willst anscheinend 1 - 4 als Ergebnis haben, also +1 rechnen...



  • Danke Th69 👍 , manchmal kommt man auch die einfachsten Sachen nicht. Habe alles andere ausprobiert außer dass, am ende sieht es jetzt so aus:

    wochemax = wmittel[0];
    	woche = 1;
    	for (i=1; i<4; i++)
    	{
    		if (wmittel[i] > wochemax)
    		{
    			wochemax = wmittel[i];
    			woche = i+1;
    		}
    	}
    

    Danke für eure Hilfe 😃


Log in to reply