added ws202425 courses

This commit is contained in:
2024-11-14 13:11:04 +01:00
parent 800282c2e8
commit beb31897b1
461 changed files with 20368 additions and 0 deletions
+44
View File
@@ -0,0 +1,44 @@
#include <iostream>
#include <vector>
#include <string>
int main() {
int vector_size;
std::vector<int> vec;
std::cout << "Bitte geben Sie die Größe des Vektors an: ";
std::cin >> vector_size;
std::cout << "Geben Sie die Werte des Vektors ein:" << std::endl;
for (int i = 0; i < vector_size; ++i) {
int input;
std::cin >> input;
vec.push_back(input);
}
int count_1 = 0;
int count_3 = 0;
bool found = false;
for (int i = 0; i < vector_size; ++i) {
if (vec[i] == 1) count_1++;
if (vec[i] == 3) count_3++;
if (i + 3 < vector_size) {
if (vec[i] == 1 && vec[i + 1] == 9 && vec[i + 2] == 8 && vec[i + 3] == 9) {
found = true;
}
}
}
std::cout << "Anzahl der 1en im Vektor: " << count_1 << std::endl;
std::cout << "Anzahl der 3en im Vektor: " << count_3 << std::endl;
if (found) {
std::cout << "Das Album \"1989\" von Taylor Swift ist ein sehr gutes Album." << std::endl;
} else {
std::cout << "\"1989\" kommt nicht vor." << std::endl;
}
return 0;
}
+81
View File
@@ -0,0 +1,81 @@
#include <iostream>
#include <string>
#include <vector>
enum Abteilung {
IT,
FINANZ,
MARKETING,
PERSONAL,
PRODUKTION
};
struct angestellter {
std::string name;
int personalnummer;
Abteilung abteilung;
double gehalt;
};
angestellter angestellter_eingeben();
std::vector<angestellter> abteilung_check(std::vector<angestellter> vec, Abteilung abt);
int main() {
angestellter beispielAngestellter = angestellter_eingeben();
std::cout << std::endl << "Angestellter:" << std::endl;
std::cout << "Name: " << beispielAngestellter.name << std::endl;
std::cout << "Personalnummer: " << beispielAngestellter.personalnummer << std::endl;
std::cout << "Abteilung: " << beispielAngestellter.abteilung << std::endl;
std::cout << "Gehalt: " << beispielAngestellter.gehalt << std::endl;
angestellter kollege1 = {"Hans Wurst", 678, PRODUKTION, 3550.5};
angestellter kollege2 = {"Scrooge McDough", 022, FINANZ, 4702};
angestellter kollege3 = {"Ninja Scripter", 337, IT, 2500};
angestellter kollege4 = {"Snake Oil", 888, MARKETING, 1800};
angestellter kollege5 = {"Overlord", 007, PERSONAL, 5600};
std::vector<angestellter> belegschaft = {kollege1, kollege2, kollege3, kollege4, kollege5};
std::vector<angestellter> filtered = abteilung_check(belegschaft, beispielAngestellter.abteilung);
// Display filtered employees or a message if no matching employees are found.
if (!filtered.empty()) {
for (const auto& ang : filtered) {
std::cout << "Filtered employee: " << ang.name << std::endl;
}
} else {
std::cout << "No matching employees found." << std::endl;
}
return 0;
}
std::vector<angestellter> abteilung_check(std::vector<angestellter> vec, Abteilung abt) {
std::vector<angestellter> division;
for (const auto &ang : vec) {
if (ang.abteilung == abt) {
division.push_back(ang);
}
}
return division;
}
angestellter angestellter_eingeben() {
angestellter neuerAngestellter;
int abteilungWahl;
std::cout << "Name: ";
std::getline(std::cin, neuerAngestellter.name);
std::cout << "Personalnummer: ";
std::cin >> neuerAngestellter.personalnummer;
std::cout << "Abteilung (0: IT, 1: FINANZ, 2: MARKETING, 3: PERSONAL, 4: PRODUKTION): ";
std::cin >> abteilungWahl;
neuerAngestellter.abteilung = static_cast<Abteilung>(abteilungWahl);
std::cout << "Gehalt: ";
std::cin >> neuerAngestellter.gehalt;
std::cin.ignore();
return neuerAngestellter;
}
+62
View File
@@ -0,0 +1,62 @@
/* Informatik B - Sommersemester 2023
Vorlesung am 03.05.2023
Katharina Klost
Weiteres Beispiel zur Rekursion
*/
#include <iostream>
/*
Voraussetzung: n ist größer als 0
Ergebnis: Wenn Collatz mit n/2 terminiert ist true geliefert
Effekt: keiner
*/
bool c1(unsigned);
/*
Voraussetzung: n ist größer als 0
Ergebnis: Wenn Collatz mit 3*n+1 terminiert ist true geliefert
Effekt: keiner
*/
bool c2(unsigned);
/*
Voraussetzung: n ist größer als 0
Ergebnis: true, wenn die Collatzfolge von n aus terminiert
Effekt: gibt aktuellen Wert n aus
*/
bool collatz(unsigned);
bool c1(unsigned n){
return collatz(n/2);
}
bool collatz(unsigned n){
std::cout << n << std::endl;
if (n==1){
return true;
}
// !(n%2) ist true, wenn n gerade ist. Dies kann wie folgt gesehen werden:
// für gerade n ist n%2 == 0. Das Anwenden von ! interpretiert die 0 dann als
// false, dieses wird negiert und damit wird der Ausdruck zu true ausgewertet.
// Etwas länger aber evtl besser zu lesen wär (n%2 == 0).
if (!(n%2)){
return c1(n);
}else{ // n ungerade
return c2(n);
}
}
bool c2(unsigned n){
return collatz(3*n+1);
}
int main(){
int n;
std::cout << "Gebe eine Zahl ein: ";
std::cin >> n;
collatz(n);
std::cout << "terminated" << std::endl;
}
+65
View File
@@ -0,0 +1,65 @@
/* Informatik B - Sommersemester 2023
Vorlesung am 05.05.2023
Katharina Klost
Verschiedene Umsetzungen des euklidischen Algorithmus
*/
#include <iostream>
/*
Voraussetzung: keine
Effekt: Es werden Informationen zum Ablauf ausgegeben
Ergebnis: Der größte gemeinsame Teiler von a und b ist geliefert
*/
// Rekursive Umsetzung
unsigned euclid_rec(unsigned a, unsigned b);
//optimierte rekursive Umsetzung
unsigned euclid_rec_opt(unsigned a, unsigned b);
//iterative Umsetzung
unsigned euclid_it(unsigned a, unsigned b);
unsigned euclid_rec(unsigned a, unsigned b){
std::cout << "ggT(" << a << ", " << b << ")" << std::endl;
if (b>a){
return euclid_rec(b,a);
}
if(b==0){
return a;
}
return euclid_rec(a-b, b);
}
// statt immer wieder a-b zu rechnen, bis das Ergebnis kleiner als b ist,
// kann direkt modulu verwendet werden
unsigned euclid_rec_opt(unsigned a, unsigned b){
std::cout << "ggTopt(" << a<< ", " << b << ")" << std::endl;
if(b==0){
return a;
}
return euclid_rec_opt(b, a%b);
}
//iterative Umsetzung des optimierten euklidischen Algorithmus
unsigned euclid_it(unsigned a, unsigned b){
unsigned newb;
while(b!=0){
newb = a%b;
a=b;
b = newb;
}
return a;
}
int main(){
int a= 12;
int b= 136;
std::cout << "===Rekursiv===" << std::endl;
int ggT= euclid_rec(a , b);
std::cout << "Der ggT von " << a << " und " << b << " ist " << ggT <<std::endl;
std::cout << "===Rekursiv Optimiert ===" << std::endl;
ggT= euclid_rec_opt(a , b);
std::cout << "Der ggT von " << a << " und " << b << " ist " << ggT <<std::endl;
}
+70
View File
@@ -0,0 +1,70 @@
/*
Arbeiten mit Dateien in C++:
- Datei öffnen
- Datei lesen
- Datei schließen
Quelle: https://cplusplus.com/reference/fstream/
histogram() ist eine Funktion, die ein Histogramm der Buchstaben in einem String erstellt.
- Vorraussetzungen: str ist ein String
- Ergebnis: hist ist ein Vektor, der die Häufigkeit der Buchstaben in str enthält
- Seiteneffekte: keine
*/
#include <iostream>
#include <string>
#include <fstream>
#include <vector>
std::vector<int> histogram(std::string str);
int main() {
std::ifstream inputFile("moby.txt");
std::string content, line;
while (std::getline(inputFile, line)) {
content += line;
}
std::vector<int> hist = histogram(content);
for (unsigned i = 0; i < 26; i++) {
if (hist[i] > 0) {
std::cout << static_cast<char>('a' + i) << ": " << hist[i] << ", ";
}
}
for (unsigned i = 26; i < hist.size(); i++) { // Loop for uppercase letters
if (hist[i] > 0) {
std::cout << static_cast<char>('A' + i - 26) << ": " << hist[i] << ", ";
}
}
std::cout << std::endl;
inputFile.close();
return 0;
}
std::vector<int> histogram(std::string str) {
std::vector<int> hist(52, 0);
for (unsigned i = 0; i < str.length(); i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
hist[str[i] - 'a']++;
}
else if (str[i] >= 'A' && str[i] <= 'Z') {
hist[str[i] - 'A' + 26]++;
}
}
return hist;
}
+91
View File
@@ -0,0 +1,91 @@
#include <iostream>
#include <string>
#include <vector>
// Enum für die verschiedenen Menüpunkte
enum MenuType {
Vorspeise,
Hauptgang,
Dessert
};
// Struct für die Details eines Menüpunkts
struct MenuItem {
MenuType type;
std::string name;
std::string description;
double price;
};
void showMenu(const std::vector<MenuItem>& menu) {
for (size_t i = 0; i < menu.size(); ++i) {
std::string type;
switch (menu[i].type) {
case Vorspeise:
type = "Vorspeise";
break;
case Hauptgang:
type = "Hauptgang";
break;
case Dessert:
type = "Dessert";
break;
}
std::cout << type << ": " << menu[i].name << " - " << menu[i].description << " (€" << menu[i].price << ")\n";
}
}
MenuItem searchMenuItem(const std::vector<MenuItem>& menu, const std::string& name) {
for (size_t i = 0; i < menu.size(); ++i) {
if (menu[i].name == name) {
return menu[i];
}
}
return MenuItem{static_cast<MenuType>(-1), "", "", -1.0};
}
int main() {
// Erstellen des Restaurantmenüs
std::vector<MenuItem> menu = {
{Vorspeise, "Bruschetta", "Geröstetes Brot mit Tomaten, Knoblauch und Basilikum", 5.0},
{Hauptgang, "Spaghetti Bolognese", "Spaghetti mit würziger Hackfleisch-Tomatensauce", 10.0},
{Dessert, "Tiramisu", "Italienisches Dessert aus Löffelbiskuit, Mascarpone und Kaffee", 6.0}
};
std::cout << "Willkommen im Restaurant!\n";
std::cout << "Möchten Sie das Menü anzeigen oder nach einem bestimmten Menüpunkt suchen?\n";
std::cout << "1. Menü anzeigen\n";
std::cout << "2. Nach Menüpunkt suchen\n";
std::cout << "3. Beenden\n";
int option;
std::cin >> option;
while (option != 3) {
if (option == 1) {
showMenu(menu);
} else if (option == 2) {
std::string name;
std::cout << "Geben Sie den Namen des Menüpunkts ein, nach dem Sie suchen möchten: ";
std::cin.ignore();
std::getline(std::cin, name);
MenuItem item = searchMenuItem(menu, name);
if (item.price != -1.0) {
std::cout << item.name << " - " << item.description << " (€" << item.price << ")\n";
} else {
std::cout << "Menüpunkt nicht gefunden.\n";
}
} else {
std::cout << "Ungültige Option.\n";
}
std::cout << "\nMöchten Sie das Menü anzeigen oder nach einem bestimmten Menüpunkt suchen?\n";
std::cout << "1. Menü anzeigen\n";
std::cout << "2. Nach Menüpunkt suchen\n";
std::cout << "3. Beenden\n";
std::cin >> option;
}
std::cout << "Vielen Dank für Ihren Besuch! Auf Wiedersehen!\n";
return 0;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,45 @@
/* Informatik B - Sommersemester 2023
Vorlesung am 03.05.2023
Katharina Klost
Beispiele zu rekursion und iteration
*/
#include <iostream>
/*
Voraussetzung: keine
Ergebnis: Die Fakultät von n ist geliefert
Effekt: keiner
Rekursive Implementierung
*/
unsigned fak_rek(unsigned n);
/*
Voraussetzung: keine
Ergebnis: Die Fakultät von n ist geliefert
Effekt: keiner
Iterative Implementierung
*/
unsigned fak_iter(unsigned n);
//Da hier direkte rekursion verwendet wird, gibt es keine Optimierung.
// Bei Endrekursion und Verwendung des -O3 flags wird die Endrekursion optimiert
unsigned fak_rek(unsigned n){
if (n==0){
return 1;
}
return(fak_rek(n-1)*n);
}
unsigned fak_iter(unsigned n){
unsigned res = 1;
for (unsigned i = 1; i<=n; i++){
res*=i;
}
return res;
}
int main(){
}
+43
View File
@@ -0,0 +1,43 @@
#include <iostream>
#include <string>
/*
- Voraussetzungen: str ist ein String, charToReplace und replacementChar sind Zeichen
- Ergebnis: str ist ein String, in dem alle Vorkommen von charToReplace durch replacementChar ersetzt wurden
- Seiteneffekte: keine
Der Rückgabetyp ist string, weil wir einen neuen String zurückgeben wollen, in dem alle Vorkommen von charToReplace durch replacementChar ersetzt wurden.
Die Parameter sind char, weil wir nur ein Zeichen ersetzen wollen.
*/
std::string repl(std::string str, char charToReplace, char replacementChar);
int main() {
std::cout << "Bitte gebe einen String ein bei dem du die Zeichen ersetzen willst: ";
std::string s;
std::getline(std::cin, s);
std::cout << "Bitte gebe das Zeichen ein, welches zu ersetzen möchtest: ";
char a;
std::cin >> a;
std::cout << "Bitte gebe das Zeichen ein, durch welches du ersetzen möchtest: ";
char b;
std::cin >> b;
std::cout << "Dein neuer String ist: " << repl(s, a, b) << std::endl;
}
std::string repl(std::string str, char charToReplace, char replacementChar) {
for (unsigned i = 0; i < str.length(); i++) {
if (str[i] == charToReplace) {
str[i] = replacementChar;
}
}
return str;
}
+35
View File
@@ -0,0 +1,35 @@
#include <iostream>
#include <vector>
std::vector<int> reverseSortVector(std::vector<int> vec);
int main() {
int input = -1;
std::vector<int> vec;
std::vector<int> vecnew;
std::cout << "Geben Sie eine Zahlenfolge ein, mit 0 beenden Sie die Eingabe: " << std::endl;
while (input != 0) {
std::cin >> input;
if (input != 0) {
vec.push_back(input);
}
}
vecnew = reverseSortVector(vec);
std::cout << "Die Zahlenfolge in umgekehrter Reihenfolge: " << std::endl;
for (unsigned i = 0; i < vecnew.size(); i++) {
std::cout << vecnew[i] << std::endl;
}
}
std::vector<int> reverseSortVector(std::vector<int> vec) {
std::vector<int> vecnew;
for (unsigned i = vec.size() - 1; i >= 0; i--) {
vecnew.push_back(vec[i]);
}
return vecnew;
}
+47
View File
@@ -0,0 +1,47 @@
#include <iostream>
#include <vector>
#include <algorithm>
/*
Voraussetzung: keine
Effekt: Keiner
Ergebnis: Eine größtmögliche Auswahl von Elementen, deren Summe von Gewichten unter bound ist,
ist geliefert.
*/
std::vector<unsigned> rucksack_einfach(unsigned bound, std::vector<unsigned> gewichte);
/*
Voraussetzung: Der vector hat mindestens ein Element
Effekt: Die Elementen von vec im geschlossenen Intervall [start, end] werden ausgegeben
Ergebnis: keins
*/
void gebe_aus(std::vector<unsigned>& vec, unsigned start, unsigned end);
std::vector<unsigned> rucksack_einfach(unsigned bound, std::vector<unsigned> gewichte){
std::vector<unsigned> rucksack_inhalt ={};
std::sort(gewichte.begin(), gewichte.end());
for(unsigned i = 0; i<gewichte.size() && bound >= gewichte[i]; i++){
bound = bound - gewichte[i];
rucksack_inhalt.push_back(gewichte[i]);
}
return rucksack_inhalt;
}
void gebe_aus(std::vector<unsigned>& vec, unsigned start, unsigned end){
if(end>vec.size() || start >= end){
std::cout << vec.size() << " " << end << std::endl;
return;
}
std::cout << vec[start];
for(unsigned k=start+1; k<end; k++){
std::cout << ", " << vec[k];
}
std::cout << std::endl;
}
int main(){
std::vector<unsigned> gewichte = {3,7,4,17,5,6};
std::vector<unsigned> einfach_erg = rucksack_einfach(12, gewichte);
gebe_aus(einfach_erg, 0, einfach_erg.size());
}
+33
View File
@@ -0,0 +1,33 @@
#include <iostream>
#include <string>
/*
- Voraussetzungen: str ist ein String
- Ergebnis: str ist ein String, der nur aus Großbuchstaben besteht
- Seiteneffekte: keine
Der Rückgabetyp ist string, weil wir einen neuen String zurückgeben wollen, der nur aus Großbuchstaben besteht.
Der Parameter ist string, weil wir einen String übergeben wollen, bei dem wir die Buchstaben in Großbuchstaben umwandeln wollen.
*/
std::string upper(std::string str);
int main() {
std::cout << "Bitte gebe einen String ein der groß geschrieben werden soll: ";
std::string s;
std::getline(std::cin, s);
std::cout << "Hier ist dein neuer String: " << upper(s) << std::endl;
}
std::string upper(std::string str) {
for (unsigned i = 0; i < str.length(); i++) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = str[i] - 32;
}
}
return str;
}