X gehört zum Segment. Thema: Boolescher Datentyp

Lektion aus der Serie " Geometrische Algorithmen»

Hallo lieber Leser!

Heute betrachten wir ein weiteres typisches Problem aus der Reihe der geometrischen Algorithmen. Lassen Sie uns eine Funktion schreiben, die überprüft Zugehörigkeit willkürlich Liniensegment gegeben durch die Koordinaten von Anfang und Ende.

Um Vergleichsoperationen mit realen Daten zu implementieren, schreiben wir zwei weitere Funktionen: die EqPoint()-Funktion, die überprüft, ob zwei Punkte auf der Ebene zusammenfallen, und die RealMoreEq()-Funktion, mit der wir das „>=“ überprüfen. Beziehung (größer als oder gleich). Wir kennen bereits den Grund für die Einführung spezieller Funktionen.

Aufgabe. Überprüfen, gehört ob Liniensegment.

Lassen Sie die Punkte die Start- und Endpunkte des Segments sein. ein beliebiger Punkt auf der Ebene ist.

Ein Vektor, der an einem Punkt beginnt und an einem Punkt endet, hat Koordinaten (x2-x1, y2-y1).

Wenn P(x, y) ein beliebiger Punkt ist, dann sind die Koordinaten des Vektors: (x-x1, y - y1).

Punkt P gehört zum Segment, wenn:

Programm geom3; Const _Eps: Real = 1e-3; (Rechengenauigkeit) var x1,y1,x2,y2,x,y:real; Funktion RealEq(Const a, b:Real):Boolean; (streng gleich) begin RealEq:= Abs(a-b)<= _Eps End; {RealEq} Function RealMoreEq(Const a, b:Real):Boolean; {больше или равно} begin RealMoreEq:= a - b >= _EpsEnde; (RealMoreEq) Funktion EqPoint(x1,y1,x2,y2:real):Boolean; (Ob zwei Punkte auf der Ebene zusammenfallen) begin EqPoint:=RealEq(x1,x2)and RealEq(y1,y2) end; (EqPoint) Funktion AtOtres(x1,y1,x2,y2,x,y:real):Boolean; (Prüfung, ob Punkt P zum Segment P1P2 gehört) Begin If EqPoint(x1,y1,x2,y2) Then AtOtres:= EqPoint(x1,y1,x,y) (Punkte P1 und P2 fallen zusammen, das Ergebnis wird durch die Koinzidenz bestimmt der Punkte P1 und P) Else AtOtres:= RealEq((x-x1)*(y2-y1)- (y-y1)*(x2-x1),0)and (RealMoreEq(x,x1)and RealMoreEq(x2 ,x)Oder RealMoreEq(x ,x2)und RealMoreEq(x1,x)) end; (AtOtres) begin (main) writeln(Punktkoordinaten eingeben: x1,y1,x2,y2,x,y"); readln(x1,y1,x2,y2,x,y); if AtOtres(x1,y1,x2 ,y2,x,y) then writeln("Yes.") else writeln("No.); Ende. (hauptsächlich)

Ergebnisse der Programmausführung.

Punktkoordinaten eingeben: x1, y1, x2, y2, x,y
0.5 1 2.5 2.8 1.203 1.633
Ja.

Testergebnisse im GeoGebra-Programm:


Heute haben wir die Funktion AtOtres() geschrieben, die überprüft, ob ein beliebiger Punkt zu einem Segment gehört, das durch seine Koordinaten gegeben ist.

Zwei weitere Funktionen wurden eingeführt: EqPoint() und RealMoreEq(), um Vergleichsoperationen mit echten Daten zu implementieren. Die erste prüft, ob zwei Punkte auf der Ebene zusammenfallen, die zweite dient zur Überprüfung der Beziehung ">=".

In der nächsten Lektion werden wir basierend auf den zuvor geschriebenen Prozeduren eine Prozedur zur Bestimmung der Koordinaten des Schnittpunkts zweier Segmente schreiben.

An dieser Stelle verabschiede ich mich von Ihnen. Wir sehen uns in der nächsten Lektion.

Boolesche Variablen erhalten ihre Werte normalerweise aus Vergleichs- und mathematischen Operationen (die in der vorherigen Lektion besprochen wurden) sowie aus bestimmten booleschen Operationen.

Turbo Pascal verfügt über logische Operationen, die auf Variablen eines booleschen Typs angewendet werden können. Dies sind keine and-, or- und xor-Operationen. In diesem Thema sehen Sie sich drei logische Operationen an. Die Bezeichnungen und Ergebnisse dieser Operationen sind in der Tabelle angegeben. Denke darüber nach.

Betrieb nicht(not) hat einen Operanden und bildet seine logische Negation. Das Ergebnis der Not-Operation ist False, wenn der Operand wahr ist, und True, wenn der Operand falsch ist. So,

nicht wahr falsch (Unwahrheit ist eine Lüge)

nicht falsch wahr (nicht falsch ist wahr)

Operationsergebnis und(i) ist nur wahr, wenn beide Operanden wahr sind, andernfalls falsch.

Operationsergebnis oder(or) ist wahr, wenn einer seiner Operanden wahr ist, und nur dann falsch, wenn beide Operanden falsch sind.

Die Übung . Versuchen Sie, die Bedeutung boolescher Operationen für Anweisungen zu bestimmen:

  1. Ein Schulkind bleibt in den Winterferien zu Hause oder ruht sich aus.
  2. Philip Kirkorov ist Sänger und Mähdrescher.
  3. Schulkinder sind Jungen und Mädchen.

Logische, relationale und arithmetische Operationen treten oft im selben Ausdruck auf. Dabei müssen die Beziehungen links und rechts vom Vorzeichen der logischen Verknüpfung in Klammern gesetzt werden, da logische Verknüpfungen eine höhere Priorität haben. Im Allgemeinen wird die folgende Priorität der Operationen angenommen:

  • und, *, /, div, mod
  • oder, +, -
  • Beziehungsoperationen.

. Die logische Operation und wird auch logische Multiplikation genannt, und die logische Operation oder wird auch logische Addition genannt.

Außerdem kann die Reihenfolge der Operationen durch Klammern geändert werden. In einem logischen Ausdruck ordnen wir beispielsweise die Reihenfolge der Aktionen an

A oder B und nicht (A oder B)

Der eingeklammerte or-Operator wird zuerst ausgeführt, gefolgt von den not-, and- oder or-Operatoren. Wenn wir die Werte True und False anstelle der Variablen A und B ersetzen, erhalten wir mit dem bereits betrachteten Verfahren den Wert des gesamten Ausdrucks gleich True.

Die Übung . Schreibe in dein Heft und berechne die Werte der Ausdrücke für a=10, b=20, c=wahr, d=falsch:

  • (a>5) und (b>5) und (a<20) and (b<30);
  • kein<15) or not (b<30);
  • c oder d und (b=20);

Beachtung! In Pascal gibt es keine Möglichkeit, boolesche Daten mit der read-Anweisung einzugeben. Die Ausgabe der Werte von Variablen eines booleschen Typs erfolgt jedoch über den Write-Operator.

Beispielsweise wird nach Ausführung der Anweisung write (5>2) True auf dem Bildschirm angezeigt.

Selbstständige Arbeit

Wählen Sie mit der Lehrkraft aus den folgenden Übungen eine Aufgabe zum eigenständigen Arbeiten aus.

  1. Berechnen Sie die Werte des Ausdrucks:

    a) Quadrat(x)+Quadrat(y)<=4 при x=0.3, y=-1.6;

    b) k mod 7 = k div5-1 bei k = 15;

    c) ungerade(trunc(10*p)) bei p=0,182;

    d) nicht ungerade(n) für n=0;

    e) t und (p mod 3=0) bei t=wahr, p=101010;

    e) (x*y<>0) und (y>x) mit x=2, y=1;

    g) (x*y<>0) oder (y>x) wenn x=2, y=1;

    h) a oder (nicht b) mit a=Falsch, b=Wahr;

  2. Schreiben Sie eine Relation in Pascal, die wahr ist, wenn die angegebene Bedingung erfüllt ist, und sonst falsch:

    a) die ganze Zahl k ist durch 7 teilbar;

    b) der Punkt (x, y) liegt außerhalb des Kreises mit dem Radius R, dessen Mittelpunkt der Punkt (1,0) ist;

    c) die natürliche Zahl N das Quadrat der natürlichen Zahl ist;

    d) 0

    e) x=max(x,y,z);

    e) mindestens eine der logischen Variablen a und b ist wahr;

    g) beide logischen Variablen a und b sind wahr.

  3. Geben Sie die Reihenfolge an, in der Operationen beim Auswerten von Ausdrücken ausgeführt werden:

    a) a und b oder nicht c und d;

    b) (x>=0) oder nicht c und d.

  4. Werten Sie die folgenden Ausdrücke mit a=True, b=False aus:

    a) a oder b und nicht a;

    b) (a oder b) und nicht a;

    c) nicht a und b;

    d) nicht (a und b)

  5. Schreiben Sie einen Ausdruck in Pascal, der wahr ist, wenn die angegebene Bedingung erfüllt ist, und andernfalls falsch:

    a) x gehört zum Segment;

    b) x liegt außerhalb des Segments;

    c) * x gehört zum Segment oder [-1, 1];

    d) * x liegt außerhalb der Segmente und [-1, 1];

    e) jede der Zahlen x, y, z ist positiv;

    g) keine der Zahlen x, y, z ist positiv;

    h) nur eine der Zahlen x, y, z ist positiv;

    i) boolsche Variable a hat den Wert True, boolsche Variable b hat den Wert False;

    j) * Ein Jahr mit der laufenden Nummer y ist ein Schaltjahr (ein Jahr ist ein Schaltjahr, wenn seine Zahl ein Vielfaches von 4 ist, aber von Vielfachen von 100 sind nur Vielfache von 400 Schaltjahre, z. B. 1700, 1800 und 1900 sind keine Schaltjahre, 2000 ist ein Schaltjahr).

  6. Zeichnen Sie auf der (x, y)-Ebene einen Bereich, in dem und nur in dem der angegebene Ausdruck wahr ist:

    a)* (y>=x) und (y+x>=0) und (y<=1);

    b) (Quadrat(x)+Quadrat(y)<1) or (y>0) und (abs(x)<=1);

    c) (trunc(y)=0 und (round(x)=0);

    d)* (abs(x)<=1)>(abs(y)>=1);

    e) (Quadrat(x)+Quadrat(y)<=4)=(y<=x).

  7. Es gibt einen Bedingungsoperator:
    wenn d<>10
    dann
    schreiben('Hurra!')
    anders
    writeln('schlecht...');

    Ist es möglich, es durch die folgenden Aussagen zu ersetzen:

  8. Was sind die Werte der Variablen j, k nach der Ausführung der bedingten Anweisung:
    wenn j>k
    dann
    j:=k-2
    anders
    dec(k,2);
    wenn die Anfangswerte der Variablen gleich sind:
    a) j=3, k=5;
    b) j=3, k=3;
    c) j=3, k=2.

Notiz . Durch die Anweisung dec (k,2) wird der Wert der Variablen k um 2 verringert.

Wählen Sie mit der Lehrkraft aus den folgenden Übungen eine Aufgabe zum eigenständigen Arbeiten aus.

1. Berechnen Sie die Werte des Ausdrucks:

a) Quadrat(x)+Quadrat(y)<=4 при x=0.3, y=-1.6;

b) k mod 7 = k div5-1 bei k = 15;

c) ungerade(trunc(10*p)) bei p=0,182;

d) nicht ungerade(n) für n=0;

e) t und (p mod 3=0) bei t=wahr, p=101010;

e) (x*y<>0) und (y>x) mit x=2, y=1;

g) (x*y<>0) oder (y>x) wenn x=2, y=1;

h) a oder (nicht b) mit a=Falsch, b=Wahr;

2. Schreiben Sie in Pascal eine Relation, die wahr ist, wenn die angegebene Bedingung erfüllt ist, und andernfalls falsch:

a) die ganze Zahl k ist durch 7 teilbar;

b) die Gleichung hat keine echten Wurzeln;

c) der Punkt (x, y) liegt außerhalb des Kreises mit dem Radius R, dessen Mittelpunkt der Punkt (1,0) ist;

d) die natürliche Zahl N das Quadrat der natürlichen Zahl ist;

e) x=max(x,y,z);

g) (verwenden Sie nicht die Not-Operation)

h) mindestens eine der logischen Variablen a und b ist wahr;

i) beide logischen Variablen a und b sind wahr.

3. Geben Sie die Reihenfolge an, in der Operationen beim Auswerten von Ausdrücken ausgeführt werden:

a) a und b oder nicht c und d;

b) (x>=0) oder nicht c und d.

4. Berechnen Sie die folgenden Ausdrücke mit a=Wahr, b=Falsch:

a) a oder b und nicht a;

b) (a oder b) und nicht a;

c) nicht a und b;

d) nicht (a und b)

5. Schreiben Sie einen Ausdruck in Pascal, der wahr ist, wenn die angegebene Bedingung erfüllt ist, und andernfalls falsch:

a) x gehört zum Segment;

b) x liegt außerhalb des Segments;

c) * x gehört zum Segment oder [-1, 1];

d) * x liegt außerhalb der Segmente und [-1, 1];

e) jede der Zahlen x, y, z ist positiv;

g) keine der Zahlen x, y, z ist positiv;

h) nur eine der Zahlen x, y, z ist positiv;

i) boolsche Variable a hat den Wert True, boolsche Variable b hat den Wert False;

j) * ein Jahr mit einer laufenden Nummer y ist ein Schaltjahr (ein Jahr ist ein Schaltjahr, wenn seine Zahl ein Vielfaches von 4 ist, aber von Vielfachen von 100 sind nur Vielfache von 400 Schaltjahre, z. B. 1700, 1800 und 1900 sind keine Schaltjahre, 2000 ist ein Schaltjahr).

6. Zeichnen Sie auf der Ebene (x, y) den Bereich, in dem und nur in dem der angegebene Ausdruck gilt:

a)* (y>=x) und (y+x>=0) und (y<=1);

b) (Quadrat(x)+Quadrat(y)<1) or (y>0) und (abs(x)<=1);

c) (trunc(y)=0 und (round(x)=0);

d)* (abs(x)<=1)>(abs(y)>=1);

e) (Quadrat(x)+Quadrat(y)<=4)=(y<=x).

7) Es gibt einen Bedingungsoperator:

schreiben('Hurra!')

writeln('schlecht...')

Ist es möglich, es durch die folgenden Aussagen zu ersetzen:

a) wenn d=10 b) wenn nicht (d=10)

writeln ('Hurra!') writeln ('Hurra!')

writeln('schlecht...'); writeln('schlecht...');

c) wenn nicht (d=10) d) wenn nicht (d<>10)

writeln ('schlecht...') writeln ('schlecht...')

writeln('Hurra!'); writeln('Hurra!');

8) Was sind die Werte der Variablen j, k nach der Ausführung der bedingten Anweisung:

wenn die Anfangswerte der Variablen gleich sind:

Notiz. Durch die Anweisung dec (k,2) wird der Wert der Variablen k um 2 verringert.

. X gehört zum Segment ;
x liegt außerhalb des Segments ;
x gehört zum Segment oder [-1,1];
x liegt außerhalb des Segments oder [-1,1].
3.
Erklären Sie die Struktur und die Regeln für die Ausführung von bedingten Anweisungen.
4.
Schreiben Sie die angegebene Aktion als einzelne bedingte Anweisung:
cos
2
x, bei 0x beim =
1-Sünde
2
x, ansonsten.
5.
z
int z=0, x=1, y=

1;

80 Programmierung linearer Algorithmen im System C++Builder
falls (x>0) falls (y>0) z=1; sonst z=2;
6.
Welchen Wert wird die Variable haben z nach Ausführung der Anweisungen:
int z=0, x=

1,y=1;
if (x) ( if (y>0) z=1;) sonst z=2;
7.
Welchen Wert wird die Variable haben z nach Ausführung der Anweisungen:
int z=0, x=0, y=1;
if (x) ( if (y>0) z=1;) sonst z=2;
8.
Welchen Wert wird die Variable haben z nach Ausführung der Anweisungen:
int z=0, x=3, y=1;
wenn (x) ( wenn (y) z=1;) sonst z=2;
9.
Geben Sie Fehler in den folgenden Anweisungen an:
wenn (1
sonstx=0; y+= 1;
10.
int z=0, x=0, y=1;
wenn (!x) ( wenn (!(y

1)) z=1;) sonst z=2;
11.
Welchen Wert hat die Variable z nach Ausführung der Anweisungen:
int z=0, x=1, y=1;
wenn (!x) ( wenn (!(y

1)) z=1;) sonst z=2;
12.
Fehler im Programmfragment finden:
(int n,x; switch (k) case + : x:=x-4 break; case

-

,

*

,x=5;
}
Welche Regeln werden verletzt und wie können Fehler korrigiert werden?


81
3.4
Einzelaufgaben zu Abschnitt 3
Jeder Schüler muss zwei Probleme der ersten und zweiten Komplexitätsstufe lösen.
Aufgaben der ersten Komplexitätsstufe.
1.
Sie erhalten eine vierstellige positive Ganzzahl. Schreiben Sie ein Programm, das druckt wahr oder FALSCH abhängig davon, ob die angegebene Bedingung erfüllt ist oder nicht: Die Summe der 1. und 4. Ziffer ist gleich dem Produkt der 2. und 3. Ziffer.
2.
Gegeben sind reelle Zahlen x, y. Wenn x und y negativ sind, ersetzen Sie jeden Wert durch seinen Modul; wenn nur einer davon negativ ist, erhöhen Sie beide Werte um 5,5; in anderen Fällen sollten beide Werte um das 10-fache reduziert werden.
3.
Gegeben sind reelle Zahlen x, y. Wenn x und y positiv sind, verringern Sie jeden Wert um den Faktor 5; wenn beide Werte im Bereich [-3, 9] liegen, dann sollten beide Werte durch 0 ersetzt werden; andernfalls erhöhen sich x und y um 3.
4.
Gegeben sind reelle Zahlen x, y (xy). Ersetzen Sie die kleinere dieser beiden Zahlen durch ihre halbe Summe und die größere durch ihr doppeltes Produkt.
5.
Ist die Summe dreier paarweise verschiedener reeller Zahlen x, y, z kleiner als 1, so wird die kleinste dieser drei Zahlen durch die Halbsumme der beiden anderen ersetzt; Ersetzen Sie andernfalls den kleineren Wert von x und y durch die Hälfte der Summe der beiden verbleibenden Werte.
6.
Gegeben sind reelle Zahlen a, b, c, d. Wenn ein b>c>d, dann lassen Sie die Zahlen unverändert; Ersetzen Sie andernfalls alle Zahlen durch ihre Quadrate.
7.
Bestimmen Sie, ob eine sechsstellige Ganzzahl Glück bringt. (Eine Zahl wird als Glückszahl bezeichnet, wenn die Summe ihrer ersten drei Ziffern gleich der Summe ihrer letzten drei Ziffern ist.)
8.
wahr oder FALSCH je nachdem, ob die angegebene Bedingung erfüllt ist oder nicht: für beliebige reelle Zahlen a, b, c bestimmen, ob die Gleichung ax
2
+bx+c=0 mindestens eine reelle Lösung.

82 Programmierung linearer Algorithmen im System C++Builder
9.
Um das folgende Problem zu lösen, schreiben Sie ein Programm, das druckt wahr oder FALSCH abhängig davon, ob die angegebene Bedingung erfüllt ist oder nicht: zu bestimmen, ob die Summe der ersten beiden Ziffern einer gegebenen vierstelligen Zahl gleich der Summe ihrer beiden letzten Zahlen ist.
10.
Einige Schulen haben die folgenden Zulassungsrichtlinien. Die Bewerber legen zwei Prüfungen ab, die entsprechend benotet werden
Jeweils 100 Punkte. Wenn der Bewerber mindestens 150 Punkte erzielt, berechtigt dies zum Eintritt in die Tagesabteilung von 100 bis 149 - in die Abendabteilung; unter 100 Punkten bedeutet Verweigerung der Zulassung zum Studium. Schreiben Sie ein Programm, das den Bewerber je nach erreichter Punktzahl über sein Recht auf Immatrikulation informiert.
11.
Schreiben Sie ein Programm mit dem Auswahloperator , mit dem Sie eine verbale Beschreibung der Markierungen erhalten. (1 - "schlecht", 2 -
"ungenügend", 3 - "befriedigend", 4 - "gut", 5 -
"Toll".)
12.
Um das folgende Problem zu lösen, schreiben Sie ein Programm, das druckt wahr oder FALSCH abhängig davon, ob die angegebene Bedingung erfüllt ist oder nicht: um festzustellen, ob die Ziffern einer gegebenen dreistelligen Zahl gleich sind.
13.
Schreiben Sie ein Programm, das druckt wahr wenn Datum d1, m1 dem Datum (innerhalb eines Jahres) vorausgeht d2, m2 und Bedeutung FALSCH sonst.
14.
Schreiben Sie ein Programm mit einer select-Anweisung, die den vollständigen Namen mit dem ersten Buchstaben des Namens anzeigt.
(Iwan, Peter, Nikolai, Wladimir, Georg).
15.
Schreiben Sie mit dem Auswahloperator ein Programm, das bei gegebener Eingabeziffer 0≤ k≤ 5 druckt den Namen dieser Figur in Russisch und Englisch.
16.
Gegeben sei eine ganze Zahl k (1

k

365). Bestimmen Sie, ob der k-te Tag des Jahres ein Wochenende oder ein Werktag ist, wenn der 1. Januar ein Montag ist.
17.
Gegeben eine reelle Zahl x. Berechnung f, Wenn:











Sünde
,
1 0
,
0 5
2 11 2
Fälle
der Rest
in
x
x
x
beim
x
x
x
beim
f

Programmieren mit eindimensionalen Arrays
83 18.
Gegeben eine reelle Zahl x. Schreiben Sie ein Rechenprogramm f:












34 5
,
12 3
lg ln
,
3 5
1 3
2 4
Fälle
der Rest
in
x
x
x
beim
x
x
x
beim
f
19.
Schreiben Sie ein Programm mit einem Select-Operator, der den Namen der Stadt mit dem ersten Buchstaben des Stadtnamens vollständig anzeigt (Kursk, Moskau, Tula, Nowgorod, Woronesch).
20.
Schreiben Sie ein Programm mit einer select-Anweisung, die den vollständigen Namen mit dem ersten Buchstaben des Nachnamens anzeigt (Ivanov, Petrov, Sidorov, Myshkin, Shishkin).
21.
Gegeben sind die Koordinaten des Mittelpunktes und der Radius des Kreises. Bestimmen Sie, ob ein bestimmter Punkt mit den Koordinaten (x,y) zum Kreis gehört.
22.
Schreiben Sie ein Programm mit einer select-Anweisung, das den vollständigen Namen des Tieres (Hund, Katze, Giraffe, Pferd, Affe) ausgibt, wenn der Anfangsbuchstabe des Tiernamens gegeben wird.
23.
Gegeben sind drei verschiedene Zahlen ABC. Sortieren Sie diese Nummern in aufsteigender Reihenfolge, so dass a entsprach der kleinsten Zahl, b- Durchschnittszahl, c- das größte.
24.
Schreiben Sie ein Programm mit einer select-Anweisung, die als Zahl (von 1 bis 7) den Namen des Wochentags anzeigt.
25.
Schreiben Sie ein Programm, das eine select-Anweisung verwendet, die den Namen des Monats des Jahres als Zahl (von 1 bis 12) anzeigt.
26.
Schreiben Sie ein Programm, das eine select-Anweisung verwendet, die, wenn der Anfangsbuchstabe des Namens der Jahreszeit gegeben ist, den vollständigen Namen der Jahreszeit ausgibt.
27.
Sie erhalten eine fünfstellige positive Ganzzahl. Schreiben Sie ein Programm, das druckt wahr oder FALSCH abhängig davon, ob die angegebene Bedingung erfüllt ist oder nicht: Die Summe der 1., 3. und 5. Ziffer ist größer als das Produkt der 2. und 4. Ziffer.
28.
Sie erhalten eine vierstellige positive Ganzzahl. Schreiben Sie ein Programm, das druckt wahr oder FALSCH je nachdem ob

84 Programmierung linearer Algorithmen im System C++Builder ob die angegebene Bedingung erfüllt ist oder nicht: arithmetisches Mittel 1 und
4 Ziffern sind mehr als die Summe aus 2 und 3 Ziffern.
29.
Gegeben sei eine Ziffer und eine dreistellige Zahl in Dezimalschreibweise. Wenn die Ziffer mit der höchsten Ziffer der Zahl übereinstimmt, berechnen Sie die Summe der Ziffern der Zahl. Wenn die Ziffer mit der mittleren Ziffer der Zahl übereinstimmt, berechnen Sie das Produkt der Ziffern der Zahl. Wenn die Ziffer mit der niederwertigsten Ziffer der Zahl übereinstimmt, berechnen Sie das arithmetische Mittel der Ziffern der Zahl. Wenn keine der Bedingungen erfüllt ist, berechnen Sie das geometrische Mittel der Ziffern der Zahl.
30.
Gegeben sei eine Ziffer und eine dreistellige Zahl in Dezimalschreibweise. Wenn die Ziffer mit der höchsten Ziffer der Zahl übereinstimmt, berechnen Sie das arithmetische Mittel der Ziffern der Zahl. Wenn die Ziffer mit der mittleren Ziffer der Zahl übereinstimmt, berechnen Sie das geometrische Mittel der Ziffern der Zahl. Wenn die Ziffer mit der niederwertigsten Ziffer der Zahl übereinstimmt, berechnen Sie die Summe der Ziffern der Zahl. Wenn keine der Bedingungen erfüllt ist, berechnen Sie das Produkt der Ziffern der Zahl
Aufgaben der zweiten Komplexitätsstufe.
1.
Gegeben sei eine zweistellige positive ganze Zahl im ternären Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Russisch anzeigt, wenn die höchste Ziffer der Zahl größer als die jüngste ist, andernfalls
- auf Englisch.
2.
Gegeben sei eine zweistellige positive ganze Zahl im fünfstelligen Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Englisch anzeigt, wenn die höchste Ziffer der Zahl größer als die niedrigste ist, andernfalls
- auf Russisch.
3.
Gegeben sei eine zweistellige positive ganze Zahl im fünfstelligen Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Englisch ausgibt, wenn die höchste Ziffer der Zahl genau das Doppelte der niedrigsten Ziffer ist, andernfalls
- auf Russisch.
4.
Gegeben sei eine zweistellige positive ganze Zahl im ternären Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Russisch anzeigt, wenn die höchste Ziffer der Zahl kleiner als die niedrigste ist, andernfalls
- auf Englisch.

Programmieren mit eindimensionalen Arrays
85 5.
Gegeben sei eine zweistellige positive ganze Zahl im fünfstelligen Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Russisch anzeigt.
6.
Gegeben sei eine zweistellige positive ganze Zahl im Oktalsystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Russisch anzeigt.
7.
Gegeben sei eine zweistellige positive ganze Zahl im Oktalsystem. Schreiben Sie ein Programm, das anzeigt, wenn die höchste Ziffer weniger als die Hälfte der niedrigsten Ziffer ist, die Namen der Ziffern der Zahl in Englisch, andernfalls

auf Russisch.
8.
Gegeben sei eine zweistellige positive ganze Zahl im Septimalzahlensystem. Schreiben Sie ein Programm, das, wenn die Ziffern in absteigender Reihenfolge sind, die Namen der Ziffern der Zahl auf Englisch anzeigt, andernfalls

auf Russisch.
9.
Sie erhalten zwei Ziffern im dezimalen Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern der Summe dieser Ziffern auf Englisch anzeigt.
10.
Sie erhalten zwei Ziffern im dezimalen Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern des Produkts dieser Ziffern auf Russisch anzeigt.
11.
Sie erhalten zwei Ziffern im dezimalen Zahlensystem. Schreiben Sie ein Programm, das den Namen der Ziffer des Moduls der Differenz dieser Ziffern auf Russisch anzeigt.
12.
Sie erhalten zwei Ziffern im dezimalen Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern des Quotienten und des Rests der ganzzahligen Division dieser Zahlen auf Englisch anzeigt.
13.
Gegeben ist eine zweistellige positive ganze Zahl im Dezimalsystem. Schreiben Sie ein Programm, das anzeigt, wenn die höchste Ziffer dreimal die niedrigste Ziffer ist, die Namen der Ziffern der Zahl in Englisch, andernfalls

auf Russisch.
14.
Gegeben ist eine zweistellige positive ganze Zahl im Dezimalsystem. Schreiben Sie ein Programm, das den Namen der Ziffer einer Zahl mit einem größeren Wert auf Englisch und den Namen der Ziffer einer Zahl mit einem kleineren Wert ausgibt.

auf Russisch.

86 Programmierung linearer Algorithmen im System C++Builder
15.
Gegeben sei eine zweistellige positive ganze Zahl im Septimalzahlensystem. Schreiben Sie ein Programm, das den Namen der Ziffer einer Zahl mit einem größeren Wert auf Englisch und den Namen der Ziffer einer Zahl mit einem kleineren Wert ausgibt.

auf Russisch.
16.
Gegeben sei eine zweistellige positive Ganzzahl im Hexadezimalsystem. Schreiben Sie ein Programm, das die Namen der Ziffern einer Zahl auf Englisch anzeigt.
17.
Gegeben seien zwei ganzzahlige zweistellige positive Zahlen im ternären Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern der Summe dieser Zahlen auf Russisch anzeigt.
18.
Gegeben sind zwei zweistellige positive ganze Zahlen im binären Zahlensystem. Schreiben Sie ein Programm, das die Namen der Ziffern der Summe dieser Zahlen auf Englisch anzeigt.
19.
Gegeben sei eine zweistellige positive ganze Zahl im fünfstelligen Zahlensystem. Schreiben Sie ein Programm, das, wenn die Ziffern in aufsteigender Reihenfolge sind, die Namen der Ziffern der Zahl auf Englisch anzeigt, andernfalls

auf Russisch.
20.
Gegeben sei eine zweistellige positive Ganzzahl im Hexadezimalsystem. Schreiben Sie ein Programm, das anzeigt, wenn die höchste Ziffer fünfmal die niedrigste Ziffer ist, die Namen der Ziffern der Zahl auf Russisch, andernfalls

auf Englisch.
21.
Im oktalen Zahlensystem werden zwei Ziffern angegeben. Schreiben Sie ein Programm, das die Namen der Ziffern des Moduls der Differenz dieser Ziffern auf Russisch anzeigt.
22.
Im oktalen Zahlensystem werden zwei Ziffern angegeben. Schreiben Sie ein Programm, das die Namen der Ziffern der Summe dieser beiden Ziffern auf Russisch anzeigt.
23.
Gegeben sei eine zweistellige positive ganze Zahl im Septimalzahlensystem. Schreiben Sie ein Programm, das anzeigt, wenn die höchste Ziffer dreimal die niedrigste ist, die Namen der Ziffern der Zahl auf Russisch, andernfalls

auf Englisch.
24.
Gegeben sei eine zweistellige positive ganze Zahl im Oktalsystem. Schreiben Sie ein Programm, das den Namen der Ziffer einer Zahl anzeigt, die einen größeren Wert auf Russisch und in hat

Programmieren mit eindimensionalen Arrays
87 der Rang der Ziffer der Zahl mit dem niedrigsten Wert,

auf Englisch.
25.
Gegeben sei eine zweistellige positive ganze Zahl im Septimalzahlensystem. Schreiben Sie ein Programm, das den Namen der Ziffern einer Zahl mit einem Wert kleiner als 4 auf Russisch und den Namen der Ziffern einer Zahl mit einem Wert größer oder gleich 4 anzeigt.

auf Englisch.
26.
Gegeben sei eine zweistellige positive Ganzzahl im Hexadezimalsystem. Schreiben Sie ein Programm, das den Namen der Ziffern einer Zahl mit einem Wert kleiner als 3 auf Russisch und den Namen der Ziffern einer Zahl mit einem Wert größer oder gleich 3 anzeigt.

auf Englisch.
27.
Gegeben sind die ersten beiden Buchstaben (Groß- und Kleinschreibung) des Namens des Monats des Jahres. Schreiben Sie ein Programm, das den vollständigen Namen des Monats des Jahres auf Russisch anzeigt.
28.
Gegeben sind die ersten beiden Buchstaben (Groß- und Kleinschreibung werden nicht beachtet) des Namens des Wochentags. Schreiben Sie ein Programm, das den vollständigen Namen des Wochentags auf Russisch anzeigt.
29.
Im alten japanischen Kalender wurde ein 60-Jahres-Zyklus angenommen, der aus fünf 12-Jahres-Unterzyklen bestand. Unterzyklen wurden mit Farbnamen bezeichnet: grün, rot, gelb, weiß und schwarz. Innerhalb jedes Unterzyklus wurden die Jahre nach Tieren benannt: Ratten, Kühe, Tiger, Hasen, Drachen, Schlangen, Pferde, Schafe, Affen, Hühner, Hunde und Schweine (1984 – das Jahr der grünen Ratte – war der Beginn von der nächste Zyklus). Schreiben Sie ein Programm, das die Zahl eines bestimmten Jahres unserer Ära einträgt und seinen Namen nach dem alten japanischen Kalender druckt.
30.
Gegeben ist eine zweistellige positive ganze Zahl im Dezimalsystem. Schreiben Sie ein Programm, das den Namen der Ziffern einer Zahl mit einem Wert größer als 5 auf Russisch und den Namen der Ziffern einer Zahl mit einem Wert kleiner oder gleich 5 anzeigt.

auf Englisch.

88 Programmierung linearer Algorithmen im System C++Builder
4 PROGRAMMIERUNG DES ZYKLUS
ALGORITHMEN IM C++BUILDER-SYSTEM
In diesem Abschnitt wird das Studium der Sprachschleifenoperatoren durchgeführt.
C++, Erwerb von Fähigkeiten in der Programmierung zyklischer Algorithmen, Einführung
Ja, Programme kompilieren und debuggen.
4.1
Grundlegendes Konzept
Auf der Zunge C++Builder Es gibt drei Schleifenanweisungen:
1.
Schleife mit Vorbedingung ( während);
2.
Schleife mit Nachbedingung ( tun);
3.
Schleife mit Zähler ( zum).
Schleifenanweisung mit Vorbedingung während (Abbildung 4.1):
während(Zustand) (Schleifenkörper)
Abbildung 4.1

Schema des Schleifenoperatoralgorithmus während
Ist das Ergebnis der Zustandsauswertung wahr(true), dann wird der Schleifenkörper ausgeführt und der Übergang zur Bedingungsprüfung wird erneut durchgeführt. Ist das Ergebnis der Zustandsauswertung FALSCH(false), dann wird die Schleife beendet und zu der Anweisung nach der zyklischen Anweisung gesprungen während.
Wenn vor der ersten Ausführung der Schleife der Wert des Ausdrucks war FALSCH, wird der Schleifenkörper überhaupt nicht ausgeführt und es erfolgt der Übergang zur nächsten Anweisung.
Zustand
Loop-Körper
Ja
Nein

Programmieren mit eindimensionalen Arrays
89
Beispiel:
Berechnen Sie die Summe ungerader Zahlen zwischen 1 und 10.
( int k=1, s=0; während (k ( s+=k; k+=2;
}
}
Schleifenanweisung mit Nachbedingung tun (Abbildung 4.2):
tun(Schleifenkörper) während(Zustand); ja nein Bedingung
Loop-Körper
Abbildung 4.2

Schema des Schleifenoperatoralgorithmus tun ... während
Die Bedingung ist ein Ausdruck eines booleschen Typs, der Schleifenkörper ist eine einfache oder zusammengesetzte Anweisung.
Schleifenkörper der Anweisung

Variablen eines booleschen Typs werden durch einen Bezeichner beschrieben Boolesch . Sie können nur zwei Werte annehmen - FALSCH (FALSCH) und Wahr (wahr). Sie werden auch im Abschnitt Variablendeklaration beschrieben. Var<имя>: Boolesch;

Boolesche Ausdrücke können enthalten:

n boolesche Werte,

n Beziehungsoperationen (<- меньше, >- mehr,<=- меньше или равно, >=- größer oder gleich,<>- ungleich, = - gleich).

n logische Operationen And, Or, Not

n diff. Aktionen und Funktionen


Turbo Pascal verfügt über logische Operationen, die auf Variablen eines booleschen Typs angewendet werden können. Dies sind keine and-, or- und xor-Operationen.

Betrieb nicht(not) hat einen Operanden und bildet seine logische Negation. Das Ergebnis der Not-Operation ist False, wenn der Operand wahr ist, und True, wenn der Operand falsch ist. Also nicht wahr falsch (unwahr ist eine Lüge), nicht falsch wahr (nicht falsch ist wahr).

Operationsergebnis und(i) ist nur dann wahr, wenn beide seiner Operanden wahr sind, und in allen anderen Fällen falsch (boolesche Multiplikation).

Operationsergebnis oder(or) ist wahr, wenn einer seiner Operanden wahr ist, und falsch nur, wenn beide Operanden falsch sind (logische Addition).

Logische, relationale und arithmetische Operationen treten oft im selben Ausdruck auf. In diesem Fall müssen die Beziehungen links und rechts vom Vorzeichen der logischen Operation in Klammern gesetzt werden, da logische Operationen haben Höhere Priorität. Im Allgemeinen wird die folgende Priorität der Operationen angenommen:

2. und, *, /, div, mod

3. oder, +, -

4. Beziehungsoperationen (<- меньше, >- mehr,<=- меньше или равно, >=- größer oder gleich,<>- ungleich, = - gleich).

Außerdem kann die Reihenfolge der Operationen durch Klammern geändert werden. In einem logischen Ausdruck ordnen wir beispielsweise die Reihenfolge der Aktionen an:

AorBandnot(AorB)


Der eingeklammerte or-Operator wird zuerst ausgeführt, gefolgt von den not-, and- oder or-Operatoren. Wenn wir die Werte True und False anstelle der Variablen A und B ersetzen, erhalten wir mit dem bereits betrachteten Verfahren den Wert des gesamten Ausdrucks gleich True.

Übung 5: . Schreiben Sie in ein Notizbuch und berechnen Sie die Werte von Ausdrücken

mit a=10, b=20, c=wahr, d=falsch: a)(a>5) und (b>5) und (a<20) and (b<30);

b) kein<15) or not (b<30);

c) c oder d und (b=20).

Beachtung ! In Pascal gibt es keine Möglichkeit, boolesche Daten mit der read-Anweisung einzugeben. Die Ausgabe der Werte von Variablen eines booleschen Typs erfolgt jedoch über den Write-Operator. zum Beispiel, nach Ausführung des Schreiboperators (5>2) wird True auf dem Bildschirm angezeigt.

Home Fragen und Aufgaben:

1. Wie wird eine boolesche Variable beschrieben und welche Werte kann sie annehmen?

2. Was in logischen Ausdrücken enthalten sein kann. Geben Sie Beispiele für einfache logische Ausdrücke.

3. Erzählen Sie uns von logischen Operationen in Pascal. Nennen Sie Beispiele für zusammengesetzte logische Ausdrücke.

4. Welche Priorität haben verschiedene Operationen in Pascal? Gib ein Beispiel.


Aufgaben:

№19.

A. die ganze Zahl k durch 7 teilbar ist;

C. Mindestens eine der ganzen Zahlen x, y ist gerade;

B. x=max(x, y, z), d. h. x ist die größte der drei Zahlen x, y, z;

D. (nicht verwenden nicht betrieb)

E. mindestens eine der logischen Variablen a und b ist wahr;

G. Die booleschen Variablen a und b sind beide wahr.

№20. Geben Sie die Reihenfolge an, in der Operationen beim Auswerten von Ausdrücken ausgeführt werden:

a) a und b oder nicht c und d; b) (x>=0) oder nicht c und d.

№21. Werten Sie die folgenden Ausdrücke mit a=True, b=False aus:

a) a oder b und nicht a; b)(a oder b) und nicht a; in) nicht a und b; G) nicht (a und b)

№22. Machen Sie ein Programm: Bei den Aufnahmeprüfungen hat der Bewerber Physik, Informatik, Komposition bestanden. Der Bewerber nimmt teil, wenn er in Informatik eine 5 erhält und in drei Klausuren mindestens 13 Punkte erreicht hat.

§ 8. Lösen von Aufgaben zum Thema „Lineare Programme. Boolesche Größen."

Ex. 7 . Berechnen Sie die Werte des Ausdrucks:

a) Quadrat(x)+Quadrat(y)<=4 при x=0.3, y=-1.6;

b) k mod 7 = k div5-1 bei k = 15;

c) ungerade(trunc(10*p)) bei p=0,182;

d) nicht ungerade(n) für n=0;

e) t und (p mod 3=0) bei t=wahr, p=101010;

e) (x*y<>0) und (y>x) mit x=2, y=1;

g) (x*y<>0) oder (y>x) wenn x=2, y=1;

h) a oder (nicht b) mit a=Falsch, b=Wahr;

Ex. acht. Schreiben Sie einen Ausdruck in Pascal, der wahr ist, wenn die angegebene Bedingung erfüllt ist, und andernfalls falsch:

a) x gehört zum Segment;

b) x liegt außerhalb des Segments;

c) * x gehört zum Segment oder [-1, 1];

d) * x liegt außerhalb der Segmente und [-1, 1];

e) jede der Zahlen x, y, z ist positiv;

g) keine der Zahlen x, y, z ist positiv;

h) nur eine der Zahlen x, y, z ist positiv;

i) boolsche Variable a hat den Wert True, boolsche Variable b hat den Wert False;


j) * ein Jahr mit einer laufenden Nummer y ist ein Schaltjahr (ein Jahr ist ein Schaltjahr, wenn seine Zahl ein Vielfaches von 4 ist, aber von Vielfachen von 100 sind nur Vielfache von 400 Schaltjahre, z. B. 1700, 1800 und 1900 sind keine Schaltjahre, 2000 ist ein Schaltjahr).

Ex. neun . Zeichnen Sie auf der (x, y)-Ebene einen Bereich, in dem und nur in dem der angegebene Ausdruck wahr ist:

a)* (y>=x) und (y+x>=0) und (y<=1);

b) (Quadrat(x)+Quadrat(y)<1) or (y>0) und (abs(x)<=1);

c) (trunc(y)=0 und (round(x)=0);

d)* (abs(x)<=1)>(abs(y)>=1);

e) (Quadrat(x)+Quadrat(y)<=4)=(y<=x).

Ex. zehn ..Das Buch kostet X Rubel. Der Käufer hat Banknoten im Wert von 50, 10, 5, 1 Rubel. Wie viele und welche Banknoten sollte ich mitnehmen, um das Buch mit der Mindestanzahl an Banknoten zu bezahlen?