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