Programmieren - alles kontrollieren 4.933 Themen, 20.610 Beiträge

Wie mache ich die "if else" passend ?

Selecta / 3 Antworten / Baumansicht Nickles

Vorab möchte ich euch bitte, egal wie schlecht die Umsetzung ist, mir nur im gleichen Stil eine Lösung anzubieten. Bitte keine neuen Mehtoden, wir lernen gerade das.



Also: Mein Code soll bei Eingabe von 2 Zahlen alle dazwischenliegenden, die durch 5 UND 7 teilbar sind ausgeben. Das klappt auch famos, nur leider weiß ich nicht, was ich als "if else" angeben muss, damit da nur 1x die von mir gewünschte "Keine Zahl íst teilbar" Antwort kommt ?

Mein Code:

void main (void)
{


int zahl_a, zahl_b, help;


cout << "Geben sie eine natuerliche Zahl ein: ";
cin >> zahl_a;
cout << endl << "Geben sie eine 2. natuerliche Zahl an: ";
cin >> zahl_b;
cout << endl << endl << "Nun werden alle Zahlen von " << zahl_a << " bis " << zahl_b << " gesucht,";
cout << endl << "die durch 7 UND 5 teilbar sind.";
cout << endl << endl;


while (zahl_a <= zahl_b)
{
help = 1;                                                          // ja zahl_a++ geht auch, ich weiß.
zahl_a = zahl_a + help;
if (zahl_a%7 == 0 && zahl_a%5 == 0)
cout << "Zahl: " << zahl_a << endl;
else if (zahl_a - zahl_b < 0)                       // Das Problem ist mir klar, er gibt für jede Stelle die
cout << "Nicht gefunden !" << endl;         nicht durch das teilbar ist, einmal "Nicht gefunden" aus.
}                                                            Er soll es aber für diesen Fall nur 1x ausgeben !
getch();
}                                                           

bei Antwort benachrichtigen
d-oli Selecta „Wie mache ich die "if else" passend ?“
Optionen

Hi

Eine kleine gut gemeinte Anmerkung:
***********************************************************
Das ...

help = 1;
zahl_a = zahl_a + help;

... ist aber schon ziemlich übel, bei uns hätte so was bestimmt Punkteabzug gegeben.

Meiner Ansicht wird an den Schulen viel zu wenig Wert auf einen guten Programmierstil gelegt, was bei C/C++ besonders wichtig ist. Ein guter Programmierstil erleichtert das (frühzeitige) erkennen von Fehlern, das Anpassen von bestehendem Quellkode und macht diesen lesbarer.
Wirst du einmal als Programmierer arbeiten, wirst du nicht darum herum kommen dir einen Programmierstil gemäss den firmenentsprechenden Programmierrichtlinien anzugewöhnen.

Hier mein Lösungsansatz für dein Problem:
**********************************************************

  
    
      
        void 
      
      main 
      (
      
        void
      
      )

{
int zahl_a , zahl_b , help , gefunden = 0 ; // guckst du !!!

cout << "Geben sie eine natuerliche Zahl ein: " ;
cin >> zahl_a ;
cout << endl << "Geben sie eine 2. natuerliche Zahl an: " ;
cin >> zahl_b ;
cout << endl << endl << "Nun werden alle Zahlen von " << zahl_a << " bis " << zahl_b << " gesucht," ;
cout << endl << "die durch 7 UND 5 teilbar sind." ;
cout << endl << endl ;

while ( zahl_a <= zahl_b )
{
help = 1 ;
zahl_a = zahl_a + help ;
if ( zahl_a % 7 == 0 && zahl_a % 5 == 0 )
{ // guckst du !!!
cout << "Zahl: " << zahl_a << endl ; // guckst du !!!
gefunden = 1 ; // guckst du !!!
}
}
if ( ! gefunden ) // guckst du !!!
{ // guckst du !!!
cout << "Nicht gefunden !" << endl ; // guckst du !!!
} // guckst du !!!
getch ();
}

Gruss, d-oli
Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen
Rika Selecta „Wie mache ich die "if else" passend ?“
Optionen

Und am besten noch ein break;-Statement rein, daß die Schleife abbricht, sobald etwas gefunden wurde. Oder vorher gefunden mit 0 initialisieren und in die Schleifenbeding aufnehmen.

bei Antwort benachrichtigen
d-oli Selecta „Wie mache ich die "if else" passend ?“
Optionen
Achtung

Selecta : Mein Code soll bei Eingabe von 2 Zahlen alle dazwischenliegenden, die durch 5 UND 7 teilbar sind ausgeben.
Rika : Und am besten noch ein break;-Statement rein, daß die Schleife abbricht, sobald etwas gefunden wurde.
Mit der break-Lösung wird das Programm abgebrochen sobald eine Zahl, die durch 5 und 7 teilbar ist, gefunden wurde.

Rika : Oder vorher gefunden mit 0 initialisieren ...
int zahl_a, zahl_b, help, gefunden=0; // guckst du !!!

Tipps

Selecta, überlege dir genau was ausgegeben werden soll. Wenn ich als User z.B. 35 und 140 eingeben würde, so erscheint 35 und 140 nicht als teilbar durch 7 und 5.
Wiso? Schau deinen Quellkode noch einmal genau an und vergleiche.
while (zahl_a {
   if (zahl_a%7 == 0 && zahl_a%5 == 0)
     cout    else // Dies if (zahl_a - zahl_b 0) , ist gegeben durch while (zahl_a
     cout
   help = 1;
   zahl_a = zahl_a + help;
}

Könnte es sein, dass die Variablendeklaration (
int zahl_a, zahl_b, help;) durch die Aufgabestellung gegeben sin? In diesem Fall sollte "help" vermutlich die Aufgabe von "gefunden" übernehmen und nicht als Hilfsvariable zum Inkrementieren.


Konstruktive Kritik zeichnet sich dadurch aus, dass sie höflich, nützlich und sachlich ist.
bei Antwort benachrichtigen