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 #2, Informatik 1 im Wintersemester 2024/25

(EN google-translate)

(PL google-translate)


Google-Chrome


Google-Chrome-Link: https://www.google.com/chrome/next-steps.html?platform=linux&statcb=0&installdataindex=empty&defaultbrowser=0

Themen

  1. Warum Informatik -- Ein weiterer Grund
  2. Entwicklungsgeschichtliches Global Problem Solver (GPS) einst und Deep Learning heute
  3. Wie funktioniert das Zusammenspiel zwischen Computer-Hardware, Quelltext, Compiler und Maschinencode?
  4. Zurück zu unserem ersten Programm
  5. Back to the very beginning: Variablen, cout und cin.

1 Warum Informatik -- Ein weiterer Grund

Neben der Tendenz, dass immer mehr Geräte heutzutage auch ein eingebettetes System besitzen, ist ein weiterer Grund dafür, warum es wichtig im Ingenieurbereich ist, Informatik zu lernen, die rasante Entwicklung der Künstlischen Intelligenz.

Während in den letzten Jahrzehnten CAE-Software (Computer Aided Engineering) Einzug in die Ingeinieurbüros gehalten hat, zeichnet sich gerade etwas Ähnliches in Bezug auf KI ab.

So konnte folgende verbesserte, mit Kommentaren versehene Darstellung des Quelltextes von letzter Woche mit Hilfe von chatGPT gewonnen werden. Folgendes wurde an chatGPT gesendet:

https://chatgpt.com/ -- Link zu chatGPT
Hallo chatGPT

Bitte füge bei dem nachfolgenden Programm Kommentare ein.
Es dient dazu, die sechs Zahlen in dem Array zu sortieren.
Hier kommt das Programm:

#include <iostream>
using namespace std;
int main(void)
{
    //Plätze:        0 1 2 3 4 5
...



Code 0-1: Anfrage im Prompt von chatGPT.

...und dies ist die Antwort von chatGPT:

#include <iostream>
using namespace std;

int main(void)
{
    // Array wuerfel enthält die zu sortierenden Zahlen.
    // Plätze (Index):   0 1 2 3 4 5
    int wuerfel[] = {6, 3, 1, 4, 2, 5};
    
    // Array ergebnis wird verwendet, um die sortierten Zahlen zu speichern.
    int ergebnis[] = {0, 0, 0, 0, 0, 0};
    
    // Variable letzter_wert speichert den zuletzt gefundenen kleinsten Wert,
    // damit er im nächsten Durchlauf nicht erneut berücksichtigt wird.
    int letzter_wert = 0;

    // Äußerer Schleifenblock für 6 Durchläufe (entspricht der Anzahl der Zahlen).
    for(int durchlauf = 0; durchlauf <= 5; durchlauf++)
    {
        // Variable kleinster_wert wird mit einem Wert initialisiert,
        // der größer als alle möglichen Werte im Array ist (hier 7).
        int kleinster_wert = 7;

        // Innere Schleife, um das Array wuerfel nach dem kleinsten Wert zu durchsuchen,
        // der größer als letzter_wert ist.
        for(int i = 0; i <= 5; i++)
        {
            // Wenn der aktuelle Wert größer als letzter_wert ist und kleiner als kleinster_wert,
            // wird kleinster_wert auf diesen Wert aktualisiert.
            if(wuerfel[i] > letzter_wert && wuerfel[i] < kleinster_wert)
            {
                kleinster_wert = wuerfel[i];
            }
        }

        // Der kleinste gefundene Wert wird im ergebnis-Array an der Position des aktuellen Durchlaufs gespeichert.
        ergebnis[durchlauf] = kleinster_wert;

        // letzter_wert wird auf den neu gefundenen kleinsten Wert gesetzt, damit dieser
        // in den nächsten Durchläufen nicht nochmal berücksichtigt wird.
        letzter_wert = kleinster_wert;
    }

    // Diese Zeile gibt die sortierten Werte aus dem ergebnis-Array aus.
    cout << ergebnis[0] << ergebnis[1] << ergebnis[2] 
         << ergebnis[3] << ergebnis[4] << ergebnis[5] << endl;

    // Beendet das Programm erfolgreich.
    return 0;
}

Code 0-2: Sortierprogramm mit Kommentaren, die durch chatGPT hinzugefügt wurden.

2 Entwicklungsgeschichtliches Global Problem Solver (GPS) einst und Deep Learning heute


Konnektionistische versus Symbolische KI

Das neuronale Netz

Deep Learning / Reinforced Learning (Bestärkendes Lernen) am Beispiel der Optimierung eines simulierten autonomen Fahrzeugs.

Alpha Go besiegt amtierenden GO-Meister

3 Wie funktioniert das Zusammenspiel zwischen Computer-Hardware, Quelltext, Compiler und Maschinencode?

  • Computerprogramme laufen auf einem darunter liegenden Betriebssystem.
  • Vom Betriebssystem hängt u.a. ab, wie Dateien gespeichert und benutzt werden, ob mehrere Programm gleichzeitig laufen können, ob es eine Benutzerschnittstelle gibt.
  • Das Betriebssystem stellt ferner für die Programme die darauf laufen die Ressourcen des Computers auf möglichst einfache Weise bereit.
  • Das Betriebssystem stellt sicher, dass es zu keinen fehlerhaften Zugriffen auf diese Ressourcen kommt.
  • Das Betriebssystem regelt also u.a., wie Programme auf den flüchtigen (RAM), auf den peristenten Speicher (i.d.R. Festplatte), ggf. auf Bildschirm, Tastatur, Maus und auf LAN und W-LAN zugreifen können.
  • Computer besitzen eine CPU, eine Central Process Unit, in der gemäß einer Abfolge von so genannter Maschinenbefehle Datenwörter aus einem Speicher gelesen, miteinander verknüpft und wieder in einen Speicher abgelegt werden.
  • Die Grundidee dazu hatte Alan Turing:
10_Informatik1/04_Informationstheorie/01_EDV
  • Computer stellen die Infrastruktur für diese Art der Datenverarbeitung zur Verfügung.
  • Zwischen diesen so genannten Computerarchitekturen gibt es Unterschiede:
10_Informatik1/03_Hardware/01_Rechnerarchitektur
  • Höhere Programmiersprachen, wie C/C++, wurden erfunden, damit ein Programmierer nicht auf der Ebene von Maschinenbefehlen arbeiten muss.
  • Jedoch müssen fertig geschriebene Quelltexte durch einen Übersetzer, den Compiler, in Maschinensprache übersetzt werden, damit sie auf einem Computer laufen können.

4 Zurück zu unserem ersten Programm

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

Code 0-3: Das erste C/C++ - Programm.

Der gleiche Quelltext im mousepad-Editor geöffnet mit Context-Highlighting.

Bild 0-1: Der gleiche Quelltext im mousepad-Editor geöffnet mit Context-Highlighting.

Screenshot vom Terminal: Notwendige Compiler-Befehle, um das Programm in Maschinensprache zu übersetzen und es anschließend laufen zu lassen.

Bild 0-2: Screenshot vom Terminal: Notwendige Compiler-Befehle, um das Programm in Maschinensprache zu übersetzen und es anschließend laufen zu lassen.

Sicht auf die Datei hello.cpp mit dem Quelltext und dem ausführbaren Programm hello mit Hilfe des Dateimanagers.

Bild 0-3: Sicht auf die Datei hello.cpp mit dem Quelltext und dem ausführbaren Programm hello mit Hilfe des Dateimanagers.

  • Syntaktische Analyse von hello.cpp:
10_Informatik1/07_Sprachen/01_C_Syntax

...alternativ Verwendung von chatGPT (Antwort):

// Einbinden der Bibliothek, die notwendig ist, um Ein- und Ausgabeoperationen durchzuführen
#include <iostream>

// Die Nutzung des Namensraums "std", um auf Standardbibliotheksfunktionen wie "cout" zuzugreifen,
// ohne den Präfix "std::" vor jedem Aufruf schreiben zu müssen
using namespace std;

// Hauptfunktion des Programms, der Einstiegspunkt jedes C++-Programms
int main(void)
{
    // Ausgabe von "Hello world!" auf die Konsole.
    // "endl" sorgt dafür, dass eine neue Zeile nach der Ausgabe eingefügt wird
    cout << endl << "Hello world!" << endl << endl;

    // Rückgabewert 0 bedeutet, dass das Programm erfolgreich beendet wurde
    return 0;
}

Code 0-4: Durch chatGPT kommentierte Version des Hello-world-Programms.

Zusätzliche durch chatGPT gewonnene Anmerkungen:

  1. Bibliothek : Diese wird für die Konsolenausgabe (mit cout) benötigt.
  2. using namespace std;: Ermöglicht es, auf Funktionen der Standardbibliothek (wie cout) ohne den Namensraumpräfix std:: zuzugreifen.
  3. main() Funktion: Jedes C++-Programm benötigt eine Hauptfunktion int main(), die den Startpunkt des Programms definiert.
  4. cout: Wird genutzt, um die Ausgabe "Hello world!" auf die Konsole zu drucken.
  5. return 0;: Signalisiert dem Betriebssystem, dass das Programm erfolgreich abgeschlossen wurde.

5 Back to the very beginning: Variablen, cout und cin.

Eine Darstellung zu den Datentypen in C/C++ findet sich auf den statischen Seiten hier und wird im Unterricht behandelt:

10_Informatik1/07_Sprachen/02_Datentypen

Bei der Lösung eines Berechnungs-Problems mit Hilfe eines Computerprogramms muss beachtet werden, welche Art von Daten verarbeitet wird.

Will man beispielsweise Volumina von Quadern machen, deren Kantenlängen in Metern mit Nachkommastellen angegeben werden, so muss man so genannte Fließkommazahlen benutzen.

Will man dagegen Mengenangaben verwalten, so genügt die Verwendung ganzer Zahlen, so genannter Integer-Zahlen.

Geht es wiederum darum, den Programmfluss unterschiedlich zu steuern, je nachdem, ob eine Bedingung erfüllt ist (true), oder nicht (false), so ist man auf den Datentyp bool angewiesen.

Zur Repräsentation von Zeichen (Buchstaben a..z, A..Z, Satz- und Sonderzeichen, aber auch einzelner Ziffern, als Zeichen verstanden), kann der Datentyp char verwendet werden.

Nachfolgend findet sich ein Programmbeispiel, in dem zwei der verschiedenen Datentypen vorkommen:

#include<iostream>
#include<math.h>
using namespace std;
int main(void)
{
    char c;
    double h,b,t,volumen;
    cout<<endl<<"Möchten Sie das Volumen eines Quaders berechnen?"<<endl;
    cout<<"Geben Sie an j für ja, n für nein: ";
    cin>>c;

    if(c=='j')
    {
        cout<<endl<<"Höhe in Metern h=";
        cin>>h;
        cout<<endl<<"Breite in Metern b=";
        cin>>b;
        cout<<endl<<"Tiefe in Metern t=";
        cin>>t;
        volumen = h*b*t;
        cout<<endl<<"Das Volumen des Quaders beträgt "<<volumen<<"m^3."<<endl;
    }
    else
    {
        cout<<endl<<"Das Programm wird beendet."<<endl;
    }

    return 0;
}

Code 0-5: Programmbeispiel berechnung.cpp

Eingaben und Ausgaben im Terminal zu berechnung.cpp

Bild 0-4: Eingaben und Ausgaben im Terminal zu berechnung.cpp

Um dieses Prgramm besser verstehen zu können, kann ein Flussdiagramm verwendet werden:

10_Informatik1/05_Softwareentwicklung/01_Flussdiagramm
ÜBUNGEN
Aufgabe 1

Fertigen Sie von nachfolgendem Programm ein Flussdiagramm an:

#include<iostream>
using namespace std;
int main(void)
{
    char c='n';    
    cout<<endl<<"Möchten Sie Hallo ausgeben? j/n:";
    cin>>c;
    if(c=='j')
    {
        cout<<endl<<"Hallo"<<endl;
    }
    else
    {
        cout<<endl<<"Tschüss"<<endl;
    }
    return 0;
}

Code 0-6: fluss.cpp

Studentische Lösung zur Aufgabe 1.

Bild 0-5: Studentische Lösung zur Aufgabe 1.

Aufgabe 2
  • Überprüfen Sie nachfolgende Programme auf Korrektheit, indem Sie versuchen, die zu kompilieren.
  • Versuchen Sie ggf. zu verstehen, was jeweils falsch ist und korrigieren Sie das Programm.
#include<iostream>
using namespace std;
int main(void)
{
    x=7;
    cout<<endl<<"x="<<x<<endl;
    return 0;
}

Code 0-7: f1.cpp

#include<iostream>
using namespace std;
int main(void)
{
    int zahl=0;
    cout<<endl<<"Geben Sie eine Zahl zwischen -10 und +10 ein: ";
    cin<<zahl;
    if(zahl>0)
    {
        cout<<endl<<"Die Zahl ist größer als Null."
    }
    else
    {
        cout<<endl<<"Die Zahl ist kleiner oder gleich Null."
    }
    return 0;
}

Code 0-8: f2.cpp

Aufgabe 3
  • Gehen Sie das nachfolgende Programm gedanklich durch und notieren Sie die zu erwartenden Ausgaben.
  • Kompilieren und starten Sie das Programm danach und verglichen die Ergebnisse mit Ihren Vermutungen.
#include<iostream>
using namespace std;
int main(void)
{
    int x=5;
    int y=7;
    int *z=&x;

    cout<<endl<<"*z="<<*z<<endl;
    x=y;
    cout<<endl<<"*z="<<*z<<endl;
    y=x;
    cout<<endl<<"*z="<<*z<<endl;
    if(z==&y)
    {
        cout<<endl<<"A";
    }
    if(z==&x)
    {
        cout<<endl<<"B";
    }
    if(&y==&x)
    {
        cout<<endl<<"C";
    }
    return 0;
}

Code 0-9: f3.cpp

Aufgabe 4
  • Nehmen Sie das Volumenberechnungsprogramm als Grundlage und entwickeln ein eigenes Berechnungsprogramm.
  • Das Programm soll aus x und y den Wert von z=x^2+y^2 berechnen und ausgeben.
  • Wählen Sie geeignete Datentypen für die einzuführenden Variablen.
Aufgabe 4b

wie 4, aber:

  • Recherchieren Sie wie man die Wurzel aus einer Zahl in einem C-Programm ziehen kann.
  • Geben Sie nun die Wurzel aus z aus.
  • Das Ergebnis entspricht der Länge der Hypothenuse z eines rechtwinkligen Dreiecks, wenn x und y die beiden Katheten sind.