<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Programmieren 1 Archive - Maximilian Krieg</title>
	<atom:link href="https://maximiliankrieg.de/category/studium/bachelor-of-science/1-semester-b-sc/programmieren-1/feed/" rel="self" type="application/rss+xml" />
	<link>https://maximiliankrieg.de/category/studium/bachelor-of-science/1-semester-b-sc/programmieren-1/</link>
	<description>Wissen, Technik &#38; Erfahrungen</description>
	<lastBuildDate>Sun, 01 Mar 2026 06:20:57 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://maximiliankrieg.de/wp-content/uploads/2026/05/cropped-20260524_logo_2_512-2-32x32.png</url>
	<title>Programmieren 1 Archive - Maximilian Krieg</title>
	<link>https://maximiliankrieg.de/category/studium/bachelor-of-science/1-semester-b-sc/programmieren-1/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Programmieren, Algorithmen und Datenstrukturen 1 (Probeklausur)</title>
		<link>https://maximiliankrieg.de/2012/04/programmieren-algorithmen-und-datenstrukturen-1-probeklausur/</link>
					<comments>https://maximiliankrieg.de/2012/04/programmieren-algorithmen-und-datenstrukturen-1-probeklausur/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Mon, 02 Apr 2012 05:14:00 +0000</pubDate>
				<category><![CDATA[Programmieren 1]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1521</guid>

					<description><![CDATA[<p>Aufgabe 0 Legen Sie ein Arbeitsverzeichnis Name_Vorname.Matrikelnumer an. Legen Sie darin ein neues C++ Projekt&#160;LiwanzenVZ&#160;an. Aufgabe 1 a)&#160;Deklarieren Sie zunächst Folgendes, und definieren Sie es&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/programmieren-algorithmen-und-datenstrukturen-1-probeklausur/">Programmieren, Algorithmen und Datenstrukturen 1 (Probeklausur)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Aufgabe 0</h3>



<p class="wp-block-paragraph">Legen Sie ein Arbeitsverzeichnis Name_Vorname.Matrikelnumer an. Legen Sie darin ein neues C++ Projekt&nbsp;<strong>LiwanzenVZ</strong>&nbsp;an.</p>



<h3 class="wp-block-heading">Aufgabe 1</h3>



<p class="wp-block-paragraph"><strong>a)&nbsp;</strong>Deklarieren Sie zunächst Folgendes, und definieren Sie es danach. &nbsp;<strong>Region</strong>&nbsp;ist ein Enumerator (ndef, amer, apac, emea ), der auch Klassenmember ist. Der Einfachheit halber muss jedes Mitglied des sozialen Netzwerks LiwanzenVZ einen eindeutigen Namen habe.&nbsp;<strong>b)&nbsp;</strong>Auf der Grundlage von 1a) – aber für die Implementierung nicht unbedingt darauf beschränkt – entwickeln Sie nun die folgenden Funktionalitäten aus main :</p>



<p class="wp-block-paragraph"><strong>i.&nbsp;</strong>Legen Sie ein geeignetes Objekt namens vL für die Speicherung von beliebig vielen LiwanzenVZ-Mitgliedern an und füllen Sie es im Quellcode über eine Supportfunktion namens populate mit sechs Mitgliedern:</p>



<p class="wp-block-paragraph"><em>Joey (amer), Johnny (amer), DeeDee (amer), Tommy (emea), Suzy (apac) und Sheena (amer).</em></p>



<p class="wp-block-paragraph">Geben Sie mittels einer weiteren Supportfunktion namens&nbsp;<strong>print_LVZMembers</strong>&nbsp;eine komplette Liste mit allen gespeicherten Mitgliedern und ihren Details möglichst benutzerfreundlich zeilenweise aus (d.h. beispielsweise auch, dass Region nicht als Zahl erscheint).</p>



<p class="wp-block-paragraph"><strong>ii.&nbsp;</strong>Lassen Sie den Benutzer mittels einer Supportfunktion namens add_Liwanze beliebig viele weitere Mitglieder hinzufügen, wobei jeder Name in der Liste eindeutig sein muss. Lassen Sie zur Vereinfachung keine Eingaben für die Region zu, die Sie hier immer auf&nbsp;<strong>ndef</strong>&nbsp;setzen. Die Eingabe eines bereits vorhandenen Namens wird abgelehnt, eine sinnvolle Meldung wird ausgegeben und das Programm fordert den Benutzer erneut zur Eingabe auf. Bei sonstigen Eingabefehlern werfen Sie eine Ausnahme, die zum Programmabbruch mit Fehlermeldung führt.</p>



<p class="wp-block-paragraph">Nach jeder geglückten Registrierung einer neuen &#8222;Liwanze&#8220; wird eine komplette Liste mit allen Mitgliedern und deren Details im LiwanzenVZ möglichst benutzerfreundlich ausgegeben. Durch Eingabe von&nbsp;<strong>q</strong>&nbsp;wird die Registrierung&nbsp;weiterer Mitglieder beendet.</p>



<h3 class="wp-block-heading">Aufgabe 2</h3>



<p class="wp-block-paragraph"><strong>a)&nbsp;</strong>Erweitern Sie nun die Lösung aus Aufgabe 1 wie folgt: &nbsp;Die Methode&nbsp;<strong>connects</strong>&nbsp;überprüft, ob es zu der Liwanze im Zeigerargument eine direkte Verbindung<em>&nbsp;(im sog.&nbsp;<strong>&#8222;tier one&#8220;</strong>)</em>&nbsp;gibt. Die Methode&nbsp;<strong>connected</strong>&nbsp;überprüft, ob es von der Liwanze<em>&nbsp;(im Zeigerargument)</em>&nbsp;eine direkte Verbindung<em>&nbsp;(im sog.<strong>&nbsp;&#8222;tier one&#8220;</strong>)</em>&nbsp;gibt. Vergessen Sie nicht, ggf. auch Ihre bisherigen Programmteile anzupassen.&nbsp;<strong>b)</strong>&nbsp;Auf der Grundlage von 2a) – aber für die Implementierung nicht darauf beschränkt – entwickeln Sie Ihr Programm nun wie folgt weiter:</p>



<p class="wp-block-paragraph"><strong>i.</strong>&nbsp;Vernetzen Sie im Quellcode die sechs ursprünglich registrierten Mitglieder über eine Supportfunktion namens&nbsp;<strong>init_connections</strong>&nbsp;wie folgt:</p>



<p class="wp-block-paragraph">Lösen Sie dies mit einer Methode namens&nbsp;<strong>make_connection</strong>, die aus&nbsp;<strong>init_connections</strong>&nbsp;aufgerufen wird; setzen Sie&nbsp;<strong>make_connection</strong>&nbsp;auch im nächsten Aufgabenteil 2 b) ii. ein. Geben Sie durch geeignete Supportfunktionen / Methoden das Netzwerk komplett&nbsp;und so übersichtlich und benutzerfreundlich wie möglich aus.</p>



<p class="wp-block-paragraph"><strong>ii.</strong>&nbsp;Lassen Sie den Benutzer das Netzwerk beliebig durch Eingabe von zwei unterschiedlichen Mitgliedernamen erweitern – es wird dann vom zuerst eingegebenen Name zu dem zweiten eingegebenen Namen eine Verbindung gewünscht. Ist mindestens einer der beiden Namen nicht registriert, wird dies mit&nbsp;einer sinnvollen Meldung abgefangen und erneut zur Eingabe zweier Namen aufgefordert<em>&nbsp;(bei sonstigen Eingabefehlern wird eine Ausnahme geworfen, die zu einer Fehlermeldung und zum Programmabbruch führt)</em>.</p>



<p class="wp-block-paragraph">Ist die Verbindung bereits vorhanden, wird eine informative Meldung angezeigt und es wird erneut zur Eingabe zweier Namen aufgefordert. Ist die Verbindung noch nicht vorhanden, wird sie erstellt, es wird eine Erfolgsmeldung ausgegeben und wiederum zur Eingabe zweier Namen aufgefordert.</p>



<p class="wp-block-paragraph">Stellen Sie sicher, dass jede Verbindung konsistent unter beiden Namen entsprechend abgespeichert wird, werfen Sie bei Verletzung dieser Konsistenz unbedingt eine Ausnahme, die zu einer Fehlermeldung mit Programmabbruch führt.</p>



<p class="wp-block-paragraph">Nach jeder geglückten Erweiterung wird das vollständige Tier-One-Netzwerk<em>&nbsp;(d.h. alle direkten Beziehungen)</em>&nbsp;des ersten Namens und des zweiten Namens, mit allen Details&nbsp;<em>(einschließlich der Anzahlen der jeweils ein- und ausgehenden Beziehungen)</em>&nbsp;möglichst benutzerfreundlich angezeigt.</p>



<p class="wp-block-paragraph">Durch Eingabe von<strong>&nbsp;q</strong>&nbsp;wird die Erweiterung des Netzwerks<em>&nbsp;(und damit das Programm)</em>&nbsp;schließlich beendet.</p>



<h4 class="wp-block-heading">Error.h</h4>



<pre class="wp-block-code"><code>
#ifndef ERROR_H
#define	ERROR_H

#include
#include

using std::string;
using std::runtime_error;

void error (string s)
{throw runtime_error(s);}

void error (string s1, string s2)
{error(s1+s2);}
#endif	/* ERROR_H */
</code></pre>



<h4 class="wp-block-heading">LiwanzenVZ.cpp</h4>



<pre class="wp-block-code"><code>
#include "LiwanzenVZ.h"
using namespace std;

Liwanze::Liwanze() :
name(""), loc(ndef)
{}

Liwanze::Liwanze(string sname, Region location) :
name(sname), loc(location)
{}

string Liwanze::get_name() const
{return name;}

Liwanze::Region Liwanze::get_loc()const
{return loc;}

void Liwanze::print() const
{
    cout &lt;&lt; "Name:\t" &lt;&lt; name &lt;&lt; endl;
    if (loc==ndef) cout &lt;&lt; "Region:\t\t" &lt;&lt; "Nicht definiert" &lt;&lt; endl;
    if (loc==amer) cout &lt;&lt; "Region:\t\t" &lt;&lt; "Americas" &lt;&lt; endl;
    if (loc==apac) cout &lt;&lt; "Region:\t\t" &lt;&lt; "Asia-Pacific" &lt;&lt; endl;
    if (loc==emea) cout &lt;&lt; "Region:\t\t" &lt;&lt; "Europe, Middle East, Africa" &lt;&lt; endl;
}

void populate(vector&amp; vL) {
    vL.push_back(Liwanze("Joey", Liwanze::amer));
    vL.push_back(Liwanze("Johnny", Liwanze::amer));
    vL.push_back(Liwanze("DeeDee", Liwanze::amer));
    vL.push_back(Liwanze("Tommy", Liwanze::emea));
    vL.push_back(Liwanze("Suzy", Liwanze::apac));
    vL.push_back(Liwanze("Sheena", Liwanze::amer));
}

void print_LVZMembers(const vector&amp; vL)
{
    for (int i = 0; i &lt; vL.size(); i++) {
        cout &lt;&lt; i+1 &lt;&lt; ". ";
        vL&#91;i].print();
        vL&#91;i].print_tierone();
        cout &lt;&lt; "\n";
    }

}

void add_Liwanze(vector&amp; vL, string sname)
{
    if (b_check_ok(vL, sname)==true)
    {vL.push_back(Liwanze(sname, Liwanze::ndef));}
    else
    {
        while (b_check_ok(vL, sname)==false)
        {
            cout &lt;&lt; "Benutzer bereits vorhanden.";
            cout &lt;&lt; "Bitte geben Sie einen gültigen Namen ein:";             cin &gt;&gt; sname;
        }
        vL.push_back(Liwanze(sname, Liwanze::ndef));
    }
}

bool b_check_ok(const vector&amp; vL, string sname)
{
    for (int i=0; i    {
        if (vL&#91;i].get_name()==sname){return false;}
    }
    return true;
}

bool Liwanze::connects(Liwanze* a) const
{
    for (int i=0; iget_name()==connectsTo&#91;i]) return true;
    }
    return false;
}

bool Liwanze::connected(Liwanze* a) const
{
    for (int i=0; iget_name()==connectedFrom&#91;i]) return true;
    }
    return false;
}

void Liwanze::print_tierone() const
{
    int i=0;
    int j=0;
    cout &lt;&lt; "Connects to:\t";
    for (i=0; i    {
        if (i        {cout &lt;&lt; connectsTo&#91;i] &lt;&lt; ", ";}
        else
        {
            cout &lt;&lt; connectsTo&#91;i];
        }

    }
    cout &lt;&lt;  "\n";

    cout &lt;&lt; "Connected from:\t";
    for (j=0; i    {
        if (i        {cout &lt;        else
        {
            cout &lt;&lt; connectedFrom&#91;i];
        }
    }
    cout &lt;&lt; "\nAusgehend:" &lt;&lt; i &lt;&lt; endl;
    cout &lt;&lt; "Eingehend:" &lt;&lt; j &lt;&lt; endl;
    cout &lt;&lt;  "\n"; } void Liwanze::add_connTo(Liwanze* a) {     if (this-&gt;connects(a))
    {
        cerr &lt;&lt; "Verbindung besteht bereits" &lt;&lt; endl;     }     else     {         connectsTo.push_back(a-&gt;get_name());
    }

}

void Liwanze::add_connFrom(Liwanze* a)
{
    if (this-&gt;connected(a))
    {
        cerr &lt;&lt; "Verbindung besteht bereits" &lt;&lt; endl;     }     else     {         connectedFrom.push_back(a-&gt;get_name());
    }
}

void Liwanze::make_connection(string sTo, vector&amp; vL)
{
    Liwanze* To=0;
    for (int i=0; iconnects(To)==false &amp;&amp; To-&gt;connected(this)==false)
            {
                this-&gt;add_connTo(To);
                To-&gt;add_connFrom(this);

                if (this-&gt;connects(To)==true &amp;&amp; To-&gt;connected(this)==true)
                {
                    cout &lt;&lt; "Verbindung erfolgreich hergestellt.\n";
                    cout &lt;&lt; "\n" &lt;&lt; this-&gt;get_name() &lt;&lt; " \n";                     this-&gt;print_tierone();
                    cout &lt;&lt; "\n" &lt;&lt; To-&gt;get_name() &lt;&lt; " \n";                     To-&gt;print_tierone();
                    return;

                }
                else
                {

                   error("Inkonsitente Daten");
                }
            }
            else
            {
                cerr &lt;&lt; "Verbindung besteht bereits." &lt;&lt; endl;
                return;
            }

        }
        if (i==vL.size()-1)
        {
            cout &lt;&lt; "2. Benutzer " &lt;&lt; sTo &lt;&lt; " konnte nicht gefunden werden. Bitte Namen erneut eingeben: \n";             cin &gt;&gt; sTo;
            i=-1;
        }

    }

}

void connect_2(vector&amp; vL)
{
    string sa="&lt;&gt;";
    string sb="&lt;&gt;";

    cout &lt;&lt; "\nVon Mitglied 1:";     cin &gt;&gt; sa;
    cout &lt;&lt; "Zu Mitglied 2:";     cin &gt;&gt; sb;

    for (int i=0; i    {
        if (vL&#91;i].get_name()==sa)
        {
             vL&#91;i].make_connection(sb, vL);
             return;
        }
        if (i==vL.size()-1)
        {
            cout &lt;&lt; "1. Benutzer " &lt;&lt; sa &lt;&lt; " konnte nicht gefunden werden. Bitte Namen erneut eingeben: \n";             cin &gt;&gt; sa;
            i=-1;
        }
    }

}

void init_connections(vector&amp; vL)
{
    for (int i=0; i    {
        if (vL&#91;i].get_name()=="Joey")
        {
            vL&#91;i].make_connection("Johnny", vL);
            vL&#91;i].make_connection("DeeDee", vL);
            vL&#91;i].make_connection("Suzy", vL);
            vL&#91;i].make_connection("Sheena", vL);
        }

        if (vL&#91;i].get_name()=="Johnny")
        {
            vL&#91;i].make_connection("Joey", vL);
            vL&#91;i].make_connection("Suzy", vL);
        }

        if (vL&#91;i].get_name()=="DeeDee")
        {vL&#91;i].make_connection("Suzy", vL);}

        if (vL&#91;i].get_name()=="Tommy")
        {vL&#91;i].make_connection("Suzy", vL);}

        if (vL&#91;i].get_name()=="Sheena")
        {vL&#91;i].make_connection("Joey", vL);
        }
    }
}</code></pre>



<h4 class="wp-block-heading">Main.cpp</h4>



<pre class="wp-block-code"><code>
#include "error.h"
#include "LiwanzenVZ.h"
using namespace std;

int main() {
    try{

    string sname = "";
    char cend = 'a';
    vector  vL;

    populate(vL);
    init_connections(vL);
    print_LVZMembers(vL);
    cout &lt;&lt; "\n";

    while (cend != 'q' &amp;&amp; cend!='Q')
    {
        cout &lt;&lt; "Möchten Sie ein neues Mitglied hinzufügen? (C) Continue, (Q) Quit." &lt;&lt; endl;         cin &gt;&gt; cend;
        if (cend=='c' || cend=='C')
        {
                cout &lt;&lt; "Name des neuen Mitglieds:";                 if (cin &gt;&gt; sname)
                {
                        add_Liwanze(vL, sname);
                        print_LVZMembers(vL);
                        cout &lt;&lt; "\n";
                }
        }
        else
        {
            if (cend=='q' || cend=='Q'){}
            else{error("Ungültige Eingabe");}
        }
    }
    while (1!=0)
    {
        cout &lt;&lt; "\nZwei Mitglieder miteinander verbinden:";
        connect_2(vL);
    }
    print_LVZMembers(vL);
    return 0;
    }
    catch (exception &amp;e)
    {cerr &lt;&lt; e.what();}
    catch (...)
    {cerr &lt;&lt; "Unbekannter Fehler";}
}
</code></pre>



<h4 class="wp-block-heading">LiwanzenVZ.h</h4>



<pre class="wp-block-code"><code>
#include
#include
using namespace std;

#ifndef LIWANZENVZ_H
#define	LIWANZENVZ_H

class Liwanze;

void populate(vector&amp;);
void print_LVZMembers(const vector&amp;);
void add_Liwanze(vector&amp;, string);
bool b_check_ok(const vector&amp;, string);
void init_connections(vector&amp;);
void add_2(vector&amp;);
void connect_2(vector&amp;);
void error (string);
void error (string, string);

class Liwanze{
public:
    enum Region{ndef, amer, apac, emea};
    Liwanze();
    Liwanze( string, Region );
    string get_name() const;
    Region get_loc() const;
    void print() const;
    bool connects(Liwanze*) const;
    bool connected(Liwanze*) const;
    void print_tierone() const;
    void add_connTo(Liwanze*);
    void add_connFrom(Liwanze*);
    void make_connection(string, vector&amp;);

private:
    string name;
    Region loc;
    vector connectsTo;
    vector connectedFrom;
};
#endif	/* LIWANZENVZ_H */</code></pre>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/04/programmieren-algorithmen-und-datenstrukturen-1-probeklausur/">Programmieren, Algorithmen und Datenstrukturen 1 (Probeklausur)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/04/programmieren-algorithmen-und-datenstrukturen-1-probeklausur/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 3)</title>
		<link>https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-3/</link>
					<comments>https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-3/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Sun, 05 Feb 2012 06:20:00 +0000</pubDate>
				<category><![CDATA[Programmieren 1]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1527</guid>

					<description><![CDATA[<p>Aufgabe 1 a)&#160;Kehren Sie zum ggT Programm (aus Grundlagen, Teil 2) zurück. Überarbeiten Sie das Programm so, dass es mittels C++ Ausnahmen mögliche Fehler abfängt.&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-3/">Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 3)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Aufgabe 1</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Kehren Sie zum ggT Programm (aus Grundlagen, Teil 2) zurück. Überarbeiten Sie das Programm so, dass es mittels C++ Ausnahmen mögliche Fehler abfängt. Nach dem Abfangen eines Fehlers soll das Programm eine vernünftige Fehlermeldung ausgeben und sich beenden.</p>



<pre class="wp-block-code"><code>#include "MEIN_EIGENER_HEADER.h"
// Einbinden der eigenen Header-Datei
using namespace std;

int main() {
try {
	bool bend = false;
	int i1 = 0, i2 = 0, tmp = 0, n = 1;

	while (bend == false)
	{
		cout &lt;&lt; "Zwei positive ganze Zahlen eingeben: "; 		if (cin &gt;&gt; i1) // Wenn der eingelesene Wert in i1 gespeichert werden kann,
		{
			if (cin &gt;&gt; i2) // Wenn der eingelesene Wert in i2 gespeichert  werden kann,
			{
				if (i1 &gt; 0 &amp;&amp; i2 &gt; 0) // Wenn i1 größer als 0 und i2 größer als 0
				{
					while (i1 != i2) // Solange i1 ungleich i2
					{
						cout &lt;&lt; "\t(" &lt;&lt; i1 &lt;&lt; "," &lt;&lt; i2 &lt;&lt; ")" &lt;&lt; endl;
						if (i1 &lt; i2) // Wenn i1 kleiner als i2
						{
							i2 = i2 - i1;
						}
						else
						{
							tmp = i1;
							i1 = i2;
							i2 = tmp - i1;
						}
						++n;
					} // Ende von while

					cout &lt;&lt; "\t(" &lt;&lt; i1 &lt;&lt; "," &lt;&lt; i2 &lt;&lt; ")" &lt;&lt; endl;
					cout &lt;&lt; n &lt;&lt; " Schritte zum ggT\n" &lt;&lt; endl;

				}
				else
				{
					error("i1 und i2 muessen positiv sein.");
				}
			}
			else // Wenn der eingelesene Wert nicht in i2 gespeichert werden kann
			{
			error("i2 ist keine ganze Zahl.");
			}
		}
		else // Wenn der eingelesene Wert nicht in i1 gespeichert werden kann
		{
			error("i1 ist keine ganze Zahl.");
		}
	} // Ende von while
}

catch (exception &amp;e)
{
	cerr &lt;&lt; e.what();
}

catch (...) // Fängt alle anderen Ausnahmefehler ab
{
	cerr &lt;&lt; "Fehler unbekannt.";
}
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Kehren Sie zum Ziffer/Zeichenketten Programm – Aufgabe 6 aus dem 2. Praktikumsblatt – zurück. Überarbeiten Sie auch dieses Programm entsprechend der obigen Aufgabenstellung a).</p>



<pre class="wp-block-code"><code>#include
#include "MEIN_EIGENER_HEADER.h"
using namespace std;

int main() {
try {
	string stmp = "&lt;&gt;";
	int itmp = 0;
	vector vNames;
	vector vScores;

	while (cin &gt;&gt; stmp &gt;&gt; itmp &amp;&amp; (stmp != "noname" || itmp != 0)) // Solange die Eingabe in stmp, itmp gespeichert werden kann und stmp ungleich noname und itmp ungleich 0 ist
	{
		for (int i = 0; i &lt; vNames.size(); i++) // Prüfen, ob ein Name bereits eingegeben wurde
		{
			if (vNames&#91;i] == stmp)
			{
				error("Achtung, es wurde ein Name doppelt eingegeben.\n\"" + stmp + "\" ist schon einmal vorhanden.\nProgramm wird nun beendet.\n");
				return 1;
			}
		}

		vScores.push_back(itmp); // Speichern des eingelesenen Wertes itmp im  Vektor vScores
		vNames.push_back(stmp);	// Speichern des eingelesenen Wertes stmp im  Vektor vNames
	}
	if (cin.fail()) // Wenn die Eingabe fehlschlägt
	{
		error("Fehlerhafte Eingabe. Der erste Begriff muss ein Name, der zweite Begriff eine Zahl, sein.");
	}
	else // Ansonsten Ausgabe der Daten
	{
		cout &lt;&lt; "Folgende Daten wurden einegegeben:\n" &lt;&lt; endl;

		for (int i = 0; i &lt; vNames.size(); i++)
		{
			cout &lt;&lt; vNames&#91;i] &lt;&lt; ", " &lt;&lt; vScores&#91;i] &lt;&lt; endl;
		}
	}

	return 0;

	}

catch (exception &amp;e)
{
	cerr &lt;&lt; e.what();
}

catch (...)
{
	cerr &lt;&lt; "Fehler nicht bedacht." &lt;&lt; endl;
}
}</code></pre>



<p class="wp-block-paragraph"><strong>c) (Optional)</strong>&nbsp;Überarbeiten Sie entsprechend alle bisher durchgenommenen Programmbeispiele, die keine Fehlerbehandlung mit C++ Exceptions enthalten.</p>



<h3 class="wp-block-heading">Aufgabe 2</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Schreiben Sie ein Programm, das eine Reihe von Zahlen einliest und in einem vector&lt;int&gt; Container speichert. Nachdem der Benutzer eine beliebige Anzahl von Zahlen eingegeben hat, fragt das Programm, wie viele Zahlen davon aufaddiert werden sollen. Lautet die Antwort n, werden die ersten n Elemente des vector Containers sowie deren Summe ausgegeben.</p>



<p class="wp-block-paragraph"><strong>Beispielsweise:</strong>&nbsp;Geben Sie einige Zahlen ein (mit &#8218;q&#8216; beenden Sie die Eingabe): 12 23 13 24 15 q Wie viele Zahlen sollen aufaddiert werden: 3 Die Summe der erste 3 Elemente 12, 23 und 13 ist 48.</p>



<p class="wp-block-paragraph">Verwenden Sie Ausnahmen, um möglichst alle Fehler zu behandeln. Behandeln Sie v.a. alle möglichen Eingaben. Stellen Sie auch sicher, dass eine vernünftige Fehlermeldung ausgegeben wird, wenn mehr Zahlen addiert werden sollen als im vector vorhanden sind.</p>



<pre class="wp-block-code"><code>#include
#include "MEIN_EIGENER_HEADER.h"
#include
using namespace std;

int main() {
try {
	vector vzahlen;
	int itemp = 0, iausgabe = 0, isumme = 0;
	char cend = 'a';

	cout &lt;&lt; "Geben Sie einige Zahlen ein (mit 'q' beenden Sie die Eingabe):" &lt;&lt; endl; 	while (cend != 'q') // Solange nicht q eingegeben wurde 	{ 		if (cin &gt;&gt; itemp) // Wenn die Eingabe itemp gespeichert werden kann
		{
			vzahlen.push_back(itemp);
		}
		else // Schreibe Wert in Vektor
		{
			cin.clear();
			if (cin &gt;&gt; cend &amp;&amp; cend != 'q')  // Wenn die Eingabe erfolgreich und nicht q eingegeben wurde
			{
				error("Es duerfen nur 'q' oder ganze Zahlen als Operatoren eingegeben werden. Programm wird nun beendet.");
			}
		}
	}

	cout &lt;&lt; "Wie viele Zahlen sollen aufaddiert werden:" &lt;&lt; endl; 	if (cin &gt;&gt; iausgabe) // Wenn Eingabe in iausgabe gespeichert werden kann
	{}
	else
	{
		error("Eingegebener Wert ungueltig. Programm wird nun beendet.");
	}

	if (vzahlen.size() &gt;= iausgabe) // Wenn weniger Zahlen aufaddiert werden sollen, als im Vektor gespeichert sind
	{
		cout &lt;&lt; "Die Summe der ersten " &lt;&lt; iausgabe &lt;&lt; " Elemente ";
		for (int i = 0; i &lt; iausgabe; i++) // Aufaddieren der Werte
		{
			cout &lt;&lt; vzahlen&#91;i];
			isumme = isumm e + vzahlen&#91;i];
			if (i &lt; iausgabe - 2) // Formatierung der Ausgabe,
			{
				cout &lt;&lt; ", ";
			}
			else
			{
				if (i &lt; iausgabe - 1)
				{
					cout &lt;&lt; " und ";
				}
			}
		}
		cout &lt;&lt; " ist " &lt;&lt; isumme &lt;&lt; endl;
	}
	else
	{
		error("Zu wenig Stellen");
	}

	return 0;
}

catch (exception &amp;e)
{	// Fangen des Fehlers error
	cerr &lt;&lt; e.what();
	return 1;
}
catch (...)
{ // Fangen von allen anderen Ausnahmefehlern
	cerr &lt;&lt; "Unbekannter Fehler. Programm wird beendet.";
	return 1;
}
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Erweitern Sie das Programm so, dass double-Werte statt int-Werte verwendet werden. Erstellen Sie einen zusätzlichen vector Container mit double-Werten für die (n-1) Differenzen zwischen den jeweils nacheinander eingegebenen Werten. Geben Sie auch die Differenzen aus.</p>



<pre class="wp-block-code"><code>#include
#include "MEIN_EIGENER_HEADER.h"
using namespace std;

void dsumme(const vector&amp; vzahlen, const int&amp; iausgabe) // Anlegen einer Funktion dsumme ohne Rückgabewert, die die Summe der ersten X Werte berechnet
{
	double dsum = 0.0;
	cout &lt;&lt; "Die Summe der ersten " &lt;&lt; iausgabe &lt;&lt; " Elemente ";
	for (int i = 0; i &lt; iausgabe; i++)
	{
		cout &lt;&lt; vzahlen&#91;i];
		dsum = dsum + vzahlen&#91;i];
		if (i &lt; iausgabe - 2) // Formatierung der Ausgabe
		{
			cout &lt;&lt; ", ";
		}
		else
		{
			if (i &lt; iausgabe - 1)
			{
				cout &lt;&lt; " und ";
			}
		}
	}

	cout &lt;&lt; " ist " &lt;&lt; dsum &lt;&lt; endl;
}

void ddifferenzen(const vector&amp; vdifferenzen) // Funktion zur Ausgabe der n-1 Differenz
{
	cout &lt;&lt; "Die Differenz der Zahlen lautet: ";
	for (int i = 0; i &lt; vdifferenzen.size(); i++)
	{
		cout &lt;&lt; vdifferenzen&#91;i];
		if (i &lt; vdifferenzen.size() - 2) // Formatierung der Ausgabe
		{
			cout &lt;&lt; ", ";
		}
		else
		{
			if (i &lt; vdifferenzen.size() - 1)
			{
				cout &lt;&lt; " und ";
			}
		}
	}

	cout &lt;&lt; endl;
	return 0;

}

int main() {
try {
	vector vzahlen;
	vector vdifferenzen;
	double itemp = 0;
	int iausgabe = 0;
	char cend = 'a';

	cout &lt;&lt; "Geben Sie einige Zahlen ein (mit 'q' beenden Sie die Eingabe):" &lt;&lt; endl; 	while (cend != 'q') {	// Solange nicht q eingegeben wurde 		if (cin &gt;&gt; itemp) // Wenn die Eingabe in itemp gespeichert werden kann
		{
			vzahlen.push_back(itemp); // Schreibe itemp in den Vektor
			if (vzahlen.size() &gt; 1) // Berechnung der Differenzen nur möglich, wenn mehr als ein Wert eingegeben wurde
 			{
				if (vzahlen&#91;vzahlen.size() - 2] &gt;= vzahlen&#91;vzahlen.size() - 1]) // Dieses if-else Konstrukt ermittelt den Betrag zwischen zwei Zahlen, immer größere Zahl - kleinere und schreibt die Differenz in einen eigenen Vektor
				{
					vdifferenzen.push_back(vzahlen&#91;vzahlen.size() - 2] - vzahlen&#91;vzahlen.size() - 1]);
				}
				else
				{
					vdifferenzen.push_back(vzahlen&#91;vzahlen.size() - 1] - vzahlen&#91;vzahlen.size() - 2]);
				}
			}
		}
		else
		{
			cin.clear();
			if (cin &gt;&gt; cend &amp;&amp; cend != 'q')
			{
				error("Es duerfen nur 'q' oder ganze Zahlen als Operatoren eingegeben werden.");
			}
		}
	} // Ende von while

	cout &lt;&lt; "Wie viele Zahlen sollen aufaddiert werden?" &lt;&lt; endl; 	if (cin &gt;&gt; iausgabe) // Wenn die Eingabe in iausgabe gespeichert werden kann, tue nichts
	{}
	else
	{
		error("Eingegebener Wert ist ungueltig.");
	}

	if (vzahlen.size() &gt;= iausgabe) // Wenn Vektorgröße größer gleich der eingegebenen Zahl
	{
		dsumme(vzahlen, iausgabe); // Funktionsaufruf dsumme und Übergabe der Parameter
		ddifferenzen(vdifferenzen); // Funktionsaufruf ddifferenzen und Übergabe der Parameter
	}
	else
	{
		error("Es wurden weniger Zahlen eingegeben, als ausgegeben werden sollen.");
	}

	return 0;
}

catch (exception &amp;e) // Abfangen von error
{
	cerr &lt;&lt; e.what();
	return 1;
}
}</code></pre>



<h3 class="wp-block-heading">Aufgabe 3</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Zeichnen Sie einen Parserbaum nach den vorgestellten formalen Grammatikregeln für den Rechenausdruck (17-4)/(5-1).</p>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Erweitern Sie das Mini-Rechner Programm aus der Vorlesung so, dass auch negative Zahlen direkt eingegeben werden können. Ein Rechenausdruck wie -7*3 soll auch so eingegeben werden können, und nicht wie bislang nur als (0-7)*3 akzeptiert werden.&nbsp;<strong>Hinweise:</strong>&nbsp;Sie müssen dafür die wie folgt erweiterte Grammatik implementieren:</p>



<p class="wp-block-paragraph"><strong>Primary :</strong>&nbsp;Number &#8218;(&#8218; Expression &#8218;)&#8216; &#8218;-&#8218; Primary &#8218;+&#8216; Primary</p>



<p class="wp-block-paragraph"><strong>Faktor (Punktoperand) :</strong>&nbsp;Zahl &#8218;(&#8218; Rechenausdruck &#8218;)&#8216; &#8218;-&#8218; Faktor &#8218;+&#8216; Faktor</p>



<p class="wp-block-paragraph">Implementieren Sie unäres Minus und unäres Plus.</p>



<pre class="wp-block-code"><code>#ifndef TOKEN_H
#define	TOKEN_H

class Token
{

	public:
		char kind; // Kategorien
		double value; // Bei Zahlenkategorie: ein Wert

		Token(char ch) //  Memberfunktion: erstelle ein Token aus einem char
		: kind(ch), value(0)
		{} /* mache nichts sonst */

		Token(char ch, double val) //Memberfunktion: erstelle ein Token aus einem char und einem double
		: kind(ch), value(val)
		{}/* mache nichts sonst */
 };

class Token_stream
{
	public:
		Token_stream() : full(false), buffer(' ')
		{} // Konstruktor

		void putback(Token t) // Token "zurückstellen"
		{
			if (full) error("Token_stream::putback(), Puffer voll!\n");
			buffer = t;
			full = true;
		};

		Token get(); // Token aus cin erzeugen

	private:
		bool full; // ist buffer voll?
		Token buffer;
};

Token Token_stream::get()
{
	if (full)
	{
		full = false;
		return buffer;
	}

	char ch;
	cin &gt;&gt; ch;

	switch (ch)
	{
		case 'h': case 'H':
		{
			return Token('h');
		}

		case ';': // Ende eines Rechenausdrucks

		case 'q': // Programmende

		case '(': case ')': case '+': case '-': case '*': case '/':
		{
			return Token(ch); // jedes Zeichen ist sein eigenes Token
		}

		case '.': case '0': case '1': case '2': case '3': case '4':// Zahl als Token
		case '5': case '6': case '7': case '8': case '9':
		{
			cin.putback(ch); // der cin Stream kennt auch ein putback()
			double val;
			cin &gt;&gt; val;
			return Token('9', val);
		}

		default: error("Token Token_stream::get(), unbekanntes Token!\n");
	}
}
#endif	/* TOKEN_H */</code></pre>



<pre class="wp-block-code"><code>#ifndef FUNCTIONS_H
#define	FUNCTIONS_H
double rechenausdruck(Token_stream &amp;Ts);
double faktor(Token_stream &amp;Ts);
double summand(Token_stream &amp;Ts);

double rechenausdruck(Token_stream &amp;Ts) // "plus" und "minus" behandeln
{
	double li = summand(Ts);
	Token t = Ts.get();
	while (true)
	{
		switch (t.kind)
		{
			case '+':
			{
				li += summand(Ts);
				t = Ts.get();
				break;
			}
			case '-':
			{
				li -= summand(Ts);
				t = Ts.get();
				break;
			}
			default:
			{
				Ts.putback(t);
				return li;
			}
		}
	}
}

double summand(Token_stream &amp;Ts) // "mal" und "geteilt durch" behandeln
{
	double li = faktor(Ts);
	Token t = Ts.get();
	while (true)
	{
		switch (t.kind)
		{
			case '*':
			{
				li *= faktor(Ts);
				t = Ts.get();
				break;
			}
			case '/':
			{
				double d = faktor(Ts);
				if (d == 0) error("Div. durch 0!\n");
				li /= d;
				t = Ts.get();
				break;
			}
			default:
			{
				Ts.putback(t);
				return li;
			}
		}
	}
}

double faktor(Token_stream &amp;Ts) // Zahlen und Klammern behandeln
{
	Token t = Ts.get();
	switch (t.kind)
	{
		case '(':
		{
			double d = rechenausdruck(Ts);
			t = Ts.get();
			if (t.kind != ')') error(") erwartet!\n");
			return d;
		}
		case '9':
		{
			return t.value;
		}
		case '+':
		{
			return faktor(Ts);
		}
		case '-':
		{
			return faktor(Ts) * -1;
		}
		default:
		{
			error("Faktor erwartet!\n");
		}
	}
}

#endif	/* FUNCTIONS_H */</code></pre>



<pre class="wp-block-code"><code>using namespace std;
#include "MEIN_EIGENER_HEADER.h"
#include "token.h"
#include "functions.h"

int main() {
try {
	Token_stream T;
	while (cin)
	{

		Token t = T.get();

		while (t.kind == ';')
		{
			t = T.get();
		}

		if (t.kind == 'q')
		{
			return 0;
		}

		T.putback(t);
		cout &lt;&lt; "=" &lt;&lt; rechenausdruck(T) &lt;&lt; endl;

	}
	return 0;
}

catch (exception &amp;e)
{
	cerr &lt;&lt; e.what();
	return 1;
}
}</code></pre>



<p class="wp-block-paragraph"><strong>c)</strong>&nbsp;Erstellen Sie einen Satz von Eingabedaten und die dazu gehörenden, von Ihnen erwarteten Ausgaben zum Testen des Mini-Rechner Programms. Wonach sollten Sie Ausschau halten? Ist Ihre Liste mit Testdaten vollständig? Denken Sie auch an extreme Werte und „unsinnige“ Eingaben.&nbsp;<strong>Additon</strong></p>



<ul class="wp-block-list">
<li>1+1;</li>



<li>1++1;</li>



<li>+1+1;</li>



<li>++1++1;</li>



<li>0+1;</li>



<li>1+0;</li>
</ul>



<p class="wp-block-paragraph"><strong>Subtraktion</strong></p>



<ul class="wp-block-list">
<li>1-1;</li>



<li>1&#8211;1;</li>



<li>-1-1;</li>



<li>&#8211;1&#8211;1;</li>



<li>1-0;</li>



<li>0-1;</li>
</ul>



<p class="wp-block-paragraph"><strong>Mixed</strong></p>



<ul class="wp-block-list">
<li>+1-1;</li>



<li>-1+1;</li>



<li>+-1+-1;</li>
</ul>



<p class="wp-block-paragraph"><strong>Multiplikation Plus</strong></p>



<ul class="wp-block-list">
<li>1*1;</li>



<li>+1*+1;</li>



<li>++1*++1;</li>



<li>0*(+1);</li>
</ul>



<p class="wp-block-paragraph"><strong>Multiplikation Minus</strong></p>



<ul class="wp-block-list">
<li>1*-1;</li>



<li>-1*-1;</li>



<li>&#8211;1*&#8211;1;</li>



<li>0*(-1);</li>
</ul>



<p class="wp-block-paragraph"><strong>Mixed</strong></p>



<ul class="wp-block-list">
<li>-(+1)*-(+1);</li>



<li>+(-1)*+(-1);</li>



<li>-+1*-+1;</li>



<li>+-1*+-1;</li>
</ul>



<p class="wp-block-paragraph"><strong>Division</strong></p>



<ul class="wp-block-list">
<li>1/1;</li>



<li>+1/+1;</li>



<li>-1/-1;</li>



<li>+1/-1;</li>



<li>-1/+1;</li>



<li>+(1/1);</li>



<li>-(1/1);</li>
</ul>



<p class="wp-block-paragraph"><strong>d)</strong>&nbsp;Jedes Programm sollte dem Benutzer irgendeine Form von Hilfe anbieten. Ändern Sie das Mini-Rechner Programm so, dass bei der Eingabe von h oder H einige Anweisungen zur Bedienung ausgegeben werden.</p>



<pre class="wp-block-code"><code>using namespace std;
#include "MEIN_EIGENER_HEADER.h"
#include "token.h"
#include "functions.h"

int main()
{
try{
	cout &lt;&lt; "Taschenrechner:" &lt;&lt; endl;
 	cout &lt;&lt; "Bitte geben Sie die zu berechnenden Terme ein."&lt;&lt; endl;

	Token_stream T;
	while (cin)
	{
 	 	Token t = T.get();

 	 	while (t.kind == ';')
		{
			t = T.get();
		}

 	 	if (t.kind == 'q')
		{
 	 	 	return 0;
 	 	}
		else
		{
 	 		if (t.kind == 'h')
			{
				cout &lt;&lt; "Hilfe" &lt;&lt; endl;
                		cout &lt;&lt; "Rechenoperatoren: '+', '-', '*', '/'" &lt;&lt; endl;
                		cout &lt;&lt; "Rechenoperanden: Zahlen, '(', ')'" &lt;&lt; endl;
 	 	 	}
			else
			{
 	 	 	 	T.putback(t);
 	 	 	 	cout &lt;&lt; "=" &lt;&lt; rechenausdruck(T) &lt;&lt; endl;
	 	 	}
	 	}
	}
 	return 0;
}
catch (exception &amp;e)
{
	cerr &lt;&lt; e.what();
	return 1;
}
}</code></pre>



<pre class="wp-block-code"><code>Token Token_stream::get()
{
	if (full)
	{
		full = false;
		return buffer;
	}

	char ch;
	cin &gt;&gt; ch;
	switch (ch)
	{
		case 'h': case 'H':
		{
			return Token('h');
		}

		case ';': // Ende eines Rechenausdrucks

		case 'q': // Programmende

		case '(': case ')': case '+': case '-': case '*': case '/':
		{
			return Token(ch); // jedes Zeichen ist sein eigenes Token
		}

		case '.': case '0': case '1': case '2': case '3': case '4':
		case '5': case '6': case '7': case '8': case '9': // Zahl als Token
		{
			cin.putback(ch); // der cin Stream kennt auch ein putback()
			double val;
			cin &gt;&gt; val;
			return Token('9', val);
		}

		default:
		{
			error("Token Token_stream::get(), unbekanntes Token!\n");
		}
	}
}</code></pre>



<p class="wp-block-paragraph"><strong>e) (Optional)</strong>&nbsp;Sie werden feststellen, dass Ein- und Ausgabeprompt</p>



<p class="wp-block-paragraph">&gt; _ bzw. = 42</p>



<p class="wp-block-paragraph">des Mini-Rechner Programms sich unter bestimmten Umständen seltsam verhalten. Verbessern Sie das Programm so, dass immer eine korrekte Ein- bzw.&nbsp;Ausgabeaufforderung angezeigt wird. Hinweis: Sie könnten die formatierte Eingabe mit cin &gt;&gt; durch die unformatierte Eingabe mit cin.get() ersetzen und unerwünschte Zeichen selbst filtern.Plus.</p>



<h3 class="wp-block-heading">Aufgabe 4</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Lesen Sie über die Standardeingabe Wochentag/Wert-Paare ein,</p>



<p class="wp-block-paragraph"><strong>Beispielsweise:</strong>&nbsp;Donnerstag 23 Freitag 56 Donnerstag -3 Dienstag 99</p>



<p class="wp-block-paragraph">Sammeln Sie für jeden Wochentag die eingegebenen Werte in einem eigenen vector&lt;int&gt; Container. Beenden Sie die Eingabe durch q als Wochentag. Geben Sie die Werte in den sieben Wochentage-Containern aus. Geben Sie die Summe der Werte in jedem Container aus. Ignorieren Sie unzulässige Wochentage wie „Freutag“, aber lassen Sie geläufige Abkürzungen (wie „Fr“) zu. Geben Sie die Anzahl der wegen unzulässigem Tag abgelehnten Werte aus.</p>



<pre class="wp-block-code"><code>#include "MEIN_EIGENER_HEADER.h"
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

int isumme (vector&lt;int&gt; &amp;vtage)
{
	int result =0;
	for (int i=0; i&lt;vtage.size();i++)
	{
		result = result + vtage&#91;i];
	}
	return result;
}

int main() {
try {
	string stemp = "";
	int itemp = 0;
	int iilegaldays = 0;

	vector&lt;int&gt; vmontag;
	vector&lt;int&gt; vdienstag;
	vector&lt;int&gt; vmittwoch;
	vector&lt;int&gt; vdonnerstag;
	vector&lt;int&gt; vfreitag;
	vector&lt;int&gt; vsamstag;
	vector&lt;int&gt; vsonntag;

	while (stemp != "q")
	{

		cin &gt;&gt; stemp;

		if (cin &gt;&gt; itemp)
		{
			if (stemp == "Montag" || stemp == "Mo")
			{
				vmontag.push_back(itemp);
			}
			else
			{
				if (stemp == "Dienstag" || stemp == "Di")
				{
					vdienstag.push_back(itemp);
				}
				else
				{
					if (stemp == "Mittwoch" || stemp == "Mi")
					{
						vmittwoch.push_back(itemp);
					}
					else
					{
						if (stemp == "Donnerstag" || stemp == "Do")
						{
							vdonnerstag.push_back(itemp);
						}
						else
						{
							if (stemp == "Freitag" || stemp == "Fr")
							{
								vfreitag.push_back(itemp);
							}
								else
								{
								if (stemp == "Samstag" || stemp == "Sa")
								{
									vsamstag.push_back(itemp);
								}
								else
								{
									if (stemp == "Sonntag" || stemp == "So") {
										vsonntag.push_back(itemp);
									}
									else
									{
										iilegaldays++;
									}
								}
							}
						}
					}
				}
			}

		}
		else
		{
			cin.clear();
			if (cin &gt;&gt; stemp &amp;&amp; stemp != "q")
			{
				error("Ungueltige Eingabe fuer Wochentag oder Wert.");
			}
			else
			{
				cout &lt;&lt; "'q' wurde als Zahl eingegeben." &lt;&lt; endl;
				cout &lt;&lt; "Fuehre automatische Korrektur durch." &lt;&lt; endl;
			}
		}
	}

	cout &lt;&lt; "Anzahl der falsch eingegebenen Tage: "&lt;&lt;iilegaldays &lt;&lt;endl;
	cout &lt;&lt; "Montage: "&lt;&lt;isumme(vmontag) &lt;&lt;endl;
	cout &lt;&lt; "Dienstage: "&lt;&lt;isumme(vdienstag) &lt;&lt;endl;
	cout &lt;&lt; "Mittwoche: "&lt;&lt;isumme(vmittwoch) &lt;&lt;endl;
	cout &lt;&lt; "Donnerstage: "&lt;&lt;isumme(vdonnerstag) &lt;&lt;endl;
	cout &lt;&lt; "Freitage: " &lt;&lt;isumme(vfreitag) &lt;&lt;endl;
	cout &lt;&lt; "Samstage: " &lt;&lt;isumme(vsamstag) &lt;&lt;endl;
	cout &lt;&lt; "Sonntage: " &lt;&lt;isumme(vsonntag) &lt;&lt;endl;

	return 0;

}

catch (exception &amp;e)
{
	cerr &lt;&lt; e.what();
	return 1;
}
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Definieren Sie nun eine Klasse Name_values, die einen string und ein vector&lt;int&gt; enthält. Statten Sie die Klasse mit einem Konstruktor und mit den erforderlichen Memberfunktionen zur Speicherung von Werten und zur Ausgabe aus. Überarbeiten Sie das Programm aus a) so, dass statt sieben vector Container nur noch ein vector&lt;Name_values&gt; Container verwendet wird.</p>



<pre class="wp-block-code"><code>#include "class.h"
#include "methods.h"
#include "MEIN_EIGENER_HEADER.h"
#include &lt;vector&gt;

using namespace std;

int main() {
try {
	vector&lt;name_value&gt; vnamevalues(7);
	string strDay;
	int ivalue = 0, iilegal = 0;

	vnamevalues&#91;0] = name_value("Montag");
	vnamevalues&#91;1] = name_value("Dienstag");
	vnamevalues&#91;2] = name_value("Mittwoch");
	vnamevalues&#91;3] = name_value("Donnerstag");
	vnamevalues&#91;4] = name_value("Freitag");
	vnamevalues&#91;5] = name_value("Samstag");
	vnamevalues&#91;6] = name_value("Sonntag");

	while (strDay != "q")
	{
		cin &gt;&gt; strDay;
		if (cin &gt;&gt; ivalue)
		{
			if (strDay == "Montag" || strDay == "Mo")
			{vnamevalues&#91;0].set(ivalue);}
			else
			{
				if (strDay == "Dienstag" || strDay == "Di")
				{vnamevalues&#91;1].set(ivalue);}
				else
				{
					if (strDay == "Mittwoch" || strDay == "Mi")
					{vnamevalues&#91;2].set(ivalue);}
					else
					{
						if (strDay == "Donnerstag" || strDay == "Do")
						{vnamevalues&#91;3].set(ivalue);}
						else
						{
							if (strDay == "Freitag" || strDay == "Fr")
							{vnamevalues&#91;4].set(ivalue);}
							else
							{
								if (strDay == "Samstag" || strDay == "Sa")
								{vnamevalues&#91;5].set(ivalue);}
								else
								{
									if (strDay == "Sonntag" || strDay == "So")
									{vnamevalues&#91;6].set(ivalue);}
									else
									{iilegal++;}
								}
							}
						}
					}
				}
			}
		}
		else
		{
			cin.clear();
			if (cin &gt;&gt; strDay &amp;&amp; strDay == "q")
			{
				cout &lt;&lt; "Bitte \"q\" nur fuer den ersten Wert eingeben." &lt;&lt; endl;
				cout &lt;&lt; "Fuehre Korrektur durch." &lt;&lt; endl;
			}
			else
			{
				error("Ungueltige Eingabe fuer den Wert.");
			}
		}
	}

	cout &lt;&lt; "Sie haben folgende Werte eingegeben: " &lt;&lt; endl;

	for (int i = 0; i &lt; vnamevalues.size(); i++) //Alle Tage durchlaufen
	{cout &lt;&lt; vnamevalues&#91;i].get() &lt;&lt; ": " &lt;&lt; vnamevalues&#91;i].isumme() &lt;&lt; endl;}

	cout &lt;&lt; "Anzahl der falsch eingegebenen Tage: " &lt;&lt; iilegal &lt;&lt; endl;

	return 0; //reguläres Programmende
}
catch (runtime_error &amp;e)
{
	cerr &lt;&lt; e.what(); //Fehlerausgabe
	return 1; //Programmende nach Fehler
}
}</code></pre>



<pre class="wp-block-code"><code>#ifndef METHODS_H
#define	METHODS_H

name_value::name_value() : //Standardkonstruktor
sname("Montag"),vvalue() {}

name_value::name_value(string strDay) :
sname(strDay), vvalue() { }

void name_value::set(int ivalue)
{
	vvalue.push_back(ivalue);
}

int name_value::size()
{
	return vvalue.size();
}

int name_value::isumme()
{
	int iergebnis = 0;
	for (int i = 0; i &lt; vvalue.size(); i++)
	{
		iergebnis = iergebnis + vvalue&#91;i];
	}
	return iergebnis;
}

string name_value::get()
{
	return sname;
}
#endif	/* METHODS_H */</code></pre>



<pre class="wp-block-code"><code>#ifndef NAME_VALUES_H
#define	NAME_VALUES_H

#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;stdexcept&gt;

using namespace std;

class name_value
{
	public:
		name_value();
		name_value(string strDay);

		void set(int);
		int size();
		int isumme();
		string get();

	private:
		string sname;
		vector&lt;int&gt; vvalue;
};
#endif	/* NAME_VALUES_H */</code></pre>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-3/">Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 3)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 2)</title>
		<link>https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-2/</link>
					<comments>https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-2/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Sat, 04 Feb 2012 06:19:00 +0000</pubDate>
				<category><![CDATA[Programmieren 1]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1525</guid>

					<description><![CDATA[<p>Aufgabe 1 a)&#160;Schreiben Sie ein Programm, das eine Gleitkommazahl als Benutzereingabe einliest und&#160;die Quadratwurzel dieser Zahl ausgibt.&#160;Eingabeaufforderung:&#160;Geben Sie eine Gleitkommazahl &#62;= 0 ein: Antwort des&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-2/">Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 2)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Aufgabe 1</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Schreiben Sie ein Programm, das eine Gleitkommazahl als Benutzereingabe einliest und&nbsp;die Quadratwurzel dieser Zahl ausgibt.&nbsp;<strong>Eingabeaufforderung:</strong>&nbsp;Geben Sie eine Gleitkommazahl &gt;= 0 ein: Antwort des Programms (z.B. bei Eingabe von 9.7): Die Quadratwurzel von 9.7 ist 3.1145&nbsp;<strong>Hinweis:</strong>&nbsp;Die C++ StdLib stellt über den Header cmath eine Schnittstelle zur Funktion&nbsp;double sqrt( double )&nbsp;zur Verfügung, die Sie in Ihrem Programm verwenden sollten.&nbsp;Wählen Sie alle Ihre Namen nach der „Ungarischen Notation“.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
using namespace std;

int main()
{
	double dwurzel=0.0;
	cout &lt;&lt; "Geben Sie eine Gleitkommazahl &gt;= 0 ein:";
	cin &gt;&gt; dwurzel;
	cout &lt;&lt; "Die Quadratwurzel von " &lt;&lt; dwurzel &lt;&lt; " ist " &lt;&lt; sqrt( dwurzel );
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Schreiben Sie das Quadratwurzel Programm jetzt so, dass die Wurzelberechnung ohne den&nbsp;Einsatz von Bibliotheksfunktionen und nur mit dem Kontrollprimitiv Sequenz, ohne&nbsp;Selektions- und Iterationsprimitiv (d.h. ohne Schleifen und Verzweigungen) erfolgt. Hinweis: Die Quadratwurzel einer Zahl x0 lässt sich berechnen, indem sie als Grenzwert einer Folge gesehen wird: xn+1 = ( xn + a(xn)-1 ) 2-1 mit beliebigem Anfangswert a (z.B. a = x0). Für n= 0, 1, … konvergiert xn schnell gegen die Quadratwurzel von x0. In Ihrem Programm können Sie bei n = 8 abbrechen das Ergebnis ausgeben. Was bemerken Sie, wenn Sie die Quadratwurzel auf diese Art berechnen und weder Bibliotheksfunktion noch Selektions- und Iterationsprimitiv einsetzen?</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstdlib&gt;
using namespace std;

double wurzelberechnung (double dwurzel)
{
	double danfangswert=dwurzel;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	dwurzel=(dwurzel+(danfangswert/dwurzel))/2;
	return dwurzel;
}

int main()
{
	double dwurzel=0.0;
	cout &lt;&lt; "Geben Sie eine Gleitkommazahl &gt;= 0 ein:";
	cin &gt;&gt; dwurzel;
	cout &lt;&lt; "Die Quadratwurzel von " &lt;&lt; dwurzel &lt;&lt; " ist " &lt;&lt; wurzelberechnung(dwurzel);
	return 0;
}</code></pre>



<p class="wp-block-paragraph"><strong>c)</strong>&nbsp;Schreiben Sie das Quadratwurzel Programm nochmals ohne Bibliotheksfunktionen (Sie dürfen nur iostream für Ein- und Ausgabe verwenden), aber mit Selektions- und Iterationsprimitiven. Brechen Sie die Schleife ab, sobald eine frei wählbare Genauigkeit der Berechnung erreicht ist. Geben Sie die erzeilte Genauigkeit und einen Prüfwert aus.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
using namespace std;

double wurzelberechnung(double dwurzel, int igenauigkeit)
{
	double danfangswert = dwurzel;
	for (int i = 0; i &lt; igenauigkeit; i++)
	{
		 dwurzel = (dwurzel + (danfangswert / dwurzel)) / 2;
	}
	return dwurzel;
}

int main() {
	double dzahl = 0.0;
	double dwurzel = 0.0;
	int igenauigkeit = 1;
	cout &lt;&lt; "Geben Sie eine Gleitkommazahl &gt;= 0 ein:";
	cin &gt;&gt; dzahl;
	cout &lt;&lt; "Geben Sie eine Genauigkeit &gt; 0 ein:";
	cin &gt;&gt; igenauigkeit;
	dwurzel = wurzelberechnung(dzahl, igenauigkeit);
	cout &lt;&lt; "Die Quadratwurzel von " &lt;&lt; dzahl &lt;&lt; " ist " &lt;&lt; dwurzel &lt;&lt; "\n";
	cout &lt;&lt; "Die Genauigkeit betraegt: " &lt;&lt; igenauigkeit &lt;&lt; "\n";
	cout &lt;&lt; "Der Prueftwert betraegt: " &lt;&lt; dwurzel &lt;&lt; "*" &lt;&lt; dwurzel &lt;&lt; "=" &lt;&lt; (dwurzel * dwurzel) &lt;&lt; "\n";
	return 0;
}</code></pre>



<p class="wp-block-paragraph"><strong>d)</strong>&nbsp;Warum sollte man lieber die Bibliotheksfunktion verwenden?&nbsp;<strong>Gründe:</strong></p>



<ul class="wp-block-list">
<li>Die Verwendung von Funktionen aus der Standardbibliothek ermöglichen den Einsatz des Programms auf jeglichem System</li>



<li>Ergebnis ist durch Standardisierung der Bibliothek verfiziert (Fehlerfreiheit)</li>



<li>Prinzip der Wiederverwendung</li>
</ul>



<h3 class="wp-block-heading">Aufgabe 2</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Ändern Sie den Programmablaufplan (PAP) des ggT Programms (aus der Vorlesung / Hörsaalübung) so, dass der Programmablauf nach Abschluss der Berechnung und Ausgabe&nbsp;der Ergebnisse wieder zurückkehrt zur Eingabeaufforderung für die beiden Zahlen, und&nbsp;alles wieder von vorne losgeht.</p>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Schreiben Sie das Programm nach dem von Ihnen geänderten PAP um.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
using namespace std;
int main()

{
	int i1 = 0, i2 = 0, tmp = 0, n = 1;
	bool bflagend = false;
	while (bflagend == false) {
		 cout &lt;&lt; "Zwei positive ganze Zahlen eingeben: "; 		 cin &gt;&gt; i1 &gt;&gt; i2;
		 while (i1 != i2) {
			  cout &lt;&lt; "\t(" &lt;&lt; i1 &lt;&lt; "," &lt;&lt; i2 &lt;&lt; ")" &lt;&lt; endl;
			  if (i1 &lt; i2) i2 = i2 - i1;
			  else {
					tmp = i1;
					i1 = i2;
					i2 = tmp - i1;
			  }
			  ++n;
		 }
		 cout &lt;&lt; "\t(" &lt;&lt; i1 &lt;&lt; "," &lt;&lt; i2 &lt;&lt; ")" &lt;&lt; endl;
		 cout &lt;&lt; n &lt;&lt; " Schritte zum ggT\n" &lt;&lt; endl;
	}
}</code></pre>



<h3 class="wp-block-heading">Aufgabe 3</h3>



<p class="wp-block-paragraph">Schreiben Sie ein Programm, das einen Operator und zwei Operanden einliest, die &nbsp;gewünschte&nbsp;Operation durchführt und das Ergebnis anzeigt, zum Beispiel: $&gt; Operation: + 34.5 99 $&gt; Operation: * 3 8.2 $&gt; Ergebnis: 133.5 $&gt; Ergebnis: 24.6 Berücksichtigen Sie die Operatoren +, -, * und / mit den offensichtlichen Bedeutungen.&nbsp;Lesen Sie den Operator in eine string-Variable und die Operanden in double-Variablen.&nbsp;Stellen Sie mittels if fest, welche Operation ausgeführt werden soll, z.B.: if(str_opSym=&nbsp;=&#8220;+&#8220;).</p>



<pre class="wp-block-code"><code>#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
	double doperand1 = 0.0, doperand2 = 0.0;
	string soperator = "+";
	cout &lt;&lt; "Bitte zwei Operatoren und einen Operand eingeben:\n";
	cout &lt;&lt; "Summe a+b mit '+', Differenz a-b mit '-', Produkt a*b mit '*' und Quotient a/b mit '/':\n"; 	cin &gt;&gt; doperand1 &gt;&gt; doperand2 &gt;&gt; soperator;
	if (soperator == "+")
	{
		 cout &lt;&lt; "Summe aus " &lt;&lt; doperand1 &lt;&lt; "+" &lt;&lt; doperand2 &lt;&lt; "=" &lt;&lt; doperand1 + doperand2;
	}
	else
	{
		 if (soperator == "-")
		 {
			  cout &lt;&lt; "Differenz aus " &lt;&lt; doperand1 &lt;&lt; "-" &lt;&lt; doperand2 &lt;&lt; "=" &lt;&lt; doperand1 - doperand2;
		 }
		 else
		 {
			  if (soperator == "*")
			  {
					cout &lt;&lt; "Produkt aus " &lt;&lt; doperand1 &lt;&lt; "*" &lt;&lt; doperand2 &lt;&lt; "=" &lt;&lt; doperand1 * doperand2;
			  }
			  else
			  {
					if (soperator == "/")
					{
						 if (doperand2 != 0.0)
						 {
							  cout &lt;&lt; "Quotient aus " &lt;&lt; doperand1 &lt;&lt; "/" &lt;&lt; doperand2 &lt;&lt; "=" &lt;&lt; doperand1 / doperand2;
						 }
						 else
						 {
							  cout &lt;&lt; "Division durch 0 nicht erlaubt.";
						 }
					}
					else
					{
						 cout &lt;&lt; "Kein gueltiger Operator eingegeben.";
					}
			  }
		 }
	}
}</code></pre>



<h3 class="wp-block-heading">Aufgabe 4</h3>



<p class="wp-block-paragraph">Der Median einer Zahlenreihe ist definiert als die Zahl, bei der höchstens die Hälfte der Zahlen&nbsp;aus der Zahlenreihe größer und höchstens die Hälfte der Zahlen aus der Zahlenreihe kleiner ist.&nbsp;Ändern Sie den Programmteil zur Berechnung des Medians aus dem Vorlesungsbeispiel so,&nbsp;dass der Median korrekt berechnet wird.&nbsp;<strong>Hinweis:</strong>&nbsp;Bei einer geraden Anzahl von Beobachtungen gibt es kein einziges mittleres Element,&nbsp;sondern zwei. Verwenden Sie für eine gerade Anzahl von Temperaturwerten das arithmetische&nbsp;Mittel der beiden mittleren Beobachtungswerte.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

int main( )
{
	vector vTemps; // Temperaturwerte
	double temp;
	double dmedian=0.0;
	while( cin &gt;&gt; temp ) // einlesen /*&amp;&amp; temp != -274*/
	{
		 vTemps.push_back( temp ); // speichern
	}
	// arithm. Mittel
	double sum = 0;
	for( int i=0; i	{
		 sum += vTemps&#91;i];
	}
	cout &lt;&lt; "Temperaturmittel: " &lt;&lt; sum/vTemps.size() &lt;&lt; endl; // Mittelwert aller Elemente im Vektor vTemps ausgeben 	sort( vTemps.begin(), vTemps.end() ); // sortieren mit Funktion aus StdLib, Header algorithm 	if (vTemps.size() % 2 &gt; 0)
	{
		dmedian = vTemps&#91; vTemps.size()/2 ];
	}
	else
	{
		 dmedian =  (vTemps&#91; vTemps.size()/2 -1] + vTemps&#91; vTemps.size()/2 ])/2;
	}
	cout &lt;&lt; "Median: " &lt;&lt; dmedian &lt;&lt; endl;
}</code></pre>



<h3 class="wp-block-heading">Aufgabe 5</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Richten Sie einen vector ein, der die zehn Zeichenketten „null“, „eins“, „zwei“, „drei“, usw.&nbsp;bis „neun“ enthält. Verwenden Sie diesen in einem Programm, das für eine einzulesende&nbsp;Ziffer ihren entsprechenden ausgeschriebenen Wert ausgibt.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

int main()
{
	int ipointer=0;
	vector vZahlen(10);

	vZahlen&#91;0]="null";
	vZahlen&#91;1]="eins";
	vZahlen&#91;2]="zwei";
	vZahlen&#91;3]="drei";
	vZahlen&#91;4]="vier";
	vZahlen&#91;5]="fünf";
	vZahlen&#91;6]="sechs";
	vZahlen&#91;7]="sieben";
	vZahlen&#91;8]="acht";
	vZahlen&#91;9]="neun";

	cout &lt;&lt; "Bitte Ziffer eingeben:"; 	cin &gt;&gt; ipointer;
	cout &lt;&lt; vZahlen &#91; ipointer ];
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Erweitern Sie das Programm so, dass auch ausgeschriebene Ziffern wie „sieben“ als&nbsp;Eingabe möglich sind, und das Programm dann die Ziffer aus der entsprechenden Zahl –&nbsp;oder, je nach Eingabe, die ausgeschriebene Zahl aus der Ziffer – ausgibt.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

void vektorsuche(int izahl)
{
	vector vZahlen(10);

	vZahlen&#91;0] = "null";
	vZahlen&#91;1] = "eins";
	vZahlen&#91;2] = "zwei";
	vZahlen&#91;3] = "drei";
	vZahlen&#91;4] = "vier";
	vZahlen&#91;5] = "fünf";
	vZahlen&#91;6] = "sechs";
	vZahlen&#91;7] = "sieben";
	vZahlen&#91;8] = "acht";
	vZahlen&#91;9] = "neun";

	if (izahl &gt; 0 &amp;&amp; izahl &lt; 10)
	{
		 cout &lt;&lt; "Die gesuchte Zahl lautet: " &lt;&lt; vZahlen&#91;izahl];
	}
	else
	{
		 cout &lt;&lt; "Die gesuchte Zahl wurde nicht gefunden.";
	}
}

int vektorsuche(string szahl)
{
	vector vZahlen(10);

	vZahlen&#91;0] = "null";
	vZahlen&#91;1] = "eins";
	vZahlen&#91;2] = "zwei";
	vZahlen&#91;3] = "drei";
	vZahlen&#91;4] = "vier";
	vZahlen&#91;5] = "fünf";
	vZahlen&#91;6] = "sechs";
	vZahlen&#91;7] = "sieben";
	vZahlen&#91;8] = "acht";
	vZahlen&#91;9] = "neun";

	for (int i = 0; i &lt; 10; i++)
	{
		 if (vZahlen&#91;i] == szahl)
		 {
			cout &lt;&lt; "Die gesuchte Zahl lautet " &lt;&lt; i;
			return 0;
		 }
	}

	cout &lt;&lt; "Die gesuchte Zahl wurde nicht gefunden.";
}

int main()
{
	int izahl = 0;
	string szahl = "&lt;&gt;";
	cin &gt;&gt; izahl;

	if (cin)
	{
		 vektorsuche(izahl);
	}
	else
	{
		 if (!cin)
		 {
			cin.clear();
			cin &gt;&gt; szahl;
			vektorsuche(szahl);
		 }
	}
	return 0;
}</code></pre>



<h3 class="wp-block-heading">Aufgabe 6</h3>



<p class="wp-block-paragraph">Schreiben Sie ein Programm, das zuerst eine Reihe von Name-Wert Paaren der Form Barbara 22 oder Ben 17 einliest. Legen Sie von jedem Paar den Namen in einem vector namens vNames ab und den Wert in einem vector namens vScores, wobei die Positionen gleich sein sollen (d.h. wenn vNames[7]==Barbara dann auch vScores[7]==22). Beenden Sie die Eingabe durch noname 0. Stellen Sie sicher, dass jeder Name nur einmal &nbsp;vorkommt&nbsp;und beenden Sie das Programm mit einer informativen Fehlermeldung, wenn ein Name ein&nbsp;zweites Mal eingegeben wird. Geben sie die (Name, Punkte)-Paare zeilenweise aus.</p>



<pre class="wp-block-code"><code>#include &lt;vector&gt;
#include &lt;iostream&gt;
using namespace std;

int main() {
	string stmp = "&lt;&gt;";
	int itmp = 0;
	vector vNames;
	vector vScores;
	while (cin &gt;&gt; stmp &gt;&gt; itmp &amp;&amp; (stmp != "noname" || itmp != 0))
	{
		 for (int i = 0; i &lt; vNames.size(); i++)
		 {
			  if (vNames&#91;i] == stmp)
			{
					cerr &lt;&lt; "Achtung, es wurde ein Name doppelt eingegeben.\n\"" &lt;&lt; stmp &lt;&lt; "\" ist schon einmal vorhanden.\nProgramm wird nun beendet.\n";
					return 1;
			}
		 }
		 vScores.push_back(itmp);
		 vNames.push_back(stmp);
	}

	cout &lt;&lt; "Folgende Daten wurden einegegeben:\n";

	for (int i = 0; i &lt; vNames.size(); i++)
	{
		 cout &lt;&lt; vNames&#91;i] &lt;&lt; ", " &lt;&lt; vScores&#91;i] &lt;&lt; "\n";
	}
	return 0;
}</code></pre>



<h3 class="wp-block-heading">Aufgabe 7 (optional)</h3>



<p class="wp-block-paragraph">Ändern Sie das einfache Wörterbuch Programm aus der Vorlesung so, dass bei mehrfach gleichen Wörtern nicht nur die Ausgabe unterdrückt wird, sondern dass das einfache&nbsp;Wörterbuch jedes Wort nur einmal speichert und Duplikate eliminiert. Das Programm soll&nbsp;zusätzlich auch die Anzahl der Wörter insgesamt sowie die Anzahl der gefundenen Duplikate&nbsp;ausgeben. Versuchen Sie (wie immer, aber hier ganz besonders), eine möglichst elegante und&nbsp;klare Lösung zu finden.</p>



<pre class="wp-block-code"><code>#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;algorithm&gt;
using namespace std;

int main()
{
	vector  vWords;
	string temp;
	bool bdoppler = false;
	int icounter = 0;

	while (cin &gt;&gt; temp &amp;&amp; temp != "quit")
	{
		for (int i = 0; i &lt; vWords.size(); ++i)
		{
			if (temp == vWords&#91;i])
			{
				bdoppler = true;
				icounter = icounter + 1;
			}
		}

		if (bdoppler == false)
		{
			vWords.push_back(temp);
		}

	bdoppler = false;
	}

	cout &lt;&lt; "Anzahl der Woerter: " &lt;&lt; vWords.size() &lt;&lt; endl;
	cout &lt;&lt; "Anzahl der gefundenen Duplikate: " &lt;&lt; icounter &lt;&lt; endl;
	sort(vWords.begin(), vWords.end());

	for (int i = 0; i &lt; vWords.size(); ++i)
	{
		 cout &lt;&lt; vWords&#91;i] &lt;&lt; endl;
	}
}</code></pre>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-2/">Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 2)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2012/02/programmieren-algorithmen-und-datenstrukturen-1-praktikum-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 1)</title>
		<link>https://maximiliankrieg.de/2011/06/programmieren-algorithmen-und-datenstrukturen-1-praktikum-1/</link>
					<comments>https://maximiliankrieg.de/2011/06/programmieren-algorithmen-und-datenstrukturen-1-praktikum-1/#respond</comments>
		
		<dc:creator><![CDATA[Maximilian]]></dc:creator>
		<pubDate>Fri, 24 Jun 2011 05:18:00 +0000</pubDate>
				<category><![CDATA[Programmieren 1]]></category>
		<guid isPermaLink="false">https://maximiliankrieg.de/?p=1523</guid>

					<description><![CDATA[<p>Aufgabe 1 a)&#160;Installieren Sie eine C++ fähige IDE (wie Netbeans mit MinGW/msys oder Cygwin, Tutorien&#160;und Installationshilfen sind online verfügbar, z.B. das Configuring the NetBeans IDE&#160;Tutorium).&#8230;</p>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2011/06/programmieren-algorithmen-und-datenstrukturen-1-praktikum-1/">Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 1)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Aufgabe 1</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Installieren Sie eine C++ fähige IDE (wie Netbeans mit MinGW/msys oder Cygwin, Tutorien&nbsp;und Installationshilfen sind online verfügbar, z.B. das Configuring the NetBeans IDE&nbsp;Tutorium).</p>



<ol class="wp-block-list">
<li><strong>Cygwin:</strong>
<ol class="wp-block-list">
<li>Cygwin SetUp starten</li>



<li>Install from Internet auswählen.</li>



<li>Einen beliebigen Pfad geben (standard Pfad empfohlen) und mit weiter bestätigen.</li>



<li>Mit weiter bestätigen</li>



<li>Direct Connection auswählen und mit weiter bestätigen.</li>



<li>Ein Mirror auswählen, am besten einen aus Ihrer Nähe, von welchem die Dateien herunterladen werden sollen.</li>



<li>Nun sollte ein Fenster mit dem Namen Select Packages kommen.</li>



<li>Nun klickt bei dem Unterpunkt Devel auf install, alles andere bei Default lassen.(Ihr lädt euch dann auch Pakete runter, die Ihr eventuell nicht braucht, dafür könnt ihr aber Nichts falsch machen).</li>



<li>Mit weiter bestätigen.</li>



<li>Einen Kaffee holen und abwarten, bis alle Pakete runtergeladen und installiert wurden.</li>
</ol>
</li>



<li><strong>NetBeans IDE:</strong>
<ol class="wp-block-list">
<li>Installiert NetBeans IDE wie gewohnt unter Windows, indem Ihr die heruntergeladene Datei ausführt und auf weiter klickt.</li>



<li>NetBeans IDE starten.</li>



<li>Oben im Menü Tools auswählen und auf Options klicken.</li>



<li>Im neu erschienenen Fenster C/C++ auswählen.</li>



<li>Unter Tools Collection: den Button Add betätigen.</li>



<li>Im neuen Fenster unter Base Directory den Pfad zu dem bin Unterverzeichnis im Verzeichnis Cygwin auswählen. z.B. C:\cygwin\bin.</li>



<li>Alles andere erledigt NetBeans IDE für euch, bestätigt dann mit OK.</li>



<li>Nun sollten alle Pfade zu den Werkzeugen (z.B. C++ Compiler) eingetragen worden sein.</li>



<li>Bestätigt mit OK.</li>
</ol>
</li>



<li><strong>Umgebungsvariable PATH Setzen:</strong>
<ol class="wp-block-list">
<li>Links unten auf Start-Button klicken.</li>



<li>Rechtsklick auf Computer.</li>



<li>Eigenschaften auswählen.</li>



<li>Erweiterte Systemeinstellungen auswählen.</li>



<li>Den Reiter Erweitert auswählen.</li>



<li>Unten auf Umgebungsvariablen klicken.</li>



<li>PATH Variable auswählen und auf bearbeiten klicken.</li>



<li>Zu dem Wert der Variable folgendes hinzufügen ;C:\cygwin\bin (Falls cygwin\bin in diesem Pfad liegt, ansonsten müsst Ihr den einfügen, in welchem sich cygwin\bin befindet)</li>



<li>Dann könnte eure PATH-Variable so aussehen C:\Program Files (x86)\OpenVPN\bin;C:\cygwin\bin</li>



<li>Mit OK bestätigen</li>
</ol>
</li>
</ol>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Machen Sie sich mit Ihrer IDE vertraut (bei Netbeans: machen Sie die Tour, und dann im C/C++ Learning Application Trail die Tutorien Getting Started, C/C++ Projects Quick Start, und Defining your C/C++ Project’s Development Environment)</p>



<h3 class="wp-block-heading">Aufgabe 2</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Geben Sie das Hallo C++ Programm aus der Vorlesung in Ihrer IDE ein und bringen Sie es zur Ausführung.</p>



<pre class="wp-block-code"><code>/*
Hallo C++
v0.1 17102011-tlo
Gibt Hallo C++! auf der Konsole aus
*/

#include  // Präprozessor-Direktive für die I/O-Streams
 // aus der C++ Standardbibliothek (StdLib)
using namespace std; // Setze Namensbereich der StdLib als Default

//----------------------------------------------------------------

int main( ) // Alle C++ Programme starten bei int main( )
{
	cout &lt;&lt; "Hallo C++!\n"; // Ausgabe mit &lt;&lt; auf den cout Stream der StdLib
	return 0; // return Anweisung, 0 kennzeichnet erfolgreiches Ende
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Kopieren Sie jede der drei fehlerhaften Hallo C++ Programmversionen aus der Vorlesung in die IDE („copy-pasten“) und versuchen Sie, diese zur Ausführung zu bringen. Beobachten Sie, wie die IDE reagiert, identifizieren und beheben Sie jeweils die Fehler anhand der Fehlermeldungen der IDE. Denken Sie sich mindestens fünf weitere Fehler aus, die beim Eintippen des Programms hätten passieren können, geben Sie diese ein und sehen Sie sich an, wie die IDE damit umgeht.</p>



<pre class="wp-block-code"><code>// #include  vergessen

int Main( )
{
	std::cout &lt;&lt; 'Hallo C++!\n'; // Strings mit " xyz " verwenden
	Return 0; // muss return 0; heißen
}</code></pre>



<pre class="wp-block-code"><code>include  // muss #include  heißen

int main( )
{
	std::cout &lt;&lt; "Hallo C++!\n" // abschließendes ; vergessen
	return o; // muss return 0; heißen
}</code></pre>



<pre class="wp-block-code"><code>// int main() vergessen
#include  // muss  heißen
using namespace std // abschließendes ; vergessen

int main( )
{
	cout &lt; "Hallo C++!\n; // schließendes " vergessen und &lt;&lt; für Ausgabestrom
	return 0;
// schließendes } vergessen</code></pre>



<p class="wp-block-paragraph"><strong>Mögliche Fehler:</strong></p>



<ul class="wp-block-list">
<li>&lt;&lt; für Eingabe verwenden >> für Ausgabe verwenden</li>



<li>Befehle mit , beenden</li>



<li>Variablen mit falschen Typen deklarieren</li>



<li>Block mit { abschließen</li>
</ul>



<p class="wp-block-paragraph"><strong>c)</strong>&nbsp;Ändern Sie das Hallo C++ Programm, so dass es die folgenden Zeilen ausgibt:</p>



<pre class="wp-block-code"><code>Umlaut: ä ö ü Ä Ö Ü
sz-Ligatur: ß
Trema: ë ï
Roy sagt "Schön ist es, auf der Welt zu sein,
wenn die Sonne scheint für Groß und Klein".
Oberflächlich</code></pre>



<pre class="wp-block-code"><code>#include
using namespace std;

//------------------------------------------------------------------------------
int main( )
{
	cout &lt;&lt; "Umlaut: \x00E4 \x00F6 \x00FC \x00C4 \x00D6 \x00DC\n";
	cout &lt;&lt; "sz-Ligatur: \x00DF\n";
	cout &lt;&lt; "Trema: \x00EB \x00EF\n";
	cout &lt;&lt; "Roy sagt \x0022Sch\x00F6n ist es, auf der Welt zu sein,\n";
	cout &lt;&lt; "wenn die Sonne scheint f\x00FCr Gro\x00DF und Klein\x0022\n";
	cout &lt;&lt; "Oberfl\x00E4chlich\n";
	return 0;
}
</code></pre>



<p class="wp-block-paragraph"><strong>Hinweis:</strong>&nbsp;Stellen Sie die Umlaute im Quellcode als Sonderzeichen dar. Ermitteln Sie dazu die hexadezimalen Werte der Sonderzeichen in Ihrer Umgebung (am &#8222;command prompt&#8220; in Windows z.B. die &#8222;Codepage 850&#8220;). Welchen zusätzlichen Kniff benötigen Sie bei der Ausgabe des Sonderzeichens in dem Wort Oberflächlich, und warum?</p>



<h3 class="wp-block-heading">Aufgabe 3</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Schreiben Sie ein Programm, das den Benutzer auffordert, drei ganze Zahlen einzugeben, die Sie in int-Variablen namens ix, iy und iz speichern. Ihr Programm soll die drei Zahlen nun in aufsteigender Reihenfolge ausgeben (also bei Eingabe von 27, 5 und 67 soll 5, 27, 67 ausgegeben werden).</p>



<pre class="wp-block-code"><code>#include  // Einbinden der I/O-Streams aus der StdLib
using namespace std; // Standardmäßige Verwendung des Namensraumes std für Befehle

int main ()
{
	int ix=0, iy=0, iz=0; 	int minimal=0, mittel=0, maximal=0, hilfe=0;

	cout &lt;&lt; "Bitte geben Sie drei ganzzahlige Werte ein.";	cin &gt;&gt; ix &gt;&gt; iy &gt;&gt; iz;

	minimal = ix;
	mittel = iy;
	maximal = iz;

	if (minimal &gt; mittel )
	{
		hilfe = minimal;
		minimal = mittel;
		mittel = hilfe;
	}

	if (mittel &gt; maximal)
	{
		hilfe = mittel;
		mittel = maximal;
		maximal = hilfe;
		if (minimal &gt; mittel )
		{
			hilfe = minimal;
			minimal = mittel;
			mittel = hilfe;
		}
	}

	cout &lt;&lt; minimal &lt;&lt; ", " &lt;&lt; mittel &lt;&lt; ", " &lt;&lt; maximal &lt;&lt; "\n";
	return 0;
}</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Erweitern Sie Ihr Programm so, dass die Summe und das Produkt der drei Zahlen, sowie der größte und der kleinste Wert und deren Differenz und Quotient (kleiner 1) berechnen werden, und die Ergebnisse dem Benutzer mitgeteilt werden.</p>



<pre class="wp-block-code"><code>	int minimal=0, mittel=0, maximal=0, hilfe=0, summe=0, differenz=0, produkt=0,quotient=0;

	summe = minimal+mittel+maximal;
	differenz = maximal - minimal;
	produkt = minimal * mittel * maximal;

	cout &lt;&lt; minimal &lt;&lt; ", " &lt;&lt; mittel &lt;&lt; ", " &lt;&lt; maximal &lt;&lt; "\n";
	cout &lt;&lt; "Minimal: "&lt;&lt; minimal &lt;&lt; "\n";
	cout &lt;&lt; "Maximal: "&lt;&lt; maximal &lt;&lt; "\n";
	cout &lt;&lt; "Summe: "&lt;	cout &lt;&lt; "Differenz von groesstem und kleinstem Wert: " &lt;&lt; differenz &lt;&lt; "\n";
	cout &lt;&lt; "Produkt aller eingegebenen Werte: "&lt;&lt; produkt &lt;&lt; "\n";

	if (minimal != 0)
	{
		quotient = maximal / minimal;
		cout &lt;&lt; "Ganzzahliger Quotient aus groesstem und kleinstem Wert: "&lt;&lt; quotient &lt;&lt; "\n";
	}
	else
	{
		 cout &lt;&lt; "Quotient kann nicht berechnet werden.";
	}
</code></pre>



<h3 class="wp-block-heading">Aufgabe 4</h3>



<p class="wp-block-paragraph"><strong>a)</strong>&nbsp;Geben Sie das Nickname Programm aus der Vorlesung in Ihrer IDE ein und bringen Sie es zur Ausführung.</p>



<pre class="wp-block-code"><code>#include  // I/O-Streams aus der StdLib
using std::cin; // using-Deklaration für cin aus std
using std::cout; // using-Deklaration für cout aus std
using std::string; // using-Deklaration für string aus std

//----------------------------------------------------------------
int main( )
{
	string nick = "keinname"; // nick ist eine Variable vom Typ string
	int yob = "0"; // yob (year of birth) ist eine Variable von Typ int

	cout &lt;&lt; "Bitte Nickname eingeben (gefolgt von \'Enter\'): "; 	cin &gt;&gt; nick; // lies die Zeichen in nick ein
	cout &lt;&lt; "Bitte Geburtsjahr eingeben (gefolgt von \'Enter\'): "; 	cin &gt;&gt; yob; // lies die Zeichen in yob ein
	std::clog &lt;&lt; "\n\n\t" &lt;&lt; "Nick ist: " &lt;&lt; nick &lt;&lt; "\n\tYob ist: " &lt;&lt; yob &lt;&lt; "\n\n";
	return 0; // alles OK
 }</code></pre>



<p class="wp-block-paragraph"><strong>b)</strong>&nbsp;Probieren Sie das Programm aus. Geben Sie auch „unsinnige“ Werte wie ein negatives Geburtsjahr ein. Wie reagiert das Programm? Finden Sie mindestens drei Vorschläge, wie das Programm aus Benutzersicht zu verbessern wäre.&nbsp;<strong>Fehler:</strong></p>



<ul class="wp-block-list">
<li>Das Programm akzeptiert jede Eingabe, ob String oder Zahlenwert.</li>



<li>Es wird nur auf Syntax, nicht auf Semantik überprüft.</li>
</ul>



<p class="wp-block-paragraph"><strong>Vorschläge:</strong></p>



<ul class="wp-block-list">
<li>Neue Aufforderung für Jahreszahl, falls negative Werte eingegeben wurden</li>



<li>Neue Aufforderung für Jahreszahl, wenn das Jahr einen Text eingegeben bekommt</li>



<li>Hinweise auf die zu verwendenden Kriterien bzw. Inhalte geben</li>
</ul>



<p class="wp-block-paragraph"><strong>c)</strong>&nbsp;Modifizieren Sie das Nickname Programm in einer neuen Version entsprechend des folgenden Quellcodefragments:</p>



<pre class="wp-block-code"><code>
string nick = "";
string real = "";
int yob = 0;
cout &lt;&lt; "Nickname, echten Namen und Geburtsjahr eingeben: ";
cin &lt;&lt; nick &lt;&lt; real &lt;&lt; yob;
clog &lt;&lt; "\n\t" &lt;&lt; "nick: " &lt;&lt; nick;
clog &lt;&lt; "\n\t" &lt;&lt; "real: " &lt;&lt; real;
clog &lt;&lt; "\n\t" &lt;&lt; "yob: "&lt;&lt; yob;</code></pre>



<pre class="wp-block-code"><code>
#include  // I/O-Streams aus der StdLib
using std::cin; // using-Deklaration für cin aus std
using std::cout; // using-Deklaration für cout aus std
using std::string; // using-Deklaration für string aus std
using std::clog; // using-Deklaration für clog aus std

 //----------------------------------------------------------------
int main( )
{
	string nick = ""; // nick ist eine Variable vom Typ string
	string real = ""; // real ist eine Variable vom Typ string
	int yob = 0; // yob (year of birth) ist eine Variable von Typ int

	cout &lt;&lt; "Nickname, echten Namen und Geburtsjahr eingeben: \n"; 	cin &gt;&gt; nick &gt;&gt; real &gt;&gt; yob;
	clog &lt;&lt; "\n\t" &lt;&lt; "Nick: " &lt;&lt; nick;
	clog &lt;&lt; "\n\t" &lt;&lt; "Real: " &lt;&lt; real;
	clog &lt;&lt; "\n\t" &lt;&lt; "Yob: " &lt;&lt; yob;
	return 0; // alles OK
}</code></pre>



<p class="wp-block-paragraph">Probieren Sie die modifizierte Version gründlich aus. Was hat sich verbessert? Was läuft immer noch nicht vernünftig? Wie verhält sich die speziell die Zeile 5?&nbsp;<strong>Verbesserung:</strong></p>



<ul class="wp-block-list">
<li>Übersichtlicher Quelltext</li>



<li>Vorbelegung der Variablen (Initialisierung)</li>
</ul>



<p class="wp-block-paragraph"><strong>Probleme:</strong></p>



<ul class="wp-block-list">
<li>Nimmt immer noch falsche Werte an</li>
</ul>



<p class="wp-block-paragraph"><strong>Zeile 5:</strong></p>



<ul class="wp-block-list">
<li>Eingabe mehrerer Werte für mehrere Variablen</li>



<li>1:1 Zuweisung nach Reihenfolge</li>



<li>Wörter dürfen nicht mit Leerzeichen eingegeben werden</li>
</ul>



<p class="wp-block-paragraph"><strong>d)</strong>&nbsp;Programmieren Sie eine weitere Version des Nickname Programms so, dass es Spitzname, Geburtsjahr und Geburtsmonat einliest, und dass es dann das Alter in Jahren zum Semesterbeginn ausgibt. Verwenden Sie für das Alter eine double-Variable und geben Sie es ggf. mit den Nachkommastellen aus. Finden Sie mindestens drei weitere Vorschläge zur Verbesserung Ihres Programms aus Benutzersicht, nachdem Sie es grundsätzlich korrekt zum Laufen gebracht haben.</p>



<pre class="wp-block-code"><code>
 #include  // I/O-Streams aus der StdLib
 using std::cin; // using-Deklaration für cin aus std
 using std::cout; // using-Deklaration für cout aus std
 using std::string; // using-Deklaration für string aus std
 using std::clog; // using-Deklaration für clog aus std

 //----------------------------------------------------------------
 int main( )
 {
	string nick = ""; // nick ist eine Variable vom Typ string
	int yob = 0, mob = 0, yosb = 0, mosb = 0; // Variablen vom Typ int
	double alter = 0.0;

	cout &lt;&lt; "Nickname, Geburtsjahr, Geburtsmonat, Semesterjahr und Semestermonat eingeben: \n"; 	cin &gt;&gt; nick &gt;&gt; yob &gt;&gt; mob &gt;&gt; yosb &gt;&gt; mosb;

	yob = (yob * 12) + mob; // Geburtsjahr in Monate umrechnen und Geburtsmonat addieren
	yosb = (yosb * 12) + mosb; // Semesterjahr in Monate umrechnen und Semestermonat addieren
	alter = (yosb - yob)/12.0; // Zur Berechnung des Alters yosb minus yob und durch /12 in Jahre umrechnen

	clog &lt;&lt; "Alter zum Semesterbeginn: " &lt;&lt; alter;

	return 0; // alles OK
 }
</code></pre>



<p class="wp-block-paragraph"><strong>Vorschläge:</strong></p>



<ul class="wp-block-list">
<li>Hinweis, dass Monate als Zahl geschrieben werden müssen -> Sonst 0</li>



<li>Hinweis auf korrekte zu verwendende Datentypen</li>



<li>Eingabeüberprüfung bzw. Nachfrage und Neueingabe</li>
</ul>



<h3 class="wp-block-heading">Aufgabe 5 (optional)</h3>



<p class="wp-block-paragraph">Schreiben Sie ein Programm, das für die Typen bool, char, int, und double den kleinsten und den größten Wert ausgibt, der auf Ihrem System speicherbar ist.</p>



<pre class="wp-block-code"><code>#include  // Einbinden der C Standard General Utilities Library aus der StdLib
#include  // Einbinden der I/O-Streams aus der StdLib
using namespace std; // Standardmäßig alle Befehle aus der Standardbibliothek verwenden bzw. referenzieren

int main()
{
	int int_min=0;
	int int_max = 0;

	while (int_min 	{
		int_min=int_min-1;
	}
	cout &lt;&lt; "Minimum Integer:" &lt;&lt; int_min+1 &lt;&lt; "\n";  	while (int_max &gt;= 0)
	{
		int_max=int_max+1;
	}
	cout &lt;&lt; "Maximum Integer:" &lt;&lt; int_max-1 &lt;&lt; "\n";
}</code></pre>
<p>Der Beitrag <a href="https://maximiliankrieg.de/2011/06/programmieren-algorithmen-und-datenstrukturen-1-praktikum-1/">Programmieren, Algorithmen und Datenstrukturen 1 (Praktikum 1)</a> erschien zuerst auf <a href="https://maximiliankrieg.de">Maximilian Krieg</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://maximiliankrieg.de/2011/06/programmieren-algorithmen-und-datenstrukturen-1-praktikum-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
