Praktikumsanleitung

| ### Anleitung zum Praktikum Algorithmen & Datenstrukturen von Prof. Jürgen Plate und Jörg Holzmann

#### Inhaltsverzeichnis

- Rechnerbenutzung
- Aktivieren des zentralen Accounts
- Starten der Rechner und Einloggen
- Fenstermanager KDE
- Projekte erzeugen
- Erste Schritte mit kdevelop
- Mathe-Bibliothek linken
- Programme debuggen
- Up-/Download von Programmen
- Beenden des Praktikums
- Headerdatei `adprakt.h`

## Rechnerbenutzung

Das Praktikumssystem ist ein Server-Cluster von SUN mit dem Betriebssystem Solaris, auf dem alle Teilnehmer parallel arbeiten. Die Tischreihen sind mit Thin-Clients ausgestattet, die die Funktion eines Grafikterminals übernehmen. Alle Stationen sind miteinander vernetzt und greifen auf zwei Server namens "c1" und "c2" zu.

## Aktivieren des zentralen Accounts

Um sich an den Praktikumssystemen anmelden zu können, muß Ihr zentraler Account an der Fachhochschule aktiviert sein. Diesen Account haben Sie automatisch mit Ihrer Immatrikulation an der FHM erhalten. Falls Sie ihn noch nicht aktiviert haben, sollten Sie die folgende Anleitung ausführen; wenn der Account bereits aktiviert ist, können Sie im nächsten Kapitel weiterlesen. Zum Aktivieren benötigen sie die Nummer Ihrer Magnetkarte (siehe Bild) und die PIC (Personal Identification Code) von Ihrem Leporello.
Mit diesen Daten gehen Sie auf folgende Webseite:

https://www.fh-muenchen.de/rz/online-service/

Dort wählen Sie den Menüpunkt Online Account-Verwaltung (links oben) und dort dann den Knopf Account freischalten.
Achtung: Schalten Sie Ihren Account bis spätestens einen Tag vor Praktikumsbegin frei, sonst können Sie nicht am Praktikum teilnehmen!

## Starten der Rechner und Einloggen

- Stromversorgung:
  Zum Ein- und Ausschalten der Arbeitsplätze und Monitore dient der rote Schalter direkt neben der Labortür.
- SUN-Clients (Ray-Terminals):
  Die Client-Systeme haben keine Netzschalter. Sie booten über das Netz und sind nach wenigen Sekunden betriebsbereit. Sie erhalten dann folgenden Login-Bildschirm:

  > Anmerkung:
  > Sollte ein Arbeitsplatz auch nach einiger Zeit lediglich den folgenden Bildschirminhalt anzeigen, dann betätigen Sie einfach die Tastenkombination "STRG" - "ALT" und die Taste mit dem Halbmond (ganz rechts oben). Nach wenigen Sekunden meldet sich das Terminal dann mit dem Loginbildschirm. Diese Tastenkombination verbindet Ihr Ray-Terminal auch automatisch mit dem Server, auf dem in diesem Moment die Belastung am geringsten ist.

  Melden Sie sich nun mit folgenden Daten an:

  - Name: Ihr zentraler Benutzername an der FHM. Dieser Name wurde Ihnen bei der Aktivierung Ihres Accounts zugewiesen. Wenn Sie Ihn vergessen haben, können Sie ihn auf der Seite https://www.fh-muenchen.de/rz/online-service nachschlagen. Dazu benötigen Sie Ihre Magnetkartennummer und Ihre PIC. Dort wählen Sie den Menüpunkt Online Account-Verwaltung (links oben) und dort dann den Knopf Account Info.
  - Password: Das dazugehörige Passwort
  Wenn Sie sich zum ersten Mal am Praktikumssystem anmelden, ist noch kein Heimatverzeichnis für Sie angelegt. Sie erhalten daher die folgende Meldung.

  Klicken Sie im Fenster auf den OK-Knopf um Ihr Heimatverzeichnis zu erzeugen. Nach wenigen Sekunden erscheint ein leeres Fenster in der linken, oberen Bildschirmecke. Beenden Sie das Fenster mit der Tastenkombination <STRG>-D. Damit kehren Sie wieder zum Login-Bildschirm zurück. Nun können Sie sich erneut anmelden.

  Beim zweiten Praktikumslogin (und nur beim zweiten) bekommt jeder Benutzer einen Bildschirm angezeigt, der nach dem gewünschten Desktop fragt:

  Standardmässig ist "Common Desktop Environment (CDE)" ausgewählt. Hier müssen Sie den Eintrag "KDE Desktop" (ganz unten; im Beispiel rot markiert) aktivieren und "ok" anklicken.

  Nach dem Anmelden finden sie auf ihrem Desktop unter anderem die folgenden Icons vor:

  | Startet den Firefox-Browser und zeigt die Startseite des Fakultäts-Webservers an.
  | Programmieroberfläche kdevelop
  | Programm zum Entfernen eines USB-Sticks. (Siehe Programm- Up- und Download)

  Achtung:Im Gegensatz zur Windows-Oberfläche benötigt man bei der KDE nur einen Mausklick auf das zugehörige Icon um eine Anwendung zu starten. Ein Doppelklick startet die Anwendung zweimal.

  Am unteren Rand des Bildschirmes finden sie eine Reihe von Icons, mit denen verschiedene Programme gestartet werden können. Die wichtigsten sind:

  | Öffnet das Systemmenü, von dem aus sich diverse Programme starten lassen.
  | Dateimanager der KDE.
  | Öffnet ein Fenster zur Eingabe von Betriebssystem-Kommandos (Terminal-Fenster)
  | Umschalten zwischen den vier "virtuellen" Bildschirmen.

  ## Fenstermanager KDE

  Wer von Windows zu KDE wechselt, muß umlernen. Zwar gleichen sich die beiden Oberflächen auf den ersten Blick, doch die Unterschiede im Detail sind gewaltig. Mit ein bißchen Know-how kriegen Sie aber KDE schnell in den Griff. Was sich dann auf dem Bildschirm präsentiert, erinnert an Windows. Statt der Startleiste sehen Sie am unteren Bildschirmrand das sogenannte K-Panel.

  Es faßt die gesamten Steuerungselemente zusammen, dient zum Starten von Programmen, zum Umschalten zwischen den virtuellen Desktops und nimmt Panel-Applikationen genannte Programme auf.
  Dort, wo bei Windows der Startknopf prangt, befindet sich im K-Panel eine Schaltfläche mit einem großen K, dem KDE-Symbol. Ein Klick darauf öffnet das Applikations- oder K-Menü, von dem aus Programme gestartet werden können - genauso wie im Startmenü von Windows.

  ## Projekte erzeugen

  Nach dem Starten von kdevelop erscheint der Hauptbildschirm, der im folgenden Bild zu sehen ist.

  Um mit der Programmierarbeit beginnen zu können, müssen Sie zunächst ein neues Projekt anlegen. Dazu wählen Sie das Menü "Project und dort "New Project...an

  Daraufhin wird folgendes Fenster geöffnet.

  Da im Praktikum nur terminalbasierte C-Programme erstellt werden, müssen Sie als Applikationstyp im linken Fenster "C" und "Simple Hello world program" angeben (im Bild rot markiert). In das Eingabefeld "Application name:" müssen Sie nun noch einen eindeutigen Namen für Ihr Projekt eintragen. (z.B.: "versuch1"). Klicken Sie anschließend auf die Schaltfläche "Next >"

  Damit gelangen Sie zu dem unten abgebildeten Fenster, in dem Sie folgende Eingabe machen müssen:

  - Author: Tragen Sie hier unbedingt Ihren Namen ein.

    Wenn Sie mit dem Ausfüllen des Formulars fertig sind, klicken Sie die Schaltfläche "Next >" an.
    Nun folgen zwei weitere Fenster, in denen sie lediglich den Knopf "next >" anklicken müssen.

    Im folgenden Fenster schliesslich befindet sich ein Knopf namens "Finish". Mit dem Anklicken dieses Knopfes ist die Projektgenerierung beendet.

    Nun sehen Sie Ihr Arbeitsfenster mit einem fertig generierten Rumpf-Programm.

    ## Erste Schritte mit kdevelop

    Nach der Erzeugung eines Projektes kann mit dem Programmieren begonnen werden. Kdevelop hat dazu bereits ein Rumpf-Programm erstellt.

        #ifdef HAVE_CONFIG_H
        #include <config.h>
        #endif

        #include <stdio.h>
        #include <stdlib.h>

        int main(int argc, char *argv[])
        {
          printf("Hello, world!\n");

          return EXIT_SUCCESS;
        }

    Dieses Programm können Sie gleich als Basis für Ihre Praktikumsaufgabe verwenden indem Sie Änderungen vornehmen. Es ist auch sinnvoll, das Programm gleich einmal zu übersetzen und zu starten, um zu sehen, ob alle notwendigen Dateien angelegt wurden. Nach einem Klick auf das Icon "Execute" meldet Kdevelop sich zunächst noch einmal mit dem nachfolgenden Fenster:

    Klicken Sie hier einfach auf "OK".

    ### Wichtige Funktionen

    Die wichtigsten Funktionen von kdevelop lassen sich über Icons in der Menüleiste steuern. Dazu gehört:

    | Projekt öffnen. Mit diesem Knopf können Sie ein gespeichertes Projekt öffnen und daran weiterarbeiten.
    | Datei speichern.
    | Markierten Text aus dem Editorfenster ausschneiden und in die Zwischenablage kopieren.
    | Markierten Text aus dem Editor in die Zwischenablage kopieren.
    | Text aus Zwischenablage an der aktuellen Cursorposition einfügen.
    | Aktuellen Quelltext drucken.
    |  | Komplettes Projekt neu compilieren und ausführbares Programm erstellen. D.h. alle Quelltexte werden neu übersetzt und die Objektmodule dann zu einen Programm zusammen gelinkt.
    | Debugger starten (Fehlersuche)
    | Übersetztes Programm ausführen. Öffnet ein Shell-Fenster und startet darin das erstellte Programm

    Bitte beachten Sie auch folgendes:
    Beim Test ihrer Programme schließen das Shell-Fenster, in dem das Programm läuft, entweder durch Drücken der Enter-Taste (bei normaler Termininierung des Programms) oder mit STRG-C (wenn das Programm hängt, aber auch bei einer Eingabeanforderung) zu beenden. Sonst entstehen Prozesse, die u. U. sehr viel Rechenzeit aufnehmen und das Praktikum behindern.

    ## Mathe-Bibliothek linken

    Kdevelop linkt die Mathe-Bibliotheken nicht automatisch. Wenn Sie Funktionen aus dieser Bibliothek verwenden wollen, wie etwa sin() oder cos() , dann gehen sie wie folgt vor: Öffnen Sie das Menü Project und dort Project Options. Wählen Sie in der linken Auswahlleiste Configure Options und tragen Sie dann unter Linker Flags (LDFLAGS) ein `-lm`, wie im Bild gezeigt. Bestätigen Sie die Änderung mit OK.

    ## Programme debuggen

    Mit Hilfe des Debuggers (von De-Bug, zu deutsch:Debugger etwa "Entwanzer") können Sie Fehler in Ihrem Programm suchen. Er wird durch Anklicken des Icons gestartet.

    Im linken, oberen Fenster finden Sie den Quelltext des aktuellen Programmes, rechts die überwachten Ausdrücke.

    Als Beispiel für die folgende Debugger-Session soll diese Programm dienen:

        #include <stdio.h>
        #include <stdlib.h>

        int rechne(int x);

        int main(int argc, char *argv[])
          {
          int a, b, c;

          a=7;
          b=a;
          c=a++;
          a=rechne(b);
          printf("a=%d, b=%d, c=%d\n",a,b,c);

          return EXIT_SUCCESS;
          }

        int rechne(int x)
          {
          int y;

          y=x*7;

          return y;
          }

    Um mit dem Debuggen zu beginnen muß zunächst einmal ein Haltepunkt gesetzt werden, bis zu dem hin das Programm anschließend ausgeführt wird. In unsrem Beispiel soll das die Zeile mit dem Quelltext a=7 sein.

    Zum Setzen des Haltepunktes bewegt man den Cursor links neben die gewünschte Zeile und drückt die rechte Maustaste. Nun wählt man "Breakpoint" aus. Die Zeile wird dann mit einem roten Punkt markiert.

    Nun kann das Programm mit einem Klick auf das Icon bis zum gerade markierten Punkt ausgeführt werden. Ein grüner Pfeil markiert dann die aktuelle Position innerhalb des Programmes. Ein Klick auf den Karteireiter "Variables (x)" links vom Editorfenster liefert eine Ansicht aller deklarierten Variablen und deren aktueller Werte.

    Von diesem Punkt aus sind mehrere Aktionen möglich.

    | Einzelschritt: Nur der nächste Schritt im Programm wird ausgeführt (Zeile mit dem grünen Pfeil). Steht in dieser Zeile der Aufruf einer Funktion, dann wird in deren Quelltext hineingesprungen.
    | Funktion überspringen: Steht in der aktuellen Zeile der Aufruf einer Funktion, dann wir sie komplett ausgeführt und anschließend angehalten.
    | Aus einer Funktion herausspringen: Das Programm wird bis zum Ende der Funktion ausgeführt, in der man sich gerade befindet.

    Damit der Debugger auch richtig funktioniert, braucht er ein eigenes Anzeigefenster. Sollte sich nach dem Starten die gesamte Oberfläche von Kdevelop plötzlich passiv verhalten (man kann dann nur Kdevelop komplett schließen und wieder neu starten), gehen Sie folgendermaßen vor:

    - Klicken Sie auf "Project" und dort auf "Project Options"
    - Wählen Sie im linken Fenster das Icon "Debugger"
    - Aktivieren Sie "Enable separate terminal for application IO"
    - Bestätigen Sie anschließend mit "OK".

    Leider speichert Kdevelop diese Option nicht ab; so dass man die Einstellung für jedes Projekt neu setzen muss. Nun ist der Debugger funktionsfähig.

    ## Up-/Download von Programmen

    An jedem einzelnen Terminal können via USB-Stick mitgebrachte Programme in Ihr Heimatverzeichnis kopiert werden. Sie finden dazu zwei USB-Steckplätze an der Stirnseite jeder Tastatur. Stecken Sie hier einfach den USB-Stick ein. Nach wenigen Sekunden steht Ihnen dann der Inhalt des USB-Sticks im Unterverzeichnis "usbstick" Ihres Heimatverzeichnisses zur Verfügung. Sie können Ihre Dateien nun zum Beispiel mit dem Filemanager der KDE (Icon in der Menüleiste am unteren Bildschirmrand) kopieren. Markieren Sie dazu das gewünschte Programm mit der rechten Maustaste und wählen Sie die Funktion copy.

    Tip:Legen Sie zuerst ein neues Projekt an und laden Sie dann Ihre vorbereitete C-Quelle in das entsprechende Projektverzeichnis, indem Sie die Muster-C-Quelle überschreiben. Ihr Quellprogramm muß genauso heissen, wie Ihr Projekt, also z.B. `versuch1.c`. Sie müssen es in das Verzeichnis Projektname/`src` kopieren, also z.B.: `versuch1/src`

    Wählen Sie dazu das Quellverzeichnis aus und drücken Sie die rechte Maustaste. Wählen Sie nun die Funktion "Paste" zum Einfügen Ihrer Datei.

    Wichtig: Bevor Sie den Memory-Stick wieder herausziehen, sollten Sie das Icon "Stick entfernen" auf dem Desktop anklicken; andernfalls droht Datenverlust!

    Danach öffnet sich ein Fenster wie das obige. Drücken Sie anschließend ALT-F4 um es zu schliessen. Nun können Sie den Memory-Stick aus der Buchse ziehen.

    ## Beenden des Praktikums

    Nachdem Sie sich vom Server abgemeldet haben (KDE-Icon im K-Panel anklicken und "Log out..." wählen sowie bestätigen), schaltet Ihr Praktikumsbetreuer alle Geräte zentral ab. Sie sollten Ihr Terminal als nach dem Abmelden einfach laufen lassen.

    ## Headerdatei `adprakt.h`

    ### für das Praktikum Algodat/Programmieren 1

    Die Datei stellt einige Funktionen für das Praktikum zur Verfügung:
    - Bildschirmein- und Ausgabe
    - Ansteuerung eines Relais-Interface
    Die Headerdatei enthält folgende Funktionen:

    `int echo_on()`
      Echo der Bildschirmausgabe im Shell-Fenster einschalten.

    `int echo_off()`
      Echo der Bildschirmausgabe im Shell-Fenster ausschalten.

    `int set_waitkey()`
      Warten, bis eine Taste der Tastatur betätigt wird. Gibt bei Fehler -1 zurück, sonst 0.

    `int getch()`
      Ein Zeichen von der Tastatur einlesen (ohne Echo, ohne anschliessendes Drücken der Enter-Taste).

    `int relais(int R1, int R2, int R3, int R4, int R5, int R6, int R7, int R8, char Result[200])`
      Schaltet Relais in der Relaisbox des Rechners "blackhole", der sich im Labor ganz hinten rechts befindet. Die Relaisbox wird für das Praktikum mit dem schwarzen Hauptschalter eingeschaltet (die roten Schalter bitte auf Stellung "ein" belassen). Nach dem Praktikum abschalten nicht vergessen (die Box, nicht den Rechner).
      Durch den Wert 1 werden die Relais R1 - R8 eingeschaltet, durch den Wert 0 wieder ausgeschaltet. Als Rückgabewert erhält man den Return-Value der Steuersoftware (Link siehe unten) oder bei einem Fehler (z. B. Box nicht eingeschaltet) -1. Im String "Result" wird die Klartextmeldung der Steuersoftware zurückgegeben.
      Die Relais R1 bis R7 schalten die entsprechenden 230-V-Steckdosen auf der Rückseite der Relaisbox, das Relais R8 betätigt einen akustischen Signalgeber.

    `int relais_off(char Result[200])`
      Mit diesem Befehl werden alle Relais wieder ausgeschaltet. Als Rückgabewert erhält man den Return-Value der Steuersoftware (Link siehe unten) oder bei einem Fehler -1. Im String "Result" wird die Klartextmeldung der Steuersoftware zurückgegeben.

    Mehr über die Relaisbox und die Software-Realisierung erfährt man im Internet-Technologie-Skript (http://www.netzmafia.de/skripten/server/server6.html#6.4).

    #### Testprogramm für die Relais

    Das Programm schaltet nacheinander die Lampen Rot - Gelb - Grün und den Summer.

        #include <stdio.h>
        #include <stdlib.h>
        #include <adprakt.h>

        int main()
          {
          char Result[200];
          int erg;
          erg = relais(1,0,0,0,0,0,0,0,Result);
          printf("Erg.: %d Res.: %s\n", erg,Result);
          sleep(1);
          erg = relais(0,1,0,0,0,0,0,0,Result);
          printf("Erg.: %d Res.: %s\n", erg,Result);
          sleep(1);
          erg = relais(0,0,1,0,0,0,0,0,Result);
          printf("Erg.: %d Res.: %s\n", erg,Result);
          sleep(1);
          erg = relais(0,0,0,0,0,0,0,1,Result);
          printf("Erg.: %d Res.: %s\n", erg,Result);
          sleep(1);
          erg = relais(0,0,0,0,0,0,0,0,Result);
          printf("Erg.: %d Res.: %s\n", erg,Result);
          return(0);
          }

    Zum Inhaltsverzeichnis

    ###### Copyright © FH München, FB 04, Prof. Jürgen Plate

    ###### Letzte Aktualisierung: 27. Oct 2006