Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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");


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.

/*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!!

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:

@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....

@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);

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

@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.

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 !=.

@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

@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:

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.