kramann.info
© Guido Kramann

Login: Passwort:










Archiv
2 SoSe2022
..2.1 MIK
..2.2 SRT
..2.3 HDL
..2.4 AUT
..2.5 SLE
2 WS2020_21
..2.1 RTS
....2.1.1 day_by_day
..2.2 IE
....2.2.1 day_by_day
..2.3 ES
..2.4 EFSEE
....2.4.1 day_by_day
..2.5 KF
....2.5.1 day_by_day
....2.5.2 Haikus
....2.5.3 Haikus_en
..2.6 CC
....2.6.1 day_by_day
2 WS2021_22
..2.1 RTS
....2.1.1 day_by_day
....2.1.2 Versuch002
....2.1.3 Versuch003
....2.1.4 Versuch004
....2.1.5 Versuch005
....2.1.99 Material
..2.2 FTS
....2.2.1 day_by_day
..2.3 ESY
....2.3.1 day_by_day
..2.4 INFmecha5
....2.4.1 day_by_day
..2.5 REGmecha5
....2.5.1 day_by_day
2 WS2023_24
..2.1 day_by_day_RST
..2.2 day_by_day_SRT
..2.3 day_by_day_FTS
..2.4 day_by_day_KF
3 SoSe2021
..3.1 STR
....3.1.1 day_by_day
..3.2 SLE
....3.2.1 day_by_day
..3.3 HDL
....3.3.1 day_by_day
..3.4 MIK
....3.4.1 day_by_day
3 SoSe2024
..3.1 Mik_21_03_2024
..3.2 Mik_04_04_2024
..3.3 Mik_11_04_2024
..3.4 Mik_18_04_2024
..3.5 Mik_25_04_2024
..3.6 Mik_02_05_2024
..3.7 Mik_16_06_2024
..3.8 Mik_23_05_2024
..3.9 Mik_30_05_2024
..3.10 Mik_05_06_2024
..3.11 Mik_13_06_2024
3 WS2022_23
..3.1 day_by_day_RST_3MB
..3.2 day_by_day_RT2_5MT
..3.3 day_by_day_EMB_7MT
..3.4 day_by_day_ABP_7MT
..3.5 day_by_day_FTS_MMB
..3.6 day_by_day_KF
4 SoSe2023
..4.2 RTS_day_by_day
..4.3 MIK_day_by_day
..4.4 AUT_day_by_day
..4.5 HDL_day_by_day
4 WS2024_25
..4.1 ING_day_by_day
....4.1.1 ING_Do_26_09_2024
....4.1.2 ING_Do_10_10_2024
....4.1.3 ING_Do_17_10_2024
....4.1.4 ING_Do_24_10_2024
....4.1.5 ING_Do_07_11_2024
....4.1.6 ING_Do_14_11_2024
....4.1.7 ING_Do_21_11_2024
....4.1.8 ING_Do_28_11_2024
....4.1.9 ING_Do_05_12_2024
....4.1.10 ING_Do_12_12_2024
....4.1.11 ING_Do_19_12_2024
..4.2 INF_day_by_day
....4.2.1 INF_Fr_27_09_2024
....4.2.2 INF_Fr_04_10_2024
....4.2.3 INF_FR_18_10_2024
....4.2.4 INF_Fr_25_10_2024
....4.2.5 INF_Fr_08_11_2024
....4.2.6 INF_Fr_15_11_2024
....4.2.7 INF_Fr_22_11_2024
....4.2.8 INF_Fr_29_11_2024
....4.2.9 INF_Fr_06_12_2024
....4.2.10 INF_Fr_13_12_2024
....4.2.11 INF_Fr_20_12_2024
....4.2.12 INF_Fr_10_01_2025
..4.3 FTS_day_by_day
....4.3.1 FTS_Mi_25_09_2024
....4.3.2 FTS_Mi_02_10_2024
....4.3.3 FTS_Mi_09_10_2024
....4.3.4 FTS_Mi_16_10_2024
....4.3.5 FTS_Mi_23_10_2024
....4.3.6 FTS_Mi_30_10_2024
....4.3.7 FTS_Mi_06_11_2024
....4.3.8 FTS_Mi_13_11_2024
....4.3.9 FTS_Mi_20_11_2024
....4.3.10 FTS_Mi_27_11_2024
....4.3.11 FTS_Mi_04_12_2024
....4.3.12 FTS_Mi_11_12_2024
....4.3.13 FTS_Mi_18_12_2024
6 Ing
..6.1 Bauplan
....6.1.1 Bootstick
....6.1.2 Xubuntu
....6.1.3 Webserver
....6.1.4 Hotspot
....6.1.5 Videostream
....6.1.6 Lampe
....6.1.7 Chassis
....6.1.8 Akku
....6.1.9 Motore
....6.1.10 Laborsteckboard
....6.1.11 Antriebstest
7 007
..7.1 Einschalten
..7.2 Vorversuche
kramann.info
© Guido Kramann

Login: Passwort:




Inhalte zur Vorlesungswoche #5, Informatik 1 im Wintersemester 2024/25

(EN google-translate)

(PL google-translate)

Themen

  1. Umsetzung zu Berechnung und Ausgabe der Zweierpotenzen 2^0 bis 2^7 (Aufgabe 2 29.10.)
  2. Aufsummieren der Folge ganzer Zahlen mit Schleife und mit der Gausformel (Aufgabe 2 vom 07.11.)
  3. Einführung von Funktionen am Beispiel der Gaussformel
  4. Einführung von Algorithmen am Beispiel des Siebs des Eratosthenes

1 Umsetzung zu Berechnung und Ausgabe der Zweierpotenzen 2^0 bis 2^7 (Aufgabe 2 29.10.)

#include <iostream>
using namespace std;
int main(void)
{
    int x = 1;
    for(int i=0;i<8;i++)
    {
        cout<<"2^"<<i<<"="<<x<<endl;
        x=x*2;
    }
    return 0;
}

Code 0-1: Zeierpotenzen, beispielhafte Umsetzung als Algorithmus.

2 Aufsummieren der Folge ganzer Zahlen mit Schleife und mit der Gausformel (Aufgabe 2 vom 07.11.)

$ \sum 1..n= \frac {n \cdot \left(n+1\right)}{2} $

Formel 0-1: Gausssche Summenformel.


#include <iostream>
using namespace std;
int main(void)
{
    int n;
    cout<<"Geben Sie an, wieviele Zahlen addiert werden sollen:";
    cin>>n;
    int y=0;
    int z=0;

    for(int i=1;i<=n;i++)
    {
        y=y+i;
    }

    z = n*(n+1)/2;

    cout<<"Ergebnis algorithmisch: "<<y<<" Erg. nach Gaussformel: "<<z<<endl;

    return 0;
}

Code 0-2: Umsetzung mit C/C++.

#include <iostream>
using namespace std;
int summe1(int n)
{
    int a=0;
    for(int i=1;i<=n;i++)
    {
        a=a+i;
    }
    return a;
}
int summe2(int n)
{
    return n*(n+1)/2;
}
int main(void)
{
    int n;
    cout<<"Geben Sie an, wieviele Zahlen addiert werden sollen:";
    cin>>n;
    int y=0;
    int z=0;
    y = summe1(n);
    z = summe2(n);
    cout<<"Ergebnis algorithmisch: "<<y<<" Erg. nach Gaussformel: "<<z<<endl;
    return 0;
}

Code 0-3: Arbeiten mit Funktionen.

3 Einführung von Funktionen am Beispiel der Gaussformel

#include <iostream>
using namespace std;

int f(int x)
{
   return x*x;
}

int main(void)
{
    cout<<"f(3)="<<f(3)<<endl;
    int z=7;
    int u=f(z);
    cout<<"f("<<z<<")="<<u<<endl;

    return 0;
}

Code 0-4: Vorstufe: Parabel.

  • Wie kann eine einfache mathematische Funktion, wie die der Parabel, als C/C++-Programm umgesetzt werden?
  • Wie ist eine Funktion in C/C++ beschaffen?
  • Wo sind die einer Funktion übergebenen Variablen gültig?
  • Wie ist der Zusammenhang zwischen den Namen der einer Funktion übergebenen Variablen und den Namen der Variablen innerhalb der Funktion?
  • Was ist der Unterschied zwischen call-by-value und call-by-reference?

4 Einführung von Algorithmen am Beispiel des Siebs des Eratosthenes

10_Informatik1/05_Softwareentwicklung/02_Algorithmen
https://de.wikipedia.org/wiki/Sieb_des_Eratosthenes
#include <iostream>
using namespace std;
int main(void)
{
    int n;
    //1. Intervall 2..n als Array:
    cout<<"Bis zu welcher Zahl sollen die Primzahlen gesucht werden?:"<<endl;
    cin>>n;    
    int intervall[n-1];
    for(int i=0;i<n-1;i++)
    {
        intervall[i] = i+2;
    }

    //2. Algorithmus
    for(int i=0;i<n-1;i++)
    {
        if(intervall[i]!=0) //...dann ist es die nächste Primzahl
        {
             cout<<intervall[i]<<" ";
             //alle Zahlen dahinter durchgehen und ganzzahlige Vielfache durchstreichen:
             for(int k=i+1;k<n-1;k++)
             {
                  if(intervall[k]%intervall[i]==0)
                  {
                      intervall[k]=0;
                  }
             }
        }
    }
    
    return 0;
}

Code 0-5: Umsetzung.

Umsetzung mit Funktiuon mit Call by Reference
#include <iostream>
using namespace std;

void sieb(int intervall[], int n)
{
    for(int i=0;i<n-1;i++)
    {
        intervall[i] = i+2;
    }

    //2. Algorithmus
    for(int i=0;i<n-1;i++)
    {
        if(intervall[i]!=0) //...dann ist es die nächste Primzahl
        {
//             cout<<intervall[i]<<" ";
             //alle Zahlen dahinter durchgehen und ganzzahlige Vielfache durchstreichen:
             for(int k=i+1;k<n-1;k++)
             {
                  if(intervall[k]%intervall[i]==0)
                  {
                      intervall[k]=0;
                  }
             }
        }
    }

}

int main(void)
{
    int n;
    //1. Intervall 2..n als Array:
    cout<<"Bis zu welcher Zahl sollen die Primzahlen gesucht werden?:"<<endl;
    cin>>n;    
    int intervall[n-1];
    sieb(intervall,n);

    for(int i=0;i<n-1;i++)
    {
        if(intervall[i]>0)
        {
            cout<<intervall[i]<<" ";
        }
    }
    
    return 0;
}

Code 0-6: Umsetzung mit Funktiuon mit Call by Reference.



ÜBUNG 14.11.2024, siehe Moodle!



Umgang mit chatGPT: Aufgabe 1 in mehreren Schritten mit Hilfe von chatGPT gelöst:
  • Wichtig: Vorgabe eines Beispielquelltextes, um eine gewohnte Programmstruktur zu erhalten.
  • In mehreren aufeinander aufbauenden Schritten die Fragen formulieren, um den Aufbau des Programms in mehreren Stufen zu bekommen.
Hallo chatGPT.
Hier ist ein Hello World Programm in C++:

#include <iostream>
using namespace std;
int main(void)
{
    cout<<endl<<"Hello world!"<<endl<<endl;
    return 0;
}

Ergänze bitte, dass eine ganze Zahl x eingegeben werden kann und dann wieder ausgegeben wird.


Prima! Kannst Du das bitte so mit Einrückungen immer formatieren:

#include <iostream>
using namespace std;

int main(void) 
{
    cout << endl << "Hello world!" << endl << endl;

    int x; // Deklaration der Variablen x
    cout << "Bitte geben Sie eine ganze Zahl ein: "; // Aufforderung zur Eingabe
    cin >> x; // Eingabe der Zahl
    cout << "Sie haben die Zahl " << x << " eingegeben." << endl; // Ausgabe der Zahl

    return 0;
}

Kannst Du das Programm nun so ändern, dass solange Zahlen eingegeben werden können,
bis die Zahl 0 eingegeben wird.
Außerdem soll am Ende ohne Verwendung besonderer Funktionen der Mittelwert der eingegebenen Zahlen berechnet werden.

Prima! Kannst Du mir Dein Programm aber so formatieren, dass immer nur
eine geschweifte Klammer allein ein einer Zeile stehht und 
alles innerhalb einer geschweiften Klammer um vier Leerzeichen eingerückt wird?

#include <iostream>
using namespace std;

int main(void)
{
    cout << endl << "Hello world!" << endl << endl;

    int x; // Deklaration der Variablen x
    int sum = 0; // Variable zur Speicherung der Summe
    int count = 0; // Zähler für die Anzahl der eingegebenen Zahlen

    cout << "Bitte geben Sie eine ganze Zahl ein (0 zum Beenden): "; // Aufforderung zur Eingabe
    cin >> x; // Eingabe der Zahl

    while (x != 0) // Solange die Zahl nicht 0 ist
    {
        sum += x; // Zur Summe hinzufügen
        count++; // Zähler erhöhen

        cout << "Sie haben die Zahl " << x << " eingegeben." << endl; // Ausgabe der Zahl
        cout << "Bitte geben Sie eine ganze Zahl ein (0 zum Beenden): "; // Aufforderung zur nächsten Eingabe
        cin >> x; // Eingabe der nächsten Zahl
    }

    if (count > 0) // Überprüfen, ob mindestens eine Zahl eingegeben wurde
    {
        double average = static_cast<double>(sum) / count; // Berechnung des Mittelwerts
        cout << "Der Mittelwert der eingegebenen Zahlen ist: " << average << endl; // Ausgabe des Mittelwerts
    }
    else
    {
        cout << "Es wurden keine Zahlen eingegeben." << endl; // Hinweis, wenn keine Zahlen eingegeben wurden
    }

    return 0;
}

Code 0-7: Dialog mit chatGPT

Besondere studentische Lösung zu Aufgabe 1:
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    vector<int> zahlenReihe;
    int zahl;
    int summe = 0;
    int anzahl = 0;
    int durchschnitt;
    cout << "Geben Sie ganze Zahlen ein. Geben Sie einen Buchstaben ein, um zu beenden." << endl;
    
    while (cout << "Zahl eingeben: " && cin >> zahl) 
    {
       summe = summe + zahl;
       anzahl += 1;
    }
    cout << "summe: " << summe << endl;
    durchschnitt = summe / anzahl;
    cout << "durchschnitt: " << durchschnitt << endl;
}

Code 0-8: Besondere studentische Lösung zu Aufgabe 1.

Musterlösung zu Aufgabe 1
#include <iostream>
using namespace std;
int main()
{
    int zahl;
    int summe = 0;
    int anzahl = 0;
    double durchschnitt;
    cout << "Geben Sie ganze Zahlen ein. Geben Sie Null ein, um zu beenden." << endl;
    
    do
    {
       cin>>zahl;
       summe = summe + zahl;
       anzahl += 1;
    } while(zahl>0);
    anzahl--; //weil die Null mitgezählt wurde.
    cout << "summe: " << summe << endl;
    durchschnitt = (double)summe / (double)anzahl;
    cout << "durchschnitt: " << durchschnitt << endl;
}

Code 0-9: Musterlösung Aufgabe 1.

Studentische Lösung zu Aufgabe 2 (Zahlenspiel)
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

void Zahlenspiel() 
{
	int Zufall, Geraten, Versuche=3;
	char Wiederholen;

	srand(static_cast<unsigned int>(time(0)));
	Zufall = rand() %15+1;

	cout <<"******* EIN ZAHLENSPIEL ********"<< endl;
	cout <<"******* Zahl zwischen 1 und 15!"<<endl;
	cout << "Sie haben "<<Versuche<< " Versuche!"<<endl;

	for(int i=1; i<=Versuche; i++)
	{
  	  cout << i<< " .Versuch";
	  cin>> Geraten;

	  if(Geraten<Zufall)
	  {
	     cout<<"zu klein"<<endl;
	  }
	  else if(Geraten>Zufall)
	  {
	     cout<<"zu groß"<<endl;
	  }
	  else
	  {
	     cout<<"Gewonnen!!! Die gesuchte Zahl lautet: "<<Zufall<<endl;
	     break;
	  }
	
	  if(i==Versuche)
	  {	
	       cout<<"Verloren! Die gesuchte Zahl war:" << Zufall<<endl;
	  }

	}

	cout << "Wiederholen ----> <j>    Beenden ----> <n>"<< endl;
   	cin>> Wiederholen;
	
	if(Wiederholen=='j' || Wiederholen=='J')
	{
	    Zahlenspiel();
        }
	else
	{
	    cout<<"Spiel beendet"<<endl;
	}
}



        int main()
	{
	    Zahlenspiel();
	    return 0;
	}

Code 0-10: Studentische Lösung zu Aufgabe 2 (Zahlenspiel)

Studentische Lösung zu Aufgabe 3 (Sternchenzeilen)
#include <iostream>
using namespace std;

int main() 
{
    int n;
    cout << "Bitte n eingeben : ";
    cin >> n;

    for (int i = 1; i <= n; i++) 
    {
        // Innere Schleife: Drucken von '*' entsprechend dem aktuellen Wert von i
        for (int a = 1; a <= i; a++) 
        {
            cout << '*';
        }
        // Zeilenumbruch nach jeder Zeile
        cout << endl;
    }

    return 0;
}

Code 0-11: Studentische Lösung zu Aufgabe 3 (Sternchenzeilen)