java03 – datentypen und operatoren worgtsone.scienceontheweb.com - mailto: worgtsone @ hush.com 2015-09-06 – 23. Januar 2016 Inhaltsverzeichnis 0 Lehrplan 1 AB Variablen und Konstanten 1.1 Ganzzahlige Datentypen . 1.2 Fließkomma-Datentypen . 1.3 Strings . . . . . . . . . . . 1.4 Deklaration . . . . . . . . 1.5 Initialisierung . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 4 4 4 4 2 AB Hello World, Deklaration und Initialisierung 2.1 In Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 In C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Deklaration, Initialisierung und Ausgabe von Variablen 2.3.1 ... in Java . . . . . . . . . . . . . . . . . . . . . 2.3.2 ... in C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 5 5 5 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 AB Programmentwicklung am Beispiel : Rechteck 6 4 AB Tastatur.java 7 5 AB Operanden, Prioritäten, Konvertierung 5.1 Operanden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Prioritäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Typkonvertierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 8 8 6 Übungen: Variablen und Operatoren 6.1 Rechnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Modulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Nützliches aus der Klasse Math . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 7 Übungen : Eingeben – Verarbeiten – Ausgeben 7.1 Hallo . . . . . . . . . . . . . . . . . . . . . . . 7.2 Zwei Zahlen . . . . . . . . . . . . . . . . . . . 7.3 Würfel . . . . . . . . . . . . . . . . . . . . . . 7.4 Brutto . . . . . . . . . . . . . . . . . . . . . . 7.5 Quader1 . . . . . . . . . . . . . . . . . . . . . 7.6 Mittelwert . . . . . . . . . . . . . . . . . . . . 7.7 Prozent-Anteil . . . . . . . . . . . . . . . . . . 7.8 Kreis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 10 10 10 10 10 10 10 8 arrays (Felder) 11 8.1 anlegen, belegen und anzeigen von feldern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 8.1.1 Ü Klassenspiegel aus Datenliste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 9 arduino kurzgefaßt 9.0.2 Ü Schaltplan Ampel . . 9.0.3 Ü Variablen . . . . . . . 9.0.4 Ü 1/2 Hz . . . . . . . . 9.0.5 Ü 1/2 Hz am Steckbrett . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 12 12 12 12 INHALTSVERZEICHNIS 2 9.0.6 Ü Programm Ampel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 9.0.7 Ü Programm DruckAmpel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Disclaimer Wissen ist zum Teilen da. Ich teile mein Wissen mit Ihnen, lieber Kollege. Ich bin aber nicht perfekt. Unter [email protected] nehme ich dankbar Ihre Verbesserungsvorschläge entgegen. * Legal Blurb: Alle Informationen in diesem Dokument sind falsch, unvolständig, irreführend, irrelevant und / oder funktionieren einfach nicht. Wenn Sie es trotzdem benutzen, und es geht dabei etwas kaputt, ist das Ihr Problem, nicht meins. * Bitte teilen Sie meine Web-Adresse nicht Ihren Schülern mit. 0 0 LEHRPLAN 3 Lehrplan In Q1 (die ehemalige 11/1) sind lt. Lehrplan Themenfelder 1-3 verpflichtend. Technische Kommunikation gibt es nicht bzw. sie wird an meiner Schule ersetzt durch Maschinenbau-Grundkurs. Leider hat im 1. Halbj. 2015/16 niemand auf die Stunden geschaut... 6 Wochen (davon 1 krank) plus 7 Wochen plus 2 nach den Winterferien läßt wenig Platz für Blicke über den Tellerrand. Dafür wird ein arduino in Programmieren I aufgenommen. Es gilt also: 1. Themenfeld: Basiskonzepte (16h) Grundbegriffe der Problemanalyse : Algotirhmus, Programm, Software Programmiersprachen, Maschinensprachen, Assemblersprache, Höhere P’Sprachen Übersetzungsprogramme und -vorgang : Interpreter, Compiler, zweistufige Übersetzung Werkzeuge : Entwicklungsumgebungen, Debugger, Standard-Bibliotheken Variablen und Konstanten : Elementare Datentypen, Deklaration und Initialisierung Ausdrücke und Operatoren : arithmetische, relationale und logische O’en, Zuweisung, Prioritäten, implizite und explizite Typkonvertierung Tastatureingabe und Bildschirmausgabe 2. Themenfeld: Kontrollstrukturen (16h) Grafische Darstellung von Algorithmen : Flußdiagramme, Struktogramme Verzweigungen : einfach, mehrfach (CASE), mehrstufig Schleifen : abweisend, annehmend, zählergesteuert 2a. Themenfeld: arduino (Klausur-relevant) aufbauen von LEDs mit Vorwiderstand (gibt es in ET-Kurs) (R6 = 100,150,220,320,470,680,1000) Taster abfragen Ausgabe an LED Ampel: bei Tastendruck einen Ampelzyklus durchlaufen, sonst schlafen programm dazu in c schreiben, cross-compilieren und überspielen 3. Themenfeld: Eindimensionale Felder (16h) Deklaration, automatische und explizite Initialisierung, Zugriff auf einzelne Elemente, Eigenschaften von Referenzvariablen (??? c++ !!!) 4. Themenfeld: Zweidimensionale Felder (16h) (nicht verbindlich) 5. Themenfeld: einfache Such- und Sortieralgorithmen (16h) (nicht verbindlich) Sequentielle Suche Bubble-Sort, Insertion-Sort, Effizienz 1 AB VARIABLEN UND KONSTANTEN 1 4 AB Variablen und Konstanten Def.: Elementare Datentypen in Java sind Zahlendatentypen. Zudem gibt es eine Klasse String. Zahlendatentypen nehmen Zahlen auf: ganzzahlige oder mit Nachkommastellen. 1.1 Ganzzahlige Datentypen Der wichtigste Ganzzahlen-Datentyp sind integer. Sie decken den Bereich von -231 = −2147483648 bis +231 − 1 = 2147483647 ab. Weitere Datentypen haben andere Zahlenbereiche und können Vorzeichen oder auch nicht: long -2^63 .. 2^63-1 short -2^8 .. 2^8-1 unsigned long 0..2^64-1 unsigned int 0..2^32-1 byte 0..2^8 1.2 -9223372036854775808 .. 9223372036854775807 -256 .. 255 0..18446744073709551615 0..4294967296 0..255 Fließkomma-Datentypen Fließkomma-Datentypen merken sich Zahlen mit Nachkommastellen mit einer gewissen Anzahl von Ziffern. double float 1.3 -4E309 .. 4E309 -2.8E39 .. 2.8E39 Strings Strings merken sich Zeichenketten, d.h eine beliebige Folge und Anzahl von Computerzeichen. 1.4 Deklaration Datentyp Variablenname; d.h. der Wunsch ”Hallo Java, lege bitte eine Variablen vom Typ integer mit dem Namen k an.” liest sich wie folgt: int k; 1.5 Initialisierung Neuere Java-Versionen belegen Variablen ohne Zuweisung mit 0 (die Zahl Null). Es ist jedoch ein guter Brauch, der Variablen sogleich einen Wert zuzuweisen, damit sie einen hat. Das Zuweisungszeichen in Java (und den meisten anderen Programmiersprachen) ist =. d.h. der Wunsch ”Hallo Java, weise k bitte den Wert 5 zu.” liest sich wie folgt: k = 5; Man kann beides in einer Zeile machen: int k = 5; legt die Variable k an und weist ihr den Wert 5 zu. Weitere Variablen mit dem Namen k in diesem Programm sind damit verboten. 2 AB HELLO WORLD, DEKLARATION UND INITIALISIERUNG 2 2.1 AB Hello World, Deklaration und Initialisierung In Java class HelloWorld { // Klassennamen GROSS und in KamelSchreibWeise public static void main (String [] args) { // oder psvm(S[]a) System.out.println ("Hello World!!!"); } } System.out.println gibt den in Klammern folgenden String aus. 2.2 In C++ Sie können dieses Programm compilieren und ausführen zB mit Bloodshed Dev-C++. #include <iostream> // Bibliothek fuer Ein- und Ausgabe using namespace std; // Pflicht int main () { // geschweifte Klammern fassen Bloecke zusammen cout << "HaloWelt, worgtsone, 01.08.2005" << endl; // sagt, was das Programm macht system.pause(); // Pflicht return (0); // Pflicht } // Ende des Blockes main() 2.3 2.3.1 Deklaration, Initialisierung und Ausgabe von Variablen ... in Java class Variablen01 { public static void main (String [] args) { int i = 5; int j = 7; int summe = i + j; System.out.println ("i="+i); System.out.println ("j="+j); System.out.println ("summe="+summe); } } 2.3.2 // gibt i=5 // gibt j=7 // gibt summe=12 ... in C++ #include <iostream> using namespace std; // dies ist Datei kreis.cpp int main () { // geschweifte Klammern fassen Bloecke zusammen cout << "kreis, 09.11.2001" << endl; float pi = 3.1415926; float radius = 5; float umfang = 2 * pi * radius; cout << "umfang = " << umfang << endl; system.pause(); return (0); } 5 3 3 AB PROGRAMMENTWICKLUNG AM BEISPIEL : RECHTECK 6 AB Programmentwicklung am Beispiel : Rechteck 1. Aufgabe : Schreiben Sie ein Programm, das nach Eingabe von Länge und Breite die Fläche und den Umfang eines Rechtecks berechnet. 2. Analyse : Länge und Breite brauch ich und hab ich. Es sind vermutlich Zahlen mit Nachkommastellen. Umfang = 2(l + b). Fläche =l ∗ b. Das soll auch ausgegeben werden. Das steht zwar nicht in der Ausgabe, aber ein Programm, das so tolle Sachen berechnet und dann für sich behält, ist doof. 3. Algorithmus : 4. Programm : // Tastatur.class muss im selben Verzeichnis liegen class Rechteck { public static void main (String args[]) { System.out.println ("Rechteck by worgtsone, 17.08.2006, does Rechteck"); System.out.print ("Laenge: "); double l = Tastatur.leseKommazahl (); System.out.print ("Breite: "); double b = Tastatur.leseKommazahl (); double f = l * b; double u = 2 * (l + b); System.out.println ("Umfang = " + u); System.out.println ("Flaeche = " + f); } } ******************** Programmlauf los *********************** Rechteck by worgtsone, 17.08.2006, does Rechteck Laenge: 55 Breite: 99 Umfang = 308.0 Flaeche = 5445.0 ******************** Programmlauf end *********************** 5. Das war’s, Aufgabe ist gelöst. 4 4 AB TASTATUR.JAVA 7 AB Tastatur.java Freundliche Leute der internationalen Java-Community haben Tastatur.java bereitgestellt. Man muß es herunterladen und in dasselbe Verzeichnis wie die eigenen java-Dateien stecken. Anschließend kann man die eingebauten Funktionen benutzen: • public static String leseText () : gibt einen String • public static int leseZahl () : gibt ein int • public static double leseKommazahl () : gibt ein double class Quadrat { public static void main (String [] args) { System.out.println ("Ich rechne ein Quadrat, 29.02.2009"); // Eingabe System.out.println ("Gib mir Seite a:"); int a = Tastatur.leseZahl(); // Aufruf der Methode in der Klasse Tastatur // Verarbeitung int flaeche = a*b; double diagon = Math.sqrt(a*a + a*a); // Ausgabe System.out.println ("flaeche = " + flaeche); System.out.println ("diagonale = " + diagonale); } } 5 AB OPERANDEN, PRIORITÄTEN, KONVERTIERUNG 5 8 AB Operanden, Prioritäten, Konvertierung 5.1 Operanden Java verwendet folgende Zeichen um Zahlen zu verknüpfen: + - * / % ( ) Strings werden mit + zusammengehängt: String h = "hallo" + " " + "welt!"; 5.2 Prioritäten Weitere Fähigkeiten von Java werden in der Übung gefunden, insbesondere das nachkommastellenlose Dividieren von Ganzzahlen. 5.3 Typkonvertierung Java wandelt automatisch Ganzzahlentypen nach Fließkommatypen. Java weigert sich, automatisch Fließkommazahlen nach Ganzzahlen zu wandeln, weil es nicht weiß, was es mit den Nachkommastellen machen soll. Durch einen Cast (Datentyp in Klammern) kann man das Wegwerfen der Nachkommastellen erzwingen. Zahlen kann man zu Strings wandeln, indem man einen Leerstring addiert. Strings kann man mit der Methode Integer.parseInt() bzw. Double.parseDouble() konvertieren. Das folgende Programm illustriert das: class cast { public static void main (String[]args) { System.out.println ("cast by worgtsone.scienceontheweb.net"); float f = 7.9f ; int i = (int) (f); System.out.println ("i="+i); f = -7.9f ; i = (int) (f); System.out.println ("i="+i); String s=""+f; System.out.println ("s="+s); s=f+""; System.out.println ("s="+s); double d=Double.parseDouble(s); System.out.println ("d="+d + " d*d = "+ d*d); } } ==================== gibt: ===================== cast by worgtsone.scienceontheweb.net i=7 i=-7 s=-7.9 s=-7.9 d=-7.9 d*d = 62.410000000000004 6 ÜBUNGEN: VARIABLEN UND OPERATOREN 6 9 Übungen: Variablen und Operatoren 6.1 Rechnen Prüfen Sie die im folgenden genannten Regeln. Haken Sie die richtigen ab, schreiben Sie an die falschen ein f. 1. Es gelten die Zeichen + - * / ( ) %. 2. Java beherrscht die Regel ”Punkt vor Strich”. 3. Java berechnet Ganze Zahlen über 200 000 000 oder unter -200 000 000 fehlerfrei. 4. Java akzeptiert nur Dezimalpunkt. 5. Quadrieren: a2 = a * a. 6. Bei Divisionsaufgaben sollte man ein 1.0 * davorstellen. 7. Große Zahlen schreibt Java als aEb, das bedeutet a ∗ 10b . Beispiel: 5E5 bedeutet 5*1000 = 50000. 5E-005 bedeutet 5*0,0001 = 0,00005. 8. In der Klasse Math sitzen einige nützliche Funktionen und Konstanten, zB sqrt(), PI, E. 9. Das % gibt mir den Rest bei der Division von Ganzen Zahlen. Bsp: 15 : 4 = 10. Quadratwurzel: Rest √ . Dann ist in Java 15 / 4 = und 15 % 4 = keks = Math.sqrt(keks). 11. Nicht geschriebener Malpunkt: a(bc + d) = a * ( b * c + d). 12. Rechenaufgaben in der Ausgabe müssen eingeklammert werden und einen String vorangestellt bekommen, zB System.out.println("2 + 2 = " + (2 + 2)); 13. Bei Brüchen klammert man Zähler und Nenner ein, das ist NIE falsch. 6.2 Modulo Wir gehen zurück in die 3. Klasse Erstellen Sie eine 4-spaltige Tabelle. Die Spalten heißen a, b, a/b und a%b. In a stehen 9,10,11,12,13,14,15,15,15,15. In b stehen 4,4,4,4,4,4,4,5,6,7. Füllen Sie die Tabelle aus. 6.3 Nützliches aus der Klasse Math Math gibt uns folgende nützliche Funktionen an die Hand: • Math.sqrt() – berechnet die Quadratwurzel; • Math.PI – gibt π (ca. 3.141). Beachte: Konstanten in GROSSBUCHSTABEN; • Math.E – gibt Eulersche Zahl e (ca. 2.818); • Math.ceil() – gibt nächstgrößeres Double (???); • Math.floor() – gibt nächstkleineres Double (???); • Math.abs() – gibt Zahl mit positivem Vorzeichen zurück. • Math.random() – gibt Zufallszahl zwischen 0 und 1 (excl.); • Math.round() – gibt gerundetes Integer. 7 ÜBUNGEN : EINGEBEN – VERARBEITEN – AUSGEBEN 7 10 Übungen : Eingeben – Verarbeiten – Ausgeben 7.1 Hallo fragt nach dem Namen des Users und sagt dann freundlich ’Hallo <Name des Users>.’ 7.2 Zwei Zahlen fragt nach zwei Zahlen a und b und gibt dann aus: ”Die zweite Zahl war ... Die erste Zahl war ... a+b ist ... a-b ... a*b ... a/b ... a*a ... b*b ...” 7.3 Würfel fragt nach der Kantenlänge eines Würfels und gibt Volumen, Oberfläche, Raumdiagonale und Gesamt-Kantenlänge aus. 7.4 Brutto fragt nach Netto und Umsatzsteuersatz und errechnet das Brutto. 7.5 Quader1 wie Würfel, bloß mit einem Quader. 7.6 Mittelwert Berechnen Sie den Mittelwert dreier einzugebender Zahlen. 7.7 Prozent-Anteil fragt nach 4 INTEGER-Zahlen und gibt deren prozentualen Anteil an der Summe aus. Zahl 1 13 Prozent 8.13 Zahl 2 113 Prozent 70.63 Zahl 3 3 Prozent 1.88 Zahl 4 31 Prozent 19.38 -----------------------------Gesamt 160 Prozent 100.00 Hinweis: ein zusätzliches Leerzeichen können Sie erzeugen durch String s = ""; if (zahl < 100) s = s + " "; if (zahl < 10) s = s + " "; 7.8 // das ist leer // falls zahl kleiner 100, ein Leerzeichen // falls zahl kleiner 10, noch ein Leerzeichen Kreis fragt nach Radius und gibt Durchmesser, Umfang und Fläche aus. 8 ARRAYS (FELDER) 8 11 arrays (Felder) hint: arduino sollte mE möglichst nach hinten geschoben werden; es täuscht über die erforderlichen coding-Fähigkeiten im LK TI hinweg. 8.1 8.1.1 anlegen, belegen und anzeigen von feldern Ü Klassenspiegel aus Datenliste Liest eine Datei ein und zeigt den Klassenspiegel, Minimum, Maximum und Durchschnitt. Hinweise: 1. Eine Datei wird zum Lesen geöffnet durch // BufferedReader br = new BufferedReader(new FileReader("filename.ext")); und geschlossen durch br.close; 2. eine Zeile wird gelesen und explodiert durch String line=""; while ((line=br.read()) != null) { String[]words = line.split(";"); // falls es EIN Semikolon war String nachname = words[0]; // usw. } 3. Die Datei sollte das folgende Format haben: Meyer;Hans;15 Mueller;Karl;03 Stevens;Kim;08 ... 9 9 ARDUINO KURZGEFASST arduino kurzgefaßt 12 * Variablen: Wenn Sie die blaue LED an Pin 5 anschließen: int ledBlau = 5; 9.0.3 Ü Variablen Was schreiben Sie, wenn Sie Taster01 an Pin10 anschließen? Mit welchem Wert initialisieren Sie die variable int tasterstatus01? * Kleines Glossar void setup() { ...befehle... } – wird einmal direkt nach dem Reset ausgeführt. void loop() { ...befehle... } – wird unendlich oft nach setup() ausgeführt. digitalWrite(int pinNr, HIGH | LOW); – schreibt Ein arduino ist ein Computer, mit CPU, RAM und nach pinNr. Ein-/Ausgängen auf einem Chip. delay (int msecs); – schläft msecs Millisekunden. varName = digitalRead(pinNr); – liest HIGH oder Der eigentliche Computer ist der längliche, 24-beinige Chip LOW von pinNr in die Integer-Variable varName. rechts unten, auf dem atmel-ga328p steht. if (varName == HIGH) { ...befehle... } – führt ...beLinks oben ist eine USB-Buchse, zur Spannungsversorfehle... aus, wenn Bedingung erfüllt. gung und Hochladen von Programmen. pinMode(pinNr, OUTPUT | INPUT); – schaltet den Pin arduino wird über die Pins Vin und GND (unten Mitte) mit als Eingang oder Ausgang. +9V versorgt. Oben rechts ist eine Reihe Kontakte (Pins), die digitale Ein-/Ausgänge sind, d.h. sie führen entweder HIGH (5V) 9.0.4 Ü 1/2 Hz oder LOW (0V) oder lauschen auf die eingefütterte SpanSchreiben und bauen Sie ein Programm, das Pin13 1sec nung. ein- und dann 1sec ausschaltet. Unter Pin13 ist eine LED (L), die samt Vorwiderstand an Pin13 angeschlossen ist. 9.0.5 Ü 1/2 Hz am Steckbrett * arduino kann über Kabel an ein Steckbrett angeschlossen Bauen Sie zu 1 eine gelbe Leuchtdiode auf dem Steckbrett werden. Viele Kontakte dieses Steckbrettes sind stets mitdazu. einander verbunden: in den oberen und unteren beiden Reihen waagrecht, in den anderen beiden senkrecht. * Leuchtdioden werden mit der abgeflachten Seite an Masse und mit einem Vorwiderstand von 220Ω an 5V angeschlossen. Taster werden mit dem einen Ende am +5V, mit dem anderen Ende an einen Eingangs-Pin und parallel an einen Pull-Down-Widerstand von 1kΩ an Masse angeschlossen. 9.0.2 Ü Schaltplan Ampel Wir wollen eine Ampel mit 3 LEDs (rot, grün, gelb) und einem Taster an einen arduino anbauen. Zeichnen Sie den Schaltplan. Zeichnen Sie den arduino als Kasten mit einem ”a” mittendrin. Wo immer ein Kabel herauskommt oder hineingeht, schreiben Sie die Pin-Nummer dazu. * Programmierung arduino-Software ist bereits auf die PCs gespielt. Wenn Sie Ihr Programm schreiben und [PfeilRechtsInKreis] drücken, dann wird es kompiliert, übertragen und ausgeführt. arduino-Programme bestehen aus drei Teilen C: Variablen, setup() und loop(). 9.0.6 Ü Programm Ampel Schreiben Sie ein Programm, das eine rot-gelb-grüne Ampel laufen läßt: 8secRt - 2secRtGb - 8secGn - 2secGb -... 9.0.7 Ü Programm DruckAmpel Erweitern Sie ”Ampel”, so daß die Ampel einmal zykelt, wenn der Taster gedrückt wird; sonst soll sie Rot zeigen.