Sie sind auf Seite 1von 30

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Lehrer Programmieren:

ARBEITSBLATT C#

Dr. Andreas Alef (alef@tbs1.de, andreas.alef@web.de)

08.09.2010

Welche Hobbys habt Ihr?

Was ist der Unterschied zwischen SW und einem Auto?

SW ist immateriell

Autos erzeugen bei der Entwicklung und Produktion Kosten für Material und Lohn

Die Kosten für SW fallen bei der Entwicklung an (überwiegend Lohnkosten), die Vervielfa- chung und Verteilung führt nur zu geringen Stückkosten.

15.09.2010

Der immaterielle Charakter von SW führt dazu, daß in der Historie Programme häufig ohne oder mit wenig Planung geschrieben wurden. Die sich durch den Mangel an Planung ein- schleichenden Fehler wurden manchmal besonders spät erst entdeckt und deren Behebung führte dann zu besonders hohen Kosten.

Aus diesem Grund forderte man, daß SW nach ingenieurmäßigen Vorgehensweisen zu pro- duzieren sei. Die sich damit beschäftigende Wissenschaftsdisziplin nennt sich „SW- Engineering“.

Das sogenannte Wasserfallmodell ist ein Phasenmodell für die Entwicklung von SW.

Der SW-Entwicklungsprozeß ist in 5-7 Phasen aufgeteilt.

Jede Phase wird getrennt von den anderen Phasen und streng nacheinander bearbeitet.

Jede Phase übernimmt die Ergebnisse der voherigen.

Im einfachen Modell sind Rückschritte nicht möglich (Kritik).

Im erweiterten Wasserfallmodell sind Rückschritte erlaubt.

Das erweiterten Wasserfallmodell:

1

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

  Lehrer: Dr. Andreas Alef Fach: AWE Name: (aus wikipedia, Stichwort „Wasserfallmodell“, Abrufdatum

(aus wikipedia, Stichwort „Wasserfallmodell“, Abrufdatum 15.09.2010, 10:25h)

Initialisierung: Problemverständnis an der Oberfläche, Kundengespräche usw.

Analyse: Detailliertes Verständnis und Durchdringung des Problemes, erste Lösungsan- sätze

Entwurf: Detaillierte Planung. Kann Dokumente, Strukturpläne usw. als Ergebnis haben. An dieser Stelle sollte bekannt sein, wie das Programm funktionieren wird.

Realisierung: Eigentliche Programmierung

Einführung: auf den Markt bringen, Installation beim Kunden

Nutzung: Betrieb des Programmes

SW-Life Cycle

Spiralmodell

Algorithmus

Erarbeitung durch Schüler:

Spiralmodell und SW Life Cycle

Spiralmodell

Vorgehensmodell

Weiterentwicklung des Wasserfallmodells

Phasen werden immer wieder spiralförmig (von außen nach innen) durchlaufen

Risikobetrachtung hoher Stellenwert

Es können beliebig viele Zwischenschritte eingefügt werden -> flexibel

2

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

 Das Spiralmodell   (aus wikipedia: Stichwort Spiralmodell, 20.09.2010))
Das Spiralmodell
(aus wikipedia: Stichwort Spiralmodell, 20.09.2010))

Vorgehensmodell, wie andere auch.

Detailliert eine zyklische Vorgehensweise in vier Schritten (Ziele, Alternativen / Risiko, Entwicklung und Test, Planung nächster Zyklus)

Diese immer gleichen Zyklen wiederholen sich in immer weiteren „Verfeinerungen“, und durchlaufen somit auch Anforderung, Grob-, Feinentwurf sowie die eigentliche Program- mierung und Indienststellung.

3

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Der SW-Lifecycle

Dr. Andreas Alef Fach: AWE Name: Der SW-Lifecycle (

Phasenmodell zur SW-Erstellung

Endet nie, solange es das zugrundeliegende Problem gibt

Geht in Releases vor, die sich immer erneut aneinander reihen

Ansonsten sind die Phasen ähnlich Wasserfallmodell, allerdings detaillierter

In obiger Darstellung ist (vermutlich) im äußeren Ring die Phase benannt, im inneren das Ergebnis

4

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Zentraler Begriff in der Programmierung ist der Algorithmus:

Finitheit: endlich beschreibbar

Ausführbarkeit

Dynamische Finitheit

Terminierung: endlich viele Schritte

Determiniertheit: bei gleichem Ablauf und bei gleichem Input dasselbe Ergebnis

Determinismus: nächster Schritt ist immer jeweils eindeutig definiert.

Aufgabe: PSPAD oder anderen Editor starten und das folgende Programm eingeben, abspeichern unter z. B. d:\test.cs (d. h. einfacher Pfad)

using System; // Zwei Schrägstriche leiten einen Zeilenkommentar ein, der vom // Compiler ignoriert wird /* mit Schrägstrich-Sternchen (/*) kann ein beliebig langer Kommentar Begonnen werde, der sich über x Zeilen hinziehen kann. Beendet wird dieser Kommentar mit */

/* Mit using System usw. werden vordefinierte Klassenbibliotheken eingebunden */ using System.Collections.Generic;

using System.Linq; using System.Text;

// <- das ist ein q wie Kuh

namespace ConsoleApplication1

{ // Mengenklammern rahmen einen Block ein, klammern z. B. eine Methode class Program { // Einrückung dient der Übersichtlichkeit und ist ein “muß” static void Main(string[] args) // hier fängt das Programm an

{

 

// Eine Variable ist ein Platzhalter, ein Bezeichner für eine

// Speicherstelle. int i; // Variable i wird definiert, int = Integer = Ganzzahl

String str; // eine Art Text, z. B.

ITF10a, itf10a

Console.Write("Hello World"); // Gibt in der Konsole den String “HW” aus //i = Console.Read(); // wegkommentiert str = Console.ReadLine(); // liest die Eingabe von der Tastatur ein, abge- // schlossen mit <Return> und schreibt die Ein- // gabe in die Variable str.

Console.WriteLine(str);

// Ausgabe str auf die Konsole

}

}

}

5

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Anschließend Konsole öffnen. Suchen nach der Datei: csc.exe : c:\windows\microsoft.NET\Framework\v4.0.30319\csc.exe

In den Ordner wechseln, in dem die Datei test.cs sich befindet. Z. B. d:\ cd \ordner\

Aufruf: c:\windows\microsoft.NET\Framework\v4.0.30319\csc.exe marvin.cs

// Zeilenkommentare werden durch zwei "//" eingeleitet. /* Ein Kommentar kann auch

über mehrere Zeilen gehen, dann wird er durch Schrägstrich Sternchen eingeleitet und ende mit Sternchen Schrägstrich. */ // Ein Kommentar hilft dem Programmierer, sich auch nach // Wochen und Monaten, sich im Programm zurechtzufinden. // Der Compiler, das ist das Programm, das den C#-Code in // den ausführbaren Code umwandelt, ignoriert alle Kommentare. // Ein guter Programmierer verwendet viele, aussagekräftige // Kommentare. In der Schule sind Kommentare ein "Muß" und // das Unterlassen führt zu Punktabzügen.

// Hier werden mit using System-Bibliotheken und -Klassen dem // Programm zur Verfügung gestellt

using System; using System.Collections.Generic; using System.Linq; using System.Text;

namespace ConsoleApplication1

{

 

class Program

{

static void Main(string[] args) // Hier fängt der // Programmablauf an

{

// Variablen int i; String str; Console.Write("Hello \r\n World");

//i = Console.Read(); str = Console.ReadLine();

Console.WriteLine(str);

}

}

}

6

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Erkenntnisse:

Welche Schritte sind nötig, um ein erstes Programm zu erstellen?

Programmcode in einem Editor schreiben

Unter der Dateiendung cs abspeichern

In der Konsole Compiler csc.exe aufrufen.

Der Compiler wandelt das C#-Programm in den sogenannten ausführbaren Code um.

Der ausführbare Code wird in einer Ausführungsumgebung, einer Art virtuellen Maschine, zur Ausführung gebracht (ähnlich Java: Java Runtime Environment Microsoft.NET)

Unter Windows kann man sein Programm mit dem Aufruf test.exe zur Ausführung brin- gen.

Aufgabe: Start Visual Studio

Aufruf der Menüs \Datei\Neu\Projekt Konsolenanwendung auswählen Die Entwicklungsum- gebung VS fügt einen
Aufruf der Menüs
\Datei\Neu\Projekt
Konsolenanwendung
auswählen
Die Entwicklungsum-
gebung VS fügt einen
Rumpfcode ein

7

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Testen des Programms (Ausführen) mit

STRG+F5

Testen des Programms (Ausführen) mit STRG+F5
Testen des Programms (Ausführen) mit STRG+F5

Aufgabe: Sie sind bei der Wellness AG als Chefprogrammierer beschäftigt und sollen eine erste Anwendung in C# schreiben: das Programm soll den BMI ausrechnen.

Sie haben noch nie von BMI gehört…

Recherchen:

Körpergröße

Gewicht

Alter?

Formel BMI = gewicht / groesse 2

Was soll denn das Programm im einzelnen machen?

Struktogramm: Berechnung des BMI

Aufforderung / Textausgabe „Körpergröße in cm“ Eingabe der Körpergröße Aufforderung / Textausgabe „Gewicht in

Aufforderung / Textausgabe „Körpergröße in cm“

Eingabe der Körpergröße

Aufforderung / Textausgabe „Gewicht in kg“

Eingabe des Gewichts

Berechnung: BMI = gewicht / groesse 2

Ausgabe des Ergebnisses

Zum Struktogramm: die hier abgebildeten Elemente in Rechtecken nennt man Anweisung.

Aufgabe: Auch wenn das Programm nicht vollständig geschrieben werden kann, können doch die Ausgaben schon einmal programmiert werden.

8

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Eine Variable in einer Programmiersprache ähnelt der Variablen in der Mathematik: sie kann bestimmt e Werte annehmen und speichern. Im Gegensatz zur Mathematik sind die Berei- che von Computer-Variablen beschränkt: z. B. können int-Zahlen (im Gegensatz zu den ganzen Zahlen der Mathematik von unendlich bis + unendlich) nur den Bereich von - 2.147.483.648 bis 2.147.483.647 annehmen.

Näheres Skript von Herrn Adams (www.ralfadams.de -> C#)

Ein besonderer Variablentyp ist der des Strings. Strings können alphanumerische Zeichen- ketten speichern, also z. B. „Andreas Alef“ oder „BO-KL236“ oder „3,14“ oder „17“. Sie be- stehen also aus Buchstaben und Ziffern.

Wenn in einer Speicherzelle die Dualzahl 0100 0001 steht, so kann damit einerseits der Buchstabe ‚A„ gemeint sein, oder auch die Zahl 65. Was gemeint ist, ist Interpretation und die Interpretation wird im Programm festgelegt.

Wie sieht so etwas im Speicherbereich eines Digitalrechners aus, der ja wie bekannt nur Nullen und Einsen speichern kann?

Adresse

Inhalt

Interpretation als ASCII

Interpretation als Zahl

     

1128

     

1127

0x36=0011 0110

‚6„

54

1126

0x33=0011 0011

‚3„

51

1125

0x32=0011 0010

‚2„

50

1124

0x4C=0100 1100

‚L„

78

1123

0x4B=0100 1011

‚K„

77

     

Es gilt die Regel:

Eingaben werden in einen String (eine String-Variable) eingelesen und dann ggf. zur Weiter- berechnung in eine Zahl (z. B. Integer) umgewandelt.

String-Variablen werden wir mit einem „str“ beginnen lassen, Integer mit einem vorangestell- ten i. Diese Form der Vorsilbe bei Variablen nennt man ungarische Notation. Sie erleichtert das Programmieren. Außerdem sollte man sprechende Variablennamen verwenden (Nega- tivbeispiel: moped1, moped2).

Welche Variablentypen es gibt, kann man bei Ralf Adams nachlesen.

static void Main(string[] args)

{

// Variablen

double dGewicht=0.0; // sprechende Variablennamen // double Zahl mit Nachkommastellen

int iLaenge = 0;

// int = integer ganzeZahl

9

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

 

Name:

 

String strGewicht;

// dient zur Eingabe von der Tastatur. Keine Rechnung // möglich.

String strLaenge;

//---------------------------------------

 

Console.WriteLine("BMI - Rechner: "); // Was ist hier falsch? Jetzt nichts mehr Console.Write("Bitte geben Sie Ihre Größe in cm ein: ");

strLaenge = Console.ReadLine();

 

// Statt der Stringvariablen kann auch die ReadLine()-Eingabe direkt von String // in das Zielformat umgewandelt werden, indem man das Readline() innerhalb des // Convert aufruft. // laenge = Convert.ToInt32(Console.Readline());

Console.Write("Bitte geben Sie Ihr Gewicht in kg ein: "); strGewicht = Console.ReadLine(); // in die Stringvariable strgewicht wird an // dieser Stelle die Tastatureingabe eingelesen // und gespeichert.

// gewicht = Convert.ToDouble(Console.Readline()); // siehe oben

iLaenge = Convert.ToInt32(strLaenge); // Gerechnet werden kann mit String-Variablen // nicht, deswegen müssen diese zunächst // in Zahlen-Variablen umgerechnet werden. // Dies erledigen die Convert-Funktionen:

 

// Convert.ToInt32 -> Integerzahl // Convert.ToDouble-> Doublezahl

 

dGewicht = Convert.ToDouble(strGewicht);

//---------------------------------------------------------

Console.Write("\nBei einem Gewicht von " + dGewicht + " und einer Größe von " + iLaenge + " ergibt sich ein BMI von " + dGewicht / iLaenge / iLaenge *10000 );

Console.ReadKey();

 

}

}

}

BMI Rechner als Dialogbox bzw. Windows Form Anwendung, siehe Unterlagen

Themen Klassenarbeit:

1. Einfaches Programm schreiben

2. Programm kommentieren

3. Unterschiede IDE Programmierung vs. Konsole Compiler aufrufen

4. Fragen zu SW Lifecycle / Algorithmus usw.

10

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Visual Studio speichert die zu entwickelnden Programme in sogenannten Projekten. Ein Pro- jekt besteht aus einer Mehrzahl von Dateien und Unterverzeichnissen in einem Verzeichnis mit dem Projektnamen (z. B. BMI). Diese alle müssen bei einer Sicherung mitgenommen werden.

Beispiel:

müssen bei einer Sicherung mitgenommen werden. Beispiel: Wenn man keine Möglichkeit hat, die Dateien bzw. das

Wenn man keine Möglichkeit hat, die Dateien bzw. das Projekt mit Hilfe eines Sticks oder einer externen USB-Festplatte zu sichern, kann man alternativ folgendes Verfahren anwen- den:

1. Rechtsklick auf zu sichernden Ordner

anwen- den: 1. Rechtsklick auf zu sichernden Ordner 2. Zu <projektname>.rar hinzufügen auswählen 3. Es

2. Zu <projektname>.rar hinzufügen auswählen

3. Es entsteht eine einzige Datei, die alle Dateien und alle Verzeichnisse in gepackter Form enthält:

11

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

  Lehrer: Dr. Andreas Alef Fach: AWE Name: 4. Diese kann man sich per Email schicken

4. Diese kann man sich per Email schicken und zu Hause oder beim nächsten Mal mit dem Programm winrar wieder auspacken (Doppelklick oder Rechtsklick).

5. Voraussetzung ist, daß das Programm winrar installiert ist. Alternativen sind winzip (leider kostenpflichtig) oder 7zip, können alle heruntergeladen werden.

Bedingungen

Um in einem Programm Entscheidungen treffen zu können, müssen Bedingungen ausgewer- tet werden. Diese Bedingungen beinhalten im Endeffekt boolesche Aussagen, treffen also zu (true) oder nicht zu (false).

Die Syntax einer solchen Bedingungsauswertung in C# ist

if (<Bedingungsauswertung>)

{

// Aktion bei Zutreffen, also im true-Fall

}

[else

{

// Aktion bei Nicht-Zutreffen, also im false-Fall

}]

Folgende Kommentare:

Der else-Teil ist optional, muß also nicht erscheinen.

Die Mengenklammern zur Kennzeichnung eines Blockes können weggelassen werden, wenn für den Compiler schon so ersichtlich ist, daß es sich um einen Block handelt, z. B. bei nur einem Befehl.

In vielen Programmierrichtlinien ist es verboten, die Mengenklammern, auch wenn nicht unbedingt erforderlich (s.o.), wegzulassen, weil der Code unübersichtlich werden kann und damit fehleranfällig ist.

Das entsprechende Struktogrammelement zur Bedingung ist:

12

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

  Lehrer: Dr. Andreas Alef Fach: AWE Name: Aufgabe: Sie sollen ein Programm schreiben, das Alter

Aufgabe:

Sie sollen ein Programm schreiben, das Alter und Größe bei einer Achterbahnzugangskon- trolle auswertet:

Außerdem gilt eine Altersbeschränkung: man darf nicht zu alt sein (70 Jahre) und auch nicht zu jung. Altersuntergrenze ist 16.

Mitfahren darf nur derjenige, der größer als 100cm ist und kleiner als 200cm.

13

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

double dAlter = Convert.ToDouble(tBoxAlter.Text); double dGroesse = Convert.ToDouble(tBoxGroesse.Text);

if ( (dAlter >= 16.0) && (dAlter <= 70.0) && (dGroesse >= 100.0) && (dGroesse <= 180.0))

{

 

lbErgebnis.Text = "Sie dürfen";

}

else

{

 

lbErgebnis.Text = "Sie dürfen nicht";

}

// Alternativ if ((dAlter < 16.0) || (dAlter > 70.0) || (dGroesse < 100.0) || (dGroesse > 180.0))

{

 

lbErgebnisAlt.Text = "Sie dürfen nicht";

}

else

{

 

lbErgebnisAlt.Text = "Sie dürfen ";

}

Die for-Schleife oder auch Zählscheife

" ; } Die for-Schleife oder auch Zählscheife Mittels einer Zählschleife können Vorgänge wiederholt

Mittels einer Zählschleife können Vorgänge wiederholt durchgeführt werden. Man nennt die- se Schleife „Zählschleife“, weil von vornherein bekannt ist, wie oft die Schleife durchläuft, bzw. wie oft der zu wiederholende Anweisungsblock durchlaufen wird.

Bei einer Zählschleife arbeitet man grundsätzlich mit einer Zähl- bzw. Laufvariablen, die die Schleifendurchläufe zählt.

14

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Beispiel 1:

for (int i = 0; i < 100; i++)

{

 

/*

*

i: Laufvariable,

*

int i ist nur innerhalb dieser Schleife bekannt

*

Werte von 0, 1, 2, 3,

99

*

i++: jedesmal um 1 erhöhen ("inkrementieren" = erhöhen)

*

i<100: die Schleife läuft, solange i < 100 ist

*/ tBoxErg.Text = Convert.ToString(i);

}

Beispiel 2:

int k = 17; // hier ist k 17 // hier ist k immer noch 17 for (k = 0; k < 100; k++)

{

 

/*

*

k: Laufvariable,

*

k ist innerhalb und außerhalb dieser Schleife bekannt

*

Werte von 0, 1, 2, 3,

99

*

k++: jedesmal um 1 erhöhen ("inkrementieren" = erhöhen)

*

k<100: die Schleife läuft, solange k < 100 ist

*/ tBoxErg.Text = Convert.ToString(k);

}

Beispiel 3:

for (int l = 0; l < 100; l=l+2)

{

 

/*

*

l: Laufvariable,

*

l ist innerhalb dieser Schleife bekannt

*

Werte 0,2,4,6,8,

96, 98

*

l=l+2: jedesmal um 2 erhöhen

*

l<100: die Schleife läuft, solange l < 100 ist

*/ tBoxErg.Text = Convert.ToString(l);

}

Beispiel 4:

for (int m = 0, n=0; m <= 100; m++, n++)

{

/*

*

m,n: Laufvariablen

*

m,n sind innerhalb dieser Schleife bekannt

*

Werte m und n 0,1,2,3,4,5,6

100

*

m++, n++: jedesmal um 1 erhöhen

15

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

* m<=100: die Schleife läuft, solange m <= 100 ist

* Besonderheit: läuft mit 2 Laufvariablen

*/ tBoxErg.Text = Convert.ToString(m) +" --- " + Convert.ToString(n);

}

Beispiel 5:

for (int p = 0; p <= 100; p++)

{

 

/*

* p: Laufvariablen

* p ist innerhalb dieser Schleife bekannt

* Ausgabe in Textbox: 0+3, 4+3 usw. also Viererreihe plus 3.

* Zuletzt ist p 99 (96+3), wird im Kopf um 1 erhöht: 100, Schleifenbedingung

* ist noch erfüllt, dann +3, also 103 und das wird auch ausgegeben. Danach

* bricht die Scheife endlich ab.

* p++: jedesmal um 1 erhöhen

* p = p+3: noch einmal um 3 erhöhen, insgesamt also +4

* p<=100: die Schleife läuft, solange p <= 100 ist

* Besonderheit:

*/ p = p + 3; // Beispiel für unschöne weil unübersichtliche Programmierung tBoxErg.Text = Convert.ToString(p);

}

Falls man z. B. die Aufgabe hat, aus den Zahlen von 0 bis 6 (oder 1 bis 7) die Wochentage zu generieren, kann man mehrfache if-else Entscheidungsabfragen schachteln, was sehr schnell unübersichtlich und damit fehleranfällig wird. Beispiel:

if (iTagNr == 0)

{

lbAusgabe.Text = "Sonntag";

}

else

{

if (iTagNr == 1)

{

lbAusgabe.Text = "Montag";

}

else

{

if (iTagNr == 2)

{

lbAusgabe.Text = "Dienstag";

}

else

{

if (iTagNr == 3)

{

lbAusgabe.Text = "Mittwoch";

}

else

{

if (iTagNr == 4)

{

16

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

lbAusgabe.Text = "Donnerstag";

}

else

{

 

if (iTagNr == 5)

{

lbAusgabe.Text = "Freitag";

}

else

{

if (iTagNr == 6)

{

lbAusgabe.Text = "Samstag";

}

else

{

lbAusgabe.Text = "Fehler";

}

}

}

}

}

}

}

Um dies zu vereinfachen, gibt es die Möglichkeit der Bedingungsabfrage bzw. Fallauswahl oder auch kurz switch-case.

Das Struktogrammsymbol ist:

oder auch kurz switch-case. Das Struktogrammsymbol ist: (aus Wikipedia (16.02.2011)) In C# lautet die Syntax

(aus Wikipedia (16.02.2011))

In C# lautet die Syntax hierfür

switch (iTagNr)

{

case 0:

lbAusgabe.Text = "Sonntag"; // hier können noch mehr Anweisungen kommen break; case 1:

lbAusgabe.Text = "Montag"; break; // usw.

default:

lbAusgabe.Text = "Fehler"; break;

}

17

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Das gleiche Problem (von einer Zahl auf Wochentage schließen) kann man auch über String-Arrays schließen.

Ein String-Array sind mehrere Strings, die unter einem Namen wie eine Variable angespro- chen werden. Will man auf einen einzelnen String zugreifen, erfolgt dies über die Angabe eines Indizes (der Index, die Indizes).

Beispiel:

Ein String-Array legt man wie folgt an:

string[] strWochentage = { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" };

Dieses String-Array hat bei Anlage direkt 7 Elemente, 7 Strings: von „Sonntag“ bis „Sams- tag“.

Auf den einzelnen String greife ich über seinen Index zu, etwa wie folgt:

tBoxAusgabe.Text = strWochentage[4];

In diesem Fall wird „Donnerstag“ ausgegeben, denn in einem Array fängt man bei 0 an zu zählen und endet bei n-1, in diesem Fall bei 7-1 = 6!

Bei Digitalrechnern verwendet man oft neben der normalen Division auch die Rest- Wertberechnung.

Hintergrund:

Solange man mit Integer-Variablen im Ganzzahlbereich bleibt, werden Ergebnisse nach dem Komma abgeschnitten. Dies gilt vor allem für die Division. In C# wird die Division bekannter- weise mit dem „/“ bezeichnet.

Beispiel:

int iZahl1 = 17; int iZahl2 = 7; int iErgebnis = iZahl1 / iZahl2; tBoxAusgabe.Text = Convert.ToString(iErgebnis); // Eine 2 wird ausgegeben

Wenn man den Rest einer Division haben möchte, so verwendet man hierzu den sogenann- ten „Modulo“-Operator. Der Modulo-Operator hat in C# das Zeichen „%“.

Beispiel:

int iZahl1 = 17; int iZahl2 = 7; int iErgebnis = iZahl1 % iZahl2; tBoxAusgabe.Text = Convert.ToString(iErgebnis); // Eine 3 wird ausgegeben

Die Modulo-Division ist an vielen Stellen im Bereich der Programmierung hilfreich.

18

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Wochentagsberechnung:

Es soll ein Programm geschrieben werden, das ein Datum in einen Wochentag umrechnet. Leitbild ist der Wikipedia-Artikel de.wikipedia.org, Stichwort „wochentagsberechnung“.

Programmierung

Wikipedia

 
 

Offensichtlich benötigt man eine Eingabemöglichkeit für Tag, Monat und Jahr, eine Ausgabemöglichkeit für den Wochentag und einen Start-Button.

Eigenschaften der Ressourcen verändern (tBoxTag, tBoxMon, tBoxJahr, lbAusgabe, btStart)

 

Durch Doppelklick auf den Start-Button eine On-Click-Funktion erzeugen. Ab jetzt sind alle folgenden Programmierungen in dieser Funktion durchzuführen.

 

Wie immer werden jetzt die Variablen an- gelegt:

 

Dazu wird jeder Eingaberessource in der Windows-Form eine Variable zugeordnet. In diesem Fall 3 Eingabetextboxen ent- sprechend 3 Variablen im Programm.

int iTag =

Convert.ToInt32(tBoxTag.Text);

int iMon = Con-

vert.ToInt32(tBoxMon.Text);

int iJahr

=Convert.ToInt32(tBoxJahr.Text);

Wir benötigen 5 Variablen:

 

int iTagZ = 0; int iMonZ = 0; int iJahrZ = 0; int iJahrHundertZ = 0; int iSchaltKorrektur = 0;

„Zur Berechnung benötigt man die fünf folgen- den Ziffern: usw.“

iTagZ = iTag % 7;

Tagesziffer

Die Tagesziffer: sie ist der Tag im Monat mod 7.“

19

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

In diesem Fall muß offensichtlich aus dem Monat (Variable iMon) eine Auswahl ge- troffen werden.

„Die Monatsziffer, die man sich merken muss:

Monat

iMon zu setzende Ziffer iMonZ

Jan = 0 Feb = 3 Mär = 3 Apr = 6 Mai = 1 Jun = 4 Jul = 6 Aug = 2 Sep = 5 Okt = 0 Nov = 3 Dez = 5

Januar

1

0

Februar

2

3

März

3

3

April

4

6

Dezember

12

5

switch (iMon)

 

{

case 1:

 

iMonZ = 0; break; case 2:

 

iMonZ = 3; break; case 3:

iMonZ = 3; break; case 4:

iMonZ = 6; break; // usw. case 12:

 

iMonZ = 5; break;

}

Jahreszahl ohne die Jahrhunderte:

“Man nimmt die Jahreszahl ohne die Jahr- hunderte, also nur die beiden letzten Zif- fern. Zu dieser Zahl addiert man das Ganz- zahlergebnis der Division durch 4 dersel-

1948

-> 48

2011

-> 11

1989

-> 89

ben Zahl. Diese Summe dividiert man mo- dulo 7.

Grundschuldivision:

 

(Jahreszahl + Jahreszahl div 4) mod 7.

1948

: 100 = 19 Rest 48

Mit Jahreszahl ist in der Formel “Jahreszahl ohne Jahrhunderte“ gemeint.

2011

/ 100 = 20 Rest 11

Die Jahreszahl ohne die Jahrhunderte ergibt sich offensichtlich, wenn man die Restwert-Division durch 100 verwendet.

 

iJahrZ = iJahr % 100; // Restwert-

20

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Divison iJahrZ / 4) % 7;

iJahrZ = (iJahrZ +

 

Alternativ hätte man etwas komplizierter auch folgendes schreiben können:

iJahrZ =((iJahr%100)+(iJahr%100)/4)% 7;

Das Jahrhundert erhält man, indem man die Jah- reszahl durch 100 dividiert (als Integer- =Grundschul-Division)

Die Formel für die Jahrhundertziffer ist (3 − (Jahrhundert mod 4)) x 2.“

// aus 1948 wird 19, aus 2011 20 int iJahrhundert = iJahr / 100; iJahrHundertZ = (3-(iJahrhundert)%4) *

2;

Ein Schaltjahr ist aus den Gründen der Erdumdrehung um die Sonne alle 4 Jahre, d. h. in den Jahren, die ganzzahlig durch 4 teilbar sind. Hier wird nach dem 28. Febru- ar ein Tag eingefügt, so daß es alle 4 Jah- re einen 29. Februar gibt.

„Wir haben bisher den Schalttag dem gan- zen Jahr zugerechnet, die Rechnung stimmt also erst ab dem 1. März. Wenn das Datum im Januar oder Februar eines Schaltjahrs liegt, muss eine 1 abgezogen werden (oder 6 addiert).“

Diese Addition „schießt über das Ziel hin- aus“, dh. das Schaltjahr alle 4 Jahre ad- diert zuviel in die Zeitrechnung. Deswegen ist alle 100 Jahre kein Schaltjahr, aber dann doch wieder alle 400 Jahre.

1700, 1800, 1900 waren also nicht Schalt- jahre, jedoch 2000 und 1600.

Ein Schaltjahr ist also, wenn das Jahr durch 4 UND NICHT durch 100 ODER durch 400 teilbar ist

21

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

if ((iJahr % 4 == 0) && (iJahr % 100 !=

 

0)

 

|| (iJahr % 400 == 0)) return true;

else

 

return false;

Erklärung der C#-Ausdrücke:

== :

Abfrage auf Gleichheit

!= :

Abfrage auf Ungleichheit

&& :

logisches UND

|| :

logisches ODER

Um in einem Programm an mehreren Stellen dieselbe Schaltjahresberechnung durchführen zu können, ohne sie immer wieder erneut programmieren zu müssen, kann man eine Funktion bzw. Methode einführen.

Hierzu benötigt man eine boolsche Variable bSJ, die die Information speichert, ob Schaltjahr oder nicht und eine Funktion / Methode, die die Schaltjahresbestimmung durchführt.

bool bSJ = false; // boolesche Variable, die beinhaltet, ob // es sich um ein Schaltjahr handelt (true) // oder nicht (false). // Wird mit false (also kein Schaltjahr) // initialisiert.

// Berechnung, ob Schaltjahr oder nicht, in einer Funktion // Die Funktion erhält das Jahr übergeben und liefert true // oder false zurück. Dieser Rückgabewert wird in die // boolesche Variable bSJ geschrieben. bSJ = istSchaltjahr(iJahr);

Eine Methode istSchaltjahr() kennt der Compiler nicht, weil wir sie noch nicht programmiert haben. Genauer: wir müssen die Funktion / Methode programmieren, indem wir exakt bestimmen, welche Schrit- te sie durchführen soll.

wir müssen die Funktion / Methode programmieren, indem wir exakt bestimmen, welche Schrit- te sie durchführen

Visual Studio hat einen Mechanismus, der hilft solche Methoden / Funktionen zu defi- nieren. Wenn man die Aufrufstelle (das ist die Stelle, an der die Funktion benutzt wird) wie oben gezeigt kodiert, unter- streicht VS die Zeichenfolge, weil die Funktion nicht gefunden wird. Durch

22

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Rechtsklick auf die Fehlerstelle erhält man die Möglichkeit, einen sogenannten Me- thodenstub“ anzulegen, eine Art „Rumpf- funktion“.

 

Die Generierung des Methodenstubs führt zu folgenden Code:

private bool istSchaltjahr(int iJahr)

{

throw new NotImplementedException();

}

Es gibt also eine Methode, die aber noch nichts macht, bzw. eine Fehlermeldung verursacht.

An Stelle der Fehlermeldung kann man nun den eigentlichen Code implementieren, in unse- rem Fall die Berechnung, ob Schaltjahr oder nicht:

private bool istSchaltjahr(int iJahr)

{

if ((iJahr % 4 == 0) && (iJahr % 100 != 0) || (iJahr % 400 == 0)) return true;

else

return false; // muß weg: throw new NotImplementedException();

}

Die Variable iJahr in der Funktion istSchaltjahr() ist eine andere Variable als die gleichnamige Variable iJahr im aufrufenden Programm. Man hätte hier auch statt iJahr z. B. iYear schreiben können. Erst durch den Aufruf der Methode erhält die Variable iJahr den gewünschten Wert.

bSJ = istSchaltjahr(iJahr);

“Wir haben bisher den Schalttag dem ganzen Jahr zugerechnet, die Rechnung stimmt also erst ab dem 1. März. Wenn das Datum im Ja- nuar oder Februar eines Schaltjahrs liegt, muss eine 1 abgezogen werden (oder 6 addiert).”

if (bSJ == true)

{

// Januar oder Februar? if ((iMon == 1) || (iMon == 2)) iSchaltKorrektur = -1;

else

 

iSchaltKorrektur = 0;

}

int iWT = (iTagZ + iMonZ + iJahrZ + i- JahrHundertZ + iSchaltKorrektur) % 7;

„Wenn man diese 5 Zahlen addiert, und den Rest bei Division durch 7 ermittelt, erhält man den Wochentag:“

Nun muß noch der Wochentag als Klartext ausgegeben werden.

 

switch (iWT)

{

case 0:

lbErg.Text = "Sonntag"; break; case 1:

lbErg.Text = "Montag"; break; case 2:

lbErg.Text = "Dienstag"; break; case 3:

23

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

lbErg.Text = "Donnerstag"; break; case 4:

lbErg.Text = "Freitag"; break; case 5:

lbErg.Text = "Samstag"; break; case 6:

lbErg.Text = "Sonntag"; break; default:

MessageBox.Show("Fehler!!!");

break;

}

Dies kann man über unser oben angeleg- tes Wochentagsarray machen:

tBoxErgebnis.Text = strWochentage[iWT];

24

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Aufgabe: In welcher Sprache ist der folgende Text geschrieben? Um welchen Text handelt es sich?

Vrjp tfdv, vrjp xf, Kyrk'j aljk yfn pfl calemv, fy, Krbv, krbv, krbv zk rcc, Slk pfl evmvi xzmv. Jyflcu'mv befne pfl nrj kiflscv Wifd kyv wzijk bzjj, Yru pfli vpvj nzuv fgve. Nyp nviv kyvp fgve?

Easy come, easy go, That's just how you live, oh, Take, take, take it all, But you never give. Should've known you was trouble From the first kiss, Had your eyes wide open. Why were they open?

[Sizuxv] Xrmv pfl rcc Z yru reu pfl kfjjvu zk ze kyv kirjy, Pfl kfjjvu zk ze kyv kirjy, pfl uzu. Kf xzmv dv rcc pfli cfmv zj rcc Z vmvi rjbvu, 'trljv Nyrk pfl ufe'k leuvijkreu zj

[Bridge] Gave you all I had and you tossed it in the trash, You tossed it in the trash, you did. To give me all your love is all I ever asked, 'cause What you don't understand is [Chorus] I'd catch a grenade for ya (yeah, yeah) Throw my hand on a blade for ya (yeah, yeah) I'd jump in front of a train for ya (yeah, ye- ah) You know I'd do anything for ya (yeah, ye- ah) Oh, oh, I would go through all of this pain, Take a bullet straight through my brain! Yes, I would die for ya, baby, But you won't do the same. No, no no [Verse 2] Black, black, black and blue, beat me 'til I'm numb, Tell the devil I said "hey" when you get back to where you're from. Mad woman, bad woman, that's just what you are, Yeah, you'll smile in my face then rip the brakes out my car [Bridge] Gave you all I had and you tossed it in the trash, You tossed it in the trash, yes you did. To give me all your love is all I ever asked, 'cause What you don't understand is [Chorus] I'd catch a grenade for ya (yeah, yeah) Throw my hand on a blade for ya (yeah, yeah) I'd jump in front of a train for ya (yeah, ye- ah)

[Tyfilj] Z'u trkty r xiveruv wfi pr (pvry, pvry) Kyifn dp yreu fe r scruv wfi pr (pvry, pvry) Z'u aldg ze wifek fw r kirze wfi pr (pvry, pvry) Pfl befn Z'u uf repkyzex wfi pr (pvry, pvry) Fy, fy, Z nflcu xf kyiflxy rcc fw kyzj grze, Krbv r slccvk jkirzxyk kyiflxy dp sirze! Pvj, Z nflcu uzv wfi pr, srsp, Slk pfl nfe'k uf kyv jrdv.

Ef, ef ef

[Mvijv 2] Scrtb, scrtb, scrtb reu sclv, svrk dv 'kzc Z'd elds, Kvcc kyv uvmzc Z jrzu "yvp" nyve pfl xvk srtb kf nyviv pfl'iv wifd. Dru nfdre, sru nfdre, kyrk'j aljk nyrk pfl riv, Pvry, pfl'cc jdzcv ze dp wrtv kyve izg kyv sirbvj flk dp tri

[Sizuxv] Xrmv pfl rcc Z yru reu pfl kfjjvu zk ze kyv kirjy, Pfl kfjjvu zk ze kyv kirjy, pvj pfl uzu.

Kf xzmv dv rcc pfli cfmv zj rcc Z vmvi rjbvu, 'trljv Nyrk pfl ufe'k leuvijkreu zj

[Tyfilj] Z'u trkty r xiveruv wfi pr (pvry, pvry) Kyifn dp yreu fe r scruv wfi pr (pvry, pvry)

25

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Z'u aldg ze wifek fw r kirze wfi pr (pvry, pvry) Pfl befn Z'u uf repkyzex wfi pr (pvry, pvry) Fy, fy, Z nflcu xf kyiflxy rcc fw kyzj grze, Krbv r slccvk jkirzxyk kyiflxy dp sirze! Pvj, Z nflcu uzv wfi pr, srsp, Slk pfl nfe'k uf kyv jrdv.

You know I'd do anything for ya (yeah, ye- ah) Oh, oh, I would go through all of this pain, Take a bullet straight through my brain! Yes, I would die for ya, baby, But you won't do the same. [Verse 3] If my body was on fire, Ooh, you'd watch me burn down in flames. You said you loved me, you're a liar, 'cause you never, ever, EVER did, baby! But, darling [Chorus] I'd still catch a grenade for ya (yeah, yeah) Throw my hand on a blade for ya (yeah, yeah) I'd jump in front of a train for ya (yeah, ye- ah) You know I'd do anything for ya (yeah, ye- ah) Oh, oh, I would go through all of this pain, Take a bullet straight through my brain! Yes, I would die for ya, baby, But you won't do the same. [Outro] No, you won't do the same You wouldn't do the same Ooh, you'd never do the same Ohh, no no no

[Mvijv 3] Zw dp sfup nrj fe wziv, Ffy, pfl'u nrkty dv slie ufne ze wcrdvj. Pfl jrzu pfl cfmvu dv, pfl'iv r czri, 'trljv pfl evmvi, vmvi, VMVI uzu, srsp! Slk, uriczex

[Tyfilj] Z'u jkzcc trkty r xiveruv wfi pr (pvry, pvry) Kyifn dp yreu fe r scruv wfi pr (pvry, pvry) Z'u aldg ze wifek fw r kirze wfi pr (pvry, pvry) Pfl befn Z'u uf repkyzex wfi pr (pvry, pvry) Fy, fy, Z nflcu xf kyiflxy rcc fw kyzj grze, Krbv r slccvk jkirzxyk kyiflxy dp sirze! Pvj, Z nflcu uzv wfi pr, srsp, Slk pfl nfe'k uf kyv jrdv.

[Flkif] Ef, pfl nfe'k uf kyv jrdv Pfl nflcue'k uf kyv jrdv Ffy, pfl'u evmvi uf kyv jrdv Fyy, ef ef ef

Wsqi Tistpi qec vyr.

Almpi sxlivw lezi jyr.

Xvcmr‟ xs kvef alex xlic ger.

Ws M pmi mr xli kveww.

M leh xss qygl erh xss jewx.

Erh xli fiwx sj epp xmqiw.

Aemxmrk syx xli hecw xs ks fc erh

aexivw vyr hvc.

Fyx M‟zi qehi yt qc qmrh.

Mx´w geppmrk qi gepp qi ercxmqi.

Mx´gsqmrk yt iegl erh izivc pmri.

26

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Oiit geppmrk qi gepp ercxmqi.

Sl sl sl livi mw xli wsrk. Jsv xlswi als riziv iziv wmx fego erh vigsziv. Livi mw xli sri jsv xlswi als riziv wlmziv.

Xli gssp gexw M ehsvi.

Wsqi tistpi aiev kpsziw. Gevvcmrk xlimv tsvxmsr sj pszi. Yrxmp hiexl gsqiw jvsq efszi. Rsa jsv hvieqw erh jsv tperw. Csy xvc ew levh ew csy perh.

Fyx M‟zi qehi yt qc qmrh. Mx´w geppmrk qi gepp qi ercxmqi. Mx´gsqmrk yt iegl erh izivc pmri. Oiit geppmrk qi gepp ercxmqi.

Livi mw xli wsrk. Jsv xlswi als riziv iziv wmx fego erh vigsziv. Livi mw xli sri jsv xlswi als riziv wlmziv.

Xli

gssp gexw M ehsvi.

Xli

gssp gexw M ehsvi.

Xli

gssp gexw M ehsvi.

27

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Das Wesen der Cäsar-Verschlüsselung

Bei der Cäsar-Verschlüsselung wird jeder Buchstabe um eine bestimmte Anzahl nach links oder rechts im Alphabet umgesetzt bzw. verschoben, so wird z. B. aus einem A bei einer Verschiebung um 3 ein D, aus einem X ein A.

Die Zahl 3 ist in diesem Fall der Schlüssel.

Um diesen Algorithmus mit einem C#-Programm abbilden zu können, muß man zunächst betrachten, wie Buchstaben in C# und allgemein auf Computern verarbeitet werden.

Auf modernen Rechnern werden Buchstaben oder besser allgemein Zeichen als Zahlencode abgespeichert. Jedem Zeichen entspricht damit eine binäre Kombination.

Minimalanforderung an die Darstellung von Zeichen ist:

Großbuchstaben (26)

Kleinbuchstaben (26)

Ziffern (10)

Summe: 62 Zeichen

Hinzu kommen

Satzzeichen

Umlaute

Weitere Sonderzeichen

Summe: Mit 128 Zeichen kommt man gerade noch aus, 256 sind besser

(Will man alle Sonderzeichen aller Sprachen berücksichtigen, so kommt man auch mit 256 Zeichen nicht aus, sondern muß weitere hinzunehmen, Erweiterung des ASCII- Codes auf UTF-Codes)

Wenn man sich mit 256 unterscheidbaren Zeichen begnügt, so kommt man mit 8 Bit aus:

man kann so die Binärkombination von 0000 0000 bis 1111 1111 (als Zahl interpretiert: von 0 bis 255) darstellen, insgesamt 256 möglich Kombinationen.

Der sogenannte ASCII-Code ist die lange Zeit gebräuchliche Form, Zeichen auf Digitalrech- nern zu verarbeiten.

Beispiel:

‚A„ = 0100 0001| 2 = 41| 16 = 65| 10

Das bedeutet: In einer Speicherzelle ist die Binärkombination 0100 0001| 2 enthalten. Diese kann als Zahl (65| 10 ) oder als Zeichen (‚A„) interpretiert werden. Wie eine Speicherzelle inter- pretiert wird, bestimmt das Programm bzw. der Programmierer (int -> Zahl, char bzw. string - > Zeichen).

int i = 65;

char c = ‘A‘;

Unterschiedliche Bedeutung, aber gleicher Inhalt.

Da also Zeichen und Zahlen eigentlich eine gleiche interne Darstellung im Digitalrechner haben, kann man sogar mit Zeichen rechnen.

28

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Zu verschlüsselnder Text

Verschlüsselung

 

Hochtransformiere

 

+

Offset

Orig.

Dez

Hex

Bin

- 65

+12

mod 26

+65

Chiffre

B

66

42

1000010

1

13

13

78

N

E

69

45

1000101

4

16

16

81

Q

A

65

41

1000001

0

12

12

77

M

T

84

54

1010100

19

31

5

70

F

S

83

53

1010011

18

30

4

69

E

T

84

54

1010100

19

31

5

70

F

E

69

45

1000101

4

16

16

81

Q

A

65

41

1000001

0

12

12

77

M

K

75

4B

1001011

10

22

22

87

W

S

83

53

1010011

18

 

30

4

69

E

Zu verschlüsselnder Text

Verschlüsselung

 

Hochtransformiere

 

+

Offset

Orig.

Dez

Hex

Bin

- 65

+14

mod 26

+65

Chiffre

N

78

4E

1001110

13

27

1

66

B

Q

81

51

1010001

16

30

4

69

E

M

77

4D

1001101

12

26

0

65

A

F

70

46

1000110

5

19

19

84

T

E

69

45

1000101

4

18

18

83

S

F

70

46

1000110

5

19

19

84

T

Q

81

51

1010001

16

30

4

69

E

M

77

4D

1001101

12

26

0

65

A

W

87

57

1010111

22

36

10

75

K

E

69

45

1000101

4

18

18

83

S

Wie kann man nun in C# mit „Buchstaben“, besser „Zeichen“ rechnen?

Wo kommen die Zeichen her:

Für das Rechnen mit Zeichen und den Einzelzugriff auf jedes Element eignet sich ein soge- nanntes Char-Array. Ein Char-Array (Feld aus Zeichen) ist eine Art primitiver String.

Was ist ein Array?

Ein Array, zu Deutsch: Feld, bietet die Möglichkeit, unter einem Bezeichner (Namen) viele Variablen desselben Typs abzuspeichern. Es gibt z. B. Int-Arrays, Float-Arrays oder Char- Arrays usw.

Beispiel jenseits Caesar-Chiffre:

Double-Meßwerte-Array für Temperaturen:

aus der tBoxEingabe.Text.

29

Berufskolleg Stadt Bochum, Technische Berufliche Schule I

 

Lehrer:

Dr. Andreas Alef

Lehrer: Dr. Andreas Alef

Fach: AWE

Name:

Name: dMesswerte

dMesswerte[0]

17,5

dMesswerte[1]

18,6

dMesswerte[2]

14,7

 

dMesswerte[120]

20

Dieses Meßwerte-Array hat 121 Meßwerte. Unter einem Namen dMesswertewird es ange- sprochen.

Einen einzelnen Meßwert liest oder schreibt man unter Benutzung einer Indexzahl oder In- dexvariablen in eckigen Klammern [].

Beispiel:

dMesswerte[12] = 18,5;

tBoxErg.Text = Convert.ToString(dMesswerte[16]);

i=101;

dMesswerte[i] = 18,5;

tBoxErg.Text = Convert.ToString(dMesswerte[i]);

In diesem Beispiel kann man 101 Meßwerte unter einem Variablennamen dMesswerte mit einer Indexzahl (12, 16) oder Indexvariablen (i) ansprechen.

Die Alternative wäre die Definition von 101 einzelnen Variablen, sehr umständlich, etwa so:

double dMesswert_000;

double dMesswert_001;

double dMesswert_002;

double dMesswert_003;

double dMesswert_004;

double dMesswert_100;

-------------------------------------------------------- Bis hier Klassenarbeitsrelevant

30