Maximalwert in C anzeigen lassen.


MaxAufDerWolke

Grünschnabel
Hallo ich habe da mal eine Frage.
Wir sollen ein Programm schreiben, dass das größtmögliche Volumen und die dazu gehörige Höhe ermittelt.
In dem Programm soll man die Länge und die Breite eingeben und daraus soll dann der Rest ermittelt werden. Das ist der Quellcode:

C:
#include <stdio.h>

int main()
{
    float laenge;
    float breite;
    float hoehe;
    float volumen;
    float wiederholung;
    float laenge1;
    float hoehestop1;

    printf("\n\tV o l u m e n b e r e c h n u n g\n");

    do
    {
        printf("\nGeben Sie die Laenge ein: ");
        scanf("%f",&laenge);
        fflush(stdin);

        printf("\nGeben Sie die Breite ein: ");
        scanf("%f",&breite);
        fflush(stdin);

        hoehe = breite / 4;                                        // diese weise setzt natürlich voraus, dass die Breite kleiner ist das die Größe, aber dafür kann man ja noch ein if machen

        hoehe = hoehe - hoehe;                               // damit er von 0 bis hoehestop rechnet

        laenge1 = laenge / 2;

        hoehestop1 = breite / 2;

         do
        {
            volumen = (laenge - 2 * hoehe) * (breite - 2 * hoehe) * hoehe;

            hoehe = hoehe + 0.5;

            printf("\nHierbei betreagt das Volumen %.2f Quadrahzentimeter und die Hoehe %.2f ...",volumen,hoehe);

        }
        while (hoehe <= hoehestop1);

        printf("\nDas maximale Volumen betraegt %.2f Quadrahtzentimeter und die Hoehe ist %.2f cm.",volumen,hoehe);           //und hier würde ich gerne angezeigt                                                                                                                                                                                                                       bekommen, was der maximalwert für die                                                                                                                                                                                                              Höhe und Volumen war
        printf("\nDruecken Sie 1 um das Programm zu wiederholen, 2 um es zu beenden: ");
        scanf("%f",&wiederholung);
    }
    while(wiederholung != 2);


    printf("\n");
    system("pause");
}
Ich weiß, es ist vielleicht etwas merkwürdig, aber ja. Also meine Frage, wie kann man sich den Maximalwert anzeigen lassen?
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Nutze Codetags, siehe meine Signatur, und editiere deinen Beitrag bitte.

Ich verstehe deine Frage nicht. Tust du das nicht bereits? Was funktioniert nicht?

float laenge;
float breite;
float hoehe;
float volumen;
float wiederholung;
float laenge1;
float hoehestop1;
Warum deklarierst du alle Variablen im Voraus? Generell deklariert man Variablen in dem kleinstmöglichen Block.

Ich meine die landläufige Meinung auf StackOverflow ist, dass system("pause") bad practice ist. Aber du kannst ja nochmal googeln.
 

Technipion

Erfahrenes Mitglied
Also meine Frage, wie kann man sich den Maximalwert anzeigen lassen?
Das macht man grundsätzlich immer gleich:
Man merkt sich, was bis jetzt der Maximalwert gewesen ist (und evtl. noch andere Werte, z.B. die Höhe, dazu). Wenn der aktuelle Wert größer als der bisherige Maximalwert ist, hast du ein neues Maximum gefunden. Also merkst du dir diesen neuen Wert (mit zugehöriger Höhe, etc.) und fährst mit dem nächsten Test fort.

Wo hakt es denn im Moment bei dir?

Gruß Technipion
 

MaxAufDerWolke

Grünschnabel
Habe meinen Beitrag geändert, bin neu, deswegen wusste ich nicht wie das geht.
Also das Programm funktioniert schon, aber die Schleife gibt dir ja die Volumenberechnung von bei z.B 50 die Werte von 0 - 25 aus und davon will ich den größten Wert am Ende ausgegeben haben und da weiß ich halt nicht wie das geht
 

MaxAufDerWolke

Grünschnabel
Das macht man grundsätzlich immer gleich:
Man merkt sich, was bis jetzt der Maximalwert gewesen ist (und evtl. noch andere Werte, z.B. die Höhe, dazu). Wenn der aktuelle Wert größer als der bisherige Maximalwert ist, hast du ein neues Maximum gefunden. Also merkst du dir diesen neuen Wert (mit zugehöriger Höhe, etc.) und fährst mit dem nächsten Test fort.

Wo hakt es denn im Moment bei dir?

Gruß Technipion
Ja das würde ich auch denken. Aber es hakt an der Umsetzung im Quelltext
 
Zuletzt bearbeitet:

Zvoni

Erfahrenes Mitglied
Ich verstehe die Aufgabenstellung nicht: Input: Länge und Breite - Output: Max. Volumen (abgleitet dazugehörende Höhe). ABI ist bei mir zwar 30 Jahre her, aber mMn fehlt da ein Parameter.
"Sie haben ein Hochhaus. Sie geben die Grundfläche (LängexBreite) ein. Errechnen Sie das maximale Volumen und die dazugehörende Höhe aus" --> 10 Stockwerke? 50 Stockwerke? 100 Stockwerke? Grundfläche bleibt gleich.

zum Thema Maximalwert: Die einfachste Methode ist, die Ergebnisse zu sammeln (Array?), das Array aufsteigend sortieren, im letzten Array-Element steht der grösste Wert.
 

MaxAufDerWolke

Grünschnabel
Ich verstehe die Aufgabenstellung nicht: Input: Länge und Breite - Output: Max. Volumen (abgleitet dazugehörende Höhe). ABI ist bei mir zwar 30 Jahre her, aber mMn fehlt da ein Parameter.
"Sie haben ein Hochhaus. Sie geben die Grundfläche (LängexBreite) ein. Errechnen Sie das maximale Volumen und die dazugehörende Höhe aus" --> 10 Stockwerke? 50 Stockwerke? 100 Stockwerke? Grundfläche bleibt gleich.

zum Thema Maximalwert: Die einfachste Methode ist, die Ergebnisse zu sammeln (Array?), das Array aufsteigend sortieren, im letzten Array-Element steht der grösste Wert.
Naja die Aufgabenstellung war erst eine Formel zu entwickeln, die das Volumen berechnet, dazu setzt man eine beliebige Höhe ein und rechet das Volumen der Kiste aus, die da wo das Volumen am größten es (wenn man es zeichnet sieht es aus wie eine Parabel) soll dann das größte Volumen mit der dazugehörigen Höhe ausgegeben werden.
Und von Arrays habe ich auch schon mal was gehört, aber weiß nicht wie man das in Quellcode umsetzt, vielleicht weiß das ja einer.
 

Zvoni

Erfahrenes Mitglied
OK, zum Thema "Formel" entwickeln: Erinnert mich doch stark an Analysis und Extremwertberechnung.
Formel entwickeln, erste (f') und zweite (f'') Ableitung der Formel bilden.
Notwendiges Kriterium: f'(x)=0 --> hieraus bekommst du (unter Umständen mehrere gültige) Ergebnisse: x1 (x2 etc.)
Hinreichendes Kriterium: f''(x1)<0 ist Maximum (oder f''(x2) <0 etc.)
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
Man merkt sich, was bis jetzt der Maximalwert gewesen ist (und evtl. noch andere Werte, z.B. die Höhe, dazu). Wenn der aktuelle Wert größer als der bisherige Maximalwert ist, hast du ein neues Maximum gefunden. Also merkst du dir diesen neuen Wert (mit zugehöriger Höhe, etc.) und fährst mit dem nächsten Test fort.
@Technipion hat dir bereits die Lösung in abstrakter Weise erklärt. Wo hakt es hier?

Bisschen konkreter:

C:
// "Man merkt sich, was bis jetzt der Maximalwert gewesen ist"
// d.h. eine Variable, initialisiert mit einem sehr niedrigen Wert, der sicherstellt,
// dass die erste Iteration den überschreibt. Hier im Anwendungsfall sollte
// -1 reichen, da negative Volumina nie auftreten -- Bugfreiheit vorausgesetzt.

do {
  volumen = (laenge - 2 * hoehe) * (breite - 2 * hoehe) * hoehe;
 
  // "Wenn der aktuelle Wert größer als der bisherige Maximalwert ist, hast du ein neues Maximum gefunden. Also merkst du dir diesen neuen Wert"

 hoehe = hoehe + 0.5;

 printf("\nHierbei betreagt das Volumen %.2f Quadrahzentimeter und die Hoehe %.2f ...",volumen,hoehe);
} while (hoehe <= hoehestop1);
 

Zvoni

Erfahrenes Mitglied
C:
// dass die erste Iteration den überschreibt. Hier im Anwendungsfall sollte
// -1 reichen, da negative Volumina nie auftreten -- Bugfreiheit vorausgesetzt.
;);););)
Hmmm, damit der Alcubierre-Antrieb funktionieren kann, benötigt dieser negative Energie.
Da Raum (=Volumen) als solches (positive) Energie enthält, wäre das doch mal ein Ansatz für die Warpfeld-Physik: Wenn du negatives Volumen (=negativen Raum) hast, müsste man doch auch negative Energie bekommen...
Ergo: Warp-Antrieb ist möglich.......:cool::cool::cool::cool:
man müsste nur endlich mal den Quellcode des Universums debuggen....
 

MaxAufDerWolke

Grünschnabel
@Technipion hat dir bereits die Lösung in abstrakter Weise erklärt. Wo hakt es hier?

Bisschen konkreter:

C:
// "Man merkt sich, was bis jetzt der Maximalwert gewesen ist"
// d.h. eine Variable, initialisiert mit einem sehr niedrigen Wert, der sicherstellt,
// dass die erste Iteration den überschreibt. Hier im Anwendungsfall sollte
// -1 reichen, da negative Volumina nie auftreten -- Bugfreiheit vorausgesetzt.

do {
  volumen = (laenge - 2 * hoehe) * (breite - 2 * hoehe) * hoehe;

  // "Wenn der aktuelle Wert größer als der bisherige Maximalwert ist, hast du ein neues Maximum gefunden. Also merkst du dir diesen neuen Wert"

hoehe = hoehe + 0.5;

printf("\nHierbei betreagt das Volumen %.2f Quadrahzentimeter und die Hoehe %.2f ...",volumen,hoehe);
} while (hoehe <= hoehestop1);

Ja das stimmt schon, so habe ich mir das auch gedacht. Es hakt halt daran, dass im Programm umzusetzen Dass man zb den Wert max=0 (oder halt -1 wie du sagst) einfügst und dann sagst. Wenn das Volumen größer als dieser max Wert (der ja 0 ist) ist, überschreibe den max wert.
Aber wie kann man das in meinem Programm umsetzten in Code

C:
//in der Schleife
{
    
    ...
        
    if(volumen >= max)
    {
        //überschreibe den max Wert, aber wie?
        
    }   
    
    
}
 

ComFreek

Mod | @comfreek
Moderator
Das Überschreiben ist einfach nur eine Wertzuweisung an eine Variable. Das sollte in jedem Anfängerguide behandelt werden :) Am besten da also nochmal nachlesen. Nachdem das aber nur ein Einzeiler ist, spoiler ich dich: max = volumen
 

Zvoni

Erfahrenes Mitglied
Und jetzt spoiler ich dagegen: :p
Naja die Aufgabenstellung war erst eine Formel zu entwickeln, die das Volumen berechnet, dazu setzt man eine beliebige Höhe ein und rechet das Volumen der Kiste aus, die da wo das Volumen am größten es (wenn man es zeichnet sieht es aus wie eine Parabel) soll dann das größte Volumen mit der dazugehörigen Höhe ausgegeben werden.
Es werden also 2 Resultate erwartet
 

MaxAufDerWolke

Grünschnabel
Das Überschreiben ist einfach nur eine Wertzuweisung an eine Variable. Das sollte in jedem Anfängerguide behandelt werden :) Am besten da also nochmal nachlesen. Nachdem das aber nur ein Einzeiler ist, spoiler ich dich: max = volumen
Aber dort kommen ja, wenn man für die Breite den wert 50 nimmt, kommen 25 verschiedene Volumenwerte raus, also würde ja diese Zuweisung dazu führen dass es am Ende bei 0 bleibt.
 

Zvoni

Erfahrenes Mitglied
Aber dort kommen ja, wenn man für die Breite den wert 50 nimmt, kommen 25 verschiedene Volumenwerte raus, also würde ja diese Zuweisung dazu führen dass es am Ende bei 0 bleibt.
Wie kommst du denn da drauf? Du musst nur max mit -1 initialisieren (oder mit 0)
Auf deutsch: Wenn Volumen>=max dann max=Volumen --> Die Variable max wird definitiv einen von 0 höheren Wert am Ende haben (es sei denn du hast immer Volumen=0)
 

MaxAufDerWolke

Grünschnabel
Wie kommst du denn da drauf? Du musst nur max mit -1 initialisieren (oder mit 0)
Auf deutsch: Wenn Volumen>=max dann max=Volumen --> Die Variable max wird definitiv einen von 0 höheren Wert am Ende haben (es sei denn du hast immer Volumen=0)
Stimmt so ist das ok.

Jetzt habe ich den Volumenwert, nur wie bekomme ich die dazugehörige Höhe?

Weil die höhe ist ja nicht die größte und auch nicht die kleinste...
 

Neue Beiträge