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

(EN google-translate)

(PL google-translate)

Walter Grey and his tortoises.
Bauplan.

Themen

  1. Warum Informatik
  2. Über das Programmieren
  3. ÜBUNG Würfel sortieren
  4. Ein Hello-world Programm in der Programmiersprache C
  5. Übung 1

1 Warum Informatik

  • Elektrische und mechanische Komponenten in Maschinen werden nach Möglichkeit durch Eingebettete Systeme ersetzt.
  • Dadurch ergeben sich geringere Produktionskosten und eine höhere Flexibilität.
  • Man kann sagen, ein Computer ist eine Maschine, die nach festen Regeln Symbolfolgen in andere Symbolfolgen umwandelt.
  • Dies geschieht unter Vernachlässigung der Bedeutung der Symbole.
  • Bei einem eingebetteten System wird etwas von der physikalischen Ebene in die Symbolebene transformiert, dort transformiert und wieder zurück in die physikalische Ebene transformiert.
  • Sie kennen die symbolmäßige Repräsentation von Dingen bereits aus der Schule in Form mathematischer Formeln.
  • Überlegen Sie, was noch dazu kommt, um einen Computer zu haben, der ein Programm abarbeitet.

Anwendungsbeispiele zum Programmieren im technischen Bereich

Linienverfolgung mit Videoübertragung.
Beschleunigungssensoren eines Smartphones nutzen, um einen Boxkampf zu verklanglichen.

Was bedeutet es, zu programmieren? -- Ein komplexes Beispiel

Daten mittels UDP vom Smartphone an den PC senden.
Daten mittels UDP vom Smartphone an den PC senden.

Bild 0-1: Daten mittels UDP vom Smartphone an den PC senden.

  • Durch Drehungen meines Smartphones, soll ein "Ball" auf dem PC-Bildschirm bewegt werden.
  • Notwendige Kenntnisse in Stichworten: Programmiersprache Java, Android-Betriebssystem, W-LAN-Hotspot, User Datagram Protocol (UDP), Sensorik, Lineare Algebra, Grafische Benutzeroberfläche (GUI), Objekt Orientierte Programmierung (OOP), Verwendung von Bibliotheken.

2 Über das Programmieren

Programmieren verlangt mehr, als nur eine Sprachsyntax zu beherrschen:

In dem konkreten Beispiel musste ich wissen, dass Programme auf meinem Smartphone als so genannte Apps zur Verfügung gestellt werden müssen. Ich musste wissen, wie ich ein Programm für das Smartphone an meinem PC schreibe, wie ich das Programm dann in eine App transformiere und wie ich diese dann auf das Smartphone übertragen kann. Die App alleine repräsentiert aber nicht die gezeigte Anwendung: Gleichzeitig muss es auf dem PC ein zweites Programm geben, das die Sensordaten vom Smartphone empfängt und interpretiert. Damit wiederum das gelingt, muss eine W-LAN-Verbindung zwischen Smartphone und PC bestehen und ich muss wissen, wie ich im jeweiligen Programm dafür sorge, dass diese auch richtig benutzt wird.

Um eine lauffähige Software entwickeln zu können, braucht es also einiges an Wissen und Hintergrundwissen, das über ein Verständnis eines bestimmten Programmcodes weit hinaus geht.

Ziel dieser Lehrveranstaltung ist es, parallel mit dem Vergrößern der Fertigkeiten im Erstellen von Programmquelltexten, auch dieses Hintergrundwissen nach und nach zu erarbeiten und zu nutzen. Denn daraus, genau zu wissen, was man tut kann man das notwendige Interesse, den notwendigen Mut und das notwendige Selbstbewusstsein beziehen, damit man es dann auch gerne tut.

3 ÜBUNG Würfel sortieren

  • Legen Sie sechs Würfel mit den Augenzahlen 1 bis 6 in der Reihenfolge 6 3 1 4 2 5 vor sich hin.
  • Sortieren Sie die Würfel so, dass sie am Ende in ansteigender Reihenfolge da liegen: 1 2 3 4 5 6
  • Wiederholen Sie das und überlegen Sie sich, welche Methode Sie für das Sortieren benutzt haben.

"Ich suche den kleinsten Wert in der Folge und nehme ihn als erstes Element in einer neuen Folge.
Dann suche ich wieder den kleinsten Wert in der noch verbleibdenden Folge und hänge ihn an die neue Folge an.
Das wiederhole ich, bis alle Elemente in der neuen Folge angekommen sind.
Ich erhalte dadurch eine sortierte Folge der ursprünglich ungeordneten Folge der Elemente."


Code 0-1: Beispiellösung.

Der oben verbal beschriebene Algorithmus zum Sortieren der sechs Zahlen, soll nun in mehreren Schritten in einem C-Programm abgebildet werden.

Schritt 1: Das kleinste Element finden
#include <iostream>
using namespace std;
int main(void)
{
    //Plätze:        0 1 2 3 4 5
    int wuerfel[] = {6,3,1,4,2,5};

    int kleinster_wert = wuerfel[0];
    if(wuerfel[1]<kleinster_wert)
    {
        kleinster_wert = wuerfel[1];
    }
    if(wuerfel[2]<kleinster_wert)
    {
        kleinster_wert = wuerfel[2];
    }
    if(wuerfel[3]<kleinster_wert)
    {
        kleinster_wert = wuerfel[3];
    }
    if(wuerfel[4]<kleinster_wert)
    {
        kleinster_wert = wuerfel[4];
    }
    if(wuerfel[5]<kleinster_wert)
    {
        kleinster_wert = wuerfel[5];
    }

    cout<<"Kleinster Wert ist:"<<kleinster_wert<<endl;

    return 0;
}

Code 0-2: C-Quelltext zu Schritt 1: Das kleinste Element finden.

Schritt 2: Anstatt fünf einzelne if-Anweisungen wird eine Schleife verwendet
#include <iostream>
using namespace std;
int main(void)
{
    //Plätze:        0 1 2 3 4 5
    int wuerfel[] = {6,3,1,4,2,5};

    int kleinster_wert = wuerfel[0];

    for(int i=1;i<=5;i++)
    {
        if(wuerfel[i]<kleinster_wert)
        {
            kleinster_wert=wuerfel[i];
        }        
    }

    cout<<"Kleinster Wert ist:"<<kleinster_wert<<endl;

    return 0;
}

Code 0-3: C-Quelltext zu Schritt 2: Anstatt fünf einzelne if-Anweisungen wird eine Schleife verwendet

Schritt 3: Das Suchen nach dem kleinsten Element wird sechsmal wiederholt und gefordert, dass ein neu gefundenes Element größer sein muss, als das zuletzt gefundene
#include <iostream>
using namespace std;
int main(void)
{
    //Plätze:        0 1 2 3 4 5
    int wuerfel[] = {6,3,1,4,2,5};
    int ergebnis[] = {0,0,0,0,0,0};
    int letzter_wert = 0;
for(int durchlauf=0;durchlauf<=5;durchlauf++)
{

    int kleinster_wert = 7;

    for(int i=0;i<=5;i++)
    {
        if(wuerfel[i]>letzter_wert && wuerfel[i]<kleinster_wert)
        {
            kleinster_wert=wuerfel[i];
        }        
    }

    ergebnis[durchlauf] = kleinster_wert;
    letzter_wert = kleinster_wert;
}

    //cout<<"Kleinster Wert ist:"<<kleinster_wert<<endl;

    cout<<ergebnis[0]<<ergebnis[1]<<ergebnis[2]<<ergebnis[3]<<ergebnis[4]<<ergebnis[5]<<endl;

    return 0;
}

Code 0-4: C-Quelltext zu Schritt 3: Das Suchen nach dem kleinsten Element wird sechsmal wiederholt und gefordert, dass ein neu gefundenes Element größer sein muss, als das zuletzt gefundene

4 Ein Hello-world Programm in der Programmiersprache C

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

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

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

Bild 0-2: 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-3: 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-4: 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
5 Übung 1
Aufgabe 1
  • Bringen Sie das weiter oben dargestellte Hell-world-Programm auf dem Linux-Rechner zum Laufen.
  • Folgen Sie dabei den Anweisungen des Dozenten.
  1. Öffnen Sie den Dateimanager.
  2. Legen Sie einen Ordner an, in dem Sie in Zukunft Ihre Programme speichern möchten.
  3. Erzeugen Sie eine Textdatei mit dem Namen hello.cpp
  4. Öffnen Sie die hello.cpp Datei mit dem Texteditor Mousepad.
  5. Tippen Sie das Hello-world-Programm in die Datei, oder kopieren es von der Webseite.
  6. Speichern Sie den Quelltext ab.
  7. Öffnen Sie ein Terminal.
  8. Wechseln Sie mit cd PFAD in den Ordner, den Sie angelegt haben.
  9. Kompilieren Sie Ihren Quelltext mit dem Befehl: g++ -o hello hello.cpp
  10. Führen Sie das entstandene Maschinenprogramm aus mit: ./hello
Aufgabe 2
  • Analysieren Sie die Programmversionen zum Sortieren der sechs Zahlen.
  • Kann das dritte vollständige Programm auch Zahlen zwischen 1 und 100 sortieren? -- Warum nicht?
  • Was müsste geändert werden, damit es möglich ist mit dem Programm auch Zahlen zwischen 1 und 100 zu sortieren?
  • Kann das dritte vollständige Programm auch Zahlenfolgen sortieren, in denen sich Zahlen wiederholen? -- Warum nicht?
  • Was müsste geändert werden, damit es möglich ist mit dem Programm auch Zahlenfolgen zu sortieren, in denen sich Zahlen wiederholen?
Aufgabe 3 -- Variablen in C/C++ vereinbaren und verwenden
  • Variieren Sie das unten stehende Programm in C/C++, das wie ein kleiner Taschenrechner funktioniert.
  • Dabei sollen genau drei Variablen verwendet werden.
  • Das Programm kommt ohne Schleifen (Wiederholungen) und ohne Fallunterscheidungen (z.B. if, switch) aus.
  • Verwenden Sie andere einfache mathematische Operationen (Addition, Subtraktion, Multiplikation, Division), um andere Berechnungen durchzuführen.
  • Ergänzen Sie weitere Ausgaben.
  • Wie muss das Programm verändert werden, um auch Nachkommastellen, beispielsweise bei der Division, richtig darzustellen?
  • Alle Ausgaben erfolgen mit cout.
#include<iostream>
using namespace std;
int main(void)
{
    int var1=90;
    int var2=38;
    int erg;
    
    cout<<"Hallo aus THB"<<endl;
    Erg=var1+var2;
    cout<<"Die Addition von "<<var1<<"+"<<var2<<" ergibt "<<erg<<endl;
    //Erweiterung für andere Operationen.......   
    return 0;
}

Code 0-6: Quelltext zur Aufgabe

#include<iostream>
using namespace std;
int main(void)
{
    double var1=90.0;
    double var2=38.0;
    double erg;
    
    cout<<"Hallo aus THB"<<endl;
    erg=var1/var2;
     
    cout<<"Die Division von "<<var1<<":"<<var2<<" ergibt "<<erg<<endl;
    //Erweiterung für andere Operationen.......   
    return 0;
}

Code 0-7: Studentische Lösung des letzten Teils der Aufgabe.

Aufgabe 4 -- wie Aufgabe 3, aber die Variablen werden zur Laufzeit mit cin gesetzt
#include<iostream>
using namespace std;
int main(void)
{
    float var1;
    float var2;
    float erg;

    cout<<"Hallo aus THB"<<endl;
    cout<<"Eingabe Variable 1:";
    cin>>var1;
    cout<<"Eingabe Variable 2:";
    cin>>var2;
    erg=var1/var2;
    cout<<"Die Division aus "<<var1<<" und "<<var2<<" ergibt "<<erg<<endl;

    return 0;
}

Code 0-8: Studentische Lösung zu Aufgabe 4.

Aufgabe 5
  • Das Volumen eines Quaders soll mit einem Programm berechnet werden.
  • Die Kantenlängen in Metern werden vom Benutzer eingegeben.
  • Im Anschluss wird das Produkt aus den drei Kantenlängen als Ergebnis ausgegeben.
  • Schreiben und testen Sie selbsttätig das entsprechende C/C++ - Programm.
#include<iostream>
using namespace std;
int main(void)
{
  double var1, var2, var3;
    double erg;

    cout << "Hallo aus THB" << endl;

    // Benutzereingaben
    cout << "Bitte geben Sie den ersten Wert (Länge) ein: ";
    cin >> var1;
    cout << "Bitte geben Sie den zweiten Wert (Breite) ein: ";
    cin >> var2;
    cout << "Bitte geben Sie den dritten Wert (Höhe) ein: ";
    cin >> var3;


    erg = var1 * var2 * var3;

     
    cout<<"Das Volumen des Quaders  "<<var1<<"*"<<var2<<"*"<<var3<<" ergibt "<<erg<<"m³"<<endl;
    //Erweiterung für andere Operationen.......   
    return 0;

}

Code 0-9: Strudentische Lösung zu Aufgabe 5.