ADIM Aufgaben 3.6

Neues Thema eröffnen   Eine Antwort erstellen

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach unten

ADIM Aufgaben 3.6

Beitrag  rALF am Mo Okt 06, 2008 3:02 pm

Ich habe einmal alle Beispiele aus dem ADIM Buch (3.6) für euch in ein einziges Programm zusammengefasst.
Vielleicht hilft's dem einen oder anderen, wenn er selber dabei ist.

Code:

/*main.cpp ***********************************
 *********************************************
 ************* ADIM Aufgabe 3.6 **************
 *********************************************
 *********************************Haider Ralf*/

#include <iostream>
#include <string>
#include <sstream>

using namespace std;


void main()
{
   //Deklaration aller Variablen, die im Programm Verwendung finden.
   //Zaehlervariablen
   int i=0, j=0;

   //Eingabevariablen
   int zahl=0, wahl=0, q=0;

   //Rechenvariablen
   int neueZahl=0, sumVor=1, sumDann=0, sum=0, hoch=0, hochDavor=0, multiplikand=0, mKand=0, multiplikator=0, mKator=0, berechnungen=0, fakSum = 0;

   float mittelwert = 00.0f;

   //Exit-Bedingungsvariablen
   bool quit=false, exitUmwandler=false;
   
   //Lists and Arrays
   int zahlList[15];

   stringstream sumString;

   char ziffern[13][3] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
   int zahlen[13] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };

   while(!quit)
   {
      //Auswahltext
      cout << "Bitte waehlen sie:\n" << "1: 3A Zahlenkette, mit doppelten Werten.\n" << "2: 3B Summe und Mittelwert einer Zahlenkette.\n"
           << "3: 3C Zahlenkette mit ungeraden Zahlen.\n" << "4: 3D FIBONACCI-Zahlen.\n" << "5: 3E Staffelrechnung.\n"
           << "6: 3F Tabelle von Fakultaeten.\n" << "7: 3G/H Positive Zahlen. Die Groesste und Zweitgroesste werden ausgegeben.\n"
           << "8: 3I Umwandler von arabischen in roemische Zahlen.\n";

      cin >> wahl;
      
      switch (wahl)
      {
      case 1:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3A ...das eine Folge von n Zahlen erzeugt, in der jede Zahl den doppelten Wert der vorhergehenden hat.
         cout << "Aufgabe 3A!\n"
              << "Bitte geben Sie eine Zahl fuer die folgende Zahlenkette ein: ";
         cin >> zahl;
         cout << "Die Zahlenkette, mit den doppelten Werten, der Vorigen: \n";
         neueZahl = 1;
         for (i=1;i<=zahl;i++)
         {
            neueZahl *= 2;
            cout << neueZahl << "\n";
         }

         //Ruecksetzen aller hier verwendeten Variablen!
         i = 0;
         zahl = 0;
         neueZahl = 0;

         break;

      case 2:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3B ...das die Summe und den Mittelwert einer eingegebenen Zahlenfolge berechnet.
         cout << "Aufgabe 3B!\n"
              << "Bitte geben Sie soviele Zahlen ein wie Sie wollen, 0 bricht die Eingabe ab: ";
         do
         {
            cin >> zahl;
            sum += zahl;
         } while (zahl > 0);
         
         //cast int to float
         mittelwert = (float)sum/2;
         cout << "Die Summe der Zahlenfolge: " << sum << "\nDer Mittelwert der Zahlenfolge: " << mittelwert << "\n";

         //Ruecksetzen aller hier verwendeten Variablen!
         i = 0;
         zahl = 0;
         sum = 0;
         mittelwert = 0;

         break;

      case 3:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3C ...das die Folge der ersten n ungeraden Zahlen und die Summe dieser Folge ausgibt.
         cout << "Aufgabe 3C!\n"
              << "Bitte geben Sie eine Zahl fuer die folgende Zahlenkette, die alle ungeraden Zahlen ausgibt, ein: ";
         cin >> zahl;
         sum = 0;
         for (i=1;i<=zahl;i=i+2)
         {
            cout << i << "\n";
            sum += i;
         }
         cout << "Die Summe der ungeraden Zahlen: " << sum << "\n";

         //Ruecksetzen aller hier verwendeten Variablen!
         i = 0;
         zahl = 0;
         sum = 0;

         break;

      case 4:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3D ...das das die FIBONACCI-Zahlen bis zu einer eingegebenen Höchstgrenze erzeugt und ausgibt.
         cout << "Aufgabe 3D!\n"
              << "Bitte legen Sie eine Hoechstgrenze fuer die folgenden FIBONICCI-Zahlen fest: ";
         cin >> zahl;
         sum = 0;
         cout << "1 ";
         for (i=1;i<=zahl;i++)
         {
            sum = sumVor + sumDann;
            cout << sum << " ";
            sumDann = sumVor;
            sumVor = sum;
         }

         //Ruecksetzen aller hier verwendeten Variablen!
         i = 0;
         zahl = 0;
         sumVor = 0;
         sumDann = 0;
         sum = 0;

         break;

      case 5:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3E ...das eine Staffelrechnung durchführt.
         cout << "Aufgabe 3E!\n"
              << "Bitte folgen Sie den Anweisungen und beachten Sie, dass eine Ueberschreitung von ~32000 nicht moeglich ist!\n";
         cout << "Multiplikand eingeben: ";
         cin >> multiplikand;
         cout << "Multiplikator eingeben: ";
         cin >> multiplikator;
         cout << "Anzahl der Berechungen eingeben: ";
         cin >> berechnungen;
         cout << "\n" << "\n";
         
         mKator = multiplikator;
         mKand = multiplikand;
         //Raufrechnen
         for (i=0;i<berechnungen;i++)
         {
            sum = mKator * mKand;
            if (sum < 32767)
               cout << mKator << " * " << mKand << " = " << sum << "\n";
            else
            {
               cout << "Fehler int ueberschritten!\n";
               i = berechnungen;
               berechnungen = 0;
            }
            mKator = sum;   
            mKand++;
         }

         mKand = multiplikand;
         //Runterrechnen
         if (berechnungen > 0)
         {
            for (i=0;i<berechnungen;i++)
            {
               sum = mKator / mKand;
               if (sum > -32767)
                  cout << mKator << " / " << mKand << " = " << sum << "\n";
               else
               {
                  cout << "Fehler int ueberschritten!\n";
                  i = berechnungen;
               }
               mKator = sum;
               mKand++;
            }
         }

         //Ruecksetzen aller hier verwendeten Variablen!
         i = 0;
         multiplikand = 0;
         multiplikator = 0;
         berechnungen = 0;
         sum = 0;

         break;

      case 6:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3F ...das eine Tabelle von Fakultäten erstellt. 0! - !6
         cout << "Aufgabe 3F!\n"
              << "Tabelle an Fkultaeten: Von 0! - 6!\n";
         fakSum = 1;

         //TEST mit 6!
         for (i=0;i<=6;i++)
         {
            if (i == 0)
            {
               cout << i << "! = 0\n";
            }
            else
            {
               sumString << " * " << i;
               //TODO: Lehrer wegen dieser enorm großen Zahl fragen!
               //Psoido Code: if (fakSum < 4294967294)
                  fakSum *= i;
               //else
                  //cout << "Fehler!";
               string allStr = sumString.str();
               cout << i << "! = 1" << allStr << " = " << fakSum << "\n";
            }
         }

         //Ruecksetzen aller hier verwendeten Variablen!
         i = 0, j=0, zahl = 0;
         fakSum = 0;
         //sumString = ("1");

         break;

      case 7:
         //Aufgabentext. Schreiben Sie ein Programm,...
         // 3G ...das eine Folge von positiven Zahlen einliest. Mit der Zahl 0 wird abgebrochen und die höchste Zahl ausgegeben.
         // 3H ...das eine Folge von positiven Zahlen einliest. Mit der Zahl 0 wird abgebrochen und die zweithöchste Zahl ausgegeben.
         cout << "Aufgabe 3G/H!\n"
              << "Bitte geben Sie soviele Zahlen ein wie Sie wollen, 0 bricht die Eingabe ab:\n";

         //Zahlen einlesen
         do
         {
            cout << "Zahl " << j+1 << ": ";
            cin >> zahl;
            zahlList[j] = zahl;
            j++;
         } while (zahl > 0);

         //Die groesste und zweitgroesste Zahl herausfinden
         for (i=0;i<=j;i++)
         {
            if (zahlList[i] > hoch)
            {
               hochDavor = hoch;
               hoch = zahlList[i];
            }
            else if (zahlList[i] > hochDavor)
            {
               hochDavor = zahlList[i];
            }
         }
         cout << "Die groesste Zahl der Zahlenfolge ist: " << hoch << "\n";
         cout << "Die zweitgroesste Zahl der Zahlenfolge ist: " << hochDavor << "\n";

         //Ruecksetzen aller hier verwendeten Variablen!
         for (i=0;i<=j;i++)
         {
            zahlList[i] = 0;
         }
         hoch = 0;
         hochDavor = 0;
         i=0; j = 0;

         break;

      case 8:
         /*Aufgabentext. Schreiben Sie ein Programm,...
         3I ...das eine arabische Zahl in eine römische umwandelt.
         Algorythmusregeln:
         -) Regel der kuerzesten Schreibweise.
         -) Die strenge Subtraktionsregel.*/
         cout << "Aufgabe 3I!\n"
              << "Umwandler von arabischen Zahlen in roemische Zahlen:\n";
         
         while (!exitUmwandler)
         {
            cout << "Bitte eine ganze Zahl eingeben: ";
            cin >> zahl;

            // Suche nach der Roem.-Zahl. Wird solange ausgefuehrt, bis von der eingegebenen Zahl nichts mehr abgezogen werden kann.
            while (zahl > 0)
            {
               if (zahl/zahlen[i] >= 1)
               {
                  cout << (ziffern[i]);
                  zahl -= zahlen[i];
               }
               else
                  i++;
            }
            
            //Exit-Bedingung: Umwandler
            cout << "\nGib 1 ein wenn du den Umwandler wiederholen willst." << "\nAlles andere beendet den Umwandler. ";
            cin >> q;
            if (! cin)
               exitUmwandler = true;
            if (q == 1)
               exitUmwandler = false;
            else
               exitUmwandler = true;

            //Ruecksetzen aller hier verwendeten Variablen!
            i = 0, zahl = 0;
         }
         exitUmwandler = false;
      
         break;
      
      //Fehlermeldung
      default:
         cout << "Falsche Eingabe!\n";
         break;
      }
      
      //Exit-Bedingung: Programm
      cout << "\nGib 1 ein wenn du das Programm wiederholen willst." << "\nAlles andere beendet das Programm. ";
      cin >> q;
      if (! cin)
         quit = true;
      if (q == 1)
         quit = false;
      else
         quit = true;
   }
}


Bei Fragen, bitte einfach hier posten, ich beantworte gerne.

UPDATE: So nun sollte das Programm voll und ganz stimmen. Bis auf eine letzte Kleinigkeit, die ich morgen selber nachfragen muss.

rALF
Noob
Noob

Anzahl der Beiträge: 5
Anmeldedatum: 12.09.08
Alter: 25
Ort: Vienna

Nutzerprofil anzeigen

Nach oben Nach unten

Re: ADIM Aufgaben 3.6

Beitrag  rALF am Di Okt 07, 2008 8:52 pm

UPDATE2: Sodale nun passt das Programm vollständig.
-) Bei Beispiel nr. 6, passt das so mit der Fakultät 0! - 6!, da 32! zu groß ist und der Lehrer meinte, dass es unnötig sei.
Also ruhig auf was Niederes ausbessern.
-) Auch in Beispiel 1 habe ich etwas verändert, da ich die Angabe zum Beispiel etwas missverstanden hatte. Der Fehler ist aber behoben.

_________________
Quote from "Three Kingdoms", by Luo Guanzhong:
"The empire, long divided, must unite; long united, must divide. Thus it has ever been."

rALF
Noob
Noob

Anzahl der Beiträge: 5
Anmeldedatum: 12.09.08
Alter: 25
Ort: Vienna

Nutzerprofil anzeigen

Nach oben Nach unten

Vorheriges Thema anzeigen Nächstes Thema anzeigen Nach oben


Neues Thema eröffnen   Eine Antwort erstellen
Forenbefugnisse:
Sie können in diesem Forum nicht antworten