jueves, 23 de octubre de 2014

AWP: Unterricht von 2014-10-20 Strukturen, Koordinaten-Umrechnung

Ein geometrischer Punkt in der Ebene lässt sich durch unterschiedliche Koordinatenangaben festlegen bzw. bestimmen. Mithilfe eines C++-Programms soll eine Umrechnung zwischen kartesischen und polaren Koordinaten ermöglicht werden.

Die folgende Grafik veranschaulicht den Zusammenhanf zwischen beiden Koordinatenangaben:



Ein Punkt kann entweder mit seinen Koordinaten x und y angegeben werden (kartesische Koordinaten) oder durch den Abstand zum Ursprung (= Radius) und seinen Winkel zwischen Radius und x-Koordinate (polare Koordinaten).

Für die Umrechnung gelten folgende Formeln:

Polar -> Kartesisch
x = Radius * cos(Alpha)
y = Radius * sin(Alpha)


Kartesisch -> Polar
Radius = sqrt(x*x + y*y)
Alpha = atan(y / x)

Will man im Gradmaß arbeiten, so kann man die Winkel einfach umrechnen:
Bogenmaß = Gradmaß * Pi / 180
Gradmaß = Bogenmaß * 180 / Pi

Die matematische Konstante Pi (3.14...) ist in der Headerdatei vordefiniert unter dem Namen M_Pi.



Aufgabe:
Schreiben Sie ein C++-Programm, das dem Benutzer zunächst eine Auswahlmaske folgender Form anbietet:



Berechnungen sollen wiederholt durchführbar sein solange, bis der Anwender 0 eingibt. Wenn eine ungültige Zahl (z.B. 4) ausgewählt wird, soll der Benutzer darauf hingewiesen werden.

Sobald 1 oder 2 eingegeben wird, muss das Programm zunächst die erforderlichen Daten vom Benutzer im Hauptprogramm erfragen (bei 1: Radius und Winkel, bei 2: x und y) und dann in die entsprechende Funktion verzweigen (PolarKartesisch() bei 1 und KArtesischPolar() bei 2).

Schließlich werden nach erfolgtem Funktionsaufruf die gesuchten Daten im Hauptprogramm ausgegeben.




Teilen Sie den Programmcode auf verschiedene Funktionen auf, sodass unterschiedliche Programme die Umrechnungsroutinen benutzen könnten!

Überlegen Sie sich dazu, welche Schnittstellen die Funktionen benötigen (welche Daten werden vom Hauptprogramm an das Unterprogramm geliefert, und welche Daten benötigt das Hauptprogramm). Benutzen Sie geeignete Datentypen und Funktionen ohne call by reference!



Quellcode:

Nicht so gut Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_nicht_so_gut.cpp

Gute Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_gut.cpp

Bessere Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_besser.cpp

miércoles, 22 de octubre de 2014

AWP: Unterricht von 2014-10-20 Datenstrukturen

Ein Fuhrparkunternehmer will seine Fahrzeugflotte mit maximal 250 Fahrzeugen zukünftig elektronisch verwalten. Er möchte gern von jedem Fahrzeug des Kennzeichen (FÜL - AB 1995), den Fahrzeugtyp (ob PKW oder LWK), die zu zahlende KFZ-Steuer und Versicherungsprämie, die Schadensfreiheitsrabatt-Klasse mit den zugehörigen prozentualen Wert, die jährlich gefahrenen Kilometer (für max. 15 Jahre), die getankte jählriche Kraftstoffmenge, den jährlichen Durchschnittsverbrauch jeweils fahrzeugspezifisch erfassen und verwalten.

Erstellen Sie eine geeignete Datenstruktur und definieren Sie eine geeignete Variable!



// gute Lösung

struct T_KFZ_Daten {
  char cKennzeichen[31];

  bool bFahrzeugtyp_PWK;

  float fKFZ_Steuer;

  float fVersicherungsprämie;

  int iSchadensfreiheitsrabatt_Klasse;

  int iSchadensfreiheitsprozente;

  int iGefahreneKilometer[15];

  int igetankteKraffstoffmenge[15];

  float iDurchschnittsverbrauch[15];
};

T_KFZ_Daten Fahrzeug[250];



// bessere Lösung

struct T_KFZ_Versicherung {
  float fVersicherungsprämie;

  int iSchadensfreiheitsrabatt_Klasse;

  int iSchadensfreiheitsprozente;
}

struct T_KFZ_Daten {
  char cKennzeichen[31];

  bool bFahrzeugtyp_PWK;

  float fKFZ_Steuer;

  T_KFZ_Versicherung Versicherung;

  int iGefahreneKilometer[15];

  int igetankteKraffstoffmenge[15];

  float iDurchschnittsverbrauch[15];
};

T_KFZ_Daten Fahrzeug[250];

martes, 21 de octubre de 2014

SK: Unterricht von 2014-10-17 Merkmale eines guten Redners


  • gute offene Körperhaltung (Hände nicht in der Hosentasche)
  • freie Reden (nicht von Spicker ablesen)
  • zum Publikum sprechen, Blickkontakt
  • Sichtfeld (Tafel, Flipchart, Beamer-Projektion) niht behindert.
  • seriösse Auftreten (Kleidung, Essen, Kaugummi)
  • lautes deutliches sprechen (auch kein Daueräuspern)
  • gute (Haupt-) Position als Redner (etwas Bewegung)
  • Ablenkung vermeiden (Smart-Phone, Laptop)
  • bei mehrere Vortragenden die Redezeiten festlegen.
  • publikum einbeziehen, auf Fragen vorbereitet sein (Adressatenanalyse)
  • erklären mit Anschauungsmaterial
  • keine Dauerrede, Stimme modulieren (leise, laut reden), Pausen lassen
  • Identität bewahren (man selbst sein)

lunes, 20 de octubre de 2014

AWP: Unterricht von 2014-10-17 Ziele der Datenorganisation mit Datenbanken

Unter dem Begriff Datenorganisation werden alle Verfahren zusammengefasst, die dazu dienen, Daten
  • zu strukturieren und
  • auf Datenträgern zu speichern (schreibender Zugriff) und für den lesenden Zugriff verfügbar zu halten.
Um die immer weiter anwachsende Informationsflut in den Griff zu bekommen, werden in zunehmenden Maße Datenbanken zur Verwaltung der Informationen eingesetzt.
Durch unkontrolliert wachsende Datenbestände ist in bestimmten Bereichen ein Datenchaos entstanden. Verursacht wird das Datenchaos u.a. durch die eigenständige isolierte Datenhaltung für einzelne Anwendungen.
Beispielweise kann man es in einem Betrieb vorkommen, dass Kundendaten für unterschiedliche Anwendungen jeweils neu gespeichert werden, z.B. für die Auftragsbearbeitung und die Rechnungserstellung.
Mit der Mehrfachspeicherung gleicher Informationen (Redundanz) wird Speicherplatz verschwendet und die Informationsverarbeitung verläuft nicht effizient, da eine mehrfache Datenpflege notwendig ist.

Die schwerwiegendsten Fehler, die zu Chaos in der Datenorganisation führen, können aber dadurch entstehen, dass bei Mehrfachspeicherung der Daten unterschiedliche Änderungen in den einzelnen Anwendungen vorgenommen werden. Dadurch sind die Daten nicht mehr widerspruchsfrei (Verletzung der Datenintegrität).

Zur Lösung dieser Probleme soll die integrierte Informationsverarbeitung beitragen. Sie umfasst Datenintegration und Vorgangsintegration. Datenintegration wird durch eine Datenbasis (Datenbank) erreicht, die von mehreren Anwendungen in unterschiedlichen betrieblichen Funktionsbereichen gemeinsam genutzt wird. Ziel ist, die zusammenfassende Abbildung der gesamten Organisation und ihrer Beziehungen zur Umwelt in einer einzigen Datenbasis (globales Modell). Vorgangs-, Funktions- oder Prozessintegration erfolgen durch die it-technische Verknüpfung von arbeitsteilig in verschiedenen Abteilungen abzuwickelnden Vorgängen zu Ablaufketten (z.B. Auftragsabwicklung vom Kundenauftrag bis zur Auslieferung und Bezahlung).

Di genanten Anforderungen sind idealtypisch und stehen teilweise miteinander in Konkurrenz. Weniger Redundanz wird z.B. mit geringerer Flexibilität und Effizienz erkauft.

Ziele der Datenorganisation sind::

  1. Datenunabhängigkeit
    • Unabhängigkeit vom Anwendunsprogramm: Die Daten sind anwendungsneutral gespeichert, d.h. unabhängig vom erzeugenden oder benutzenden Anwendungsprogramm (im Gegensatz zur integrierten Verarbeitung mit Dateiorganisation).
    • Unabhängigkeit der logischen von der physischen Datenorganisation: Der Benutzer muss nur die Datenstrukturen kennen. Methoden zum Suchen, Ändern, Einfügen und Löschen von Datensätzen werden vom Datenbankverwaltungssystem zur Verfügung gestellt.
    • Physische Datenunabhängigkeit: Das Datenbankverwaltungssystem steuert und überwacht (im Zusammenspiel mit dem Betriebssystem) die peripheren Geräte, blockt bzw. entblockt Sätze, kontrolliert Überlaufbereiche, belegt Speicherräume oder gibt sie frei usw.
  2. Benutzerfreundlichkeit
    • Leicht zu erlernenden Benutzersprachen (-> SQL) ermöglichen sowohl dem professionellen Benutzer (Systementwickler, Programmierer) als auch dem Endbenutzer eine einfache Handhabung der Daten. Die Benutzersprachen sollten durch grafische Bedienoberflächen unterstützt werden (GUI).
  3. Merhfachzugriff
    • Jeder, der autorisiert ist, darf im Mehrbenutzerbetrieb zu jeder Zeit auf die gespeicherten Daten zugreifen.
  4. Flexibilität
    • Die Daten müssen in beliebiger Form verknüpfbar sein (mehrdimensionaler Zugriff, Vielfachzugriff). Sie müssen sowohl den fortlaufenden (sequenzieller) als auch den wahlfreien Zugriff ermöglichen.
  5. Effizienz
    • Die Zeiten für die Abfrage und für die Verarbeitung müssen kurz sein, ebenso für Änderungen und Ergänzungen des Datenbestandes.
  6. Datenschutz
    • Die Daten sind vor unbefugtem Zugriff (Missbrauch) zu schützen.
    • Ist der Teilnehmer überhaupt zugriffsberechtigt?
    • Ist der Teilnehmer nur zu bestimmten Daten zugriffsberechtigt?
    • Ist der Teilnehmer nur zu Abfragen oder auch zu Änderungen berechtigt?
  7. Datensicherheit
    • Die Daten müssen gegen Programmfehler und Hardware-Ausfälle gesichert sein. Das Datenbanksystem soll nach Störungsfällen den korrekten Zustand wiederherstellen (Recovery).
  8. Datenintegrität
    • Die Daten müssen vollständig, korrekt und widerspruchsfrei sein. Daten, die redundant gespeichert sind, müssen dasselbe aussagen (Datenkonsistenz). Die Forderung nach Datensicherheit wird gelegenlicht in die Datenintegrität einbezogen. Weitere Integritätsregeln können sein: Wertebereichsbedingungen (z.B. eine deutsche Postleitzahl hat genau fünf Zeichen) oder sich aus der Datenbanklogik ergebende Bedingungen (z.B. ein Kunde muss mindestens 18 Jahre alt sein). Auch muss jeder Wert eines Fremdschlüssels in einem verküpften Primärschlüssel auch als Wert im entsprechenden Primärschlüssel vorkommen (-> referentielle Integrität).
  9. Redundanzfreiheit
    • Jede Information sollte möglichst nur einmal gespeichert werden, z.B. die Kundenanschrift nicht gleichzeitig bei der Auftragsbearbeitung und die Rechnungserstellung, sondern nur einmal. Wobei alle Abteilungen, im Beispiel die Auftragsbearbeitung, die Fakturierung und die Debitorenbuchhaltung Zugriff auf die Kundenadresse haben.
    • Die genannten Anforderungen sind idealtypisch und stehen teilweise miteinander in Konkurrenz. Weniger Redundanz wird z.B. mit geringerer Flexibilität und Effizienz erkauft.

domingo, 19 de octubre de 2014

AWP: Unterricht von 2014-10-17 Grundlagen Datenbanken

Ein Datenbankmodell ist die theoretische Grundlage für eine Datenbank und legt fest, auf welche Art und Weise die Daten in dem Datenbanksystem gespeichert und bearbeitet werden können.
Ein Datenbankmodell von heute kann sehr komplex werden, da immer mehr Informationen in einem Datenbankmodell abgebildet und modelliert werden müssen.

Das hierarchische Datenbankmodell ist das älteste logische Datenbankmodell, es bildet die reale Welt durch eine hierarchische Baumstruktur ab.
Jeder Satz (Record) hat also genau einen Vorgänger, mit Ausnahme genau eines Satzes, nämlich der Wurzel der so entstehenden Baumstruktur. Das hierarchische Modell ist im Bereich der Datenbanksysteme heute weitgehend von anderen Datenbankmodellen abgelöst worden.

Das nächste Datenbankmodell ist das Netzwerk-Modell.
Es fordert keine strenge Hierarchie, d.h. ein Datensatz kann mehrere Vorgänger haben.
Auch können mehrere Datensätze an oberster Stelle stehen. Es existieren meist unterschiedliche Suchwege, um zu einem bestimmten Datensatz zu kommen.



Das relationale Datenbankmodell schaffte in den 1990er einen technischen Durchbruch.
eine relationale Datenbank kann man sich als eine Sammlung von Tabellen (den Relationalen) vorstellen, in welchen Datensätze abgespeichert sind.
Etwa 90% der eingesetzten Datenbanken basieren auf dem relationalen Datenbankmodell.



Mit dem Aufkommen objektorientierter Programmiersprachen werden vermehrt objektrelationale und objektorientierte Datenbanken eingesetzt. Diese Datenmodelle verfolgen den Ansatz, Daten zusammen mit ihren Funktionen in einem Objekt zu Speichern.
Das Datenmodell basiert auf den Paradigmen der objektorientierten Programmierung und im Einzelnen der jeweiligen Programmiersprache, die zum Einsatz kommt (z.B. C++, Java oder C#).
Dieses Vorgehen hat Vorteile gegenüber dem relationalen Entwurf, wenn man komplexe Datenobjekte speichern möchte, die nur schwer auf die flachen relationalen Tabellenstrukturen abgebildet werden können.
Objektdatenbanken haben jedoch noch immer Nachteile gegenüber relationalen Datenbanken bei der Verarbeitung großer Datenmengen. Dies ist beispielweise durch Zugriffspfade zu Objekten über mehrere Pfadarten (bspw. Vererbung und Assoziation) verursacht.

Wenn z.B. im Internet sehr große Datenmengen verarbeitet werden müssen werden auch so gennante NoSQL-Datenbanken eingesetzt. Hier unterscheidet man z.B. Key Value Stores-, Spalten-, Dokumentorientierte- und Graphdatenbanken.

AWP: Unterricht von 2014-10-17 Datenstrukturen und Speicherbelegung

Für fünf Sportler sollen in einem Speerwurf-Wettbewerb die Daten erfasst und ausgewertet werden. Wie sehen Datendefinition und Speicherbelegung aus?

struct T_Wurf {
  char cName[16]; // 16 Byte
  int aiSpeer[3]; // 4 Byte * 3 = 12 Byte
}

T_Wurf Sportler[5];


jueves, 16 de octubre de 2014

VNS Praxis: Unterricht von 2014-10-16 Serverbasiertes Netzwerk

Serverbasiertes Netzwerk im Versicherungsbüro

Nachdem das Netzwerk im Versicerungsbüro "Universal & Sicher" erfolgreich als Peer-to-Peer-Netz gelaufen ist, soll es zu einem Client-Server-Netzwerk umstrukturiert werden. Der steigende administrative Aufwand und neue Mitarbeiter machen diesen Schritt erforderlich.

Um eine einheitliche Betriebsystemplattform zu haben, entscheidet sich die Firmenleitung für das Serverbetriebssystem Windows 8. Da der Kunde mit Ihnen sehr zufrieden war, sollen Sie nun auch die Planung und installation der Client-Server-Umgebung realisieren.

Aufgabe:

In gesprächen mit dem Kunden werden die zufünftigen Aufgaben geklärt.

Beschreiben Sie die Aufgaben und Funktionen, die der Server im Netz übernehmen soll und definieren Sie zu realisierenden Funktionen im Client-Server-Netz.

Grundlage dafür ist die existierende Dokumentation Zum Peer-to-Peer-Netzwerk.

Definieren Sie daraus den neuen Soll-Zustand basierend auf dem bereits vorhandenen.



martes, 14 de octubre de 2014

AWP: Unterricht von 2014-10-13 Würfelspiel

Würfeln war zu allen Zeiten ein beliebtes Spiel. Simulieren Sie mit Holfe eines Programms das 10-malige Werfen eines Würfels durch einen Spieler. Geben Sie das Ergebnis und die Häufigkeitsverteilung der geworfenen Zahlen aus.


  1. Folgende Vorgehensweise kann Ihnen bei der Implementierung helfen:
    1. Legen Sie geeignete Variablen zum Verwalten der gezogenen Zahlen und der ermittelten Häufigkeiten an.
    2. "Würfeln" Sie 10 Zufallszahlen.
    3. Geben Sie die gezogenen Zahlen aus.
    4. Ermitteln Sie die Häufigkeit des keweiligen Auftretens der Augenzahlen von 1 bis 6.
    5. Geben Sie diese Häufigkeiten aus.
    6. Erweitern Sie das Programm derart, dass nicht nur ein Spieler beteiligt ist, sondern mehrere Spieler mitspielen.
  2. Überlegen Sie sich, wie Sie das Programm erweitern müssten, um auch die Namen und die Adressen der Spieler verwalten zu können.

Hinweise:
  • Programmieren Sie so, dass eine Änderung der Spielerzahl und der Wurfzahl pro Spieler möglichst wenig Aufwand bedeutet.
  • Das Layout kann sich an untenstehender Abbildung orientieren. Es ist ein Testfall für 8 Spielern mit je 10 Würfen abgebildet.
  • Für die Generierung der Zufallszahlen können Sie die Funktionen randomize() und rand() einsetzen.




Übungen:

1. Legen Sie eine geeignete Variable zum Verwalten der gezogenen Zahlen an!

int aiValues[10];

2. Würfeln Sie 10 Zufallszahlen!

for ( int k = 0; k < 10; k++) {
  aiValue[k] = rand() % 6 + 1;
}

3. Ermitteln Sie die Häufigkeitsverteilung der gezogenen Zahlen!

int aiTimes[6];

for (int k = 0; k < 10; k++) {
  aiTimes[aiValues[k] - 1] ++;
}

4. Erweitern Sie das Programm, so dass verschiedene Spieler verwaltet werden können!

2014.10.15

5. Die Namen der beteiligten Spieler sollen verwaltbar sein!

der Name ist keine int-Info, also nicht wie bisher im Feld verwaltbar, also brauchen wir eine Datenstruktur die mehrere verschiedene Datentypen verwalten kann

struct StrukturtypName {
  Datentyp StrukturelementName;
  Datentyp StrukturelementName;
};

struct T_Wuerfeln {
  char cName[20];
  int aiZehnMalZufall[10];
};

6. Definieren Sie eine Variable für einen einzelnen Spieler!

T_Wuerfeln Spieler;

7. Lesen Sie den Namen des Spielers ein!

cin >> Spieler.cName;

8. Speichern Sie die gewürfelten Zahlen des Spielers!

for(int i = 0; i < 10; i++) {
  Spieler.aiZehnMalZufall[i] = rand() % 6 +1;
}

9. Zeigen Sie den Namen und die Würfelergebnisse an!

cout << Spieler.cName << ": ";
for(int i = 0; i < 10; i++) {
  cout << Spieler.aiZehnMalZufall[i] << " ";
}

10. Definieren Sie eine Variable für mehrere Spieler (z.B. 8)!

T_Wuerfeln Spieler[8];

11. Lesen Sie die Namen der Spieler ein!

for(int i = 0; i < 8; i++) {
  cin >> Spieler[i].cName;
}

12. Speichern Sie alle gewürfelten Zahlen aller Spieler!

for(int spnr = 0; spnr < 8; spnr++) {
  for(int i = 0; i < 10; i++) {
    Spieler[spnr].aiZehnMalZufall[i] = rand() % 6 + 1;
  }
}

13. Zeigen Sie alle Namen und alle Würfelergebnisse an!

14. Ermitteln Sie die gesamte Häufigkeitsverteilung!

Welche Änderungen sind zue Speicherung der Häufigkeitsverteilung jedes einzelnen Spielers nötig?



Quellcode:

Würfelspiel für 1 Spieler: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-13/Wuerfelspiel_1_Spieler_besser.cpp

Würfelspiel für mehrere Spieler: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-14/Wuerfelspiel.cpp

Würfelspiel für 1 Spieler mit Name: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-15/Wuerfelspiel_1_Spieler_mit_name.cpp

Würfelspiel für mehrere Spieler mit Namen: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-15/Wuerfelspiel_mit_Name.cpp

Würfelspiel für mehrere Spieler mit Namen und persönliche Häufigkeit: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-16/Wuerfelspiel_mit_Name_und_persoenliche_Haeufigkeiten.cpp

BWP: Unterricht von 2014-10-14 Der Markt. Marktformen

Der Markt
ist der Ort an dem Angebot und Nachfrage zusammentreffen.


Unterscheidungsarten:
  • Nach gehandelten gütern  z.B. Waffenmarkt, Obstmarkt
  • Nach Ort des geschehens  z.B. Online-Shops, einzelhandel
  • Nach der Zeit des Marktes  z.B. Wochenmarkt, Weihnachtsmarkt, öffnungszeiten
  • Nach der Art der Kommunikation  z.B. Fachhandel, Versteigerungen
  • Nach der Anzahl der Teilnehmer  zB. Börse, großhandel 

Marktformen

Der Lebensmittelhändler in einer Großstatd, die Mineralölgesellschaften und die Deutsche Bahn AG haben es mit vollkommenen unterschiedlichen Marktgegebenheiten zu tun. Während sich der Einzelhändler mit einer Konkurrenz auseinandersetzen muss, haben die mineralölgesellschaften und die Bahn nur mit einer eingeschränkten Konkurrenz zu tun.

Auf eigenen Märkten gibt es für bestimmte Güter und dienstleistungen nur einen Anbieter, aber viele Nachfrager. Auch die Bahn AG ist ein Alleinanbieter. Dieses Recht beruht auf einen Gesetz und deshalb braucht die Bahn AG keinen Wettwerber zu fürchten. Sie besitzt auf diesem Gebiet eine Monopolstellung [monos (griechisch) = allein, eins]. Man spricht von einem Angebotsmonopol. Marktbeherrschung gibt es auch auf der Nachfragerseite. Liegt die gesamte Nachfrage nur in einer Hand, so hat man es mit einem Nachfragemonopol zu tun.
Kaum zu finden in der Praxis sind zweiseitige Monopole. Von einem beschränkten Angebots- bzw. Nachfragemonopol spricht man bei nur einem Anbieter bzw. Nachfrager, dem wenige Nachfrager bzw. Anbieter gegenüberstehen.

Die Oligopolitische Konkurrenz zeigt sich in der Regel auf der Angebotsseite. Diese Situation haben wir in der Bundesrepublik z.B. auf dem Mineralölmarkt. Dort bieten wenige Ölgesellschaften vielen Autofahrern Benzin an.
Die Marktform des Nachfrageoligopols liegt vor, wenn z.B. wenige Molkereien bei einer großen Zahl von Landwirten nachfragt.
Das zweiseitige Oligopol [oligos (griechisch) = wenige] findet man z.B. wenn wenige Werften Schiffe für wenigen Reedereien (Schiffsbetreiber) herstellen.
Die vollständige Konkurrenz auch Polypol [polos (griechisch) = viele] genannt sieht man z.B. im Bereich des Einzelhandels, vor allem in größeren Städten.


Fertigen Sie eine Tabelle wie nachstehend an und geben Sie die jeweiligen Fachbegriffe zusammen mit einem Beispiel an den Schnittpunkten an.




Aufgaben zum Thema "Marktformen"

1. Fertigen Sie eine Tabelle mit 3 Spalten an und ergänzen Sie die fehlenden Einträge!

lunes, 13 de octubre de 2014

AWP Unterricht von 2014-10-13 Wiederholung Arrays

Übungen

Füllen Sie das abgebildete, zuvor leere, Feld mit den Inhalten möglichst effektiv!


| 2 | 4 | 6 | 8 | 10 | 12 | 14 |

// Variablendefinition
int aiN[7];

// Feldelemente mit geraden Zahlen beschreiben
for (int k = 0; k < 7; k++) {
  aiN[k] = (k + 1) * 2;
}

Füllen Sie das abgebildete, zuvor leere, Feld mit den Inhalten möglichst effektiv!


|  1  |  3  |  5  |  7  |  9  |
| 11 | 13 | 15 | 17 | 19 |
| 21 | 23 | 25 | 27 | 29 |

// Variablendefinition
int aiN[3][5];

// Feldelemente mit ungeraden Zahlen beschreiben
for (int k = 0; k < 3; k++) {
  for (int j = 0; j < 5; j++) {
    aiN[k][j] = 10*k + 2*J + 1;
  }
}

sábado, 21 de junio de 2014

SK: 6 Tarifvertrag

Tarifverträge sind Ergebnis von Verhandlungen zwischen den Verbänden der Arbeitgeber in den einzelnen Wirtschaftszweigen oder Berufen und den Entsprechenden Gewerkschaften. (Zu diesen Verhandlungen mehr im folgenden Abschnitt).

Tarifautonomie, Tarifpartner

Das Recht, sich in Gewerkschaften zusammenzuschließen, haben sich die Arbeitnehmer vor fast 150 Jahren erkämpft. Sie wollten verhindern, dass die Firmen die einzelnen Arbeiter gegeneinander ausspielen und so den Lohn drücken können. Zumindest in Zeiten der Arbeitslosigkeit findet sich immer jemand; der bereit ist, auch für weniger Geld zu arbeiten.
In der Bundesrepublik besteht Tarifautonomie: Arbeitgeberverbände und Gewerkschaften handeln die Arbeitsbedingungen ohne Eingreifen des Staates aus.
Die von den Tarifpartnern (so der offizielle Name für Arbeitgeberverbände und Gewerkschaften) ausgehandelten Tarife gelten in den beteiligten Unternehmen unabhängig davon, ob sie der einzelne Arbeitnehmer oder Arbeitgeber für gut hält. Sie gelten beinahe wie ein Gesetz. Sie
  • stellen einen Interessenausgleich zwischen Arbeitgeber und arbeitnehmer her,
  • sichern den Arbeitsfrieden im Betrieb und
  • sind eine verlässliche Basis für Arbeitsverträge.

Tarifvertrag = Kompromiss

Gewerkschaften fordern z.B.
  • kürzere Arbeitszeit
  • Lohnerhohungen
  • Sonderzahlungen für Beschäftigte in den unteren Tarifgruppen
  • Zuschüsse der Arbeitgeber zur Privaten Altersvorsorge

Arbeitgeberverbände fordern z.B.:
  • längere Arbeitszeit bei gleichem Lohn
  • Verzicht auf Überstundenzuschläge
  • flexiblere Arbeitszeitregelungen
  • Öffnungsklauseln

Manteltarifvertraf

Regelt Arbeitsbedingungen, Arbeitszeit, Überstunden, Urlaub, Kündigung usw.
Meist 3-5 Jahre gültig.

Lohn- und Gehaltstarifvertrag

Regelt Höhe von Lohn (bzw. Gehalt) für die einzelnen Lohngruppen.
Meist 1-2 Jahre gültig.
Hier oder im Lohnrahmentarifvertrag wird auch die Zuordnung der Tätigkeiten zu den Lohngruppen geregelt.

Risiken von Streik und Aussperrung

Die Gewerkschaft will mit dem Streik den Betrieben nicht dauerhaft schaden, denn Arbeit gibt es nur, wenn die Arbeitsplätze Bestand haben. Dies ist ein Grund für gewerkschaftliche Taktik der Schwerpunktstreiks: Bestreikt werden nur bestimmte, wirtschaftlich gesunde Firmen.
Für einen langen, flächendeckenden Streik reicht zudem die Streikkasse nicht. Die Gewerkschaft muss sich darum überlegen, ob sie einen Streik durchsteht oder ob sie sich lieber mit den Arbeitgebern ohne Streik einigt. Die Arbeitgeber wiederum können sich mit einer Aussperrung selbst schaden, weil ihnen Geschäfte und damit Erlöse entgehen.
Beide Seiten sehen diese Risiken. Darum sind lange Streiks in Deutschland die Ausnahme. Ohnehin sind sie nur in den Branchen möglich, in denen viele Arbeitnehmer gewerkschaftlich organisiert sind.

SK: 5 Tarifauseinandersetzungen

Machtmittel bei Tarifauseinandersetzungen

19. Jh.
Entwicklung: Industrialisierung

Ende 19. Jh.
Einigkeit und Organisation der Arbeitnehmer:

Akzeptanz: gesetzliche Regelung
Häufiges Problem:
Streikender reichen nicht sehr lang (Schwächung der Arbeitnehmer).

20. Jh.
Aussperrung in Betrieben, die nicht gestreikt werden, aber mangels Zulieferung nicht produzieren können.
Schwerpunktstreiks in Zulieferbetrieben diejenigen ganze Branchen lahm (wenig Streikgelder, langes Durchhaltervermögen bei Arbeitskampf, zusätzliches Machtmittel).

lunes, 9 de junio de 2014

SK: 4 Berufliche Bildungsweg


Gestufter Ein- und Ausstieg

Die Berufliche Oberschule führt geeignete Schülerinnen und Schüler mit ganz unterschiedlicher "Bildungskarriere" passgenau zum persönlichen Ziel:

Gestufter Einstieg
  • Ohne Berufsausbildung erfolgt der Eintritt in die 11. Klasse.
  • Mit einschlägiger Berufsausbildung oder entsprechender Berufserfahrung erfolgt der Eintritt in die 12. Klasse.
Gestufter Ausstieg
  • Fachabitur nach der 12. Klasse.
  • Abitur (fachgebunden) nach der 13. Klasse.
    • Für den Aufstieg in die 13. Klasse ist eine abgeschlossene Berufsausbildung oder
    • ein Notendurchschnitt von 2,8 im Fachabiturzeugnis notwendig.
  • Abitur (allgemein) nach der 13. Klasse.
    • Bei zusätzlichem Nachweis von Kenntnissen in einer zweiten Fremdsprache - zum Beispiel durch freiwilligen Zusatzunterricht an der Beruflichen Oberschule.

Brückenangebote, individuelle Förderung

Die Berufliche Oberschule bereitet Schülerinnen und Schüler mit unterschiedlicher schulischer und beruflicher Vorbildung auf ein späteres Studium vor.

Für diejenigen, die beim Einstieg in die Berufliche Oberschule punktuelle Bildungsdefizite haben, stehen verschiedene Brückenangebote und Fördermaßnahmen zur Verfügung. damit können die betroffenen Schülerinnen und Schüler frühzeitig individuell unterstützt werden.


Vor Eintritt in die Berufliche Oberschule werden Vorkurse (Teilzeit) und Vorklassen (Vollzeit, auch zur Nachholung des mittleren Schulabschlusses) angeboten (vgl. S.10 und 11).

Bis zum Ende der Probezeit in der 11. Klasse wird Intensiv klassenübergreifender Förderunterricht in einzelnen Fächern angeboten.

Zur Intensivierung des Unterrichts in den Fächern mit Abschlussprüfung kann in allen Jahrgangsstufen zusätzlicher Ergänzungsunterricht eingerichtet werden.

An vielen Schulen werden die neu eingetretenen Schülerinnen und Schüler durch Tutoren unterstützt.

An allen Schulen stehen Beratungslehrkräfte zur Verfügung als Ansprechpartner bei Fragen, die das richtige Lernen und die weitere Schullaufbahn betreffen.


Mit Berufsausbildung:

  • Mittlerer Schulabschluss mit einem Notendurchschnitt von 3,5 in den Fächern Deutsch, englisch und Mathematik oder
  • Erlaubnis zum Vorrücken in die 11. Klasse des Gymnasiums oder
  • Abschluss von Vorklasse oder Vorkurs mit mindestents Note 4 in allen Fächern oder
  • Mindestens Notendurchschnitt von 3,5 in einer Festellungsprüfung in den Fächern Deutsch, Englisch und Mathematik

Vorkurs und Vorklasse

VORKURS FOS (OHNE BERUFSAUSBILDUNG)
Für wen?
Schülerinnen und Schüler der
  • Hauptschule (M-Zug)
  • Wirtschaftsschule (H-Zweig / 2-stufig)

Was?
Unterricht in Deutsch, Englisch, Mathematik je 2 Stunden pro Woche

Wann?
  • 2. Halbjahr der 10. Klasse
  • nachmittags oder samstags

Ziel
Heranführung an das Niveau der 11. Klasse.

VORKLASSE BOS (NACH BERUFSAUSBILDUNG)
Für wen?
Absolventinnen und Absolventen der
  • Hauptschule (ohne mittleren Schulabschluss nur mit bestandener Aufnahmeprüfung in Deutsch, Englisch, Mathematik)
  • Wirtschaftsschule (H-Zweig / 2-stufig)

Was?
  • intensiver Unterricht in Deutsch, Englisch, Mathematik
  • Grundlagen in weiteren Fächern

Wann?
  • Schuljahr vor Eintritt in die Berufsoberschule
  • Vollzeitunterricht (36 Wochenstunden)

Ziel
  • Umfassende Erarbeitung der wesentlichen Grundlagen für die 12. Klasse
  • Erwerb des mittleren Schulabschlusses möglich
  • Nachweis der Eignung für die 12. Klasse möglich, wenn in allen Fächern mindestens die Note 4 erreicht wird

VORKURS BOS (NACH BERUFSAUSBILDUNG)
Für wen?
Schülerinnen und Schüler mit mittlerem Schulabschluss auch vor abschluss der Berufsausbildung

Was?
Unterricht in Deutsch, Englisch, Mathematik

Wann
  • Schuljahr vor Eintritt in die 12. Klasse mit je 2 Stunden pro Woche und Fach bzw.
  • Halbjahr vor Eintritt mit je 4 Stunde pro Woche und Fach
  • abends und / oder samstags

Ziel
  • Auffrischung der Kenntnisse des mittleren Schulabschlusses für die 12. Klasse
  • Nachweis der Eignung für die 12. Klasse möglich, wenn in allen Fächern mindestens die Note 4 erreicht wird

Abschlussprüfungen


Fachabitur und Abitur der Beruflichen Oberschule werden in ganz Deutschland anerkannt.

Studienberechtigungen mit fachgebundener Hochschulreife

Die fachgebundene Hochschulreife berechtigt in ganz Deutschland zum Studium in Fachrichtungen, die inhaltlich der an der Beruflichen Oberschule gewählten Ausbildungsrichtung entsprechen.

Wichtigsten Studiengänge und Fachrichtungen, die an Bayerischen Universitäten belegt werden können (Technik):
  • Architektur
  • Biomedizin
  • Brauwesen und Getränketechnologie
  • Chemie
  • Geographie
  • Informatik einschließlich Wirtschaftsinformatik
  • Ingenieurwissenschaften einschließlich Wirtschaftsingenieurwesen
  • Landschaftsarchitektur und Landschaftsplanung
  • Mathematik einschließlich Wirtschaftsmathematik
  • Physik
  • Statistik
  • Technik und Technologiewissenschaft
  • Lehramt an Grundschulen / Hauptschulen
  • Lehramt an beruflichen Schulen in einer Facherverbindung mit Bautechnik, Elektrotechnik und Informationstechnik, Metalltechnik oder Ernährung- und Hauswirtschaftswissenschaft
  • Lehramt an Realschulen in den Fächern
  • Mathematik / Physik / Chemie / Informatik
  • Lehramt an Gymnasien in den Fächern Mathematik / Physik / Informatik

miércoles, 4 de junio de 2014

SK: 3 Kündigung eines Ausbildungsvertrags

Möglichkeiten:


  1. Beiderseitiges Einvernehmen, Während Probezeit.
  2. Fristlose Kündigung.
    • Von Ausbilder aus
      • Strafbarer Handlungen des Lehrlings.
      • Ausbildung Maßnahme.
    • Von Azubis aus
      • Anstiftung zu gesetzeswidrigen Benehmen durch Ausbilder.
      • Misshandlung.
    • Die einer Kündigung zugrundeliegenden Tatsachen dürfen dem zur Kündigung Berechtigten nicht länger als zwei Wochen bekannt sein.

SK: 2 Berufliche Bildung

Berufliche Bildung ist eine öffentliches Anliegen.
Grund:

  • Verbessert Konkurrenzfähigkeit der Wirtschaft.
  • Verringert Arbeitsplatzrisiko.
  • Verringert gesellschaftlichen Unterschiede und damit Konflikte.
  • Höherer verdienst -> mehr Steuern + Abgaben -> besser Infrastruktur.
  • Verbessert berufliche Aufstiegschancen.


Eine breite angelegte Ausbildung erleichtert einem späteren Arbeitsplatzwechsel oder eine Umschulung.

martes, 3 de junio de 2014

SK: 1 Berufliche Bildung

Welche bedeutung hat die berufliche Bildung?

1. Bedeutung der beruflichen Bildung

Eine gute Ausbildung ist zur sicherung des Lebensunterhalts notwendig. Das fachliche Wissen und Können steigert den persönlichen Arbeitserfolg, lässt den Ablauf und den Sinnzusammenhang der Arbeit deutlicher erkennen. Dies ist eine der Voraussetzungen für die Übertragung einer verantwortungsvollen, mit größerem Entscheidungsspielraum verbundenen Tätigkeit. Dadurch gewinnt der Einzelne neben Freude und Interesse an seiner Arbeit auch Selbsvertrauen.

Die heutige Industriegesellschaft hat einen hohen Bedarf an gelernten Fachkräften, die durch qualifizierte und zuverlässige Arbeit eine leistungsfähige Volkswirtschaft erst ermöglichen. Im Zuge der Rationalisierung und Technisierung der Arbeitswelt nimmt die Bedeutung der Berufsausbildung zu, denn immer weniger Arbeitsplätze ermöglichen den Einsatz ungelernter Arbeiter. Für die Leistungsfähigkeit einer Volkswirtschaft ist deshalb die solide Ausbildung ihrer Arbeitskräfte von entscheidender Bedeutung.

Doch Ausbildung alleine genügt nicht. Der Weg über die "Berufliche Bildung" strebt das sichtbare Ziel der beruflichen Qualifikation an. Aber über das berufliche Interesse hinaus muss dem Auszubildenden ermöglicht werden, sich umfassend zu informieren, sich umzusehen, Wesentliches zu erkennen - sich zu bilden.

Bildung ist nicht eine Frage der Wissensfülle (wie viel Wissen besitze ich? welche Fähigkeiten habe ich?), sondern die Fähigkeit, dieses Wissen auch verständnisvoll und verantwortungsbewusst einzusetzen. So muss z.B. ein Kfz-Mechaniker nicht nur fachlich einwandfrei wissen, wie er die Bremsanlage eines Autos instand setzt - er muss sich dabei auch der Verantwortung für die Sicherheit der Fahrzeuginsassen bewusst sein und entsprechend sorgfältig arbeiten. Er muss nicht nur den Ölwechsel fachgerecht ausführen, sondern auch das Altöl umweltgerecht entsorgen.

Gebildete und verantwortungsvolle Menschen sind auch in der Lage, unser Gemeinwesen mitzutragen und demokratische Verantwortung zu übernehmen. Bildung kommt somit dem menschlichen Zusammenleben zu Gute.

Die berufliche Bildung ist deshalb nicht einseitig ausgerichtet auf Ausbildung, sondern will in Zusammenarbeit von Schule und Betrieb bildend und erziehen wirken. In der Sprache der Bayerischen Verfassung Art. 131, Abs. 1 heißt das:
Die Schulen sollen nicht nur Wissen und Können vermitteln, sondern auch Herz und Charakter bilden.
In der Sprache des Berufsbildungsgesetzes Art 6, Ziffer 1 und 5 heißt das:
Der Ausbildende hat dafür zu sorgen, dass dem Auszubildenden die Fertigkeiten und Kenntnisse vermittelt werden ..., dafür zu sorgen, dass der Auszubildende charakterlich gefördert ... wird.

2. Das Duale System - Organisationsform der Beruflichen Bildung

Die Berufsschule und die Ausbildungsbetriebe erfüllen in dem "Dualen System" der Berufsausbildung den gemeinsamen Bildungsauftrag (dual = eine Zweiheit bildend). Beide dienen jeweils auf ihre Weise mit unterschiedlichen Schwerpunkten der Ausbildung und der Bildung. Während im Betrieb die Beruflichen Kenntnisse und Fertigkeiten erworben werden, betont die Berufsschule die fachtheoretischen Kenntnisse und Einsichten in Verbindung mit den Erfahrungen aus der Berufspraxis. Zusätzlich erweitert sie die Allgemeinbildung.

Das duale System der Berufsausbildung
Unterricht in der Berufsschule und Betriebliche Ausbildung sind aufeinander abgestimmt.

Der Auszubildende soll befähigt werden, die Zusammenhänge und Grundprinzipien zu erkennen und damit selbständig Sachverhalte zu erarbeiten und zu verstehen. So kann er im schnellen Wandel der Zeit bestehen.

domingo, 18 de mayo de 2014

AWP: 17 Kopf- und Fußgesteuerte Schleifen in C++

Die kopfgesteuerte Wiederholung: "while"

While (Bedingung) {
    Anweisung1;
    Anweisung2;
    Anweisung3;
}

Die Überprüfung der Eintrittsbedingung findet am Kopf der Schleife statt!

Bei der kopfgesteuerten Wiederholung wird vor Eintritt in die Schleife geprüft, ob eine Eintrittsbedingung erfüllt ist (also der entsprechende Ausdruck einen Wert ungleich 0 hat). Ist dies der Fall, so werden die folgenden Anweisungen ausgeführt. Anschließend wird die Bedingung erneut geprüft. Sobald der Wert des Bedingungsausdrucks den Wert 0 hat, wird der Programmflus an der nächsten Anweisung nach der Schleife fortgesetzt.

Die kopfgesteuerte Schleife wird entweder 1 Mal, mehrere Male gar nicht ausgeführt!

Beispiel:
int i = 1, iSumme = 0;
while(i <= 10) {
    iSumme = i;
    i++;
} // ohne Semikolon

Die fußgesteuerte Wiederholung: "do ... while"

do {
    Anweisung 1;
    Anweisung 2;
    Anweisung 3;
    ...
} while (Bedingung);


Die überprüfung der Eintrittsbedingung findet am Fuß der Schleife statt!

Diese Schleife wird folgendermaßen abgearbeitet:
  1. Zuerst werden die Anweisungen des Schleifenkörpers ausgeführt.
  2. Dann wird die Bedingung geprüft.
  3. Ist der Wert des Bedingungsausdrucks ungleich 0, wird die Schleife erneut durchlaufen, ansonsten wird die Schleife beendet. Der Programmfluss setzt an der auf die Schleife folgenden Anweisung fort.
Die fußgesteuerte Schleife wird mindestens 1 Mal (!!) oder mehrere Male durchlaufen.

Beispiel:
do {
    cout << "Geben Sie eine ganze, positive Zahl ein:";
    cin >> iZahl;
} while (iZahl > 0); // mit Semikolon

jueves, 1 de mayo de 2014

AWP: 16 Übung - Operatoren in C++

Beispiele für arithmetische Operatoren

Ausdruck Ergebnis Anmerkung
x = 3 / 4 int x;
x = 15 / 2.0 float x;
15 % 4
3 + 5 % 4

Setzen Sie die Klammern so, dass die Auswertereihenfolge nicht verändert wird!
(Anders formuliert: Setze um die Teilausdrücke mit hoher Priorität zuerst Klammern!)
x = - 4 * ++ i - 6  % 4
Welchen Wert erhält x, wenn i = -2 ?

Beispiele für logische Operatoren

x y Logischer Ausdruck Boll'scher Wert
1 -1 x && y || y >= 0
0 0 x < -5 || !x && y == 0

Merke:
  • && - Operator hat höhere Priorität als || - Operator
  • && und || haben jedoch eine niedrigere Priorität als die Vergleichsoperatoren (>, >=, <, <=)

Beispiele für relationale Operatoren

x Logischer Ausdruck Bool'scher Wert
7 x < 9 && x > -5
7 !x && x >= 3



Lösungen

Beispiele für arithmetische Operatoren

Ausdruck Ergebnis Anmerkung
x = 3 / 4 0 int x;
x = 15 / 2.0 7.5 float x;
15 % 4 3
3 + 5 % 4 4

Welchen Wert erhält x, wenn i = -2 ?
x = - 4 * ++ i - 6  % 4
x erhält den Wert 2

Beispiele für logische Operatoren

x y Logischer Ausdruck Boll'scher Wert
1 -1 x && y || y >= 0 1
0 0 x < -5 || !x && y == 0 1

Beispiele für relationale Operatoren

x Logischer Ausdruck Bool'scher Wert
7 x < 9 && x > -5 1
7 !x && x >= 3 0

lunes, 28 de abril de 2014

AWP: 15 Operator-Prioritäten und Auswertungsreihenfolge

Kategorie Name Symbol Auswertreihenfolge Priorität
Monadisch
Post-Inkrement ++ Links nach Rechts 2
Post-Dekrement -- Links nach Rechts 2
Adresse & Rechts nach links 2
Bitweises NOT ~ Rechts nach links 2
Typumwandlung (typ) Rechts nach links 2
Logisches NOT ! Rechts nach links 2
Negation - Rechts nach links 2
Plus-Zeichen + Rechts nach links 2
Prä-Inkrement ++ Rechts nach links 2
Prä-Dekrement -- Rechts nach links 2
Multiplikativ
Modulo % Links nach Rechts 3
Multiplikation * Links nach Rechts 3
Division / Links nach Rechts 3
Additiv
Addition + Links nach Rechts 4
Subtraktion - Links nach Rechts 4
Bitweises Shift
Linksschift << Links nach Rechts 5
Rechtsschift >> Links nach Rechts 5
Relational
Kleiner als < Links nach Rechts 6
Kleiner-gleich <= Links nach Rechts 6
Größer als > Links nach Rechts 6
Größer-gleich >= Links nach Rechts 6
Gleich == Links nach Rechts 7
Nicht gleich != Links nach Rechts 7
Bitweise
AND && Links nach Rechts 8
XOR ^ Links nach Rechts 9
OR || Links nach Rechts 10
Logisch
AND && Links nach Rechts 11
OR || Links nach Rechts 12
Ternär
Bedingter Ausdruck ?: Rechts nach Links 13
Zuweisung
Arithmetisch = Rechts nach Links 14
+= Rechts nach Links 14
-= Rechts nach Links 14
*= Rechts nach Links 14
/= Rechts nach Links 14
%= Rechts nach Links 14
Shift >>= Rechts nach Links 14
<<= Rechts nach Links 14
Bitweise &= Rechts nach Links 14
|= Rechts nach Links 14
^ Rechts nach Links 14

domingo, 27 de abril de 2014

AWP: 14 Operatoren in C++

Arithmetische Operatoren

Die erste Klasse der Operationen sind die arithmetichen Operationen. Sie braucht man, um mit Zahlen zu rechnen.

Operator Int Float Operationen Beispiel Ergebnis
+ × × Vorzeichen (unäres Plus) +7 7
- × × Vorzeichen (unäres Minus) -8 -8
+ × × Addition (binäres Plus) 5 + 6 11
- × × Subtraktion (binäres Minus) 9 - 3 6
* × × Multiplikation 8 * 4 32
/ × × Division (bei Integer-Zahlen abgerundet!) 1 / 2 0
/ × × Division (sobald Gleitkommazahlen dabei, als Gleitkommadivision durchgeführt) 1.0 / 2 0.5
% × Modulo (Rest bei IntegerDivision, Vorzeichen des Dividenden bleibt -7 % 3 -1
= × × Zuweisung (linker Seite wird der Wert der rechten zugewiesen) a = 8 8

Relationale Operatoren (Vergleichsoperatoren)

Die relationalen Operatoren führen Vergleiche durch und ergeben wie die logischen Operatoren Wahrheitswerte, d.h. 0 oder 1.

Operator Int Float Operation Beispiel Ergebnis
< x x Vergleich auf kleiner x < y 1, wenn x kleiner y, 0 sonst
> x x Vergleich auf größer y > x 1, wenn y größer x, 0 sonst
<= x x Vergleich auf kleiner oder gleich x <= y 1, wenn x kleiner oder gleich y, 0 sonst
>= x x Vergleich auf größer oder gleich y >= x Wie bei x <= y
== x x Prüfung auf Gleichheit x == y 1, wenn x und y gleich, 0 sonst
!= x x Prüfung auf Ungleichheit x != 43 0 wenn x gleich 43, 1 sonst

Logische Operatoren

Die letzte Klasse an Operatoren sind die logischen Operatoren. Dabei werden Integerzahlen als wahrer Wert interpretiert, wenn sie ungleich Null sind, als falscher Wert sonst. Das Ergebnis ist 1 falls wahr. 0 falls falsch. Auch hier ist eine Anwendung  auf Fließkommazahlen möglich, aber nicht sinnvoll.

Operator Int Float Operation Beispiel Ergebnis
&& x Logisches UND i && j 1, wenn i und j ungleich 0, 0 sonst
|| x Logisches ODER a || b 0 wenn a und b gleich 0, 1 sonst
! x Logisches NOT (Negation) !q

Da logische Werte in C++ nichts anderes sind als Integerzahlen, kann man mit ihnen auch rechnen. Dabei kann man z.B. folgenden Trick nutzen:
a = 5 + !b *7;
Dieser Ausdruck weist a den Wert 5 oder 12 zu, je nachdem ob b Null ist oder nicht (falls b nicht Null, ist !b = Null und !0 ist 1). Man sollte sich allerdings im klaren darüber sein, dass solche Tricks der Lesbarkeit des Programms schaden!

sábado, 26 de abril de 2014

AWP: 13 Übung Parkscheinautomat

Parkscheinautomat für 15 und 30 Minuten mit OK-Taste

Hr. Oliver Platin - Hasdware
Herr Platin meldet sich nochmals:
Liebe Kollegen,
leider muss ich sie nochmals belästigen!
Die erste Erweiterung von Kundenseite ist schon fällig:
Die Parktaste P kann nun zweimal für 30 Minuten Parkzeit gedrückt werden.
Anschließend muss wieder mit der OK-Taste bestätigt werden.
Vielen Dank!

Lösung

Struktogramm




























Quellcode:
Sehen Sie die Quellcode in http://pastebin.com/keKzvBzc.

domingo, 20 de abril de 2014

AWP: 12 Entscheidungen (if, if...else, ...)

Allgemeines zu Kontrollstrukturen

Bei einem Algorithmus kommt es ganz entscheidend darauf an, in welcher Reihenfolge die einzelnen Anweisunen durchgeführt werden. Üblicherweise werden Anweisungen in der Reihenfolge ihres Vorkommens im Programm ausgeführt. Jede höhere Programmiersprache bietet grundlegende Strukturelemente zur Steuerung des Programmflusses an:

  • die Sequenz (eine Folge von Anweisungen)
  • die Selektion (= Entscheidungen oder bedingte Verzweigung)
  • die Iteration (= Wiederholung)
  • den Unterprogrammaufruf

Sie sind die grundlegenden Ablaufarten der Programmierung überhaupt. Grundlegend in zweifacher Hinsicht.

Zum einen gelangt man beim Zerlegen noch so umfangreicher Programmabläufe immer auf diese vier Programmstrukturen als Grundmuster. Zum anderen kann jeder zur Problemlösung erforderliche Programmablauf durch geeignetes Anordnen dieser vier Programmstrukturen konstruiert werden.

Entscheidungen (Selektionen) in C++

Die einseitige Entscheidungen: "if"
if (Bedingung) {
  Anweisung1;
  Anweisung2;
  Anweisung3;
  ...
}
Wenn die Bedingung (ein Ausdruck) erfüllt ist (der Ausdruck hat dann einen Wert verschieden von 0), wird die in geschweiften Klammern eingeschlossene Anweisungsfolge (auch Blockanweisung gennant) ausgeführt. Bei einzelnen Anweisungen können die Klammern entfallen.

Die Bedingung kann ein Vergleichausdruck sein; in diesem Fall ist das Erebnis 0 (=false) oder 1 (=true).

Struktogramm nach DIN 66261:

Beispiel für eine Bedingung:
(iZahl <= 0)
Wenn iZahl kleiner oder gleich 10 ist, so ist der Wert des Vergleichsausdrucks 1 (also true / Ja) und somit wird die Linke Seite mit den darin enthaltenen Anweisungen ausgeführt.


Die Bedingung kann aber auch ein arithmetischer Ausdruck sein. In diesem Fall kann das Ergebnis 0 oder ungleich 0 sein.

Beispiel:
(3 * iZahl + 6)
Wenn iZahl gleich -2 ist, dann ist der Wert des gesamten Ausdrucks 0. In diesem Fall würden die obigen Anweisungen nicht ausgeführt werden! Nur wenn iZahl ungleicht -2 ist und somit der Gesamtausdruck verschieben von 0 ist, so werden die Anweisungen ausgeführt.

Beispiele für eine einseitige Auswahl:
if (iTemperatur < 10)
    cout << "Es ist kalt\n";
if (x < 0) {
    cout << "x ist negativ! x = " << x << endl;
    x = 0;
}

Die zweiseitige Auswahl: "if...else"


if (iZahl < iZahl2) {
    iMinimum = iZahl1;
} else {
    iMinimum = iZahl2;
}



Die zweiseitige Auswahl enthält einen if- und einen else-Teil: ist der Ausdruck in den Klammern ungleich 0, wird die Anweisungsfolge des else-Zweiges ausgeführt. Allesweitere gilt wie bei der einseitigen Auswahl.

Die zweiseitige auswahl kann auch verschachtelt werden:



if (iTemperatur > 30) {
    cout << "Es ist heiß!\n";
else
    if (iTemperatur > 0)
        cout << "Es friert noch nicht!\n";
    else
        cout << "Mensch, ist das kalt!\n";




Übrigens: Die Blockklammern { } können bei nur einer Anweisung weggelassen werden.

viernes, 18 de abril de 2014

AWP: 11 Variablen Übungsaufgaben

  1. Übungs-Programme:
  2. Beispiel für Wertebereichsüberschreitung:
    • Variablen vom Typ unsigned short int.
    • Berechnung und Ausgabe von Vorgänger und Nachfolger mit Testwerten 0 und 65535.
  3. Taschenrechner für zwei Zahlen mit den Ergebnissen Summe & Differenz & Produkt & Quotient.
  4. Schreiben Sie ein Programm, das einen Kleinbuchstaben einliest und anschließend den entsprechenden Großbuchstaben ausgibt!
  5. Das Normalgewicht n für Männer wird oft aus der Körpergröße k ermittelt:
    • n = k - 100
    • Das Idealgewicht beträgt dann 95% des Normalgewichts. Lesen Sie die Körpergröße in cm ein und geben Sie das Normalgewicht und das Idealgewicht aus!
  6. Erstellen Sie ein Programm, das für einen verzinsten Geldbetrag den Endbetrag errechnet. Diesem Programm muss das Anfangskapital, der Zinsatz in Prozent und die Laufzeit in Jahren mitgeteilt werden.
  7. Schreiben Sie ein Programm, das zuerst die Anzahl der Felder eines Schnachbretts einliest, anschließend das Gewicht eines Reiskorns in kg und letztlich das Gewicht des Reises auf dem letzten Feld des Schachfeldes ausgibt, wenn man bei jedem Feld die Anzahl der Reiskörner verdoppelt!
  8. Es soll ein Winkel in Grad einlesen und in Bogenmaß ausgegeben werden!
    • 90º -> 1.57 Bogenmaß [ sin(1.57) = 1 ]
    • 45º -> 0.79 [ sin(0.79) = 0.71 ]
    • -277º -> -4.83 [ sin(-4.83) = 0.99 ]
  9. Ändern Sie die Umrechnung so, dass Bodenmaß in Grad umgerechnet werden!
  10. Die Höhe, bei der ein Fallschirmspringer spätestens die Reißleine ziehenmuss, um unversehrt zu landen, beträgt 650 Meter. Erstellen Sie ein Programm, das die Absprunghöhe als Ganzzahl einliest und dann ausgibt, wie viel sekunden dem Fallschirmspringer bleiben, bis er die Reißleine ziehen muss.
    • 3400 -> 23 Sekunden
    • 45000 -> 95 Sekunden
    • a = g = 9.81 m/s
    • v = g * t + v0
    • s = 1/2 * g * (t*t) + v0 * t + s0
    • Eingabe 650 m -> t = ?

lunes, 14 de abril de 2014

AWP: 10 Übung Wahlomat

Ein Kunde Ihrer Firma hat Gefallen an ihrem Wahlomaten gefunden, möchte jedoch eine "schönere" und formatiertere Ausgabe. Er hat Ihnen einen Bildschirmausdruck mitgebracht.


Wie könnte man diese Ausgabe realisieren?

Lösung

Sehen Sie die Lösung in http://pastebin.com/2JArhfzM.
#include <iostream>
using namespace std;
int main() {
/*
* VARIABLES
*/
int i_stimmen_1, i_stimmen_2;
float f_verteilung_1, f_verteilung_2;
/*
* INPUT
*/
cout << endl;
cout << "\t-------------Wahlomat------------" << endl;
cout << endl;
cout << "\tBitte geben Sie die Stimmen 1 an! ";
cin >> i_stimmen_1;
cout << "\tBitte geben Sie die Stimmen 2 an! ";
cin >> i_stimmen_2;
cout << endl;
/*
* LOGIC
*/
// Integer * 1.0 = Float
f_verteilung_1 = i_stimmen_1 * 1.0 / (i_stimmen_1 + i_stimmen_2) * 100.0;
f_verteilung_2 = i_stimmen_2 * 1.0 / (i_stimmen_1 + i_stimmen_2) * 100.0;
/*
* OUTPUT
*/
cout << endl;
// ASCII 201 -> esquina superior izquierda
// ASCII 205 -> horizontal
// ASCII 187 -> esquina superior derecha
// ASCII 186 -> vertical
// ASCII 188 -> esquina inferior derecha
// ASCII 200 -> esquina inferior izquierda
cout << char(201) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (187) << endl;
cout << char(186) << "\tDas amtliche Endergebnis der Stichwahl:       " << char(186) << endl;
cout << char(186) << "                                                     " << char(186) << endl;
cout << char(186) << "\tErgebnis Kandidat 1 in Prozent:\t"; printf("%.4f", f_verteilung_1); cout << "       " << char(186) << endl;
cout << char(186) << "                                                     " << char(186) << endl;
cout << char(186) << "\tErgebnis Kandidat 2 in Prozent:\t"; printf("%.4f", f_verteilung_2); cout << "       " << char(186) << endl;
cout << char(200) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (205) << char(205) << char (205) << char (205) << char (205) << char (205) << char (205) << char (188) << endl;
/*
* END OF PROGRAM
*/
getchar();
getchar();
return (0);
}

domingo, 13 de abril de 2014

AWP: 9 Konstante

Konstante repräsentiert einen Zahlenwert. In jedem Konstante steht einem Zahlenwert.

Beispiele für Konstante (Literale)

Boolsche Konstante
  • true = 1
  • false = 0

Zahlenkonstanten

Beispiele für ganzzahlige Konstante
Dezimal Oktal Hexadezimal Datentyp
16 020 0x10 int
255 0377 0xFF int
32767 077777 0x7FFF int
32767 0100000U 0x8000U unsigned int
10L L L long
27UL 033UL 0x1BUL unsigned long

Gleitkommakonstante
z.B.:

  • 16.32
  • 12E-2 -> 0.12
  • .45E4 -> 4500

Zeichenkonstante
z.B.:
  • 'b' -> Kleinbuchstabe b. Siehe ASCII-Tabelle
  • ' ' -> Leerzeichen
  • '\'' -> Hochkomma

Escape-Sequenzen

Einzelzeichen
Bedeutung
ASCII-Zeichen
ASCII-Code
\a
alert
BEL
07
\b
backspace
BS
08
\t
horizontal tab
HT
09
\n
line feed
LF
0A
\v
vertical tab
VT
0B
\f
form feed
FF
0C
\r
carriage return
CR
0D
\”
22
\’
27
\?
?
?
3F
\\
\
\
5C
\0
Stringende-Zeichen
NUL
00

AWP: 8 Typumwandlungen in C++

In C und C++ gibt es zwei Arten von arithmetischen Datentypen:

  • ganzzahlige Typen, z.B. int, char, bool (unsigned, short, long)
  • Gleitkommatypen, z.B. float, double (long)

Automatische Typumwandlung

(Implizite Typumwandlung)

Bei Berechnungen in Programmen gelten folgende Regeln:
Wenn verschiedene Datentypen beteiligt sind, wird das Ergebnis automatisch in den leistungsfähigeren Typ umgewandelt.
Beispiel:
int i_zahl1 = 5;
float f_zahl2 = 7.5;
double d_zahl3 = 10.3;
ergebnis = i_zahl1 * f_zahl2; // Ergebnis: 37,5 -- Typ: float
ergebnis = f_zahl2 + d_zahl3; // Ergebnis: 70,80 -- Typ: double

Wenn verschiedene Datentypen beteiligt sind, wird das Ergebnis automatisch in den leistungsfähigeren Typ umgewandelt.

Wenn nur gleiche Datentypen beteiligt sind, hat auch das Ergebnis diesen Datentyp.
Beispiel:
int i_zahl1 = 12;
int i_zahl2 = 4;
ergebnis = i_zahl2 / i_zahl1; // Ergebnis: 0 -- Typ: int

Erzwungene Typumwandlung

Wenn man einen bestimmten Datentyp erzwingen möchte, schreibt man diesen Typ in Klammern vor den Ausdruck, der berechnet wird.
Beispiel:
int i_zahl1 = 5;
int i_zahl2 = 6;
ergebnis = (float) i_zahl1 / i_zahl2; // Ergebnis: 0,8333 -- Typ: float

Diese erzwungene Umwandlungsoperation nennt man auch cast / casting / TypCasting

AWP: 7 Variablen in C++

Um Daten kurzzeitig (oder auch längerfristig) speichern zu können, muss zuerst Speicherplatz geschaffen (genauer: reserviert) werden. Zusätzlich muss auf diesen reservierten Platz noch zugegriffen werden können. Hierfür gibt es Variablen. Sie stehen für den Inhalt eines Speicherplatzes. Zuerst muss eine Variable definiert werden. Nach der Definition ist Speicherplatz für die Variable entsprechend ihrer Größe im Arbeitsspeicher reserviert. Danach kann ihr ein Wert zugewiesen werden. Welcher Wert zugewiesen werden darf, ist vom Variablentyp abhängig.

Die Variablentypen

Variablentyp, Beinhaltet und Größe in Byte
  • int
    • Pos. und neg. Ganzzahl
    • 2/4 Byte
  • float
    • Gleitkommazahl
    • 4 Byte
  • double
    • genauere Gleitkommazahl
    • 8 Byte
  • char
    • Buschstabe
    • 1 Byte
  • bool
    • "enthält" den Wert true oder false.
    • 1 Byte
  • unsigned char
    • Werte von 0 bis 255
    • 1 Byte
  • unsigned int
    • Ganzzahlen 0 bis 65535
    • 2/4 Byte
Wenn man eine Variable definiert...
z.B. int i_zahl;
... dann "sagt" man dem Compiler: "Hallo Compiler! Ich will, dass du Speicherplatz für eine Integer-Variable mit dem Namen i_zahl reservierst".

Wenn eine Variable definiert und gleich danach initialisiert, d.h. ein Wert zugewiesen wird,...
int i_zahl = 7;
...dann teilt man dem Compiler mit: "Ich will, dass diese Variable mit Namen i_zahl vom Typ int (bis hierher ist eine Definition) mit dem Wert 7 vorbelegt werden soll".

Eine Zuweisung alleine würde folgendermaßen aussehen:
i_zahl = 7;
Jetzt "weiß" der Compiler, dass der bereits definierten (aber möglicherweise noch nicht initialisierten) Variablen i_zahl der Wert 7 zugewiesen werden soll.

Es gibt zusätzlich auch noch die Deklaration von Variablen.
extern int i_zahl;
Mit dieser verdeutlicht man: "Es gibt irgendwo eine Variable mit Namen i_zahl vom Typ int. Aber wo, verrate ich dir noch nicht". Hier wird kein Speicher angelegt, sondern nur lediglich bekannt gegeben, dass es diese Variable gibt. Mittels extern kann man eine Variable nur deklarieren, denn ohne extern wäre es ja eine Definition. Wo das Sinn macht, erfahren Sie noch später.

Anmerkung

Um einer char Variablen einen Buchstaben zuzuweisen darf man nicht
char c_zeichen = "a";
schreiben, sondern man muss
char c_zeichen = 'a';
schreiben.
Denn "a" ist ein String (Zeichenkette) und 'a' ein Zeichen.

Aufgaben

  1. Überlegen Sie sich, wie man die Variablendefinition und die -initialisierung mit einer Lagerkiste in einem Hochregallager (z.B. bei Ikea) vergleichen kann!
  2. Bitte kreuzen sie an, ob die folgende Aussage wahr oder falsch ist:
    • Mit i_zahl = 7; wird eine Integer-Variable mit dem Namen i_zahl angelegt und mit dem Wert 7 initialisiert.
    • float f_fliesskommazahl; reserviert 4 Byte im Arbeitsspeicher.
    • In bool b_richtig = 1; steht bool b_richtig für die Definition und = 1 für die Initialisierung der Variablen.
    • char c_zeichen = "B"; definiert eine Character-Variable mit dem Namem c_zeichen und dem Wert/Zeichen B.
    • unsigned int i_zahl = -1; definiert eine Integer-Variable mit dem Namen i_zahl und dem Wert -5.
    • Jede Variable muss bei der Definition einen Typ und einen Namen besitzen.
  3. Erstellen Sie gemeinsam mit ihrem Banknachbarn einen Merksatz, was eine Variablendefinition ist!
    • (Unter einer Variablendefinition versteht man, ...)
  4. Welche Variablen benötigt man, um für zwei Kandidaten die Stimmen zu zählen, alle abgegebenen Stimmen zu ermitteln und daraus die prozentuale Stimmverteilung zu berechnen? Bitte überlegen Sie sich auch eine sinnvolle Benennung für diese Variablen!
  5. Beschreiben Sie kurz den Unterschied zwischen einer Variablendefinition und Variablendeklaration!
  6. Erstellen Sie einen eigenen "Wahlomat" welcher die Stimmen für zwei Kandidaten einliest und das prozentuale Stimmverhältnis ausgibt!
  7. Bitte berechnen sie die Werte der Integer-Variablen i_zahl1 und i_zahl2. Rechnen sie dabei jeweils mit den Werten der vorangegangenen Zeile weiter.
    • Operator = (Zuweisung)
      • i_zahl1 = 7; i_zahl2 = 8;
    • Operator + (Addition)
      • i_zahl1 = i_zahl2 + 3;
    • Operator - (Subtraktion)
      • i_zahl2 = i_zahl1 - 3;
    • Operator * (Multiplikation)
      • i_zahl2 = i_zahl2 * 3;
    • Operator / (Division)
      • i_zahl2 = i_zahl1 / 3;
    • Operator % (Modulo, Rest einer Division)
      • i_zahl1 = i_zahl2 % 3;
Merke:
Bei einer Zuweisung steht die Variable, der ein Wert zugewiesen werden soll, immer auf der linken Seite vom "="!

Lösungen

1. Überlegen Sie sich, wie man die Variablendefinition und die -initialisierung mit einer Lagerkiste in einem Hochregallager (z.B. bei Ikea) vergleichen kann!
  • Lösung noch nicht verfügbar

2. Bitte kreuzen sie an, ob die folgende Aussage wahr oder falsch ist:
  • Mit i_zahl = 7; wird eine Integer-Variable mit dem Namen i_zahl angelegt und mit dem Wert 7 initialisiert.
    • Falsch. Die Variable ist nicht angelegt.
  • float f_fliesskommazahl; reserviert 4 Byte im Arbeitsspeicher.
    • Wahr.
  • In bool b_richtig = 1; steht bool b_richtig für die Definition und = 1 für die Initialisierung der Variablen.
    • Wahr.
  • char c_zeichen = "B"; definiert eine Character-Variable mit dem Namem c_zeichen und dem Wert/Zeichen B.
    • Falsch. "B" ist ein String. Das Zeichen ist 'B'.
  • unsigned int i_zahl = -1; definiert eine Integer-Variable mit dem Namen i_zahl und dem Wert -5.
    • Falsch. Die Variable wurde als unsigned definiert.
  • Jede Variable muss bei der Definition einen Typ und einen Namen besitzen.
    • Wahr.

3. Erstellen Sie gemeinsam mit ihrem Banknachbarn einen Merksatz, was eine Variablendefinition ist!
  • Unter einer Variablendefinition versteht man, dass einer Variablen ein Speicherbereich zugeteilt wird.

4. Welche Variablen benötigt man, um für zwei Kandidaten die Stimmen zu zählen, alle abgegebenen Stimmen zu ermitteln und daraus die prozentuale Stimmverteilung zu berechnen? Bitte überlegen Sie sich auch eine sinnvolle Benennung für diese Variablen!
  • int i_stimme_1; // Um die Stimmen von Kandidat 1 zu zählen.
  • int i_stimme_2; // Um die Stimmen von Kandidat 2 zu zählen.
  • float f_verteilung_1; // Um die prozentuale Stimmverteilung von Kandidat 1 zu berechnen.
  • float f_verteilung_2; // Um die prozentuale Stimmverteilung von Kandidat 2 zu berechnen.

5. Beschreiben Sie kurz den Unterschied zwischen einer Variablendefinition und Variablendeklaration!
  • Mit der Deklaration bennenen wir eine Variable und machen diese dem Compiler bekannt.
  • Der Definition ist die Reservierung des Speicherbereich für die Variable.

6. Erstellen Sie einen eigenen "Wahlomat" welcher die Stimmen für zwei Kandidaten einliest und das prozentuale Stimmverhältnis ausgibt!
#include <iostream>
using namespace std;
int main() {
/*
* VARIABLES
*/
int i_stimmen_1, i_stimmen_2;
float f_verteilung_1, f_verteilung_2;
/*
* INPUT
*/
cout << "Bitte geben Sie die Stimmenzahl fuer Kandidat 1: ";
cin >> i_stimmen_1;
cout << "Bitte geben Sie die Stimmenzahl fuer Kandidat 2: ";
cin >> i_stimmen_2;
/*
* LOGIC
*/
// Integer * 1.0 = Float
f_verteilung_1 = i_stimmen_1 * 1.0 / (i_stimmen_1 + i_stimmen_2) * 100.0;
f_verteilung_2 = i_stimmen_2 * 1.0 / (i_stimmen_1 + i_stimmen_2) * 100.0;
/*
* OUTPUT
*/
cout << endl;
cout << "Prozentuale Stimmverteilung." << endl;
cout << "Kandidat 1: " << f_verteilung_1 << "%" << endl;
cout << "Kandidat 2: " << f_verteilung_2 << "%" << endl;
/*
* END OF PROGRAM
*/
getchar();
getchar();
return (0);
}

7. Bitte berechnen sie die Werte der Integer-Variablen i_zahl1 und i_zahl2. Rechnen sie dabei jeweils mit den Werten der vorangegangenen Zeile weiter.
  • i_zahl1 = 7; i_zahl1 = 8;
    • i_zahl1 enthalt 7
    • i_zahl2 enthalt 8
  • i_zahl1 = i_zahl2 + 3;
    • i_zahl1 enthalt 11
    • i_zahl2 enthalt 8
  • i_zahl2 = i_zahl1 - 3;
    • i_zahl1 enthalt 11
    • i_zahl2 enthalt 8
  • i_zahl2 = i_zahl2 * 3;
    • i_zahl1 enthalt 11
    • i_zahl2 enthalt 24
  • i_zahl2 = i_zahl1 / 3;
    • i_zahl1 enthalt 11
    • i_zahl2 enthalt 3
  • i_zahl1 = i_zahl2 % 3;
    • i_zahl1 enthalt 0
    • i_zahl2 enthalt 3