InfoScript - Flo

Transcription

InfoScript - Flo
Informatik
19. Juni 2009
Informatik
Inhaltsverzeichnis
1 Historisches
1.1 Sprachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
3
2 Crashkurs C
2.1 Tool, Visual C++ . . . . . . . .
2.2 Syntax von C . . . . . . . . . . .
2.2.1 Kommentare: . . . . . . .
2.2.2 Der Präprozesser . . . . .
2.2.3 Symbolnamen . . . . . . .
2.2.4 Grundlegende Datentypen
2.2.5 Ausgabe mit Printf() . . .
2.2.6 Sonderzeichen . . . . . . .
2.2.7 scanf . . . . . . . . . . . .
2.2.8 Funktionsaufrufe . . . . .
2.2.9 Die Blockanweisung . . .
4
4
4
4
4
5
5
5
6
6
6
7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Die Steuerungsanweisungen einer Strukturierten Sprache
3.1 Verzweigungen in der Sprache C . . . . . . . . . . . .
3.1.1 if-else Verzweigung . . . . . . . . . . . . . . . .
3.1.2 Die switch-case-Anweisung . . . . . . . . . . .
3.2 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2.1 while (Schleife) . . . . . . . . . . . . . . . . . .
3.2.2 Die do-while-Schleife . . . . . . . . . . . . . . .
3.2.3 Die for-Schleife . . . . . . . . . . . . . . . . . .
3.3 Sprunganweisungen . . . . . . . . . . . . . . . . . . . .
3.3.1 goto . . . . . . . . . . . . . . . . . . . . . . . .
3.3.2 break und continue . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
. 8
. 8
. 8
. 9
. 9
. 9
. 9
. 10
. 10
. 10
4 Zahlensysteme
4.1 Nicht -Stellenwertsystem . . . . . . . . . . . . . . . .
4.2 Stellenwertsysteme . . . . . . . . . . . . . . . . . . .
4.2.1 Dezimales System . . . . . . . . . . . . . . .
4.2.2 Duales System / Binäres System . . . . . . .
4.2.3 Hexadezimales System . . . . . . . . . . . . .
4.3 Umrechnden zwischen Stellensystemen . . . . . . . .
4.3.1 Fremdes System → Dezimales System . . . .
4.4 Hexadezimale Binärezahlen . . . . . . . . . . . . . .
4.4.1 Allgemeiner Fall (dezimal → Fremdes System
4.4.2 Dezimal → Dezimal . . . . . . . . . . . . . .
4.4.3 Dezimal → Binär (2) . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
11
11
11
11
11
12
12
12
12
©FK
Informatik
4.5
4.6
19. Juni 2009
Zahlenraum der vorzeichenlosen Binären Zahlen
Vorzeichenbehaftete Ganzzahlen . . . . . . . .
4.6.1 Vorzeichenbehaftete Dualzahlen . . . . .
4.6.2 Einerkomplement - Darstellung . . . . .
4.6.3 Zweierkomplement - Darstellung . . . .
4.6.4 Zahlenraum beim Zweierkomplement . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
13
13
13
14
14
5 Datenstrukturen
15
5.1 Felder und Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2
©FK
Informatik
19. Juni 2009
1 Historisches
Die Verschiedenen Arten und Generationen der Programmiersprachen
1.1 Sprachen
• 0.Generation : Direkte Eingabe in Maschinen Sprache
Bsp: EA 0000 FFFF
0306 34 12 ...
• 1.Generation: Assembler (Nemotechnisch Schreibweise
Bsp: JMP: FFFF:0000
ADD AX,[1234]
NOP, PUSH, CX usw.
Aber: Nicht Portierbar ! Großer Zeitaufwand
• 2.Generation: Basic,COBOC, FORTRAN,
Aber: Spaghetti-Code unverständliche und unstrukturierte Programmierung
• 3.Generation: Strukturiertes Programmieren zB.: PASCAL (entwickelt von N.Wirth,
Lehrspreche),
Prorammiersprache A→ B→ C (Kerningham, Ritchie) Hardwarenahe Industrie Sprache
Nachteil von C, der Mensch muss sein denken der Maschine anpassen
• 4.Generation:Datenbanksprachen wie dBase, 4GL,SQL, mySQL, Oracel uvm.
• 5.Objekt Orientiertes Programmieren
(OOA(analyse),OOD(Design),OOP(Programmieren)):
Programmiersprachen: smalltalk, Java(Rein Objekt Orientiert),C++(Hybrid Sprache)
1.2
3
©FK
Informatik
19. Juni 2009
2 Crashkurs C
2.1 Tool, Visual C++
Man beginnt mit dem einrichten eines Projektes,dazu öffnet man: File → New → Win32
Console Anwendung → Pfad auswählen (Lokales Laufwerk, zB.: D://tem...) → Projektname
angeben (ohne Leer- und Sonderzeichen) → weiter und “einfach Anwendung“ wählen.
sh. Beispiel00-OttoMuellerProj1
2.2 Syntax von C
2.2.1 Kommentare:
• einzeilig //... , der Kommentar endet am Zeilenende
• mehrzeilige /* ...... */auch über meherere Zeilen, so können auch Quellcodebereiche
auskommentiert werden.
sh. Beispiel01-HelloWorld2-Kommentare
2.2.2 Der Präprozesser
4
©FK
Informatik
19. Juni 2009
Achtung, rufen wir Funktionen auf werden die Funktionen nur eingebunden nicht Compiliert.
1#include „myHeader.h“
2#include <stdio.h>
3...
4#define UNIX
5...
6#ifn def UNIX
7... code
8#endif
So entsteht eine bedingte Compilierung im Berreich in dem die UNIX definition (Zeile 6-8)
geladen wird
2.2.3 Symbolnamen
• Der erste Buchstaben ist ein Alphazeichen:
abc...yzABC..Z_
• Ab dem Zweitenbuchstabe ein Alphanumerischeszeichen:
ab..yzAB...Z_ 012..9
• Keine Sonderzeichen:
+-*/?. aber auch die Nationalen $ & usw.
• Keine Schlüsselworte:
int, else,...
2.2.4 Grundlegende Datentypen
• char 1byte (0..255 oder -128–+127)
• int 4byte Ganzzahl ca±109
• double 8byte Gleitkommezahl mit 16 Stellen
2.2.5 Ausgabe mit Printf()
1 printf(“Text%d Text2%f Text %c \n“),i,x,buchstabe
• % d Ganzzahl (int) (char)
• % f Gleitkommazahl (double)
• % c Buchstabe
Bemerkung: Schlüssel müssen vom Typ und von der Anzanhl her zu den Variablen passen.
5
©FK
Informatik
19. Juni 2009
2.2.6 Sonderzeichen
• \n Line Feed
• \a Bell
• \b backspace
• \t tabulator
• \r Carriage return
• \\ergibt einen \bzw. %% ergibt ein %
• \ooo Zeichen mit dem oktalen ASCII code ooo
• \xhhh Zeochen werden im Hexadezimalsystem dargestellt
2.2.7 scanf
• scanf (“Text%f...“,&x);
• Achung besser ist es wenn nur eine Variable auf einmal eingegeben werden muss dabei
nur 1 Formatschlüssel
• besser so: scanf (“%d“,&i); mit nur einer Variablen
Formtschlüssel:
%d int
%c char
%lf double
%f float
2.2.8 Funktionsaufrufe
1. Funktion Aufrufen
main()
{double x=2.2,l;
...
y=myQuad(x+10)
2.Funktion deklarieren
double myQuad(double Zahl);
3.Funktion implementieren
double myQuad(double z)
{ double ergeb;
ergb=z*z
return ergeb; }
6
©FK
Informatik
19. Juni 2009
2.2.9 Die Blockanweisung
• zusammengestzte Answeisung
• compound statement
• fasst mehrer Anweisungen zu einer zusammen
{ Anweisung1;
Anweisung2;
}
Bemerkung
• In C (nicht C++), nur am Blockanfang kann man Variablen vereinbaren
• Lebensdauer endet am Blockende
• innere Variable gleichen namens verdecken äußere
Beispiel: main()
{int i=7,a=99;
...
printf(“%d“,i);
...
{int i=8,j=9;
printf(“%d“,a);//99
printf(“%d“,i);//8(innere)
}
i und j sterben (8 und 9)
printf(“%d“,i);//7
printf(“%d“,j);//ERROR
}//jetzt stirbt i und a (7 und 99)
3 Die Steuerungsanweisungen einer Strukturierten Sprache
Regeln für das Strukturierte Programmieren:
• Ein Strukturblock (SB) hat genau einen Eingang und genau einen Ausgang
• Der Programmfluss ist nur ausschließlich von oben nach unten. Keine Rückwärtssprünge, nicht von links nach rechts oder von rechts nach links.
• Programme werden „top-down“ entwickelt (grobe sturkturen die verfeinert werden)
• SB’s überlappen nicht, dh. sie haben keinen gemeinsamen Code, sie sind unabhängig
von einander
7
©FK
Informatik
19. Juni 2009
3.1 Verzweigungen in der Sprache C
3.1.1 if-else Verzweigung
Syntax
if(Anweisung)
Anweisung 1....;
else (Anweisung) //wenn die Bedingung nicht erfüllt ist
Anweisung 2....;
Bemerkung 1: relationale Operatoren:
• ! = anstatt 6=
• == anstatt =
• >= bleibt
• <= bleibt
• > bleibt
• < bleibt
Logische Operatoren
• & & und
• || oder
• ! nicht
Bemerkung 2: Die Anweisungen 1 und 2 dürfen Blockanweisungen sein:
if(Bedingung)
{ Anweisung 11;
Anweisung 12;
}
else(Bedingung)
{ Anweisung 21;
Anweisung 22;
}
Bemerkung 3:
if(i>10) //Anweisunge
3.1.2 Die switch-case-Anweisung
switch (Anweisung)
{
case const1: Anweisung 1
8
©FK
Informatik
19. Juni 2009
Anweisung 2 ...
brake
case const2: Anweisung 2.1
Anweisung 2.2 ...
brake
default: Anweisung def.1
Anweisung def.2 ...
brake
Bemerkung: case 27: (vorgegebene Konstante, keine Variable)
3.2 Schleifen
3.2.1 while (Schleife)
Syntax:
int 1=10
while (Bedingung)Anweisung
{ printf(„%d.Zeile “)
i–}
Bemerkung:
• zuerst Abweisende Schleife
• Bedingungen Vergleichsoperatoren wie bei der If else Anweisung
• Ganzzahlige Werte (Integer) ungleich Null gelten als True nur die Null gilt als false
3.2.2 Die do-while-Schleife
Syntax:
do Anweisung while(Bedingung)
Bemerkung:Diese Schleife ist nicht Abweisend.
Bsp.: int i=10;
do { printf („%d. Zeile“,i)
i–;
} while(i>0)
3.2.3 Die for-Schleife
Syntax:
for (Initausdruck, Bedingung, Inkrementausdruck)Anweisung;
Bemerkung:
1. Abweisend wie die while-Schleife
2. Nicht unbedingt Notwendig
3. Fasst im Schleifenkopf alles zusammen was die Schleife steuert
9
©FK
Informatik
19. Juni 2009
4. Ini Ausdruck
while(Bedingung)
{ ...} Bewirkt das gleiche wie die for-Syntax
3.3 Sprunganweisungen
3.3.1 goto
Syntax:
Anweisung1;
Anweisung2;
if (Bedingung)goto labelname;
Anweisung3;
Anweisung4;
labelname:
Anweisung5;
Es entsteht wenn die Bedingung der goto Funktion erfüllt wird ein Sprung zur „labelmarke“.
1. Vorwärtssprünge verletzten die Regel des Strukturierten Programmierens nicht, rückwärtssprünge schon.
2. Tabuisierte Anweisung! Sie wird im Normalfall nicht verwendet außer man will eine
Tief Verschachtelte Schleife verlassen
3.3.2 break und continue
Syntax:
int i=0;
while (i<10)
{i=i+1
if (i==5) break // oder constinue;
Anweisung 2;
Anweisung 3;
}
Anweisung 5;
Bemerkung:
Verwendet man die break funktion springt das Programm hinter die Schleife (zur Anweisung
5). Verwendet man dagegen die continue Funktion springt das Programm an das Ende der
Schleife, verlässt sie aber nicht und die Schleife fängt wieder von vorne an (springt hinter
Anweisung 3 verlässt die Schleisfe aber nicht).
Einschub:
Der Modulo-Operator, gibt den Rest aus wenn man zwei Zahle durcheinander Teilen will,
und des keine „Glatte“ Lösung gibt. Der Befhel für Modulo ist %.
10
©FK
Informatik
19. Juni 2009
Einschub: Zeiger und Strings
{main()
char b;
char *p;
b=’A’;
*p=&b; //Adress Operator
*p=’x’;//Umleitungsoperator
P=“ ABCDEF
|
{z
} “;
Expression=(char∗)
i= (j + 7)/h ;
|
{z
}
Expression=27
}
4 Zahlensysteme
4.1 Nicht -Stellenwertsystem
• Strichliste
• römische Zahlen
4.2 Stellenwertsysteme
4.2.1 Dezimales System
Herkunft: Arabische Zahlen
7328 = 8 · 1 + 2 · 10 + 3 · 100 + 7 · 10000
Basis 10 ⇒ 10 Ziffern: 0...9
4.2.2 Duales System / Binäres System
Basiszahl wäre die 2 ⇒ 2 Ziffern: 0,1
4.2.3 Hexadezimales System
Basis 16 ⇒ 16 Ziffern: 0...9 ABCDEFG 1A7 = 7 · 1 + 16 · 10 + 1 · 256 = 423 mit A = 10
4.3 Umrechnden zwischen Stellensystemen
4.3.1 Fremdes System → Dezimales System
Das ist trivial, weil wir in dem Ziel-Zahlen-System denken.
11
©FK
Informatik
19. Juni 2009
4.4 Hexadezimale Binärezahlen
0000→ 0 →0
0001→ 1 →1
0010→ 2 →2
0011→ 3 →3
0100→ 4 →4
0101→ 5 →5
0110→ 6 →6
0111→ 7 →7
1000→ 8 →8
1001→ 9 →9
1010→ 10 →A
1011→ 11 →B
1100→ 12 →C
1101→ 13 →D
1110→ 14 →E
1111→ 15 →F
10000→ 16 →G
Kochrezept: Man bildet Binäre 4-er Gruppern bilden!
Bsp.: A7=1010 0111
00010110= 16 (mit Nullen vorne auffüllen wenn die Zahl nicht durch 4 teilbar ist)
4.4.1 Allgemeiner Fall (dezimal → Fremdes System
Kochrezept: Fortlaufende Division durch die neue (fremde) Basis.
4.4.2 Dezimal → Dezimal
7328:10=732 Rest 8
732:10 =73 Rest 2
73:10 =7 Rest 3
7:10= 0 Rest 7 (wobei die Null nun die Abbruch bedingung ist)
4.4.3 Dezimal → Binär (2)
22:2=11 rest 0
11:2=5 rest 1
5:2=2 rest 1
2:2=1 rest 0
1:2=0 rest 1 (wobei die Null nun die Abbruch bedingung ist)
Ergebniss :10110
4.5 Zahlenraum der vorzeichenlosen Binären Zahlen
Bsp.: 4 bit breite Zahlen (Intel 4004)
0000→0
12
©FK
Informatik
19. Juni 2009
0001→1
0010→2
...
1110→14
1111→15
Rechnung:
4.6 Vorzeichenbehaftete Ganzzahlen
4.6.1 Vorzeichenbehaftete Dualzahlen
• positiv:
0xxx.xxx
| {z }
+...
1xxx.xxx
| {z }
-...
gemaesStellenwertSystem
• negativ:
gemaesStellenwertSystem
• Beispiel: 4 Bit breiter Zahlenraum
0000 +0 -0 1000
0001 +1 -1 1001
0010 +2 -2 1010
0011 +3 -3 1011
0100 +4 -4 1100
0101 +5 -5 1101
0110 +6 -6 1110
0111 +7 -7 1111
1. Testfrage : Eineindeutigkeit aller Zahlenwerte? ± 0 verletzt die Eindeutigketit
2. Testfrage :ßelbstkonsistenz"? -(-n) =n (ist hier trivial)
3. Testfrage : Additionen
0010 + 0011 = 2+3 = 0101 = 5
0010 + 1011 = 2+ -3 = -5 = -1
1010 + 1011 = -2 -3 = +5 =-5
Da dies ja nun nicht wirklich funktioniert müssen wir uns eine andere zuordnung negativer
Zahlen zum Bitmuster ändern
4.6.2 Einerkomplement - Darstellung
positive Zahlen: Bitmuster:
0xxx.xxx
| {z }
+...
gemaesStellenwertSystem
negative Zahlen: Bitmuster:
1xxx.xxx
| {z }
-...
gemaeseinerkomplement
Einer - Moplement bedeutet: n→ -n
Bsp.: 0000 +0 -0 1111
0001 +1 -1 1110
0010 +2 -2 1101
0011 +3 -3 1100
0100 +4 -4 1011
13
©FK
Informatik
19. Juni 2009
0101 +5 -5 1010
0110 +6 -6 1001
0111 +7 -7 1000
1. Testfrage : Eineindeutigkeit aller Zahlenwerte? ± 0 verletzt die Eindeutigketit
2. Testfrage :ßelbstkonsistenz"? -(-n) =n (ist hier trivial) alla bits 2 mal umdrehen gibt
den selben Wert
3. Testfrage : Additionen
0010 + 0011 = +2 +3 = 0101 = 5
0010 + 1100 = +2 -3 = 1110 = 0001 = -1 die letzten drei Stellen gelten nach dem Stellenwertsystem
1101 + 1100 = -2 -3 = 1001 = 0110 =- 5 nicht richtig ergibt im Bitsystem -6
Zusammenfassung: Entweder ist das Ergbniss Richtig oder um 1 erniedrigt.
4.6.3 Zweierkomplement - Darstellung
positive Zahlen: Bitmuster:
0xxx.xxx
| {z }
+...
1xxx.xxx
| {z }
-...
gemaesStellenwertSystem
negative Zahlen: Bitmuster:
gemaeszweierkomplement
1. Schritt: Einerkomplement Bildern
2. Schritt: zum Einerkomplement noch 1 addieren
Bsp.: 0010 + 0011 = +2 +3 = 0101 = 5
0010 + 1100 = +2 -3 = 1110 = 0001 = -1 die letzten drei Stellen gelten nach dem Stellenwertsystem
1101 + 1100 = -2 -3 = 1001 = 0110
4.6.4 Zahlenraum beim Zweierkomplement
Zahlensystem bei 4St. Regeln:
14
©FK
Informatik
19. Juni 2009
• Bei einer Addition von zwei Positiven Zahlen ist richtig wenn das Ergebniss positiv
ist und falsch, wenn das Ergbeniss negativ ist
• Eine negativ- negativ addition ist Richtig wenn das Ergebniss negativ ist, sie ist falsch
wenn das Ergebniss positiv ist
• Eine positiv-negativ addition ist immer Richtig, weil die Grenze nicht überschritten
werden kann
Allgemeine Formel für n-Bit
Erinnerung Vorzeichenlos mit n-Bit: 0..2n−1
Vorzeichenbehaftet n-Bit 2er Komplement: −2n−1 ... + (2( n − 1) + 1)
Bsp.: 4 bit ergibt einen Zahlenraum von -8 bis +7
8 bit ergibt einen Zahlenraum von -128 bis 127
5 Datenstrukturen
5.1 Felder und Zeiger
• Elemente sind alle vom selben Typ
• Elemente liegen seqentiel im Speicher
Bsp.:
main()
{ int feld1[10];
int *p;
p=& feld1[0];
p=feld1;
1.) feld1[0]=1;
feld1[1]=2;
feld1[2]=3;
...
15
©FK
Informatik
19. Juni 2009
feld1[9]=10;
2.) *p=1;
*(p+1)=2; *(p+2)=3;
...
*(p+9)=10;
3.) p[0]=1;
p[1]=2;
p[2]=3;
... p[9]=10;
*feld1=1;
*(feld1+1)=2;
*(feld1+2)=3;
...
*(feld1+9)=10;
p=feld1; //okay
feld1=p; //l-value required !!! nicht okay
}
Bsp. Lottozahlen
main() {int feld77[6];
...
erzeugelottozahlen (feld77);
Möglichkeiten die Funktion zu Deklarieren
1. void erzeugelottozahlen (int*p)
{p[3]=...;
*(p+3)=...; }
2. void erzeugelottozahlen (int Lz[])
{ Lz[3]=...;
*(Lz+3)=...;
Lz++;//l-value required !!! nicht okay}
16
©FK