added ws202425 courses
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
|
||||
int main(){
|
||||
int n1 = 10;
|
||||
int n2 = 20;
|
||||
int n3 = n1/n2;
|
||||
float f1 = 10;
|
||||
float f2 = f1 + 10;
|
||||
float f3 = f1/f2;
|
||||
|
||||
cout << "n3: " << n3 << endl;
|
||||
cout << "f3: " << f3 << endl;
|
||||
|
||||
f3 += 3;
|
||||
cout << "f3: " << f3++ << endl;
|
||||
cout << "f3: mit postincr " << f3++ << endl;
|
||||
cout << "f3: mit preincr " << ++f3 << endl;
|
||||
|
||||
bool comp1 = 2*5+5*2 == n2;
|
||||
n2 = n2*2;
|
||||
bool comp2 = 2*5+5*2 == n2;
|
||||
bool comp3 = n3 < f3;
|
||||
|
||||
bool comp4 = comp1 && comp3 || comp2;
|
||||
cout << "comp1, comp2, comp3, comp4: " << comp1 << ", " << comp2 << ", " << comp3 << ", " << comp4 << endl;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zur Kombination von zusammengesetzen Datentypen
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
enum class wohnart{HAUS,WOHNUNG};
|
||||
|
||||
struct person{
|
||||
std::string name;
|
||||
wohnart wa;
|
||||
unsigned telefonnummer;
|
||||
};
|
||||
|
||||
int main(){
|
||||
|
||||
// eine person hat unter anderem einen enum als Feld und kann in einem
|
||||
// vector gespeichert werden
|
||||
std::vector<person> telefonbuch = {};
|
||||
|
||||
for(unsigned i=0; i< 30; i++){
|
||||
person p = {"Name"+std::to_string(i) , static_cast<wohnart>((3*i-1)%2), (i*300+23+i/2)};
|
||||
telefonbuch.push_back(p);
|
||||
}
|
||||
|
||||
person eintrag;
|
||||
for(unsigned i= 0 ; i< telefonbuch.size(); i++){
|
||||
eintrag = telefonbuch[i];
|
||||
if(eintrag.wa == wohnart::HAUS){
|
||||
std::cout << eintrag.name << " wohnt in einem Haus" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
std::string query;
|
||||
std::cout << "Welcher Name soll gesucht werden? " ;
|
||||
std::cin >> query;
|
||||
bool found = false;
|
||||
for (unsigned i= 0; i< telefonbuch.size()&&!found; i++){
|
||||
eintrag = telefonbuch[i];
|
||||
if (eintrag.name == query){
|
||||
std::cout << eintrag.name << " hat Telefonnummer: "<< eintrag.telefonnummer << std::endl;
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
if (!found){
|
||||
std::cout << query << " ist nicht im Telefonbuch enthalten" << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 26.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zur Deklaration und Initialisierung von Variablen
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(){
|
||||
int num1;
|
||||
//num1 ist nur deklariert und nicht initialisiert und daher ist
|
||||
//der Inhalt hier nicht definiert (irgendein Wert)
|
||||
std::cout << num1 << std::endl;
|
||||
|
||||
num1 = 10;
|
||||
|
||||
std::cout << num1 << std::endl;
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu enums
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
//Ein enum für Wochentage
|
||||
enum class Wochentag{
|
||||
Montag,
|
||||
Dienstag,
|
||||
Mittwoch,
|
||||
Donnerstag,
|
||||
Freitag,
|
||||
Samstag,
|
||||
Sonntag
|
||||
};
|
||||
|
||||
|
||||
//Ein enum für Farben
|
||||
enum class Farbe {rot, gruen, blau, orange};
|
||||
|
||||
// Ein enum für die Zustände von Ampeln
|
||||
enum class Ampel {gruen, gelb, rot, gelb_rot};
|
||||
|
||||
int main(){
|
||||
// der Name des enums muss immer angegeben werden, da es Felder mit
|
||||
// dem gleichen Namen in verschiedenen enums geben kann
|
||||
Ampel ampel1 = Ampel::gruen;
|
||||
//enums und switch-case sind eine beliebte Kombination
|
||||
switch(ampel1){
|
||||
case Ampel::gruen:
|
||||
std::cout << "Kann fahren" << std::endl;
|
||||
break;
|
||||
case Ampel::gelb:
|
||||
std::cout << "Achtung" << std::endl;
|
||||
break;
|
||||
case Ampel::rot:
|
||||
std::cout << "Stop" << std::endl;
|
||||
break;
|
||||
case Ampel::gelb_rot:
|
||||
std::cout << "Achtung" << std::endl;
|
||||
break;
|
||||
default:
|
||||
std::cout <<"Irgendwas anderes" << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
int number;
|
||||
std::cout << "Gebe einen Tag ein, (Montag=1,..., Sonntag =7)";
|
||||
std::cin >> number;
|
||||
// da enums intern mit Zahlen dargestellt werden, können Zahlen
|
||||
// explizit in eine enum umgewandelt werden
|
||||
Wochentag tag = static_cast<Wochentag>(number-1);
|
||||
|
||||
// werden enums verglichen gilt die Reihenfolge in der Definition
|
||||
if (tag >= Wochentag::Samstag){
|
||||
std::cout << "Es ist Wochenende :)" << std::endl;
|
||||
}
|
||||
else{
|
||||
std::cout << "Es ist ein Arbeitstag :(" << std::endl;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
#include <iostream>
|
||||
|
||||
// Fibonacci numbers
|
||||
|
||||
int main() {
|
||||
|
||||
int x;
|
||||
std::cout << "x-th Fibonacci number?: ";
|
||||
std::cin >> x;
|
||||
|
||||
int prev = 0;
|
||||
int curr = 1;
|
||||
int tmp;
|
||||
|
||||
for (int i = 2; i <= x; ++i) {
|
||||
tmp = curr;
|
||||
curr = prev + curr;
|
||||
prev = tmp;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 26.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu Gültigkeitsbereichen
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main (){
|
||||
|
||||
|
||||
int variable1;
|
||||
std::cin >> variable1;
|
||||
|
||||
float variable3;
|
||||
|
||||
if (variable1 == 10){
|
||||
float varible2 = 9.1;
|
||||
std::cout << varible2 << std::endl;
|
||||
}
|
||||
else{
|
||||
// neue Deklaration von variable3, überschattet die andere variable3
|
||||
float variable3 = 10.1;
|
||||
std::cout << variable3 << std::endl;
|
||||
}
|
||||
/*
|
||||
variable2 ist nur in der ersten if-Bedingung definiert und kann daher
|
||||
hier nicht verwendet werden.
|
||||
*/
|
||||
//std::cout << variable2 << std::endl;
|
||||
|
||||
//Da diese variable3 nur deklariert aber nicht initialisiert wurde,
|
||||
// ist der Inhalt hier beliebig
|
||||
std::cout << variable3 << std::endl;
|
||||
|
||||
variable3 = 1.1;
|
||||
|
||||
|
||||
while(variable1<10){
|
||||
//wird immer wieder neu deklariert
|
||||
int variable3 = variable1;
|
||||
std::cout << "variable3 in schleife: " << variable3 << std::endl;
|
||||
variable1++;
|
||||
}
|
||||
std::cout << "variable1 nach erster Schleife: " << variable1 << std::endl;
|
||||
std::cout << "variable3 nach erster Schleife: " << variable3 << std::endl;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 26.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu Kontrollstrukturen
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
|
||||
|
||||
int main(){
|
||||
|
||||
/*
|
||||
Beispiel für eine komplexere if-then-else Abfrage.
|
||||
*/
|
||||
int num ;
|
||||
std::cout << "Gebe eine Zahl für den if test ein: " ;
|
||||
std::cin >> num;
|
||||
if (num == 2) {
|
||||
num = num*2;
|
||||
}
|
||||
else if (num > 1 && num <5) {
|
||||
num= num*3;
|
||||
}
|
||||
else if (num >=10){
|
||||
num = num*4;
|
||||
}
|
||||
else{
|
||||
num = num*5;
|
||||
}
|
||||
std::cout << num << std::endl;
|
||||
|
||||
/*
|
||||
Beispiel für eine switch-case umgebeung
|
||||
Die einzelnen case Abschnitte sind keine Blöcke, daher gibt es ohne
|
||||
break einen fallthrough und es können keine Variablen deklariert werden.
|
||||
|
||||
Bei modernen Compilern sollte es keine Unterschiede in der Performance
|
||||
von semantisch gleichen if-Bedingungen und switch-case Umgebungen geben
|
||||
*/
|
||||
int num1;
|
||||
std::cout << "Gebe eine Zahl für den switch-case test ein: ";
|
||||
std::cin >> num1;
|
||||
switch(num1){
|
||||
case 1:
|
||||
std::cout << "num ist 1" << std::endl; //kein break -> fallthrough
|
||||
case 2:
|
||||
std::cout << "num ist 1 oder 2" << std::endl;
|
||||
break;
|
||||
case 3:
|
||||
std::cout << "num ist 3" << std::endl;
|
||||
break;
|
||||
case 4:
|
||||
std::cout << "num ist 4" << std::endl;
|
||||
break;
|
||||
default:
|
||||
std::cout << "num ist nicht 1,2,3 oder 4" << std::endl;
|
||||
}
|
||||
|
||||
/*
|
||||
Beispiel für eine for-schleife, in <Anweisung3> und <Anweisung1> (vgl. Folien)
|
||||
Können auch mehrere Anweisungen mit , getrennt stehen.
|
||||
*/
|
||||
int num_for = 3;
|
||||
for (int counter=1; counter <=4; counter=counter+1, num_for ++) {
|
||||
num_for= num_for*num_for;
|
||||
std::cout << "num_for in iteration " << counter << ": "<< num_for << std::endl;
|
||||
}
|
||||
std::cout << "num_for nach Schleife: " << num_for << std::endl;
|
||||
|
||||
/*
|
||||
Beispiel für eine while-schleife
|
||||
*/
|
||||
int num_while = 2;
|
||||
int goal = 300;
|
||||
while (num_while < goal) {
|
||||
num_while = num_while * num_while;
|
||||
std::cout << "num_while after *: " << num_while << std::endl;
|
||||
}
|
||||
std::cout << num_while << std::endl;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu pairs
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
int main(){
|
||||
std::pair<std::string, int> mein_paar = {"Hallo", 1234};
|
||||
|
||||
std::cout << "Erster Eintrag vom mein_paar: " << mein_paar.first << std::endl;
|
||||
std::cout << "Zweiter Eintrag vom mein_paar: " << mein_paar.second << std::endl;
|
||||
|
||||
mein_paar.first = "Test";
|
||||
|
||||
std::cout << "Neuer erster Eintrag: " << mein_paar.first << std::endl;
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu Strings
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main(){
|
||||
std::string ein_string = "Hallo";
|
||||
char stelle2 = ein_string[2];
|
||||
std::cout << "An index 2 steht: " << stelle2 << std::endl;
|
||||
ein_string[2]= 'x';
|
||||
std::cout << "Stelle 2 verändert: " << ein_string << std::endl;
|
||||
ein_string = ein_string + " Welt!";
|
||||
std::cout << ein_string << std::endl;
|
||||
std::cout << ein_string + 'c' << std::endl;
|
||||
|
||||
std::cout << "Der String \"" << ein_string << "\" hat " << ein_string.length() << " Zeichen" << std::endl;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu structs
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
|
||||
struct studi{
|
||||
std::string name;
|
||||
int matrikelnummer;
|
||||
bool bachelor;
|
||||
std::string studienfach;
|
||||
};
|
||||
|
||||
struct studi2{
|
||||
std::string name;
|
||||
int matrikelnummer;
|
||||
bool bachelor;
|
||||
std::string studienfach;
|
||||
};
|
||||
|
||||
int main(){
|
||||
studi luca = {"Luca Muster", 42, true, "Informatik"};
|
||||
studi mo = {"Mo", 112, true, "Bioinformatik"};
|
||||
studi alex = {"Alex Müller", 4711, false, "Informatik"};
|
||||
|
||||
//mit dem . kann auf ein Feld zugegriffen werden.
|
||||
std::cout << mo.name << std::endl;
|
||||
mo.bachelor = false;
|
||||
std::cout << mo.bachelor << std::endl;
|
||||
|
||||
// wegen der Wertsemantik werden die Einträge beim zuweisen kopiert
|
||||
studi luca2 = luca;
|
||||
|
||||
luca2.name = "Luca Mustermann";
|
||||
std::cout << luca2.name << std::endl;
|
||||
std::cout << luca.name << std::endl;
|
||||
studi2 luca3;
|
||||
//nur structs vom gleichen Typ können einander zugewiesen werden
|
||||
//luca3 = luca;
|
||||
|
||||
//structs können auch in vectoren gespeichert werden
|
||||
std::vector<studi> tutorium ={luca,mo};
|
||||
tutorium.push_back(alex);
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
|
||||
// Aufgabe 1a
|
||||
|
||||
int x;
|
||||
std::cin >> x;
|
||||
int y = 1;
|
||||
|
||||
for (int i = x; i > 0; i--) {
|
||||
y = y * i;
|
||||
}
|
||||
|
||||
std::cout << y << std::endl;
|
||||
|
||||
// Aufgabe 1b
|
||||
|
||||
int z = 1;
|
||||
int l = x;
|
||||
while (l > 1) {
|
||||
z = z * l;
|
||||
l--;
|
||||
}
|
||||
|
||||
std::cout << z << std::endl;
|
||||
|
||||
// Aufgabe 2
|
||||
|
||||
// 1 Load 7
|
||||
// 2 Write 6
|
||||
// 3 Add 7
|
||||
// 4 Jump 2
|
||||
// 5 Return
|
||||
// 6 0
|
||||
// 7 3
|
||||
|
||||
// Aufgabe 3
|
||||
|
||||
std::string artist;
|
||||
std::cout << "Wer ist dein Lieblingsartist?" << std::endl;
|
||||
std::cin >> artist;
|
||||
std::cout << "Dein Lieblingsartist ist " << artist << std::endl;
|
||||
|
||||
std::string album;
|
||||
std::cout << "Was ist dein Lieblingsalbum?" << std::endl;
|
||||
std::cin >> album;
|
||||
std::cout << "Dein Lieblingsalbum ist " << album << std::endl;
|
||||
|
||||
int zahl;
|
||||
std::cout << "Was ist deine Lieblingszahl?" << std::endl;
|
||||
std::cin >> zahl;
|
||||
int quad = zahl * zahl;
|
||||
std::cout << "Deine Lieblingszahl ist " << quad << std::endl;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 26.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zur Ein-und Ausgabe
|
||||
*/
|
||||
|
||||
#include <iostream> // gibt Ein-und Ausgabe
|
||||
#include <climits> // gibt Minimal- und Maximalwerte für die Datentypen
|
||||
|
||||
int main(){
|
||||
|
||||
/*Zuweisen einer Gleitkommazahl zu einer Ganzzahl schneidet die
|
||||
Nachkommastellen ab
|
||||
*/
|
||||
int a = 3.5;
|
||||
std::cout << "a: " << a << std::endl;
|
||||
|
||||
int n1 = SHRT_MAX;
|
||||
short n2 = SHRT_MAX;
|
||||
|
||||
|
||||
short n3 = n2 + n2; // overflow
|
||||
int n4 = n1 + n2; //der größere Datentyp gewinnt
|
||||
|
||||
std::cout << "n3, n4: "<<n3 << ", " << n4<< std::endl;
|
||||
|
||||
|
||||
unsigned int n5 = 5;
|
||||
int n6 = -6;
|
||||
// Bei Kombination von unsigned und signed Typen gewinnt
|
||||
// der unsigned, der Inhalt der Speicherzelle wird dann
|
||||
// intern anders interpretiert
|
||||
std::cout << "n5+n6: "<< n5+6 <<std::endl;
|
||||
|
||||
|
||||
|
||||
// Bei der Kombination von Gleitkommazahlen und Ganzzahlen gewinnt
|
||||
// die Gleitkommazahl
|
||||
double f1 = 0.4;
|
||||
std::cout << f1 + n6<< std::endl;
|
||||
|
||||
|
||||
int i1 = 18;
|
||||
int i2 = 16;
|
||||
|
||||
//implizieter Typcast, es wird erst Ganzzahlig dividiert
|
||||
// (Nachkommastellen abgeschnitten) und dann umgewandelt
|
||||
double dv1 = i1 / i2;
|
||||
|
||||
//werden Divisor und Divident erst umgewandelt, ist das Ergebnis die
|
||||
//erwartete Gleitkommazahl
|
||||
double dv2 = static_cast<double>(i1) / static_cast<double>(i2);
|
||||
|
||||
// Wie weiter oben, erst wird geteilt (und abgeschnitten) und dann umgewandelt
|
||||
// und dann zugewiesen.
|
||||
double dv3 = static_cast<double>( i1 / i2 );
|
||||
std::cout << dv1 << ", " << dv2 << ", " << dv3 << std::endl;
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
int main() {
|
||||
|
||||
// 1.
|
||||
|
||||
int eingabe0 = -1;
|
||||
|
||||
std::cout << "Aufgabe (1) oder (2)?" << std::endl;
|
||||
std::cin >> eingabe0;
|
||||
|
||||
if (eingabe0 == 1){
|
||||
int eingabe1 = -1;
|
||||
std::vector<int> zahlenfolge;
|
||||
int min = 0;
|
||||
int max = 0;
|
||||
|
||||
while (true) {
|
||||
|
||||
|
||||
std::cout << "Geben Sie eine Zahl der Zahlenfolge ein, mit 0 geben sie MIN und MAX aus, mit 9999 geben sie den Mittelwert aus: " << std::endl;
|
||||
std::cin >> eingabe1;
|
||||
|
||||
if (eingabe1 == 0) {
|
||||
|
||||
for (unsigned i = 0; i < zahlenfolge.size(); i++){
|
||||
|
||||
if (zahlenfolge[i] < min){
|
||||
min = zahlenfolge[i];
|
||||
}
|
||||
|
||||
if (zahlenfolge[i] > max){
|
||||
max = zahlenfolge[i];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
std::cout << "Das Maximum der Zahlenfolge ist: " << max << std::endl;
|
||||
std::cout << "Das Minimum der Zahlenfolge ist: " << min << std::endl;
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (eingabe1 == 9999) {
|
||||
|
||||
float summe = 0;
|
||||
|
||||
for (unsigned i = 0; i < zahlenfolge.size(); i++){
|
||||
summe += zahlenfolge[i];
|
||||
}
|
||||
|
||||
double mittelwert = summe / zahlenfolge.size();
|
||||
|
||||
std::cout << "Der Mittelwert der Zahlenfolge ist: " << mittelwert << std::endl;
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
zahlenfolge.push_back(eingabe1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 2.
|
||||
|
||||
if (eingabe0 == 2){
|
||||
|
||||
|
||||
char eingabe01;
|
||||
std::cout << "Teilaufgabe (a) oder (b) ?" << std::endl;
|
||||
std::cin >> eingabe01;
|
||||
|
||||
// 2 a)
|
||||
if (eingabe01 == 'a'){
|
||||
|
||||
int eingabe2 = -1;
|
||||
std::cout << "Geben Sie eine Zahl größer 0 ein, von der die Quersumme berechnet werden soll" << std::endl;
|
||||
std::cin >> eingabe2;
|
||||
|
||||
int eingabe3 = -1;
|
||||
std::cout << "Soll die Quersumme mit einer while (0) oder for (1) Schleife berechnet werden?" << std::endl;
|
||||
std::cin >> eingabe3;
|
||||
|
||||
if (eingabe3 == 0){
|
||||
|
||||
int quersummewhile = 0;
|
||||
|
||||
while (eingabe2 > 0){
|
||||
quersummewhile += eingabe2 % 10;
|
||||
eingabe2 /= 10;
|
||||
}
|
||||
|
||||
std::cout << "Die Quersumme der Zahl ist: " << quersummewhile << std::endl;
|
||||
|
||||
}
|
||||
|
||||
if (eingabe3 == 1){
|
||||
|
||||
int quersummefor = 0;
|
||||
|
||||
for (quersummefor; eingabe2 > 0; eingabe2 /= 10){
|
||||
quersummefor += eingabe2 % 10;
|
||||
}
|
||||
|
||||
std::cout << "Die Quersumme der Zahl ist: " << quersummefor << std::endl;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// 2 b)
|
||||
if (eingabe01 == 'b'){
|
||||
int n;
|
||||
std::cout << "Geben Sie eine Zahl größer 0 ein: " << std::endl;
|
||||
std::cin >> n;
|
||||
|
||||
for (int i = 0; i <= n; i++) {
|
||||
std::string output = "";
|
||||
if (i % 3 == 0) {
|
||||
std::cout << "bli" << std::endl;
|
||||
}
|
||||
if (i % 5 == 0) {
|
||||
std::cout << "bla" << std::endl;
|
||||
}
|
||||
if (i % 7 == 0) {
|
||||
std::cout << "blub" << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
# 3. Gültigkeitsbereich und Recherche (5+2+3 Punkte)
|
||||
## (a) Betrachten Sie den folgenden C++-Code und geben Sie für alle Variablen den Gültigkeitsbereich
|
||||
an.
|
||||
|
||||
```cpp
|
||||
#include <vector>
|
||||
int main(){
|
||||
int v1 = 32;
|
||||
double i = 7.0;
|
||||
for(int i= 2; i< 30; i++){
|
||||
v1 *= i; }
|
||||
std::vector<std::vector<int>> vec = {
|
||||
{ 1, 2, 3 },
|
||||
{ 4, 5, 6 },
|
||||
{ 7, 8, 9, 4 } };
|
||||
for (i = 0; i<vec.size(); i++){
|
||||
int v1=20;
|
||||
for (unsigned int j=0; j<vec[i].size();j++){
|
||||
v1 = vec[i][j];
|
||||
}
|
||||
v1+=1; }
|
||||
}
|
||||
```
|
||||
|
||||
Die Variable v1 befindet sich in dem Gültigkeitsbereich von main() und auch in dem Gültigkeitsbereich der for-Schleife.
|
||||
|
||||
Die Variable i befindet sich in dem Gültigkeitsbereich von main() und in dem Gültigkeitsbereich der ersten for-Schleife. Die Variable i aus dem Gültigkeitsbereich von main() wird für die for-Schleife überschrieben.
|
||||
|
||||
Die Variable vec befindet sich in dem Gültigkeitsbereich von main() und in dem Gültigkeitsbereich der zweiten for-Schleife.
|
||||
|
||||
Die Variable i aus dem Gültigkeitsbereich der ersten for-Schleife wird für die zweite for-Schleife überschrieben.
|
||||
|
||||
Die Variable j befindet sich in dem Gültigkeitsbereich der zweiten for-Schleife.
|
||||
|
||||
## (b) Es gibt in C++ noch eine weitere Schleifenart. Recherchieren Sie welche dies ist. Geben Sie die allgemeine Form an und beschreiben Sie die Funktionalität. Denken Sie daran Quellen anzugeben.
|
||||
|
||||
Die weitere Schleifenart ist die do-while-Schleife. Die allgemeine Form ist:
|
||||
|
||||
```cpp
|
||||
do {
|
||||
<Anweisung>;
|
||||
} while (<Bedingung>);
|
||||
```
|
||||
|
||||
Sie verhält sich wie eine while-Schleife, mit dem Unterschied, dass die Bedingung nach der Ausführung der Anweisung anstatt davor ausgewertet wird. Dadurch wird garantiert, dass die Anweisung mindestens einmal ausgeführt wird, auch wenn die Bedingung niemals erfüllt ist.
|
||||
|
||||
[Quelle](https://www.cplusplus.com/doc/tutorial/control/#do_while)
|
||||
|
||||
## (c) Finden Sie je einen Anwendungsfall, in dem eine for, while und die weitere Schleife gegenüber den anderen Schleifenarten zu bevorzugen ist.
|
||||
|
||||
Die for-Schleife ist zu bevorzugen, wenn die **Anzahl der Durchläufe bekannt** ist.
|
||||
|
||||
Die while-Schleife ist zu bevorzugen, wenn die **Anzahl der Durchläufe nicht bekannt** ist.
|
||||
|
||||
Die do-while-Schleife ist zu bevorzugen, wenn die **Anweisung mindestens einmal ausgeführt werden soll**.
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu vector
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
int main(){
|
||||
|
||||
std::vector<int> zahlen = {10,4,20,24,7,34,1,55,34,17,4};
|
||||
|
||||
//vector mit 10 Boolean einträgen, die alle 0 bzw false sind
|
||||
std::vector<bool> wahrheitswerte(10);
|
||||
|
||||
//vector mit 5 Einträgen, alle sind "Mo"
|
||||
std::vector<std::string> montage(5,"Mo");
|
||||
|
||||
std::cout << zahlen[3] << std::endl;
|
||||
|
||||
zahlen[3] = 100;
|
||||
|
||||
std::cout << zahlen[3] << std::endl;
|
||||
std::cout << zahlen.size() << std::endl;
|
||||
zahlen.push_back(1234);
|
||||
std::cout << zahlen.size() << std::endl;
|
||||
|
||||
|
||||
//ACHTUNG! Kein Fehler, wenn wir auf Daten außerhalb des vector zugreifen
|
||||
std::cout << zahlen[zahlen.size()] << std::endl;
|
||||
|
||||
|
||||
//Wird auf einen Index größer oder gleich size() des vector
|
||||
// zugegriffen gibt es undefiniertes Verhalten.
|
||||
// Es kann ein Wert zurückgegeben werde, oder ein Speicherzugriffehler
|
||||
// ausgegeben werden.
|
||||
// Wird ein Wert außerhalb der Grenzen zugewiesen, wird die Größe
|
||||
// des vector nicht angepasst
|
||||
std::cout << zahlen[100000] << std::endl;
|
||||
std::cout << zahlen.size() << std::endl;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 28.04.2023
|
||||
Katharina Klost
|
||||
|
||||
Beispiele zu vector und schleifen
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
|
||||
int main(){
|
||||
std::vector<int> zahlen = {10,4,20,24,7,34,1,55,34,17,4};
|
||||
int sum = 0;
|
||||
|
||||
//Schleife läuft durch alle Indizes des vector und summiert die Einträge auf
|
||||
for (unsigned int i = 0; i<zahlen.size(); i++){
|
||||
sum += zahlen[i];
|
||||
}
|
||||
|
||||
std::cout << "Summe des vector: " << sum << std::endl;
|
||||
|
||||
//Verschachtelte Schleife geht durch alle Paare i,j mit i<j und i,j < zahlen.size()
|
||||
std::cout << "Alle paare von Werten: " << std::endl;
|
||||
for(unsigned i = 0; i< zahlen.size(); i++){
|
||||
for(unsigned j = i+1; j<zahlen.size(); j++){
|
||||
std::cout << "(" << zahlen[i] << ", " << zahlen[j] <<")" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user