kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




Informatik -- Lehrveranstaltung vom 25.03.2024

(EN google-translate)

(PL google-translate)

Motivation: Anwendungsbeispiele zum Programmieren im technischen und künstlerischen Bereich

10_Informatik1/06_Anwendungsgebiete

Neuste Entwicklungen: Es wird nicht mehr selber programmiert

chatGPT
"chatGPT, gebe mir den Quelltext eines Hello-world-Programms in C++. "

Angaben für chatGPT, um das nachfolgende Hello-world-Programm zu erhalten:

#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

Code 0-1: Von chatGPT geliefertes Programm.

"Könntest Du das programm kommentieren? "

Die ergänzende Aufforderung liefert:

#include <iostream> // Diese Zeile fügt die iostream-Bibliothek hinzu, die Ein- und Ausgabefunktionen enthält.

int main() { // Hier beginnt die Hauptfunktion des Programms.
    std::cout << "Hello, World!" << std::endl; // Diese Zeile gibt den Text "Hello, World!" auf der Konsole aus.
    return 0; // Die main-Funktion gibt 0 zurück, was signalisiert, dass das Programm erfolgreich beendet wurde.
}
/*
Die iostream-Bibliothek ermöglicht den Zugriff auf Ein- und Ausgabefunktionen, 
während std::cout verwendet wird, um Text auf der Konsole auszugeben. 
Schließlich gibt return 0; am Ende der main-Funktion an, dass das Programm 
erfolgreich abgeschlossen wurde.
*/

Code 0-2: Das von chatGPT mit Kommentaren ergänzte Programm.

Neuronale Netze und Deep Learning

Das erkennen von Postleitzahlen und Straßenschilder wird nicht programmiert, sondern von Neuronalen Netzen gelernt. Dies kann bedeuten, dass sich Kurse zu Programmieren in naher Zukunft dramatisch ändern könnten. Hier ist ein Vorgeschmack auf die Leistungen, die heutzutage auf diesem Gebiet erzielt werden:

Beispiele für Reinforced Learning:

https://youtu.be/V1eYniJ0Rnk -- Atari Breakout -- Eine KI erlernt ohne Hilfe einen Trick bei einem klassischen Arcade-Spiel.
https://youtu.be/wL7tSgUpy8w -- Die Simulation eines vereinfachten Fahrzeugs lernt anhand von Sensordaten richtig zu fahren.

Nachteile selbstlernender Systeme:

  • Keine Transparenz, wie eine Aufgabe gelöst wird.
  • Keine Sicherheit, ob die Software immer funktioniert.
  • Keine Rechtssicherheit: Wer ist schuld, wenn etwas schief geht?

Siehe auch:

79_Deep_Learning
67_Echtzeitsysteme/08_NeuronaleNetze

Datenstrukturen

  • Doch zurück zu unseren ersten Programmierschritten.
  • In der dritten Aufgabe der letzten Übung kamen Integer-Variablen vor.
  • Programme, die Variablen verwenden, wollen wir uns heute systematischer anschauen.
  • Welche Variablentypen gibt es in C/C++?:
Vorstellung einiger Datentypen von C/C++
10_Informatik1/07_Sprachen/02_Datentypen

Um ein besseres Verständnis davon zu erlangen, was Variablen sind, lohnt sich eine Beschäftigung mit einem besonderen Datentyp, den (Adress-)Zeigern, oder auch Pointern:

10_Informatik1/07_Sprachen/03_Zeiger

Bei der Lösung eines Berechnungs-Problems mit Hilfe eines Computerprogramms muss also 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-3: Programmbeispiel berechnung.cpp

Eingaben und Ausgaben im Terminal zu berechnung.cpp

Bild 0-1: 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-4: fluss.cpp

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-5: 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-6: 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-7: 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.
#include<iostream>
#include<math.h>
using namespace std;
int main(void)
{
    double x,y,z;
    cout<<endl<<"x= ";
    cin>>x;
    cout<<endl<<"y= ";
    cin>>y;

    z = x*x+y*y;
    z = sqrt(z);
    cout<<endl<<"z ="<<z<<endl;
    return 0;
}

Code 0-8: Musterlösung für 4b

zusatzuebungen.zip -- zusätzliche Übungen für Studierende, die mehr üben wollen.