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:
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.
 
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
 
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
 
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:
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.
 
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.
 
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:
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);
 
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....
 
Zurück