Verzweigung oder bedingte Anweisung. Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tageszähler).Wenn.

Slides:



Advertisements
Ähnliche Präsentationen
Funktionen.
Advertisements

Forschungszentrum caesar
Verzweigung oder bedingte Anweisung Weiter mit PP.
Zusammenfassung der Vorwoche
Einführung in JavaScript II
Suche in Texten (Stringsuche )
10. Grundlagen imperativer Programmiersprachen
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden.
Algorithmus. Ein Kochrezept, zum Beispiel: Kartoffelbrei.
C- Syntax. Bestandteile der Sprache C: Ausdrücke Anweisungen.
SWITCH - Anweisung.
SWITCH - Anweisung.
Verzweigung oder bedingte Anweisung Weiter mit PP.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
ARRAY oder FELD oder VEKTOR
Funktionen.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
WHILE - Anweisung.
FOR Anweisung.
Der Präprozessor. Bevor der Compiler das Programm in Maschinencode übersetzt (nur dieser kann von der CPU, dem Herz des Computers, bearbeitet werden)
Fehler-Management.
DO...WHILE Anweisung.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Java- Syntax.
ARRAY oder FELD oder VEKTOR
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Vorwoche Programm besteht aus mehreren Bestandteilen: Schlüsselwörter Sonderzeichen Bezeichner Kommentare Texte.
Zusammenfassung Vorwoche
Das erste Programm (Folie 16)
Einführung in die Programmierung Anweisungen und Datentypen
Verzweigung.
Struktogramme IF-ELSE FOR – Schleife
Wie macht man ein Sudoku? Transformations-Methode:
Einführung in die Programmiersprache C 1
Informatik 1 Übung 2.
Informatik Grundlagen, WS04, Seminar 11
Bereit ???? Nimm dir 10 Minuten Zeit. Ich versuche es dir zu erklären.
C-Einstieg. Agenda 1Vorbereitung 2Aufbau eines Programms 2.1Header 2.2 Methoden 2.3Main 3Datentypen & Variablen 4Operatoren(+, -, *, /) 5Logik 5.1IF 5.2Switch.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Datentypen: integer, char, string, boolean
Agenda für heute, 7. April, 2005 Bedingte ProgrammausführungBedingte Programmausführung Algorithmische Grundlagen Vergleichsoperatoren, Wahrheitswerte.
3. Lineare Befehle 3.1 Die Ausgabefunktion
BMEVIEEA100 Grundlagen der Programmierung
PHP: Operatoren und Kontrollstrukturen
Mehrfachausführungen Schleifen in VB 2010 ee. Programmidee: Der Anwender gibt eine Zahl ein, und das Programm gibt die Mehrfachen dieser Zahl aus (das.
Vom graphischen Differenzieren
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Einführung in die Programmiersprache C 2
Variablen und Datentypen
Unterprogramme / Methoden
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Programmieren 1 C++ Aufgaben / Übungen.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Reihenfolge der Operatoren
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
TRUE und FALSE in C Der Wert 0 steht für FALSE Jeder von 0 verschiedene Wert steht für TRUE FALSE wird als 0 dargestellt TRUE wird als 1 dargestellt.
Java Programme nur ein bisschen objektorientiert.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Verschachtelte Schleifen
Durchschnitt (verbal)
REKURSION + ITERATION.
Zufallszahlen in C erzeugen
 Präsentation transkript:

Verzweigung oder bedingte Anweisung

Aufgabe: Ein Autofahrer tankt sein Auto voll und schreibt den Kilometerstand auf (drei- stelliger Tageszähler).Wenn er das nächste Mal tankt, macht er das gleiche und notiert sich zusätzlich noch die getankten Liter. Wie groß ist der Benzinverbrauch pro 100 km ? Flussdiagramm + C-Programm !

d = zneu – zalt Ausgabe (bv100) Eingabe(zalt) Eingabe(zneu) Eingabe(bv) bv100 = bv / d * 100

int main(){ double zalt, zneu, d, bv, bv100; printf("\nKilometerstand "); scanf("%lf", &zalt); fflush(stdin); printf("\nKilometerstand "); scanf("%lf", &zneu); fflush(stdin); printf("\nBenzinverbrauch \n"); scanf("%lf", &bv); fflush(stdin);

... d = zneu - zalt; bv100 = bv/d * 100; printf("L/100 km %f",bv100); return 0; } Differenz kann negativ werden Wann berechnet das C-Programm ein falsches Ergebnis ?

Zählerstand beim 1. Tankvorgang: 900 km Beispiel für negative Differenz Zählerstand beim 2. Tankvorgang: 100 km Differenz = 100 – 900 = - 800km Es werden nun 200 km bis zum nächsten Tankvorgang gefahren. Welcher Kilometerstand steht dann auf dem Tacho? Welcher neue Kilometerstand müsste in Wirklichkeit aber auf dem Tacho stehen? 1000 km km Welche Differenz berechnet das Programm?

Aufgabe: Verändern Sie das Flussdiagramm so, dass dieser Fall (Zählerüberlauf) berücksichtigt wird.

d = zneu – zalt Ausgabe (bv100) Eingabe(zalt) Eingabe(zneu) Eingabe(bv) bv100 = bv / d * 100

zneu  zalt f w Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu = zneu

zneu  zalt f w Eingabe(zalt) Eingabe(zneu) Eingabe(bv) zneu = zneu d = zneu – zalt Ausgabe(bv100) bv100 = bv / d * 100

C-Syntax für die Einseitige Verzweigung

if (Ausdruck) Anweisung; Bedingung Nächste auszuführende Anweisung, wenn Bedingung wahr. Wahr bedeutet: Wert des Ausdrucks: !=0 Nächste auszuführende (d.h. die diesem roten Rahmen folgende) Anweisung, wenn Bedingung falsch. Falsch bedeutet: Wert des Ausdrucks: 0

Aufgabe: Verändern Sie das C-Programm so, dass dieser Fall (Tachoüberlauf) berücksichtigt wird.

... if(zneu <= zalt){ zneu = zneu ; } d = zneu - zalt; bv100 = bv/d * 100; printf("L/100km %f",bv100); return 0; } bei einer Anweisung sind Klammern nicht nötig. Trotzdem: Immer Klammern machen.

Struktogramme als Alternative zu Flussdiagrammen

Eingaben, Ausgaben, einfache Anweisungen. Beispiele: Fläche = Länge * Breite Umfang = 2*(Länge + Breite)

Flussdiagramm für eine Einseitige Verzweigung

zneu <= zalt f w zneu = zneu

Struktogramm für eine Einseitige Verzweigung

zneu <= zalt w zneu = zneu f Bei einer zweiseitigen Verzweigung würde hier mindestens eine Anweisung stehen!

Beispiel:

//Eingabeteil (wurde weg- // gelassen) if (zneu <= zalt) zneu = zneu+1000; printf("Zählerüberlauf"); } d = zneu–zalt; erg = b/d*100; printf("\n L/100 km %f",erg); Block (Verbundanweisung): fasst mehrere Anweisungen zusammen { Übrigens: Welchem Prinzip widerspricht dieses Programm ? Dem EVA-Prinzip !

Eingabe(bv) Eingabe(zneu) Eingabe(zalt) Bitte Struktogramm zum vorigen C- Programm vervollständigen !

d = zneu–zalt Ausgabe(bv100) bv100 = bv/d*100 zneu <= zalt w f Eingabe(bv) Eingabe(zneu) Eingabe(zalt) zneu = zneu+1000 Ausgabe("Zählerüberlauf")

Aufgabe: Bestimmung des Maximums zweier ganzer Zahlen, also: Struktogramm + Flussdiagramm + C-Programm ! Achtung: Bis jetzt können wir nur die einseitige Verzweigung in C umsetzen !!!

max = b Ausgabe(max) a < b w f Eingabe(b) Eingabe(a) max = a a >= b w f Ist es möglich, dass das Programm alle zwei false-Teile durchläuft?

max = b Ausgabe(max) a < b w f Eingabe(b) Eingabe(a) max = a a >= b w f Nein, denn wenn eine Bedingung false ist, muss die andere Bedingung true sein!

a < b f w Eingabe(a) Eingabe(b) max = b Ausgabe(max) a >= b f w max = a

#include "stdafx.h" #include int main(){ int a,b,max; printf("\nEingabe der ersten Zahl: "); scanf("%d", &a); fflush(stdin); printf("\nEingabe der zweiten Zahl: "); scanf("%d", &b); fflush(stdin); // Wie geht es weiter ? Möglich: Trennen von Variablennamen mit Komma Kommentar

if (a<b){ max = b; } printf("Max=%d", max); if (a>=b){ max = a; } Logisch gleichwertig: !(a<b)

return 0; }

Wir machen ein paar Tests, denn die Wahrheit ist konkret !

if (a<b){ max = b; } printf("Max=%d", max); if (a>=b){ max = a; } 1 2 Für a werde 2 eingegeben Für b werde 1 eingegeben

if (a<b){ max = b; } printf("Max=%d", max); if (a>=b){ max = a; } 5 3 Für a werde 3 eingegeben Für b werde 5 eingegeben

if (a<b){ max = b; } printf("Max=%d", max); if (a>=b){ max = a; } 7 7 Für a werde 7 eingegeben Für b werde 7 eingegeben

Andere Lösung mit einseitiger Verzweigung:

max = b Ausgabe(max) a < b w f Eingabe(b) Eingabe(a) max = a a > b w f max = a a == b w f

Andere Lösung mit einseitiger Verzweigung:

max = b Ausgabe(max) a < b w f Eingabe(b) Eingabe(a) max = a; Das vorläufige Maximum wird auf den Wert der Variablen a gesetzt. Ist das vorläufige Maximum kleiner als die 2. Zahl, dann ist das endgültige Maximum gleich der 2. Zahl

oder als eine elegantere Alternative:

Aufgabe: Bestimmen des Maximums zweier ganzer Zahlen. Flussdiagramm mit zweiseitiger Verzweigung !

a < b f w Eingabe(a) Eingabe(b) max = b Ausgabe(max) max = a Ende Anfang

Und hier das zugehörige Struktogramm für diese zweiseitige Verzweigung

a<b w max = b f max = a

C - Syntax für die zweiseitige Verzweigung

if (Ausdruck) Anweisung1; else Anweisung2; Nächste Anweisung, wenn Bedingung wahr Bedingung Nächste Anweisung, wenn Bedingung falsch wahr bedeutet: Wert des Ausdrucks != 0 falsch bedeutet: Wert des Ausdrucks = 0

Wie kann man also ganz allgemein die folgende zweiseitige Verzweigung durch zwei einseitige Verzweigungen darstellen ?

if (B){ A1; } else{ A2; } if(B){ A1; } if(!B){ A2; } A1, A2 und B sind alles Ausdrücke

Aufgabe: Bestimmung des Maximums zweier ganzer Zahlen. C-Programm

if (a<b){ max = b; } else{ max = a; } printf("Maximum =%d", max); Bedingung Nächste Anweisung, wenn Bedingung wahr Nächste Anweisung, wenn Bedingung falsch bei einer Anweisung sind Klammern nicht nötig. Trotzdem: Immer Klammern machen.

return 0; }

Programmverlauf

Annahme: Bedingung wahr

if (a<b){ max = b; } else{ max = a; } printf("Maximum =%d", max); Zum Beispiel...

Annahme: Bedingung falsch

if (a<b){ max = b; } else{ max = a; } printf("Maximum =%d", max); Zum Beispiel...

Warum ist folgende Lösung falsch ? Frage:

if (a<b){ max = b; } printf("Maximum =%d", max); }

Programmverlauf

Annahme: Bedingung wahr

if (a<b){ max = b; } printf("Maximum = %d ", max); 1 2 Zum Beispiel

Annahme: Bedingung falsch

if (a<b){ max = b; } Wert von max ist unbekannt und deshalb mit hoher Wahrscheinlichkeit nicht gleich dem Wert von a printf("Maximum = %d ", max); 2 1 Zum Beispiel... ?

Aufgabe: Bestimmen des Maximums und Minimums zweier ganzer Zahlen. Struktogramm + C-Programm

a<b w max = b f max = a min = a min = b Eingabe(a,b) Ausgabe (max,min)

#include "stdafx.h" #include int main(){ int a; int b; int min; int max; // Eingabeteil wie immer // Dann weiter mit...

if (a<b){ max = b; min = a; } else{ max = a; min = b; } Anweisungen in einem Block zusammenfassen Blockbeginn Blockende kein Semikolon

printf("Max=%d, Min=%d", max, min); return 0; }

Block: Fasst mehrere Anweisungen zusammen.

Vorschlag: In "nicht einfachen" Anweisungen (wie z.B. if...else, bzw. if) immer Block benutzen.

WICHTIG: Nach einem Block kommt kein Semikolon.

Stellen Sie den Algorithmus durch ein Struktogramm dar, der das Maximum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet. Aufgabe:

Eingabe(z1,z2,z3) z1<z2 WF max = z2max = z1 max<z3 WF max = z3 Ausgabe(max)

Erstellen Sie das zu diesem Struktogramm zugehörige C-Programm

#include "stdafx.h" #include int main(){ int z1; int z2; int z3; int max; // Eingabeteil wie immer // Dann weiter mit...

if(z1<z2){ max=z2; } else{ max=z1; } if(max<z3){ max=z3; } printf( "Max=%d\n", max); return 0; }

Stellen Sie den Algorithmus durch ein Struktogramm dar, der das Maximum und Minimum dreier in beliebiger Reihenfolge eingegebener Zahlen berechnet. Aufgabe:

Eingabe(z1,z2,z3) z1<z2 W F max = z2 Ausgabe(max, min) min = z1 max = z1 min = z2 max<z3 W F max = z3 min>z3 W F min= z3

Erstellen Sie das zu diesem Struktogramm zugehörige C-Programm

#include "stdafx.h" #include int main(){ int z1; int z2; int z3; int max; int min; // Eingabeteil wie immer // Dann weiter mit...

if(z1 z3){ min=z3; } printf("Max=%d Min=%d\n", max, min); return 0; }

Erzeugen Sie einen Algorithmus (und stellen Sie diesen durch ein Struktogramm dar), der drei in beliebiger Reihenfolge eingegebene Zahlen ihrer Größe nach sortiert und ausgibt (kleinste, mittlere, grösste). Aufgabe:

TESTEN Sie Ihre Lösung (Struktogramm). Machen Sie dazu folgende Überlegungen:

Unter 3 Zahlen gibt es genau 3 verschiedene, genannt a, b und c. Wie viele verschiedene Möglichkeiten (bzgl. der Reihenfolge der Eingabe) gibt es diese 3 Zahlen einzugeben? Bitte notieren Sie diese Möglichkeiten.

3 verschiedene Zahlen: a b c a c b b a c b c a c a b c b a

Unter 3 Zahlen gibt es genau 2 verschiedene, genannt a und b. Wie viele verschiedene Möglichkeiten (bzgl. der Reihenfolge der Eingabe) gibt es diese 3 Zahlen einzugeben? Bitte notieren Sie diese Möglichkeiten.

Genau 2 gleiche Zahlen: a a b b a a a b a b b a a b b b a b

Unter 3 Zahlen gibt es genau 3 gleiche, genannt a, a, und a. Wie viele verschiedene Möglichkeiten (bzgl. der Reihenfolge der Eingabe) gibt es diese 3 Zahlen einzugeben? Bitte notieren Sie diese Möglichkeiten.

Genau 3 gleiche Zahlen: a a a

Zusammengefasst: a b c a c b b a c b c a c a b c b a a a b b a a a b a b b a a b b b a b a a a

Eine mögliche Lösung der vorigen Aufgabe:

Bemerkung: Die Lösung wird in der folgenden Folie durch ein Flußdiagramm dargestellt. Wandeln Sie dieses Flussdiagramm in ein Struktogramm um.

w k:=z3 m:=z1 g:=z2 z1 < z2 f z3 < z1 z3 < z2 k:=z1 m:=z3 g:=z2 k:=z1 m:=z2 g:=z3 k:=z3 m:=z2 g:=z1 z3 < z2 z3 < z1 k:=z2 m:=z3 g:=z1 k:=z2 m:=z1 g:=z3 Ausgabe(k,m,g) w w w w f f f f

z1<z2 W F z3<z1 WF k=z3 m=z1 g=z2 z3<z2 WF k=z1 m=z3 g=z2 k=z1 m=z2 g=z3 z3<z2 WF k=z3 m=z2 g=z1 z3<z1 WF k=z2 m=z3 g=z1 k=z2 m=z1 g=z3 Eingabe(z1, z2, z3) Ausgabe(k, m, g)

z1<z2 W F z3<z1 WF k=z3 m=z1 g=z2 z3<z2 WF k=z1 m=z3 g=z2 k=z1 m=z2 g=z3 z3<z2 WF k=z3 m=z2 g=z1 z3<z1 WF k=z2 m=z3 g=z1 k=z2 m=z1 g=z3 Eingabe(z1, z2, z3) Ausgabe(k, m, g) Wieviel if...else Anweisungen kommen in diesem Programm vor? Genau eine (die rot umrandete)! Diese ist allerdings verschachtelt !!!

TESTEN Sie mit den gerade angegebenen Zahlenkombinationen dieses Struktogramm.

Erstellen Sie das zu diesem Struktogramm zugehörige C-Programm

#include "stdafx.h" #include "stdio.h" int main(){ int z1, z2, z3, m, k, g; // Eingabe printf("Eingabe der 1. Zahl: \n"); scanf("%d", &z1); fflush(stdin); printf("Eingabe der 2. Zahl: \n"); scanf("%d", &z2); fflush(stdin); printf("Eingabe der 3. Zahl: \n"); scanf("%d", &z3); fflush(stdin); // gleich kommt die Ausgabe

if (z1<z2){ if(z3<z1){ k=z3; m=z1; g=z2; } else{ if(z3<z2){ k=z1; m=z3; g=z2; } else{ k=z1; m=z2; g=z3; } else{ if(z3<z2){ k=z3; m=z2; g=z1; } else{ if(z3<z1){ k=z2; m=z3; g=z1; } else{ k=z2; m=z1; g=z3; }

// Ausgabe printf("sortierte Reihenfolge %d %d %d: \n", k, m, g); return 0; }

Nochmals zum EVA-Prinzip

Das EVA-Prinzip bedeutet: In einer Anweisung dürfen nicht zwei verschiedene Komponenten von EVA stehen (wie z.B. V und A)

Eingabe(zaehler, nenner) nenner != 0 WF erg = zaehler / nenner Ausgabe(erg) Ausgabe("unerlaubte Division durch 0") E V A + Schlechter Programmierstil: 2 Komponenten in 1 Anweisung

Guter Programmierstil:

Eingabe(zaehler, nenner) nenner != 0 WF erg = zaehler / nenner erlaubt = 1 erlaubt = 0 E V erlaubt == 1 WF Ausgabe(erg) A Ausgabe("Division durch 0") Die Variable "erlaubt" nennt man Steuervariable. Im V-Teil wird sie …

Eingabe(zaehler, nenner) nenner != 0 WF erg = zaehler / nenner erlaubt = 1 erlaubt = 0 E V erlaubt == 1 WF Ausgabe(erg) A Ausgabe("Division durch 0") nur gesetzt und im A-Teil wird sie nur …

Eingabe(zaehler, nenner) nenner != 0 WF erg = zaehler / nenner erlaubt = 1 erlaubt = 0 E V erlaubt == 1 WF Ausgabe(erg) A Ausgabe("Division durch 0") abgefragt (ausgelesen), um die entsprechende Ausgabe zu machen.

Eingabe(zaehler, nenner) WF erg = zaehler / nenner erlaubt = 1 erlaubt = 0 E V erlaubt == 1 WF Ausgabe(erg) A Ausgabe("Division durch 0") Wieviel if...else Anweisungen kommen in diesem Programm vor? Genau 2! nenner != 0

Aufgabe: Die Variablen n und t sollen den Datentyp integer haben. Mit welcher Anweisung kann man nachprüfen, ob t ein Teiler von n ist, wie z.B. 3 ein Teiler von 18 ist.

... if(n % t == 0){ // t teilt n } else{ // t teilt n nicht }... Mit dem Operator % wird der Rest berechnet. Wenn t Teiler von n ist, ist der Rest gleich 0. Gibt es eine andere Lösung, die die Operatoren / und * benutzt?

... if(n/t * t == n){ // t teilt n } else{ // t teilt n nicht }... Wenn n von t nicht geteilt wird, wird der Rest bei der Division abgeschnitten und somit das Produkt n/t * t ungleich n

Geben Sie dazu ein paar Beispiele...

... if(n/t * t == n){ // t teilt n } else{ //... }... Also ist die nächste Anweisung im if-Teil der if... else Anweisung * 7 =

... if(n/t * t == n){ //... } else{ // t teilt n nicht }... Also ist die nächste Anweisung im else-Teil der if... else Anweisung * 7 ≠

Aufgabe: Schreiben Sie ein C- Programm, in dem über Tastatur 3 Zeichen eingegeben werden. Das Programm soll berechnen, wie oft das Zeichen x in den 3 Zeichen vorkommt.

#include "stdafx.h" #include "stdio.h" int main(){ char zeichen1, zeichen2, zeichen3; int anzahl; // Eingabe printf("Eingabe des 1. Zeichens: \n"); scanf("%c", &zeichen1); fflush(stdin); printf("Eingabe der 2. Zeichens: \n"); scanf("%c", &zeichen2); fflush(stdin); printf("Eingabe der 3. Zeichens: \n"); scanf("%c", &zeichen3); fflush(stdin); // gleich kommt die Ausgabe

// Verarbeitung anzahl = 0; if(zeichen1=='x'){ anzahl=anzahl+1; if(zeichen2=='x'){ anzahl=anzahl+1; } if(zeichen3=='x'){ anzahl=anzahl+1; } // Ausgabe printf("Anzahl=%d\n",anzahl); return 0; }

Aufgabe: Schreiben Sie ein C- Programm, in dem über Tastatur 3 Zeichen eingegeben werden. Das Programm soll berechnen, ob in in dieser Zeichenkette, die Zeichenkette "xy" vorkommt.

#include "stdafx.h" #include "stdio.h" int main(){ char zeichen1, zeichen2, zeichen3; int anzahlVorkommen; // Eingabe printf("Eingabe des 1. Zeichens: \n"); scanf("%c", &zeichen1); fflush(stdin); printf("Eingabe der 2. Zeichens: \n"); scanf("%c", &zeichen2); fflush(stdin); printf("Eingabe der 3. Zeichens: \n"); scanf("%c", &zeichen3); fflush(stdin); // gleich kommt die Ausgabe

// Verarbeitung anzahlVorkommen = 0; if(zeichen1=='x' && zeichen2=='y' || zeichen2=='x' && zeichen3=='y'){ anzahlVorkommen =1; } // Ausgabe if(anzahlVorkommen ==0) printf("xy kommt nicht vor); else printf("xy kommt vor); return 0; }