====== Allgemein ====== Quelle: [[https://www.programmieren-lernen-cplusplus.de/]] ===== 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 '' wenn die Ausgabe formatiert werden soll, benötigt man zusätzlich noch ''#includ ''. 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 * Eingabecin >> 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 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 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; // 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 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 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 #include 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 #include #include 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 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 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 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 < ==== Array mit Zahlen ==== #include 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); }