Einführung in die Programmierung

Werbung
Moritz Stadler 1bhif
Prog C#
1
Einführung in die Programmierung
Grundelemente
Allgemeine Struktur des Programmes:
using System;
/* Uebung n
* Moritz Stadler
* Datum
* Beschreibung: km/h zu Knoten
*/
namespace Umrechnen
{
class Program
{
static void Main(string[] args)
{
double kmh = 0.0;
double knots = 0.0;
Console.Write("Bitte geben Sie die km/h ein: ");
kmh = Convert.ToDouble(Console.ReadLine());
knots = kmh * 1.8;
Console.WriteLine("{0} km/h sind {1} Knoten", kmh, knots);
Console.ReadKey();
}
}
}
Datentypen:
NAME
WERTEBEREICH
BENÖTIGTER SPEICHER
bool
true, false
1 byte
char
Alle Zeichen (1)
2 byte
string
byte
Alle Zeichen (unbegrenzt)
0 - 255
String.Lenght abhängig
1 byte
short
-32768 - 32767
2 byte
int
-2147483648 - 2147483647
4 byte
long
-9223372036854775808 9223372036854775807
±1,5 × 10-45 bis ±3,4 × 1038
(auf 7 Stellen genau)
±5,0 × 10−324 bis ±1,7 × 10308
8 byte
float
double
abhängig
8 byte
Moritz Stadler 1bhif
Prog C#
2
Elemente von Algorithmen
Daten werden in Variablen und Konstanten gespeichert.
Variablen haben einen Namen, einen Datentyp, einen Wert und eine Adresse.
double prNotendurchschnitt = 3.0;
Datentyp
Name
Wert
ini. Zuweisung
Abschluss
Konstanten deklarieren:
const double prgut = 2.0;
Anweisungen:
x = y; //x wrid zu y
VAR = WERT
Sequenz:
Sequenzen sind aufeinander folgende Anweisungen
Anweisung 1;
Anweisung 2;
Anweisung n;
Verzweigungen:
Verzweigungen sind werteabhängige Folgen im Programm (z.B if). Sie ist von einer Bedingung
abhängig
?
Anweisung x;
z.B.
Anweisung y;
if (a == b)
{
f();
}
else if (a < b)
{
f2();
}
else
{
f3();
}
Moritz Stadler 1bhif
Prog C#
IF Anweisung
if (statement) { Anweisung }
Logische FALLS Verknüpfung
statement =>
Wert
Vergleichsoperator
Wert
1
3
a
==
<
==
1
4
b
Wenn das if Statement nicht zutrifft wird die Anweisung im falls vorhandene else Zweig ausgeführt.
Wenn dieser nicht vorhanden ist, so wird die Programm-Sequenz fortgesetzt
if (a == b)
{
f();
}
else
{
f2();
}
Wenn a = b ist so wird f() ausgeführt. Ist dies nicht der Fall, f2().
Schleifen
for – Schleife:
for (int i = 0; i < 10; i++)
{
//Wird 10 mal ausgeführt
}
Schleifenkopf
Schleifenrumpf
im VS C#: for [2mal Tab]
for (initializer; condition; iterator)
body
1.) Initialisierung (int i = 0)
2.) Bedingung (wird vor jedem eintreten in die Schleife geprüft)
3.) Inkrenet (i++) wird nach jedem durchlaufen der Schleife ausgeführt
while – Schleife:
Abweisend, kopfgesteuert.
while (a == b)
{
//solange a = b ist
}
3
Moritz Stadler 1bhif
Prog C#
Verzweigungen
Einseitig
Zweiseitig
if(x > 0)
{
x = -x;
}
if (x < y)
{
max = x;
}else{
max = y;
}
Histogramm:
using System;
/* Uebung n
* Moritz Stadler
* Datum
* Beschreibung: Historgarmm
*/
namespace Umrechnen
{
class Program
{
static void Main(string[] args)
{
int i = 1;
int j = 0;
while (i > 0)
{
i = Convert.ToInt32(Console.ReadLine());
j = 0;
while (j < i)
{
Console.Write("*");
j++;
}
Console.WriteLine();
}
}
}
}
4
Moritz Stadler 1bhif
Prog C#
switch-case – Verzweigung:
switch (input)
{
case 'f':
Console.WriteLine("Fleisch");
break;
case 'F':
Console.WriteLine("Fisch");
break;
case 'o':
Console.WriteLine("Obst");
break;
case 'g':
Console.WriteLine("Gemüse");
break;
default:
Console.WriteLine("Fehler");
break;
}
Funktionsaufrufe
Math.Pow(Basis, Exponent);
Casts: (double);
do { } while (true);
double.TryParse();
for (int i = 0; i < length; i++) { }
Bsp.: Quersumme, Primzahlen
while (Int31.TryParse(input, out zahl) == false)
//solange falsche Eingabe
//wenn int true ist wird zahl ausgegeben
mit out wird es an derselben Stelle gespeichert.
f(x)
-> x ist ein Parameter
Formalparameter: (int i, double z)
static returnwert Frame(Formalparameter)
Aktualparameter: (Beim Aufruf) (ohne Datentyp)
Frame(Aktualparameter)
ref: Aktual und Formalparameter besitzen den gleichen Speicherort!
5
Moritz Stadler 1bhif
Prog C#
do-while – Schleife: (Fuß-gesteuert)
do
{
input = Console.ReadLine();
} while (Int32.TryParse(input, out zahl) == false);
Diese wird so lange ausgeführt, wie eine falsche Eingabe getätigt wurde.
6
Moritz Stadler 1bhif
Prog C#
7
Vorbereitung LF
1.
2.
3.
4.
5.
Leistungsfeststellung Ablauf
Stoppuhr
Eingabeüberprüfung(int)
Übungsbeispiele für Schleifen
BlackBox Modell für Funktionen
Als Black Box bezeichnet man in der SystemAls Black Box bezeichnet man in der Systemtheorie ein
(möglicherweise sehr komplexes) System, von welchem im gegebenen Zusammenhang nur das
äußere Verhalten betrachtet werden soll. Die innere Struktur mag bekannt sein; solche Kenntnis darf
aber nicht benutzt werden. Man beschränkt sich bei der Untersuchung und Beschreibung auf die
Messung der Input-Output-Beziehungen (EVA-Prinzip).
Stoppuhr in C#:
System.Diagnostics.Stopwatch name = new System.Diagnostics.Stopwatch();
name.Start();
//code hier wird die Dauer gemessen
name.Stop();
sek = name.Elapsed.Seconds; //int
Moritz Stadler 1bhif
Prog C#
Eingabeberprüfung:
static int ReadandParseInt32()
{
const int max = 3;
string input = "";
int zahl;
int i = 1;
bool ok = false;
do
{
try
{
Console.Write("{0}. Versuch: ", i++);
Console.Write("Bitte eine Zahl zwischen {0} und {1} eingeben: ",
int.MinValue, int.MaxValue);
input = Console.ReadLine();
zahl = int.Parse(input);
ok = true;
}
catch
{
Console.WriteLine("Falsche Eingabe: " + input);
zahl = 0;
}
} while (ok == false && i <= max);
return zahl;
}
Im try Teil steht die Invalide Anweisung im catch die Fehlermeldung.
Funktionen - Wiederholung:
static bool Name123(int a)
{
if (a == 0)
{
return false;
}
else
{
return true;
}
}
8
Moritz Stadler 1bhif
Prog C#
9
Zeichenketten
Erklärung:
Nehmen wir an, wir haben einen string
string s = "Mein_Name_ist_Moritz";
Nun wollen wir das n-te also z.B 7. Zeichen erfassen.
(Achtung: das 1. Zeichen hat den index0)
char n = s[n - 1]; // n = 6 -> 7. Zeichen
Also ist n in unserem Fall ‚m‘.
Um die Länge eines strings herauszufinden benutzen wir s.Lenght;
string s = "Mein_Name_ist_Moritz";
for (int i = 0; i < s.Length; i++)
{
Console.WriteLine(s[i]);
}
Hier wird z.B. jedes Zeichen aus dem Text in einer neuen Zeile ausgegeben.
Die wäre die Darstellung in einem Raster des obrigen Beispiels.
0
M
1
e
2
i
3
n
4
_
5
N
6
a
7
m
8
e
9
_
10
i
11
s
12
t
13
_
14
M
15
o
16
r
17
i
18
t
19
z
Moritz Stadler 1bhif
Prog C#
Test driven Development
Testgetriebene Entwicklung (auch testgesteuerte Programmierung, engl. test first development
oder test-driven development (TDD)) ist eine Methode, die häufig bei der agilen Entwicklung von
Computerprogrammen eingesetzt wird. Bei der testgetriebenen Entwicklung erstellt der
Programmierer Software-Tests konsequent vor den zu testenden Komponenten. Die dazu
erstellten Testfälle werden auch als Grey-Box-Tests bezeichnet.
Beim TDD arbeiten wir nur in der Programm.cs Datei.
Durch das Drücken von Strg + R + A werden alle Unittest ausgeführt
Ein Unittest ist ein Test, der eine Funktion auf Fehler überprüft.
Leitfaden für TDD:
1. Schreibe Tests für das erwünschte fehlerfreie Verhalten, für schon bekannte Fehlschläge
oder für das nächste Teilstück an Funktionalität, das neu implementiert werden soll. Diese
Tests werden vom bestehenden Programmcode erst einmal nicht erfüllt bzw. es gibt diesen
noch gar nicht.
2. Ändere/schreibe den Programmcode mit möglichst wenig Aufwand, bis nach dem
anschließend angestoßenen Testdurchlauf alle Tests bestanden werden.
3. Räume dann im Code auf (Refactoring): Entferne Wiederholungen (Code-Duplizierung),
abstrahiere wo nötig, richte ihn nach den verbindlichen Code-Konventionen aus etc.
Natürlich wieder mit abschließendem Testen. Ziel des Aufräumens ist es, den Code schlicht
und verständlich zu machen.
10
Moritz Stadler 1bhif
Prog C#
11
Weitere Funktionen & Arrays
Am Beispiel eines Int-Arrays
0
456
1
23
2
11
3
-165
int name = new int[n] //n gibt die Länge des Arrays an
name[0] = 456;
name[1] = 23;
name[2] = 11;
name[3] = -165;
Arrays können jeden Datentyp annehmen
Definition Arrays
Mit Hilfe eines Feldes können die Daten eines üblicherweise einheitlichen Datentyps so im Speicher
eines Computers abgelegt werden, dass ein Zugriff auf die Daten über einen Index möglich wird. Das
(Standard-)Feld verwendet im Gegensatz zum assoziativen Feld einen ganzzahligen Index zur
Adressierung. Dieser kann frei gewählt werden.
Weitere Funktionen:
ReadText();
StrtoLower();
FillRandom();
Moritz Stadler 1bhif
Prog C#
12
Wiederholung Funktionen
Der Zweck von Methoden:


Wiederverwendung (Code nicht kopieren)
Struktur des Programms
Methodenaufruf
static void P()
{
Q();
}
static void Q()
{
R();
}
formale Parameter


Im Methodenkopf (z.B. … (int x, int y)
Sind die Variable der Methode
Aktual Parameter


An der Aufrufstelle
Können Ausdrücke sein
static R()
{
…
}
Moritz Stadler 1bhif
Prog C#
Lokale & Statische Variablen
class C
{
static int a, b;
static void P()
{
int x, y;
}
Statische V. sind in allen Methoden dieser Klasse sichtbar
Lokale V. nur in dieser Methode sichtbar
}
Speicherplatz:
Statische Variablen:
Am Programmanfang angelegt, am Ende freigegeben.
Lokale Variablen:
Beim Methodenaufruf angelegt, am Ende der Methode freigegeben
Effizienter vs. Normale Algorithmen
Der effiziente Algorithmus ist bis zu x-mal schneller als der normale A.
Alerdings braucht man für den effizienteren A. eine gute Idee.
13
Herunterladen