Allgemein
Datentypen
Datentyp | Bitanzahl | Wertebereich | Beschreibung |
---|---|---|---|
char, signed char | 8 | -128..127 | Zeichen, negative Zeichen |
unsigned char | 8 | 0-255 | nur positive Zeichen |
short int | 16 | -32768..32767 | Ganzzahlen |
unsigned short int | 16 | 0..65535 | positive Zahlen |
int, signed int | 32 | -2147583648..2147583647 | Zahlen, negative Zahlen |
unsigned int | 32 | 0..4294967295 | positive Zahlen |
float | 32 | 1.2*10⁻³⁸..3.4*10³⁸ | rationale Zahlen (fließkomma) |
double | 64 | 2.2*10⁻³⁰⁸..1.8*10³⁰⁸ | rationale Zahlen (fließkomma) |
Vergleichsoperatoren
Operator | Beschreibung |
---|---|
== | gleich |
!= | ungleich |
< | kleiner |
> | größer |
⇐ | kleiner gleich |
>= | größer gleich |
Ein- und Ausgabe
Eine Ein-/Ausgabe benötigt die Biblothek #include <iostream>
wenn die Ausgabe formatiert werden soll, benötigt man zusätzlich noch #includ <iomanip>
.
Um nicht ständig std::[cout|cin|endl|…]
eingeben zu müssen, kann man den Namespace „std“ einbinden: using namespace std;
- einfache Ausgabe
cout << "Text";
- Ausgabe mit füllzeichen
cout << setw(9) << setfill(*) << left << "Text" << endl;
- setw(ZAHL): Breite für die Ausgabe; hat die Ausgabe weniger Stellen, so wird die Ausgabe von links mit Leerzeichen aufgefüllt
- setfill(ZEICHEN): In Kombination mit
setw()
werden Leerzeichen durch ein Symbol ersetzt - left: linksbündige Ausgabe
- endl: Zeilenumbruch
- Eingabe
cin >> Variable;
Wenn, Dann, Sonst
if (Bedingung) { Anweisungen; } else if (Bedingung) { Anweisungen; } else { Anweisungen; }
Schleifen
- while
while (Bedingung) { Anweisungen; }
- do
do { Anweisungen; } while (Bedingung);
- for
for (Anweisung1; Bedingung; Anweisung2) { Anweisungen; }
Funktionen
Funktionen werden außerhalb des Main-Programms definiert.
normale Funktion:
Rückgabedatentyp Funktionsname (Datentyp Parameter,...){ Anweisungen; return(Rückgabewert); }
Referenzen:
int number=38; int& refnumber=number;
Funktion mit Referenz:
Rückgabedatentyp Funktionsname (Datentyp**&** Parameter,...){ Anweisungen; return(Rückgabewert);
Man bemerke das „&“-Symbol in der Parameterliste.
Beispiel:
void quadrat(int& x){ x=x*x; } int main(){ int zahl; cin >> zahl; quadrat(zahl); cout << zahl; }
Parameter welche an eine Funktion übergeben werden, sind nur Kopien.
Funktionen können per „call-by-reference“ oder „call-by-value“ aufgerufen werden.
call-by-reference: der übergebene Parameter ändert sich zeitgleich im „Main-Programm“
call-by-value: der übergebene Parameter ändert sich nicht im „Main-Programm“, da eine Kopie des Parameter an die Funktion übergeben wird
Array
int feld[10]; int feld[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int feld[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int feld[5]; feld[0]=1; feld[1]=4; feld[2]=2; feld[3]=43; feld[4]=33;
// Eingabe cin >> feld[0]; cin >> feld[1]; // oder Eingabe int feld[10]; for(int i=0;i<10;i++) { cout << "Bitte einen Wert eingeben: " cin >> feld[i]; } // Ausgabe for(int i=0;i<10;i++) { cout << "Element“ << i+1 << ":“ << feld[i] << endl; }
Arrays können an Funktionen übergeben werden. Der Aufruf erfolgt per „call-by-reference“, alle Änderungen an den Arrayelementen bleiben somit erhalten.
String
Strings sind Anreihungen mehrerer Wörter.
Sie können mit der Bibliothek „string“ implementiert werden.
#include <string>
Beispiel:
string wohnort; string studienort; wohnort=“Hamburg“; studienort=“Rostock“; if (wohnort==studienort) { cout << "Wohn- und Studienort sind gleich.“ << endl; }
Da Strings mehrere Wörter sein können, und ein normales „cin“ nur zusammenhängende Parameter ohne Leerzeichen akzeptieren, müssen Strings wie folgt übergeben werden:
string text; getline(cin, text);
In der String-Bibliothek gibt es noch folgende Funktionen:
- size()
- liefert die Länge eines Strings als Integer zurück
string ort=“Berlin“; ort.size(); // gibt den integer-Wert 6 zurück
- at(index)
- gibt den Buchstaben eines Strings an der Position „index“ zurück (der Compiler beginnt bei 0, wie bei Arrays)
string ort=“Berlin“; ort.at(3); // liefert "l“
- find(searchstring, startposition)
- findet die Stelle, an der ein „searchstring“ in Text zum ersten Mal auftaucht
- wenn an einer bestimmten Stelle die Suche beginnen soll, kannst eine „startposition“ angeben werden
- man kann den Parameter zur „startposition“ auch weglassen
- Ausgabe ist ein Integer (Position des „searchstring“)
- ist die gesuchte Zeichenkette nicht vorhanden, wird der Wert -1 geliefert
string firma=“Universität Rostock“; firma.find(„Rostock“); // gibt 13 aus;
- rfind(searchstring)
- zum Suchen der Position des letzten Auftretens eines Wortes
string lustigerSatz=“Informatik ist toll. Alle lieben Informatik.“; lustigerSatz.rfind("Informatik“); // liefert den Wert 33
- append(substring)
- Anhängen eines „substring“ an einen vorhandenen String
string ort=“Hansestadt Rostock“; ort.append(„ ,Mecklenburg-Vorpommern“);
- replace(startposition, laenge, substring)
- in einem größeren String wird ein Ausschnitt an einer bestimmten „position“ mit seiner bestimmten „laenge“ durch einen „substring“ ersetzt
string ort=“Hansestadt Rostock“; ort.replace(5, 0, "- und Universitaetsstadt“);
- insert(startposition, substring)
- fügt in einem String einen neuen „substring“ direkt vor der angegebenen „position“ ein
string ort=“Hansestadt Rostock“; ort.insert(5, "- und Universitaets“); // Die Variable "ort“ enthält nun den String "Hanse- und Universitaetsstadt Rostock
- substr(startposition, laenge)
- kopiert einen Teilstring aus einem größeren String
- „startposition“ gibt an, an welcher Stelle der Kopierprozess beginnen soll, „laenge“ beschreibt, wie lang der kopierte Teilstring werden soll
- man kann laenge auch weglassen, dann wird der gesamte String kopiert
string ort=“Hansestadt Rostock“; string ausschnitt; ausschnitt=ort.substr(0,10); // im String "ausschnitt“ befindet sich nun die Zeichenkette "Hansestadt“
- compare(startposition, laenge, searchstring)
- vergleicht Strings miteinander
- sind die Strings gleich wird „0“ zurückgegeben
- sind die Strings nicht gleich wird eine Zahl „<0“ zurückgegeben (je nachdem, welcher String im Alphabet vor dem anderen steht)
string abschlussTina=“Bachelor Informatik“; string abschlussBenedikt=“Bachelor Mathematik“; // die Funktion wird nicht bearbeitet, da die Strings unterschiedlich sind if (abschlussTina.compare(abschlussBenedikt)==0){ cout << "Beide haben den gleichen Abschluss in demselben Studiengang.“ << endl; } // diese Funktion wird bearbeitet, da zusätzliche Parameter (startposition und laenge) angegeben wurden if (abschlussTina.compare(8, 10, "Informatik“)==0){ cout << "Tina hat Informatik studiert.“ << endl; } // an Indexposition 8 werden die nachfolgenden zehn Zeichen mit dem Teilstring "Informatik“ verglichen.
Strukturen
Mit Strukturen können eigene Datentypen definieren werden.
Strukturen werden wie Funktionen außerhalb des Main-Programms definiert.
struct Strukturname { Datentyp1 komponente1; Datentyp2 komponente2; };
Beispiel:
einfache Struktur
struct person { string name; string vorname; int alter; int ausweisnummer; char geschlecht; }; main(){ person p1; // Ausgabe des Parameters "p1" des Datentyps "person" cout << p1; //Eingabe von Parametern in den Datentyp "person" getline (cin, p1.name); getline (cin, p1.vorname); getline (cin, p1.alter); getline (cin, p1.ausweisnummer); getline (cin, p1.geschlecht); return(0) }
Strukturen in Arrays eingeben
main(){ person liste[100]; liste[0].name=“Petrovich“; liste[7].alter=45; liste[18].geschlecht='m'; }
verschachtelte Struktur
struct adresse { string straße; int hausnummer; int plz; string ort; }; struct person { string name; string vorname; int alter; int ausweisnummer; char geschlecht; adresse adr; }; main(){ person p1; p1.name=“Schmidt“; p1.adr.ort=“München“; }
Arbeiten mit Dateien
Mit der Bibliothek „fstream“ kann man Daten in Dateien speichern und auslesen.
#include<fstream> main(){ fstream f; }
Die Bibliothek liefert folgende Funktionen:
- Objekt.open(Pfadname, Modus | Modus | …);
- öffnet eine Datei vom angegebenen Dateipfad (Dateiname oder absoluter Pfad)
- der Modus gibt an, was man mit der Datei machen möchte
- ios::out: zum Schreiben öffnen (output)
- ios::in: zum Lesen öffnen (input)
- ios::app: Daten an das Ende einer bestehenden Datei anhängen (append)
- ios::ate: öffnen und ans Ende positionieren (at end)
- Objekt.close();
- schließt die Datei
- Objekt.fail();
- prüft den Zugriff auf die Datei
fstream daten; daten.open(„daten.txt“, ios::in | ios::out); if (f.fail()){ cout << „Fehler beim Öffnen der Datei.“ << endl; }
Schreiben und lesen von Daten in/aus eine/-r Datei
string vorname=“Gerald“; string nachname=“Ülmer-Neumann“ fstream f; f.open(„daten.txt“, ios::out); // Daten schreiben f<<vorname << endl; f<<name<<endl; // Daten lesen fstrean f2; f.open("daten.txt", ios::in); f2>>vorname; // Daten lesen über eine Schleife fstream f3; int i=0; werte[1000]; while(!f3.eof() && i<1000){ f3 >> werte[i]; i++; }
Beispiele
Zahl gerade oder ungerade
#include <iostream> using namespace std; int main () { int wert; do { cout << "Bitte eine gerade Zahl eingeben: "; cin >> wert; if (wert % 2 == 0) { cout << "Die Zahl " << wert << " ist eine gerade Zahl." << endl; } cout << endl; } while (wert % 2 != 1); }
Funktion-MwSt
#include<iostream> using namespace std; float b_preis (float preis){ float brutto=preis*1.19; return brutto; } int main(){ float netto; while(true){ cout << "bitte einen netto Preis angeben: "; cin >> netto; cout << endl << "-------" << endl << "Ihr Bruttopreis beträgt: " << b_preis(netto) << endl << "-------" << endl << endl; } return(0); }
Funktion-Durchschnitt
#include <iostream> #include <string> using namespace std; float durchschnitt (int anzahl,string u_fach) { int summe=0; int note; for (int i=1; i<=anzahl; i++) { cout << "Note für " << u_fach << " eingeben: "; cin >> note; summe=summe+note; } float d=(float) summe/anzahl; return d; } int main() { string fach; int anzahlMathenoten=5; fach = "Mathematik"; float durchschnittMathe=durchschnitt(anzahlMathenoten,fach); int anzahlDeutschnoten=7; fach="Deutsch"; float durchschnittDeutsch=durchschnitt(anzahlDeutschnoten,fach); int anzahlEnglischnoten=5; fach="Englisch"; float durchschnittEnglisch=durchschnitt(anzahlEnglischnoten,fach); cout << endl<< endl<< endl<< endl; cout << "Durchschnitt in Mathematik: " << durchschnittMathe << endl; cout << "Durchschnitt in Deutsch: " << durchschnittDeutsch << endl; cout << "Durchschnitt in Englisch: " << durchschnittEnglisch << endl; return (0); }
Funktion Kreisberechnungen
#include<iostream> #include<iomanip> #include <math.h> using namespace std; float flaeche(float radius){ float pi=3.14159; float fl=pi*(radius*radius); return fl; } float umfang(float radius){ float pi=3.14159; float um=2*pi*radius; return um; } int main (){ float radius; while (radius != 0) { cout << "Bitte Kreisradius eingeben: "; cin >> radius; if (isnan (radius)){ cout << "Die angegebene Zahl wurde mit einem ',' angegeben." << endl << "Bitte geben Sie stattdessen einen '.' als Trenner ein." << endl; } if (radius==0) { cout << "Der Radius darf nicht null sein, das Programm wird nun beendet."; break; } float kreisfl=flaeche(radius); float kreisumf=umfang(radius); cout << "Die Kreisfläche beträgt: " << kreisfl << endl; cout << "Der Kreisumfang beträgt: " << kreisumf << endl << endl; } return(0); }
Referenz
#include<iostream> using namespace std; void quadratzahl(int &x){ x=x*x; } int main () { for(int zahl;zahl != 0;) { cout << "Zahl eingeben: "; cin>>zahl; quadratzahl(zahl); cout << zahl << endl << endl; } return(0); }
Pizza berechnen
#include<iostream> using namespace std; const float pi=3.141; void preisLeist(float durchm,float preis){ cout << "Das Preis-Leistungs-Verhaeltnis dieser Pizza betraegt: "; cout << preis / (pi*durchm*durchm/4.0) << " EUR je cm^2" << endl; return; } int warenkorb( float preis, float &summe, int anzahl){ summe = summe + preis; anzahl = anzahl+1; return(anzahl); } int main(){ int durchmesser; float preis; float summe = 0; int anzahl = 0; int menu; do{ cout << "Durchmesser in cm: "; cin >> durchmesser; cout << "Preis in EUR: "; cin >> preis; preisLeist(durchmesser, preis); anzahl = warenkorb(preis, summe, anzahl); cout << "Sie haben bisher " << anzahl << " Pizzen fuer insgesamt " << summe << " EUR bestellt."; cout << endl; cout << "(0) Einkauf abschliessen \t (1) Einkauf fortsetzen" << endl; cout << "Eingabe: "; cin >> menu; cout << endl; }while(menu != 0); return 0; }
Haarlänge
#include<iostream> using namespace std; const float wachsen=0.5; int haarlaenge(float laenge1, int tage){ laenge1=laenge1*tage; return(laenge1); } int main(){ float laenge; int tage=40; float laenge1=0.5; for(int tage=40; tage != 0;){ cout << "bitte anzahl Tage eingeben: "; cin >> tage; cout << endl <<endl; laenge = haarlaenge(laenge1, tage); cout << "die haarlaenge nach " << tage << " Tagen, wird " << laenge << " mm sein." << endl ; } return(0);
Array mit Zahlen
#include<iostream> using namespace std; int main(){ int wert[10]; int menu; cout << "Es gibt 10 Werte" << endl << endl; for (int i=0;i<10;i++){ cout << "Bitte einen Zahl für Stelle " << i << " eingeben." << endl; cin >> wert[i]; if (i == 9) { cout << "Mehr Zahlen gehen nicht" << "--------" << endl; cout << "Soll ich die Zahlen ausgeben? [0]Ja, [1]Nein"; cin >> menu; cout << endl << "-------" << endl; if (menu == 1){ cout << "OK, beende das Programm."; break; } else { cout << "Welchen Zahlenwert soll ich ausgeben (Für die Ausgabe aller Zahlen bitte [11] eingeben)?"; cin >> menu; if (menu == 11){ cout << "Ihre eingegebenen Zahlen sind:" << endl; for (int i=0;i<10;i++){ cout << wert[i] << endl; } } else { cout << "Die eingegebene Zahl für Wert " << menu << ", beträgt " << wert[menu-1] << "."; } } } } return (0); }