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