jueves, 23 de octubre de 2014

AWP: Unterricht von 2014-10-20 Strukturen, Koordinaten-Umrechnung

Ein geometrischer Punkt in der Ebene lässt sich durch unterschiedliche Koordinatenangaben festlegen bzw. bestimmen. Mithilfe eines C++-Programms soll eine Umrechnung zwischen kartesischen und polaren Koordinaten ermöglicht werden.

Die folgende Grafik veranschaulicht den Zusammenhanf zwischen beiden Koordinatenangaben:



Ein Punkt kann entweder mit seinen Koordinaten x und y angegeben werden (kartesische Koordinaten) oder durch den Abstand zum Ursprung (= Radius) und seinen Winkel zwischen Radius und x-Koordinate (polare Koordinaten).

Für die Umrechnung gelten folgende Formeln:

Polar -> Kartesisch
x = Radius * cos(Alpha)
y = Radius * sin(Alpha)


Kartesisch -> Polar
Radius = sqrt(x*x + y*y)
Alpha = atan(y / x)

Will man im Gradmaß arbeiten, so kann man die Winkel einfach umrechnen:
Bogenmaß = Gradmaß * Pi / 180
Gradmaß = Bogenmaß * 180 / Pi

Die matematische Konstante Pi (3.14...) ist in der Headerdatei vordefiniert unter dem Namen M_Pi.



Aufgabe:
Schreiben Sie ein C++-Programm, das dem Benutzer zunächst eine Auswahlmaske folgender Form anbietet:



Berechnungen sollen wiederholt durchführbar sein solange, bis der Anwender 0 eingibt. Wenn eine ungültige Zahl (z.B. 4) ausgewählt wird, soll der Benutzer darauf hingewiesen werden.

Sobald 1 oder 2 eingegeben wird, muss das Programm zunächst die erforderlichen Daten vom Benutzer im Hauptprogramm erfragen (bei 1: Radius und Winkel, bei 2: x und y) und dann in die entsprechende Funktion verzweigen (PolarKartesisch() bei 1 und KArtesischPolar() bei 2).

Schließlich werden nach erfolgtem Funktionsaufruf die gesuchten Daten im Hauptprogramm ausgegeben.




Teilen Sie den Programmcode auf verschiedene Funktionen auf, sodass unterschiedliche Programme die Umrechnungsroutinen benutzen könnten!

Überlegen Sie sich dazu, welche Schnittstellen die Funktionen benötigen (welche Daten werden vom Hauptprogramm an das Unterprogramm geliefert, und welche Daten benötigt das Hauptprogramm). Benutzen Sie geeignete Datentypen und Funktionen ohne call by reference!



Quellcode:

Nicht so gut Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_nicht_so_gut.cpp

Gute Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_gut.cpp

Bessere Lösung: https://github.com/binary-sequence/awp-uebungen/blob/master/2014-10-21/koordinaten_besser.cpp

miércoles, 22 de octubre de 2014

AWP: Unterricht von 2014-10-20 Datenstrukturen

Ein Fuhrparkunternehmer will seine Fahrzeugflotte mit maximal 250 Fahrzeugen zukünftig elektronisch verwalten. Er möchte gern von jedem Fahrzeug des Kennzeichen (FÜL - AB 1995), den Fahrzeugtyp (ob PKW oder LWK), die zu zahlende KFZ-Steuer und Versicherungsprämie, die Schadensfreiheitsrabatt-Klasse mit den zugehörigen prozentualen Wert, die jährlich gefahrenen Kilometer (für max. 15 Jahre), die getankte jählriche Kraftstoffmenge, den jährlichen Durchschnittsverbrauch jeweils fahrzeugspezifisch erfassen und verwalten.

Erstellen Sie eine geeignete Datenstruktur und definieren Sie eine geeignete Variable!



// gute Lösung

struct T_KFZ_Daten {
  char cKennzeichen[31];

  bool bFahrzeugtyp_PWK;

  float fKFZ_Steuer;

  float fVersicherungsprämie;

  int iSchadensfreiheitsrabatt_Klasse;

  int iSchadensfreiheitsprozente;

  int iGefahreneKilometer[15];

  int igetankteKraffstoffmenge[15];

  float iDurchschnittsverbrauch[15];
};

T_KFZ_Daten Fahrzeug[250];



// bessere Lösung

struct T_KFZ_Versicherung {
  float fVersicherungsprämie;

  int iSchadensfreiheitsrabatt_Klasse;

  int iSchadensfreiheitsprozente;
}

struct T_KFZ_Daten {
  char cKennzeichen[31];

  bool bFahrzeugtyp_PWK;

  float fKFZ_Steuer;

  T_KFZ_Versicherung Versicherung;

  int iGefahreneKilometer[15];

  int igetankteKraffstoffmenge[15];

  float iDurchschnittsverbrauch[15];
};

T_KFZ_Daten Fahrzeug[250];

martes, 21 de octubre de 2014

SK: Unterricht von 2014-10-17 Merkmale eines guten Redners


  • gute offene Körperhaltung (Hände nicht in der Hosentasche)
  • freie Reden (nicht von Spicker ablesen)
  • zum Publikum sprechen, Blickkontakt
  • Sichtfeld (Tafel, Flipchart, Beamer-Projektion) niht behindert.
  • seriösse Auftreten (Kleidung, Essen, Kaugummi)
  • lautes deutliches sprechen (auch kein Daueräuspern)
  • gute (Haupt-) Position als Redner (etwas Bewegung)
  • Ablenkung vermeiden (Smart-Phone, Laptop)
  • bei mehrere Vortragenden die Redezeiten festlegen.
  • publikum einbeziehen, auf Fragen vorbereitet sein (Adressatenanalyse)
  • erklären mit Anschauungsmaterial
  • keine Dauerrede, Stimme modulieren (leise, laut reden), Pausen lassen
  • Identität bewahren (man selbst sein)

lunes, 20 de octubre de 2014

AWP: Unterricht von 2014-10-17 Ziele der Datenorganisation mit Datenbanken

Unter dem Begriff Datenorganisation werden alle Verfahren zusammengefasst, die dazu dienen, Daten
  • zu strukturieren und
  • auf Datenträgern zu speichern (schreibender Zugriff) und für den lesenden Zugriff verfügbar zu halten.
Um die immer weiter anwachsende Informationsflut in den Griff zu bekommen, werden in zunehmenden Maße Datenbanken zur Verwaltung der Informationen eingesetzt.
Durch unkontrolliert wachsende Datenbestände ist in bestimmten Bereichen ein Datenchaos entstanden. Verursacht wird das Datenchaos u.a. durch die eigenständige isolierte Datenhaltung für einzelne Anwendungen.
Beispielweise kann man es in einem Betrieb vorkommen, dass Kundendaten für unterschiedliche Anwendungen jeweils neu gespeichert werden, z.B. für die Auftragsbearbeitung und die Rechnungserstellung.
Mit der Mehrfachspeicherung gleicher Informationen (Redundanz) wird Speicherplatz verschwendet und die Informationsverarbeitung verläuft nicht effizient, da eine mehrfache Datenpflege notwendig ist.

Die schwerwiegendsten Fehler, die zu Chaos in der Datenorganisation führen, können aber dadurch entstehen, dass bei Mehrfachspeicherung der Daten unterschiedliche Änderungen in den einzelnen Anwendungen vorgenommen werden. Dadurch sind die Daten nicht mehr widerspruchsfrei (Verletzung der Datenintegrität).

Zur Lösung dieser Probleme soll die integrierte Informationsverarbeitung beitragen. Sie umfasst Datenintegration und Vorgangsintegration. Datenintegration wird durch eine Datenbasis (Datenbank) erreicht, die von mehreren Anwendungen in unterschiedlichen betrieblichen Funktionsbereichen gemeinsam genutzt wird. Ziel ist, die zusammenfassende Abbildung der gesamten Organisation und ihrer Beziehungen zur Umwelt in einer einzigen Datenbasis (globales Modell). Vorgangs-, Funktions- oder Prozessintegration erfolgen durch die it-technische Verknüpfung von arbeitsteilig in verschiedenen Abteilungen abzuwickelnden Vorgängen zu Ablaufketten (z.B. Auftragsabwicklung vom Kundenauftrag bis zur Auslieferung und Bezahlung).

Di genanten Anforderungen sind idealtypisch und stehen teilweise miteinander in Konkurrenz. Weniger Redundanz wird z.B. mit geringerer Flexibilität und Effizienz erkauft.

Ziele der Datenorganisation sind::

  1. Datenunabhängigkeit
    • Unabhängigkeit vom Anwendunsprogramm: Die Daten sind anwendungsneutral gespeichert, d.h. unabhängig vom erzeugenden oder benutzenden Anwendungsprogramm (im Gegensatz zur integrierten Verarbeitung mit Dateiorganisation).
    • Unabhängigkeit der logischen von der physischen Datenorganisation: Der Benutzer muss nur die Datenstrukturen kennen. Methoden zum Suchen, Ändern, Einfügen und Löschen von Datensätzen werden vom Datenbankverwaltungssystem zur Verfügung gestellt.
    • Physische Datenunabhängigkeit: Das Datenbankverwaltungssystem steuert und überwacht (im Zusammenspiel mit dem Betriebssystem) die peripheren Geräte, blockt bzw. entblockt Sätze, kontrolliert Überlaufbereiche, belegt Speicherräume oder gibt sie frei usw.
  2. Benutzerfreundlichkeit
    • Leicht zu erlernenden Benutzersprachen (-> SQL) ermöglichen sowohl dem professionellen Benutzer (Systementwickler, Programmierer) als auch dem Endbenutzer eine einfache Handhabung der Daten. Die Benutzersprachen sollten durch grafische Bedienoberflächen unterstützt werden (GUI).
  3. Merhfachzugriff
    • Jeder, der autorisiert ist, darf im Mehrbenutzerbetrieb zu jeder Zeit auf die gespeicherten Daten zugreifen.
  4. Flexibilität
    • Die Daten müssen in beliebiger Form verknüpfbar sein (mehrdimensionaler Zugriff, Vielfachzugriff). Sie müssen sowohl den fortlaufenden (sequenzieller) als auch den wahlfreien Zugriff ermöglichen.
  5. Effizienz
    • Die Zeiten für die Abfrage und für die Verarbeitung müssen kurz sein, ebenso für Änderungen und Ergänzungen des Datenbestandes.
  6. Datenschutz
    • Die Daten sind vor unbefugtem Zugriff (Missbrauch) zu schützen.
    • Ist der Teilnehmer überhaupt zugriffsberechtigt?
    • Ist der Teilnehmer nur zu bestimmten Daten zugriffsberechtigt?
    • Ist der Teilnehmer nur zu Abfragen oder auch zu Änderungen berechtigt?
  7. Datensicherheit
    • Die Daten müssen gegen Programmfehler und Hardware-Ausfälle gesichert sein. Das Datenbanksystem soll nach Störungsfällen den korrekten Zustand wiederherstellen (Recovery).
  8. Datenintegrität
    • Die Daten müssen vollständig, korrekt und widerspruchsfrei sein. Daten, die redundant gespeichert sind, müssen dasselbe aussagen (Datenkonsistenz). Die Forderung nach Datensicherheit wird gelegenlicht in die Datenintegrität einbezogen. Weitere Integritätsregeln können sein: Wertebereichsbedingungen (z.B. eine deutsche Postleitzahl hat genau fünf Zeichen) oder sich aus der Datenbanklogik ergebende Bedingungen (z.B. ein Kunde muss mindestens 18 Jahre alt sein). Auch muss jeder Wert eines Fremdschlüssels in einem verküpften Primärschlüssel auch als Wert im entsprechenden Primärschlüssel vorkommen (-> referentielle Integrität).
  9. Redundanzfreiheit
    • Jede Information sollte möglichst nur einmal gespeichert werden, z.B. die Kundenanschrift nicht gleichzeitig bei der Auftragsbearbeitung und die Rechnungserstellung, sondern nur einmal. Wobei alle Abteilungen, im Beispiel die Auftragsbearbeitung, die Fakturierung und die Debitorenbuchhaltung Zugriff auf die Kundenadresse haben.
    • Die genannten Anforderungen sind idealtypisch und stehen teilweise miteinander in Konkurrenz. Weniger Redundanz wird z.B. mit geringerer Flexibilität und Effizienz erkauft.

domingo, 19 de octubre de 2014

AWP: Unterricht von 2014-10-17 Grundlagen Datenbanken

Ein Datenbankmodell ist die theoretische Grundlage für eine Datenbank und legt fest, auf welche Art und Weise die Daten in dem Datenbanksystem gespeichert und bearbeitet werden können.
Ein Datenbankmodell von heute kann sehr komplex werden, da immer mehr Informationen in einem Datenbankmodell abgebildet und modelliert werden müssen.

Das hierarchische Datenbankmodell ist das älteste logische Datenbankmodell, es bildet die reale Welt durch eine hierarchische Baumstruktur ab.
Jeder Satz (Record) hat also genau einen Vorgänger, mit Ausnahme genau eines Satzes, nämlich der Wurzel der so entstehenden Baumstruktur. Das hierarchische Modell ist im Bereich der Datenbanksysteme heute weitgehend von anderen Datenbankmodellen abgelöst worden.

Das nächste Datenbankmodell ist das Netzwerk-Modell.
Es fordert keine strenge Hierarchie, d.h. ein Datensatz kann mehrere Vorgänger haben.
Auch können mehrere Datensätze an oberster Stelle stehen. Es existieren meist unterschiedliche Suchwege, um zu einem bestimmten Datensatz zu kommen.



Das relationale Datenbankmodell schaffte in den 1990er einen technischen Durchbruch.
eine relationale Datenbank kann man sich als eine Sammlung von Tabellen (den Relationalen) vorstellen, in welchen Datensätze abgespeichert sind.
Etwa 90% der eingesetzten Datenbanken basieren auf dem relationalen Datenbankmodell.



Mit dem Aufkommen objektorientierter Programmiersprachen werden vermehrt objektrelationale und objektorientierte Datenbanken eingesetzt. Diese Datenmodelle verfolgen den Ansatz, Daten zusammen mit ihren Funktionen in einem Objekt zu Speichern.
Das Datenmodell basiert auf den Paradigmen der objektorientierten Programmierung und im Einzelnen der jeweiligen Programmiersprache, die zum Einsatz kommt (z.B. C++, Java oder C#).
Dieses Vorgehen hat Vorteile gegenüber dem relationalen Entwurf, wenn man komplexe Datenobjekte speichern möchte, die nur schwer auf die flachen relationalen Tabellenstrukturen abgebildet werden können.
Objektdatenbanken haben jedoch noch immer Nachteile gegenüber relationalen Datenbanken bei der Verarbeitung großer Datenmengen. Dies ist beispielweise durch Zugriffspfade zu Objekten über mehrere Pfadarten (bspw. Vererbung und Assoziation) verursacht.

Wenn z.B. im Internet sehr große Datenmengen verarbeitet werden müssen werden auch so gennante NoSQL-Datenbanken eingesetzt. Hier unterscheidet man z.B. Key Value Stores-, Spalten-, Dokumentorientierte- und Graphdatenbanken.

AWP: Unterricht von 2014-10-17 Datenstrukturen und Speicherbelegung

Für fünf Sportler sollen in einem Speerwurf-Wettbewerb die Daten erfasst und ausgewertet werden. Wie sehen Datendefinition und Speicherbelegung aus?

struct T_Wurf {
  char cName[16]; // 16 Byte
  int aiSpeer[3]; // 4 Byte * 3 = 12 Byte
}

T_Wurf Sportler[5];


jueves, 16 de octubre de 2014

VNS Praxis: Unterricht von 2014-10-16 Serverbasiertes Netzwerk

Serverbasiertes Netzwerk im Versicherungsbüro

Nachdem das Netzwerk im Versicerungsbüro "Universal & Sicher" erfolgreich als Peer-to-Peer-Netz gelaufen ist, soll es zu einem Client-Server-Netzwerk umstrukturiert werden. Der steigende administrative Aufwand und neue Mitarbeiter machen diesen Schritt erforderlich.

Um eine einheitliche Betriebsystemplattform zu haben, entscheidet sich die Firmenleitung für das Serverbetriebssystem Windows 8. Da der Kunde mit Ihnen sehr zufrieden war, sollen Sie nun auch die Planung und installation der Client-Server-Umgebung realisieren.

Aufgabe:

In gesprächen mit dem Kunden werden die zufünftigen Aufgaben geklärt.

Beschreiben Sie die Aufgaben und Funktionen, die der Server im Netz übernehmen soll und definieren Sie zu realisierenden Funktionen im Client-Server-Netz.

Grundlage dafür ist die existierende Dokumentation Zum Peer-to-Peer-Netzwerk.

Definieren Sie daraus den neuen Soll-Zustand basierend auf dem bereits vorhandenen.