Zum Inhalt springen

Minimum und Maximum von drei Werten ermitteln


Empfohlene Beiträge

Geschrieben

Hallo Leute,

ich habe folgenden Code zu ermittelung von min und max aus drei Werten geschrieben, doch erhalte ich bei der Ausgabe nicht die gewünschten min und max Werte.

Ich hoffe es kann mir jemand weiterhelfen.

#include <stdio.h>

#include <stdlib.h>

/*programm, was seiten eines Quaders abfragt(kommazaheln sind möglich,

negative zahlen nicht) und die Länge des kürzesten bzw. der Längsten Seite ausgibt.Weiterhin berechnet das Programm ob der Rauminhalt des Quaders ein Kubikmeter beträgt und gib es aus. */

main(void)

{

float hoehe, breite,laenge,raum_inhalt;

/*Die Eingabe*/

do{

printf("Geben sie die Hoehe(>=0) ein:");

scanf("%f",&hoehe);

}

while(hoehe<0);

do{

printf("Geben sie die breite(>=0) ein:");

scanf("%f",&breite);

}

while(breite<0);

do{

printf("Geben sie die laenge(>=0) ein:");

scanf("%f",&laenge);

}

while(laenge<0);

/*Die Berechnung*/

raum_inhalt = hoehe*breite*laenge;

/*Ermittelung von Minimum und Maximum*/

float max = 0;

float min = 0;

if (hoehe > max) {max=hoehe;}

else if (breite > max) {max=breite;}

else {max=laenge;}

if (hoehe < min) {min=hoehe;}

else if(breite < min) {min=breite;}

else {min=laenge;}

printf("Die laengste Seite ist:%2.2fMeter\t",max);

printf("Die kuerzeste Seite ist:%2.2fMeter\n",min);

/* Abfrage ob Rauminhalt einen Kubikmeter beträgt */

if (raum_inhalt >=1 ) { printf("raum_inhalt ist groesser als 1 Kubikmeter."); }

else { printf("Rauminhalt ist nicht groesser als 1 Kubikmeter.\n"); }

system("pause");

Geschrieben


if (hoehe > max)  {max=hoehe;} 

else if (breite > max) {max=breite;}

else {max=laenge;}

Du initialisierst "max" mit 0 und erwartest bei "hoehe" einen Wert >=0. Insofern nun "hoehe > 0" vorliegt, so wird die erste Bedingung wahr und die Abfrage ist beendet - es werden also weder "else if"- noch "else"-Zweig geprüft.

Analog natürlich auch beim Minimum. Du brauchst jeweils drei voneinander unabhängige Abfragen, da sonst beispielsweise "max = laenge" nur erreicht werden kann, wenn sowohl "breite" als auch "hoehe" 0 sind.

Geschrieben

/*Ermittelung von Minimum und Maximum*/

float max = 0;

float min = 0;

if (hoehe > max) {max=hoehe;}

if (breite > max) {max=breite;}

if( laenge > max) {max=laenge;}

if (hoehe < min) {min=hoehe;}

if(breite < min) {min=breite;}

if(laenge < min) {min=laenge;}

printf("Die laengste Seite ist:%2.2fMeter\t",max);

printf("Die kuerzeste Seite ist:%2.2fMeter\n",min);

so erhalte ich den Maximum richtig, aber keinen minimum!!

Geschrieben

Ich würde ehrlich gesagt, die Variablen vorher gar nicht mit 0 initialisieren...


float max = ((hoehe > breite) ? hoehe : breite);

max = ((max > laenge) ? max : laenge);

float min = ((hoehe < breite) ? hoehe : breite);

min = ((min < laenge) ? max : laenge);

:hells:

Geschrieben

@flashpixx

ich habe das doch genauso!!

@TDM

ich habe es auch mit deinem Code vorschalg versucht.Da erhalte ich für min und max immer nur das maximum....

Geschrieben
@TDM

ich habe es auch mit deinem Code vorschalg versucht.Da erhalte ich für min und max immer nur das maximum....

Sch**ß Copy&Paste... :rolleyes:


float max = ((hoehe > breite) ? hoehe : breite);

max = ((max > laenge) ? max : laenge);

float min = ((hoehe < breite) ? hoehe : breite);

min = ((min < laenge) ? [B]min[/B] : laenge);

Geschrieben (bearbeitet)

Huhu,

wenn ich da mal drüber gucke und deinen Kommentar lese ist das mit min doch kein Wunder.

/*programm, was seiten eines Quaders abfragt(kommazaheln sind möglich,

negative zahlen nicht) und die Länge des kürzesten bzw. der Längsten Seite ausgibt.Weiterhin berechnet das Programm ob der Rauminhalt des Quaders ein Kubikmeter beträgt und gib es aus. */

Du initalisierst min mit 0.

Ein Quader jedoch kann keine Seite haben, welche < 0 ist. Somit ist diese Prüfung natürlich immer False.

Lösung: min den maximal möglichen Wert geben oder mit max vorbelegen.

Dann sollte alles so funktionieren ...


float max = 0;

float min = 0;


if (hoehe > max) {max=hoehe;}

if (breite > max) {max=breite;}

if( laenge > max) {max=laenge;}

min=max;

if (hoehe < min) {min=hoehe;}

if(breite < min) {min=breite;}

if(laenge < min) {min=laenge;}

printf("Die laengste Seite ist:%2.2fMeter\t",max);

printf("Die kuerzeste Seite ist:%2.2fMeter\n",min);

Edit: oder natürlich TDM's Lösung nehmen ;)

iif is eh viel toller (nagut... aber auch unübersichtlicher)

Bearbeitet von DominikJ
Vorposting
Geschrieben

@TDM vielen Dank...so funktioniert es...

aber kannst du mir den code auch erklären...ich sehe die Variante zum ersten mal..

Heisst etwa das Fragezeichen gleich und der Doppelpukt ungleich oder wie???

kann ich das auch einfach mit gleich und umgleich zeichen machen????

@DominikJ

Danke dir auch...

Ja blöd von mir, dass ich min = 0 gesetzt habe...so funktioniert es auch.

Geschrieben

aber kannst du mir den code auch erklären...ich sehe die Variante zum ersten mal..

Heisst etwa das Fragezeichen gleich und der Doppelpukt ungleich oder wie???

Das ist der "Conditional Operator". Einfach gesagt, der Ausdruck

a ? b : c

hat den Wert des Ausdrucks b, wenn a wahr ist (also ungleich 0), und den Wert des Ausdrucks c, wenn a falsch ist.

Sinngemäß: Wenn a, dann b, sonst c.

Es gibt dann noch ein paar komplizierte Regeln für die erlaubten Typkombinationen von b und c.

kann ich das auch einfach mit gleich und umgleich zeichen machen????
Du brauchst nicht 3 oder 4 Fragezeichen zu machen, wir verstehen auch so, dass das eine Frage ist ;)

Der Ausdruck a kann ein beliebiger arithmetischer, Enum- oder Zeiger-Ausdruck sein, also auch einer mit == oder !=.

Geschrieben (bearbeitet)
@TDM vielen Dank...so funktioniert es...

aber kannst du mir den code auch erklären...ich sehe die Variante zum ersten mal..

Heisst etwa das Fragezeichen gleich und der Doppelpukt ungleich oder wie???

kann ich das auch einfach mit gleich und umgleich zeichen machen????

@DominikJ

Danke dir auch...

Ja blöd von mir, dass ich min = 0 gesetzt habe...so funktioniert es auch.

Conditional Operator

Bedeutet soviel wie:


test = (var1) ? true : false;

//     ^Prüfung   ^Wahr  ^Falsch


// entspricht:

if (var1) { 

test = true;

} else {

test = false;

}

Man hilft ja gerne :)

Edit: ziemlich sinnloses Beispiel :D

Bearbeitet von DominikJ
Beispiel
Geschrieben
@TDM vielen Dank...so funktioniert es...

aber kannst du mir den code auch erklären...ich sehe die Variante zum ersten mal..

Heisst etwa das Fragezeichen gleich und der Doppelpukt ungleich oder wie???

kann ich das auch einfach mit gleich und umgleich zeichen machen????

case ? truepart : falsepart
Tenärer Operator: wenn case (bool'sch) == true, dann nimm truepart, wenn false, dann nimm falsepart.
Edit: oder natürlich TDM's Lösung nehmen ;) iif is eh viel toller (nagut... aber auch unübersichtlicher)
iif ist doch VB, oder?! Da muss man immer casten, das müffelt. geht aber zum glück auch einfacherer:
#define iif(c,t,f) ((c)?(t):(f))

Der Ausdruck a kann ein beliebiger arithmetischer, Enum- oder Zeiger-Ausdruck sein, also auch einer mit == oder !=.

Betonung liegt hier definitiv auf kann. Ich hab es mir angewöhnt, soweit wie möglich nur bool'sche Ausdrücke (von Bitoperationen mal abgesehen) zu verwenden, da diese nur den Status true oder eben false haben können. Aber das ist wohl Geschmackssache. :rolleyes:

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...