Beruflich Dokumente
Kultur Dokumente
Mumuki Übungen
Mumuki Übungen
Kapitel 1: Grundlagen.
1. erste Programme.
1. Wir schreiben eine Zeile, in der Programm steht, gefolgt von einer öffnenden
Klammer: {
2. Hier sind die Befehle: einer pro Zeile
3. Und schließlich eine letzte Taste, die die zuvor geöffnete Taste schließt }
Antwort:
Programm {
Bewegung(Nord)
Bewegung(Nord)
Bewegung(Nord)
}
Übung 6: Überall.
Antwort:
Programm {
Bewegung(Süd)
Bewegung(Ost)
Bewegung(Ost)
}
Als Menschen neigen wir dazu, in Bezug auf das Endergebnis zu denken, d. h. wir betonen
dasZiel des Programms. Wir interessieren uns mehr dafür, was es bewirkt, nicht wie. Auf
diese Weise würde man sagen, dass sieden Kopf einfachnach Nordosten bewegt.
Aus diesem Grund gibt es mehrere Möglichkeiten, ein und dasselbe Problem zu lösen: Wir
können mehrere Programme erstellen, die dasselbe tun (dasWas), es aber unterschiedlich
tun (dasWie).
Antwort:
Programm {
Bewegung(Ost)
Bewegung(Nord)
}
Sie wollen zwarnie, dass Ihr Programm kaputt geht, aber es wird Ihnen bestimmtoft
passieren. Aber das ist kein Grund, frustriert zu sein. Wir versichern Ihnen, dass das jedem
schon einmal passiert ist (na ja, 2, 3, 100, 800 Mal...).
Antwort:
Programm{
Bewegung(Süd)
}
Der Kopf kann sich nicht nur bewegen, sondern auch Pellets in deraktuellen Zelle
platzieren. Zu diesem Zweck gibt es die Operation Put, die den Kopf anweist, eine Perle in
der angegebenen Farbe abzulegen:
Antwort:
Programm{
Put(Rot)
}
Antwort:
Programm {
Put(Rot)
Put(Rot)
Setzen(Blau)
Put(Grün)
Put(Rot)
}
Wie du vielleicht bemerkt hast, sind diese Bretter ein bisschen magisch, wir können so viele
Kugeln in ein Feld legen, wie wir wollen: 2, 4, 12, 50, 1000. Es gibt keine Grenzen!
Das ist eine sehr interessante Sache, die beim Programmieren passiert: Wir können mit so
großen Mengen arbeiten, wie wir wollen.
Antwort:
Programm{
Put(Rot)
Put(Rot)
Put(Rot)
Put(Rot)
Put(Schwarz)
Put(Schwarz)
Put(Schwarz)
}
Genauso wie es einen"Put Ball" gibt, gibt es einen"Take Ball", der genau eine Kugel der
gegebenen Farbe entfernt.
Antwort:
Programm {
Bewegung(Süd)
Entfernen(Rot)
}
Antwort:
Programm{
Entfernen(Grün)
}
Antwort:
Programm{
Sacar(Blau)
Entfernen(Grün)
Entfernen(Schwarz)
Entfernen(Rot)
}
2. Practice First-Programme.
Übung 1: Aufwärmen.
Das folgende Programm platziert eine rote Kugel in der Ausgangsposition und eine
schwarze Kugel im Osten.
Antwort:
Programm {
Put(Rot)
Bewegung(Ost)
Put(Schwarz)
}
Erstelle ein Programm, das zwei Kugeln in die Startposition und zwei Kugeln in das östlich
daneben liegende Feld legt. Alle Bälle müssen rot sein.
Antwort:
Programm{
Put(Rot)
Put(Rot)
Bewegung(Ost)
Put(Rot)
Put(Rot)
}
Erstellen Sie ein Programm, das, ausgehend von einem leeren Brett mit dem Kopf im
Ursprung, eine Linie von vier Zellen nach Osten zieht. Die Kügelchen müssen rot sein und
Sie müssen ein Kügelchen pro Zelle einsetzen.
Antwort:
Programm{
Put(Rot)
Bewegung(Ost)
Put(Rot)
Bewegung(Ost)
Put(Rot)
Bewegung(Ost)
Put(Rot)
}
Erstellen Sie mit den Ihnen bereits bekannten Werkzeugen ein Programm, das eine blaue
Treppe wie auf dem Bild zeichnet. Der Kopf beginnt am Ursprung (d.h. am südwestlichen
Rand) und sollte sich am unteren rechten Ende der Treppe befinden.
Antwort:
Programm{
Setzen(Blau)
Bewegung(Nord)
Setzen(Blau)
Bewegung(Nord)
Setzen(Blau)
Bewegung(Süd)
Bewegung(Ost)
Setzen(Blau)
Bewegung(Süd)
Setzen(Blau)
Bewegung(Ost)
Setzen(Blau)
}
Übung 5: Portugal.
Da wir nicht zu wählerisch sein wollen, bitten wir Sie um eine vereinfachte Version der
Flagge Portugals.
Antwort:
Programm{
Put(Grün)
Bewegung(Nord)
Put(Grün)
Bewegung(Ost)
Put(Rot)
Bewegung(Süd)
Put(Rot)
Bewegung(Ost)
Put(Rot)
Bewegung(Nord)
Put(Rot)
}
Antwort:
Programm{
Setzen(Blau)
Bewegung(Ost)
Setzen(Blau)
Bewegung(Ost)
Setzen(Blau)
Bewegung(Ost)
Setzen(Blau)
Bewegung(Ost)
Setzen(Blau)
Bewegung(Nord)
Bewegung(Nord)
Setzen(Blau)
Bewegung(West)
Setzen(Blau)
Bewegung(West)
Setzen(Blau)
Bewegung(Süd)
Put(Rot)
Bewegung(Nord)
Bewegung(West)
Setzen(Blau)
Bewegung(West)
Setzen(Blau)
Bewegung(Süd)
Bewegung(Süd)
}
Erstellen Sie mit dem Kopf an der Quelle ein Programm, das sich um das"Beschneiden" der
Bildtafel kümmert: Entfernen Sie alle grünen Kugeln. Am Ende sollte die Spindel dort
enden, wo sie begonnen hat.
Antwort:
Programm{
Entfernen(Grün)
Bewegung(Ost)
Entfernen(Grün)
Bewegung(Ost)
Entfernen(Grün)
Bewegung(Nord)
Entfernen(Grün)
Bewegung(Nord)
Entfernen(Grün)
Bewegung(West)
Entfernen(Grün)
Bewegung(West)
Entfernen(Grün)
Bewegung(Süd)
Entfernen(Grün)
Bewegung(Süd)
}
Kommen wir nun zu etwas, das etwas schwieriger ist. Wir geben dir ein 2x2-Brett (d.h. mit
4 Zellen), auf dem jede Zelle eine kleine rote Kugel hat.
Deine Aufgabe ist es, ein Programm zu erstellen, das alle roten Kugeln durch grüne ersetzt.
Antwort:
Programm{
Entfernen(Rot)
Put(Grün)
Bewegung(Ost)
Entfernen(Rot)
Put(Grün)
Bewegung(Nord)
Entfernen(Rot)
Put(Grün)
Bewegung(West)
Entfernen(Rot)
Put(Grün)
Bewegung(Süd)
}
3. Verfahren.
Antwort:
Antwort:
Weiter
Antwort:
Weiter
Wie Sie am Beispiel des Quadrats gesehen haben, können Sie zwischen zwei Arten von
Befehlen innerhalb eines Programms unterscheiden:
diejenigen, diedurch die Sprache definiert sind und dazu dienen, grundlegende
Operationen auszudrücken, wie z. B. Move, Put und Take. Wir werden
dieseprimitiven Befehle oder einfachPrimitive nennen;
und solche, die wirselbst definieren und die wir für komplexere Aufgaben
verwenden. Wie der Name dieser Lektion schon sagt, handelt es sich dabei um
dieVerfahren.
Wenn wir eine Prozedurdefinieren, "lehren" wir den Computer, eine neue Aufgabe
auszuführen, die ursprünglich nicht in der Sprache enthalten war.
Achten Sie auf die Syntax des Beispiels, um zu sehen, wie wir eine Prozedur definieren
und wie wir sie in einem Programmaufrufen.
Antwort:
Vervollständigen Sie den Code so, dass er nicht nur die Prozedur PutBlackAndRed
definiert, sondern sie auch im Programm aufruft.
Antwort:
Programm{
SetBlackAndRed()
}
Wir wissen inzwischen, dass wir beim Programmieren immer die Syntax berücksichtigen
müssen und dass es für die Definition neuer Prozeduren auch Regeln gibt:
Und wenn wir es verwenden wollen, müssen wir es innerhalb des Programms aufrufen,
indem wir seinen Namen so eingeben, wie er ist, ohne die Klammern ( ) zu vergessen.
Achten Sie auf die Syntax!
Antwort:
procedure Put3Greens() {
Put(Grün)
Put(Grün)
Put(Grün)
}
Programm{
Set3Greens()
}
Erstellen Sie ein Programm, das dies tut, indem Sie die Prozedur Put3Greens aufrufen.
Denken Sie daran, dass wir sie bereits im AbschnittBibliothek für Sie definiert haben, so
dass Sie sie nicht noch einmal schreiben müssen!
Antwort:
Programm{
Set3Greens()
Bewegung(Ost)
Set3Greens()
}
Erstelle ein Programm, das 9 kleine rote Kugeln in die aktuelle Zelle legt, indem du die
Prozedur Put3Red so oft wie nötig aufrufst.
Antwort:
Programm{
Put3Red()
Put3Red()
Put3Red()
}
Ich habe die Prozedur Put9Red definiert, die unter Verwendung von Put3Red neun rote
Kugeln in eine Zelle legt. Nach der Definition rufen Sie die neue Prozedur in einem
Programm auf.
Antwort:
procedure Put9Red(){
Put3Red()
Put3Red()
Put3Red()
}
Programm{
Put9Red()
}
Übung 10: Zeichnen mit Phantasie.
Definieren Sie die DrawBlackTip-Prozedur und rufen Sie sie in einem Programm auf.
Der Kopf beginnt am Ursprung und sollte am unteren rechten Ende der Spitze enden.
Antwort:
procedure DrawBlackTip(){
Put(Schwarz)
}
Programm{
DrawBlackTip()
Bewegung(Nord)
DrawBlackTip()
Bewegung(Süd)
Bewegung(Ost)
DrawBlackTip()
}
Definieren Sie die Prozedur DrawTwoPoints und rufen Sie sie in einem Programm auf.
Denken Sie daran, DrawBlackTip zu verwenden.
Antwort:
procedure DrawTwoPoints() {
DrawBlackTip()
Bewegung(Nord)
Bewegung(Nord)
Bewegung(Ost)
DrawBlackTip()
}
Programm{
DrawTwoPoints()
}
Antwort:
procedure RojoAlBorde() {
GoToEdge(Nord)
GoToEdge(West)
Put(Rot)
}
Programm{
RojoAlBorde()
}
Antwort:
procedure PutWreath(){
Set3Greens()
Put3Red()
}
procedure DecorateBoard(){
GoToEdge(Nord)
GoToEdge(West)
PutWreath()
GoToEdge(Nord)
GoToEdge(Ost)
PutWreath()
}
Programm{
DecorateBoard()
}
Antwort:
procedure Farbe(){
Put(Rot)
Setzen(Grün)
Put(Schwarz)
Setzen(Blau)
}
procedure DrawColourLine(){
Farbe()
Bewegung(Ost)
Farbe()
Bewegung(Ost)
Farbe()
Bewegung(Ost)
Farbe()
GoToEdge(West)
}
Programm{
DrawColourLine()
}
Übung 15: Farbiges Quadrat.
Antwort:
procedure DrawColourSquare(){
DrawColourLine()
Bewegung(Nord)
DrawColourLine()
Bewegung(Nord)
DrawColourLine()
Bewegung(Nord)
DrawColourLine()
GoToEdge(Süd)
}
Programm{
DrawColourSquare()
}
4. Einfache Wiederholung.
Übung 1: MoveWest10.
Zum Aufwärmen: Ich habe eine Prozedur MoveWest10 definiert, die die Spindel 10 Mal
nach Westen bewegt.
Antwort:
procedure MoveWest10(){
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
Bewegung(West)
}
Wenn es notwendig ist, einen Befehl (z. B. Move, Set, DrawBlackLine usw.) eine
bestimmte Anzahl von Malen zu wiederholen, können wir die Repeat-Anweisung
verwenden, anstatt zu kopieren und einzufügen, wie wir es bis jetzt getan haben.
Antwort:
Ich habe eine MoveWest5-Prozedur definiert, die sich 5 Mal nach Westen bewegt.
Antwort:
procedure MoveWest5(){
Wiederholung(5){
Bewegung(West)
}
}
Ich habe die Prozedur Put3AtoNortheast() definiert, die 3 schwarze Kugeln in die erste
Zelle nordöstlich der Kopfzeile setzt.
Antwort:
procedure Put3Anortheast(){
Bewegung(Nord)
Bewegung(Ost)
Wiederholung(3){
Put(Schwarz)
}
}
Ich habe die Prozedur PutBlueFar() definiert, die eine blaue Kugel 4 Zellen weiter östlich
platziert.
Antwort:
procedure PutBlueFar(){
Wiederholung(4){
Bewegung(Ost)
}
Setzen(Blau)
}
procedure DrawBlackLine6(){
Wiederholung(6){
Put(Schwarz)
Bewegung(Ost)
}
}
Antwort:
procedure RedLine4() {
Wiederholung(4) {
Put(Rot)
Bewegung(Nord)
}
}
Ich habe eine Prozedur Diagonal4Blue() definiert, die eine Diagonale der Länge 4 nach
Nordosten zeichnet, wobei jede Zelle eine blaue Kugel hat. Der Kopf sollte sich an der in
der Abbildung gezeigten Stelle befinden.
Antwort:
procedure Diagonal4Blue(){
Wiederholung(4){
Setzen(Blau)
Bewegung(Nord)
Bewegung(Ost)
}
}
Ich habe eine Prozedur DiagonalHeavy4Blue() definiert, die statt 1 Kügelchen in jede Zelle
21 Kügelchen setzt.
Antwort:
procedure Pellets(){
Wiederholung(21){
Setzen(Blau)
}
}
procedure DiagonalHeavyDiagonal4Blue(){
Wiederholung(4){
Bolitas()
Bewegung(Nord)
Bewegung(Ost)
}
}
Antwort:
procedure LineaNegra4Este(){
Wiederholung(3){
Put(Schwarz)
Bewegung(Ost)
}
Put(Schwarz)
}
Ich habe die Prozedur BlackSquare4() definiert, um ein 4x4 Quadrat mit schwarzen
Kugeln zu zeichnen. Zu Beginn befindet sich der Kopf in der linken unteren Ecke des
Quadrats (nicht unbedingt des Spielbretts) und am Ende des Programms sollte der Kopf in
der rechten oberen Ecke des Quadrats sein. Vergessen Sie nicht, LineaNegra4Este()
aufzurufen, das sich im Abschnitt Bibliothek befindet.
Antwort:
procedure BlackSquare4(){
Wiederholung(3){
BlackLine4East()
Wiederholung(3){
Bewegung(West)
}
Bewegung(Nord)
}
BlackLine4East()
}
5. Parameter.
Ich habe die Prozedur DrawBlackLine3() definiert, die, wie der Name schon sagt,eine
Linie zeichnet, indem sie 3 aufeinanderfolgende schwarze Kugeln nach Osten setzt und den
Kopf dort lässt, wo er begonnen hat. Rufen Sie es in einem Programm auf.
In der Bibliothek finden Sie das BackToBack-Verfahren. Das heißt, Sie können sie
aufrufen, ohne sie definieren zu müssen!
Antwort:
procedure DrawBlackLine3(){
Wiederholung(2){
Put(Schwarz)
Bewegung(Ost)
}
Put(Schwarz)
BackToBack()
}
Programm{
DrawBlackLine3()
}
Antwort:
procedure DrawBlackSquareSide3(){
Wiederholung(2){
DrawBlackLine3()
Bewegung(Nord)
}
DrawBlackLine3()
}
Programm{
DrawBlackSquareSide3()
}
Definieren Sie die Prozedur DrawGreenLine3() zum Zeichnen einer grünen Linie und rufen
Sie sie im Programm auf.
Antwort:
procedure DrawGreenLine3(){
Wiederholung(2){
Put(Grün)
Bewegung(Ost)
}
Put(Grün)
BackToBack()
}
Programm{
DrawGreenLine3()
}
Ich habe die Prozeduren DrawRedLine3() und DrawBlueLine3() definiert, um die Farben
Rot und Blau hinzuzufügen.
Antwort:
procedure DrawRedLine3(){
Wiederholung(2){
Put(Rot)
Bewegung(Ost)
}
Put(Rot)
BackToBack()
}
procedure DrawBlueLine3(){
Wiederholung(2){
Setzen(Blau)
Bewegung(Ost)
}
Setzen(Blau)
BackToBack()
}
Antwort:
Erstelle ein Programm, das drei kleine grüne Kugeln legt, die die Farbe Grün als Parameter
übergeben.
Antwort:
Programm{
Satz3(Grün)
}
Übung 7: DrawLine3.
Ich habe die Prozedur DrawLine3 definiert, die eine Farbe erhält und eine Linie in dieser
Farbe zeichnet. Machen Sie sich keine Sorgen über die Programme, die es mit jeder der
Farben aufrufen, sie sind auf unserer Seite.
Antwort:
procedure DrawLine3(Farbe){
Wiederholung(2){
Put(Farbe)
Bewegung(Ost)
}
Put(Farbe)
BackToBack()
}
Übung 8: DrawSideSquare3.
Indem ich DrawLine3 aufrufe, habe ich die Prozedur DrawSideSquare3 definiert, die
eine Farbe erhält und ein 3x3-Quadrat in dieser Farbe zeichnet.
Antwort:
procedure DrawSideSquare3(Farbe){
Wiederholung(2){
DrawLine3(Farbe)
Bewegung(Nord)
}
DrawLine3(Farbe)
}
Erstellen Sie ein Programm, das die neue Version von DrawLine3 aufruft (Sie brauchen es
nicht zu definieren, sondern nur aufzurufen) und ein mehrfarbiges Quadrat zeichnet, wobei
Sie als Parameter die Farbe und die Richtung übergeben.
Antwort:
Programm{
DrawLine3(Grün, Ost)
Bewegung(Ost)
DrawLine3(Rot, Nord)
Bewegung(Nord)
DrawLine3(Schwarz, West)
Bewegung(West)
DrawLine3(Blau, Süd)
}
Antwort:
Programm{
DrawLine3(Nord, Süd)
}
Was glauben Sie, was passiert, wenn wir einer Prozedur weniger Argumente geben, als sie
braucht?
Erstellen Sie ein Programm, das DrawLine3 aufruft, ihm aber nur ein Argument übergibt.
Antwort:
Programm{
DrawLine3(Grün)
}
Zum Abschluss dieser Lektion werden wir eine Prozedur namens Triad definieren, die drei
Parameter erhält!
Triada erhält drei Farben pro Parameter und legt drei Kugeln nebeneinander nach Osten, in
der gleichen Reihenfolge, in der sie empfangen wurden. Die Spindel beginnt am Ursprung
und muss an der letzten Perle des Dreiklangs enden.
Antwort:
Antwort:
procedure Diagonal4BlueBack(){
Diagonal4Blue()
Wiederholung(4){
Bewegung(West)
Bewegung(Süd)
}
}
Antwort:
procedure DiagonalBand4() {
Wiederholung(3) {
Diagonal4BlueBack()
Bewegung(Nord)
}
GoToEdge(Süd)
}
Antwort:
Übung 4: Gedenktag.
Antwort:
procedure SpeicherTag(){
SetN(24, Blau)
Bewegung(Ost)
SetN(3, Grün)
Bewegung(Ost)
PonerN(1976, Schwarz)
}
Ich habe die Prozedur Date(day, month, year) definiert, die diedrei entsprechendenWerte
empfängt und das Datum schreibt, das sie darstellen, wie folgt:
Antwort:
Ich habe eine Prozedur MoveN(amount, direction) definiert, die den Kopf die angegebene
Anzahl von Bewegungen in die angegebene Richtung ausführen lässt.
Antwort:
Antwort:
procedure DrawClock(radius){
MoveN(Radius,Nord)
SetN(12,Rot)
MoveN(Radius,Ost)
MoveN(Radius,Süd)
SetN(3,Rot)
MoveN(Radius,West)
MoveN(Radius,Süd)
SetN(6,Rot)
MoveN(Radius,West)
MoveN(Radius,Nord)
SetN(9,Rot)
MoveN(Radius,Ost)
}
Ich habe die Prozedur LineThisPassed(Gewicht, Farbe, Länge) definiert. Bitte beachten Sie,
dass der Kopfin die Ausgangsposition zurückkehren muss. Dazu müssen Sie MoverN
aufrufen.
Antwort:
Ich habe eine Prozedur GuardFrom5() definiert, die eine"Wache" aus 5 Kacheln bildet (wie
die, die die Wände schmücken). JedesPlättchen besteht aus 1 grünen, 5 schwarzen und 9
roten Kugeln.
Antwort:
procedure GuardFrom5(){
Wiederholung(4){
SetN(9, Rot)
SetN(5, Schwarz)
SetN(1, Grün)
Bewegung(Ost)
}
SetN(1, Grün)
SetN(5, Schwarz)
SetN(9, Rot)
}
Ich habe eine Prozedur GuardOnL() definiert, die eine L-Wache wie in der Abbildung
gezeigt durchführt, aberden Kopf in der Ausgangsposition belässt.
Antworten:
7. Ausdrücke.
Erstelle mit dieser Idee und dem Aufruf von PonerN ein Programm, das fünf kleine
schwarze Kugeln legt, ABER ohne die Zahl 5 zu schreiben.
Antwort:
Programm{
PutN(3+2, Schwarz){
}
}
Ich habe eine Prozedur PutSum(x, y) definiert, die zwei Parameter erhält und die Anzahl
der roten Kugeln angibt, die sich aus der Addition vonxundy ergibt.
Antwort:
Wir haben die Informationen darüber, wie viele Busse, Autos und Fahrräder anwesend
waren, und von dort aus können wir eine Berechnung nach diesen Regeln vornehmen:
Ich habe die Prozedur CountPeople(buses, cars, bicycles) definiert, die aus der Anzahl der
Busse, Autos und Fahrräder, die sie als Parameter erhält, die notwendigen Zählungen
vornimmt und das Ergebnis mit grünen Kugeln darstellt.
Antwort:
Antwort:
Ich habe die Prozedur WalkUntrusted(steps) definiert, die das Gehen von Charles simuliert:
er soll die Anzahl der Schritte erhalten, die er machen soll, und die Hälfte davon machen.
Sie bewegt sich immer nach Osten.
Antwort:
procedure WalkWithoutConfidence(steps){
MoveN(Schritte div 2, Ost)
}
Antwort:
Ändern Sie mit Ihren neuen Kenntnissen über Ausdrücke dasLine-Verfahren so ab,
dass die Spindel an ihrem Ausgangspunkt bleibt.
Antwort:
Finden Sie heraus, welche der neuen Funktionen Sie aufrufen müssen, und definieren Sie
die Prozedur Ele(address). Machen Sie sich keine Gedanken über die anfängliche Position
des Kopfes, wir kümmern uns darum, ihn an der richtigen Stelle zu platzieren, damit das L
gezeichnet werden kann.
Antwort:
Prozedur Ele(Adresse){
Zeile(Adresse, Blau, 3)
Linie(next(Richtung), Blau, 3)
}
Antwort:
Wählen Sie Option Nummer 4.
Ich habe die Prozedur Arrow(direction) definiert, die einen roten Pfeil in die entsprechende
Richtung zeichnet. Der Kopf beginnt immer und sollte immer in der Mitte sein, wie auf den
Beispieltafeln dargestellt.
Antwort:
procedure Pfeil(Richtung){
Verschieben(vorherige(Adresse))
Put(Rot)
Move(next(address))
Move(next(address))
Put(Rot)
Verschieben(vorherige(Adresse))
Move(next(address))
Verschieben(vorherige(Adresse))
Verschieben(Adresse)
Put(Rot)
Bewegen(entgegengesetzt(Richtung))
}
ine Aufgabe, die wir mit Sicherheit zu erledigen haben, ist es, eine Menge Bälle zu
platzieren, und dafür gibt es bereits die PutN-Prozedur, die wir vor einigen Übungen gebaut
haben. Wir wissen auch, welche Farbe die Kugeln haben, die wir einwerfen müssen: Rot,
aber... Woher wissen wir, wie viele wir einsetzen müssen?
Antwort:
procedure CopyGreensInRed() {
SetN(nroBolitas(Grün), Rot)
}
Ich habe TakeAll(Farbe) definiert, das eine Farbe erhält und alle Kugeln dieser Farbe
herausnimmt (mit den restlichen Farben darf es nichts machen).
Antwort:
procedure DrawAll(Farbe){
SacarN(nroBolitas(Farbe), Farbe)
}
8. Bedingte Alternative.
Antwort:
Antwort:
Ändere das Verfahren, das wir dir gegeben haben, so ab, dass du nurdann eine rote Kugel
bekommst, wenn es eine gibt.
Antwort:
procedure SacarRojoConMiedo() {
if(hayBolitas(Rojo)){
Entfernen(Rot)
}
}
Übung 4: Ein ziemlich weit hergeholtes Beispiel.
Antwort:
procedure CompleteCell(){
if(hayBolitas(Negro)){
Put(Rot)
Setzen(Blau)
Setzen(Grün)
}
}
Erstellen Sie ein Programm, das sich nur nach Osten bewegt, wenn dies möglich ist. Denken
Sie daran, canMove(address) zu verwenden.
Antwort:
Programm{
if(canMove(East)){
Bewegung(Ost)
}
}
In einemif können Sie auch Zahlen vergleichen, wie Sie es wahrscheinlich in Mathematik
getan haben.
Versuchen Sie daher, ein Programm zu erstellen, dasnur dann 1schwarze Kugel legt, wenn
es weniger als 5schwarze Kugeln gibt.
Antwort:
Programm{
if(nroBolitas(Negro) < 5){
Put(Schwarz)
}
}
Ich habe eine Prozedur EnsureAGreenBall() definiert, die sicherstellt, dass sich mindestens
ein grüner Ball in der aktuellen Zelle befindet. Das heißt: Wenn bereits grüne Pellets
vorhanden sind, brauchen Sie nichts zu tun, aber wennkeine grünen Pellets vorhanden sind,
müssen Sie welche einfüllen.
Antwort:
procedure SecureAGreenBall(){
if(not hayBolitas(Green)){
Setzen(Grün)
}
}
Antwort:
Antwort:
procedure TurnOnLightOff(){
if(hayBolitas(Negro)){
Entfernen(Schwarz)
Setzen(Grün)
} sonst {
Entfernen(Grün)
Put(Schwarz)
}
}
9. Funktionen.
Antwort:
Koboldstein-Funktionen,
Antwort:
Ändern Sie die erste Version von MoverSegunBolitas(), um die Funktion nroBolitasTotal()
anstelle des langen Ausdrucks zu verwenden.
Antwort:
procedure MoverSegunBolitas() {
if (nroBolitasTotal() > 10) {
Bewegung(Ost)
} sonst {
Bewegung(Nord)
}
}
Übung 4: allExcept.
Ich habe die Funktion allExcept definiert, um die Anzahl der Pellets zurückzugeben,
dienicht die als Parameter übergebene Farbe haben.
Antwort:
function allExcept(Farbe){
return (nroBolitasGesamt()-nroBolitas(Farbe))
}
Antwort:
Funktion redIsDominant(){
return (nroBolitas(Rojo)>todasExcepto(Rojo))
}
Übung 6: In Freiheit.
Es gibt den Operator &&, der genau das tut: Er nimmt zwei boolesche Ausdrücke an und
gibt nur dann True zurück, wennbeide wahr sind. Wenn Sie sich mit Logik auskennen, ist
dies das, was man gemeinhin alsKonjunktion bezeichnet und gewöhnlich durch das
Symbol ∧ dargestellt wird .
Ich habe die Funktion isFreeCoasts() definiert, die angibt, ob sich der Kopf sowohl nach
Osten als auch nach Westen bewegen kann.
Antwort:
Funktion isFreeCoasts(){
return(canMove(East) && canMove(West))
}
Anders als in der vorherigen Übung wollen wir wissen, obeine der beiden Fragen wahr ist.
Daher müssen wir einen anderen Operator verwenden: dieDisjunktion, die mit | |
geschrieben wird und wahr ist, wenn mindestenseine der beiden Fragen wahr ist.
Sowohl && als auch | | können mehrfach verwendet werden, ohne dass Klammern
erforderlich sind, solange sie auf beiden Seiten boolesche Ausdrücke enthalten.
Ich habe die Funktion isThereAnyBall() definiert, die die Frage beantwortet: Gibt es einen
Ball in der aktuellen Zelle?
Antwort:
Funktion hayAlgunaBolita(){
return(hayBolitas(Grün) || hayBolitas(Blau) || hayBolitas(Rot) ||
hayBolitas(Schwarz))
}
Übung 8: Immer am Rande...
Wir erinnern Sie an die logischen Operatoren, die wir bisher gesehen haben:
Mit Hilfe dieser kleinen Tabelle habe ich die Funktion I'mOnAnEdge() definiert, die
feststellt, ob der Kopf auf einer Kante steht.
Antwort:
Funktion I'mOnAnEdge(){
return(not canMove(North) || not canMove(South) || not canMove(East) || not
canMove(West))
}
Wir werden uns nun Funktionen ansehen, dieetwas tun, bevor sie ein Ergebnis
zurückgeben. Um dies zu veranschaulichen, möchten wir, dass Sie eine Funktion definieren,
die uns sagt, ob sich ein Ball einer bestimmten Farbein der Zelle neben ihm befindet.
Ich habe die Funktion thereareBallsAt(direction, color) definiert, die meldet, ob sich in der
benachbarten Zelle Kugeln der angegebenen Farbe in der angegebenen Richtung befinden.
Antwort:
function hayBolitasAl(Adresse,Farbe){
Verschieben(Adresse)
return(hayBolitas(Farbe))
}
Probieren wir es aus: Testen wir die Funktion hayBolitasAl aus der vorherigen Übung mit
Fällen, in denen sich der Kopf nicht bewegen kann. Drücken Sie auf Absenden und sehen
Sie sich das Ergebnis an.
Antwort:
Senden drücken
Aufgabe 11: Sind die Bälle weit weg?
Ich habe die Funktion hayBolitasLejosAl(Richtung, Farbe, Entfernung) definiert. Die Idee,
den Kopf viele Male zu bewegen, wurde vor einigen Lektionen mit der ProzedurMoverN
gelöst. Sie können es verwenden.
Antwort:
function hayBolitasLejosAl(Richtung,Farbe,Entfernung) {
MoveN(Entfernung,Richtung)
return(hayBolitas(Farbe))
}
Mit hayBolitasAl habe ich die Funktion estoyRodeadoDe(Farbe) definiert, die anzeigt, ob
der Kopf von Kugeln dieser Farbe umgeben ist.
Wir sagen, dass der Kopf"umzingelt" ist, wenn es Kugeln dieser Farbe in allen vier
Richtungen gibt: Norden, Osten, Süden und Westen.
Antwort:
function I'mSurroundedFrom(Farbe) {
return (es gibtBolitasAl(Nord, Farbe) && es gibtBolitasAl(Ost, Farbe) && es
gibtBolitasAl(Süd, Farbe) && es gibtBolitasAl(West, Farbe))
}
Zum Abschluss definieren wir die Funktion hayLimite(), die feststellt, ob es eine Art
Grenze für die Bewegung der Spindel gibt.
Es gibt zwei Gründe für die Begrenzung:Ich befinde mich auf einer Kante und kann mich
daher in keine Richtung bewegen, oder ichbin von roten Kugeln umgeben, die mich
abschneiden. Wenneine dieser beiden Bedingungen eintritt, bedeutet dies, dass es eine
Grenze gibt.
Antwort:
Funktion hayLimite(){
return (I'mOnAnEdge() ||I'mSurroundedBy(Red))
}
Antwort:
Funktion halb(Zahl){
Rückgabe(1/2*Zahl)
}
Mal sehen, ob Sie es verstehen; ich habe die folgenden Funktionen geschrieben:
oben:nimmt eine Zahl und gibt diese Zahl minus eins zurück.
triple: gibt das Tripel einer Zahl zurück.
previousDelTriple: kombiniert die beiden vorhergehenden Funktionen:
multipliziert eine Zahl mit 3 und subtrahiert 1 davon.
Antwort:
function previous(Zahl){
Rückgabe(Zahl - 1)
}
Funktion Dreifach(Zahl){
return(Zahl * 3)
}
vorherige FunktionDelTriple(Zahl){
return(previous(triple(number)))
}
Probieren Sie die folgenden Ausdrücke in der Konsole aus, um zu sehen, ob Sie sie
verstehen:
4 + 5
Math.round(4.5)
functionMysterious(1, 2, 3) (wir haben sie bereits für dich deklariert und du kannst
sie verwenden)
Antwort:
Math.round(4.4)
Math.round(4.6)
Math.max(4, 7)
Math.min(4, 7)
Antwort:
Antwort:
Jetzt sind Sie dran! Dani sagt auch, dass jemand gerne liest, wenn die Anzahl der Bücher,
an die er/sie sich erinnert, mehr als 20 beträgt.
Antwort:
function likesRead(aNumber){
return(aZahl > 20)
}
Übung 8: Booleans.
Mal sehen, ob Sie es verstehen; ich habe die folgenden Funktionen geschrieben:
ThisEntre, nehmen Sie drei Zahlen und sagen Sie, ob die erste größer als die zweite
und kleiner als die dritte ist.
thisOutOfRange: nimmt drei Zahlen und sagt, ob die erste kleiner als die zweite
oder größer als die dritte ist.
Antwort:
Mal sehen, ob das klar ist: Ich habe die Funktion isWeekEnd geschrieben, die eine
Zeichenkette nimmt, die den Namen eines Wochentags darstellt, und uns sagt, ob es
"Samstag" oder "Sonntag" ist.
Antwort:
function isWeekEnd(day){
return(Tag === "Samstag" || Tag === "Sonntag")
}
Antwort:
Ich habe die Shout-Funktion geschrieben. Wir überlassen es Ihnen, die Funktion
convertToCase zu verwenden, die, erm.... nun ja... grundsätzlich eine Zeichenkette in
Großbuchstaben umwandelt.
Antwort:
Funktion shout(Wort){
return("¡" + convertToMayuscula(word) + "!")
}
Mal sehen, ob du es verstehst: Ich habe eine max-Funktion geschrieben, die wie Math.max
funktioniert (nicht zu gebrauchen!) und das Maximum zwischen zwei Zahlen liefert. Zum
Beispiel ist das Maximum zwischen 4 und 5 gleich 5, und das Maximum zwischen 10 und 4
ist 10.
Antwort:
Wir brauchen eine Vorzeichenfunktion, die bei einer Zahl den Wert zurückgibt:
1, wenn die Zahl positiv ist.
0, wenn die Zahl Null ist.
-1, wenn die Zahl negativ ist.
Ich habe die Vorzeichenfunktion geschrieben. Möglicherweise benötigen Sie mehr als
einen, wenn.
Antwort:
Ich habe die Funktion isLuckyNumber geschrieben, die bei einer Zahl angibt, ob sie der
obigen Logik folgt. Es ist nicht gut, wenn zu verwenden!
Antwort:
function isLuckyNumber(number) {
return (Zahl)>0 && (Zahl)<100 && (Zahl!=15);
}
Die Jury eines Turniers bat uns, eine Funktion medalSecondPlace zu entwickeln, die die
den ersten Plätzen entsprechende Medaille zurückgibt, und zwar nach folgender Logik
Antwort:
function medallaSegunPuesto(lugar){
if(Ort === 1){
return("gold")
} else if(Ort === 2) {
return("Silber")
} else if(place === 3) {
return("Bronze")
} sonst {
return("nichts")
}
}
Übung 16: Datentypen.
Wie wir gerade gesehen haben, gibt es inJavaScript Zahlen, Boolesche Werte und
Zeichenketten:
Darüber hinaus gibt es Operationen, die für alleDatentypen funktionieren, zum Beispiel:
Antwort:
Bevor wir zum Schluss kommen, noch eine letzte Aufgabe: Welchen Wert haben die
folgenden Ausdrücke? Kreuzen Sie alle richtigen Punkte an!
Antwort:
4 + 4 gleich 8
Ich habe eine Funktion quantCuesta geschrieben, die aus der Anzahl der Zoll des Monitors
und der Menge des Arbeitsspeichers die geschätzten Kosten für unseren Computer
berechnet.
Antwort:
Jetzt, da wir wissen, wie viel ein Computer kostet, wollen wir wissen, ob ein Computerdas
Richtige für mich ist. Dies ist der Fall, wenn:
Ich habe die Funktion meIt's convenient geschrieben, die wiederum die Anzahl der Zoll und
die Menge des Speichers nimmt und uns sagt, ob es günstig ist, sie zu kaufen.
Antwort:
function meItChoices(inch,memory){
return (quantoCuesta(inch,memory) < 6000 && inch >= 32 && memory >= 8);
}
Übung 3: Dreiecke.
Zeit für Geometrie! Wir wollen ein paar Dinge über ein Dreieck wissen:
perimeterTriangle: Angesichts der drei Seiten eines Dreiecks wollen wir wissen,
wie lang sein Umfang ist.
areaTriangle: Angesichts der Basis und der Höhe eines Dreiecks wollen wir seinen
Flächeninhalt wissen.
Antwort:
Übung 4: Quadrate.
Und jetzt sind die Quadrate an der Reihe; wir wollen wissen
perimeterSquare: Bei einer Seite wollen wir wissen, wie lang ihr Umfang ist.
areaSquare: Bei einer Seite wollen wir wissen, wie groß ihre Fläche ist.
Antwort:
function perimeterSquare(side) {
Rückgabe (Seite * 4)
}
function areaSquare(side) {
Rückgabe (Seite * Seite)
}
Entwickeln Sie eine abgestimmte Funktion, die die Frequenz (eine Zahl)vom Bedienfeld
empfängt und angibt, ob diese Frequenz gleich 440 Hz ist.
Antwort:
function thisFrequency(frequency){
return (Frequenz === 440)
}
Jetzt wollen wir wissen, ob das mittlerec des Klaviersannähernd gestimmt ist. Dies ist der
Fall, wenn sie zwischen 437 Hz und 443 Hz liegt, aber NICHT genau 440 Hz beträgt.
Antwort:
function thisClose(frequency){
return (437 <= Frequenz && Frequenz <= 443 && Frequenz !== 440)
}
Übung 7: Plakate.
Ich habe die Funktion writeLittleBillboard geschrieben, die aus einem Titel, einem
Vornamen und einem Nachnamen einen einzigen String bildet.
Antwort:
Antwort:
Da wir nun unsere großen und kleinen Typenschilder schreiben können, brauchen wir
eineneue Funktion, die uns die optimale Größe des Typenschilds liefert:
Wenn Vor- und Nachname insgesamt mehr als 15 Buchstaben haben, wollen wir ein
kurzes Zeichen;
Ansonsten wollen wir ein langes Banner.
Ich habe die Funktion writePostLetterOptimal definiert, die einen Titel, einen Vornamen
und einen Nachnamen annimmt und mit Hilfe von writePostLetter ein kurzes oder langes
Plakat entsprechend den oben genannten Regeln erzeugt.
Antwort:
Ich habe eine Funktion decisionConMoneda geschrieben, die drei Parameter benötigt und
den zweiten zurückgibt, wenn der erste "cara" ist, oder den dritten, wenn "ceca".
Antwort:
Wir wollen den Wert der Stichkarten wissen, wenn wirEnvido spielen. Das wissen wir:
Ich habe eine Funktion valueSent geschrieben, die eine Buchstabennummer annimmt und
ihren Sendewert zurückgibt.
Antwort:
function valueSent(letter){
if(Buchstabe >= 1 && Buchstabe <= 7)
(Brief zurücksenden)
if(Buchstabe >= 10 && Buchstabe <= 12)
{Rückgabe 0}
}
Nun, ähm, nein, halt, zuerst wollen wir berechnen, wie viele Neidpunkte ein Spieler hat.
Das wissen wir:
Wenn die beiden Karten die gleiche Farbe haben, ist der Wert der Sendung die
Summe ihrer Sendewerte plus 20.
Andernfalls ist der Wert der Sendung der höchste Wert der Sendung zwischen
ihnen.
Entwickeln Sie unter Verwendung der Funktion sendValue (die wir bereits für Sie
geschrieben haben) die Funktion totalSendPoints, die die Werte und Farben von zwei
Karten nimmt und angibt, wie viel send sie insgesamt ergeben.
Antwort:
Beim Truco-Spiel können die gegnerischen Teams abwechselnd den Einsatz erhöhen. Wenn
zum Beispiel ein Spielertruco singt, kann ein anderer Spielerretruco singen. Es liegt auf der
Hand, dass die Einsätze immer höher werden:
Ich habe die Funktion valueChantTrick geschrieben, die den Gesang nimmt und zurückgibt,
wie viele Punkte er wert ist.
Antwort:
Funktion valueCantoTruco(canto){
if(canto === "truco"){
Rückgabe(2)
}
if(canto === "retruco"){
Rückgabe(3)
}
if(canto === "vale cuatro"){
zurück(4)
}
}
Antwort:
functionMysterious(2, 1)
Übung 2: Siebdruck.
Antwort:
Antwort:
function versosMartinFierro() {
print("Hier fange ich an zu singen");
print("Im Takt der Sparren;");
print("Möge der Mann, der es enthüllt");
print("Ein außergewöhnlicher Kummer");
Rückgabe 0
}
Antwort:
function versosMartinFierro() {
print("Hier fange ich an zu singen");
print("Im Takt der Sparren;");
print("Möge der Mann, der es enthüllt");
print("Ein außergewöhnlicher Kummer");
}
InJavaScript ist alles, was wir außerhalb einerFunktion schreiben, implizit dieser
Einstiegspunkt. Wenn wir zum Beispiel ein Programm wollen, das das klassische "Hello,
world!" auf dem Bildschirm ausgibt, können wir es wie folgt schreiben:
print("Hallo Welt!");
Antwort:
print("Wir würfeln");
print("Der erste Wurf traf " + rollDead());
print("Der zweite Wurf traf " + rollDead());
print("Der dritte Wurf traf " + rollDead());
Übung 6: Zwänge.
Mal sehen, ob das klar ist. Ich habe eine Funktion elephantsSwingers geschrieben, die eine
Anzahl von Elefanten nimmt und einen Reim aus einem bekannten Lied "3 elephants were
swinging"zurückgibt.
Antwort:
function elephantsEquilibrants(number){
return(Zahl + " " + "Elefanten haben geschaukelt")
}
Nehmen wir an, dass die Zahl Pi gleich 3,14159265358979 ist (nicht unendlich, aber genau
genug für unsere Berechnungen):
Ich habe die Funktionen perimeterCircle und areaCircle definiert, die den Radius eines
Kreises erhalten und daraus seinen Umfang und seine Fläche zurückgeben.
Antwort:
function perimeterCircle(radius){
return(3.14159265358979 * 2 * Radius)
}
function areaCircle(radius) {
return(3.14159265358979 * Radius * Radius)
}
sei Pi = 3,14159265358979;
Ändern Sie die Stellen, an denen 3,14159265358979 für die Variable pi in den von uns
definierten Funktionen erscheint.
Antwort:
sei Pi = 3,14159265358979;
function perimeterCircle(radius){
return(pi * 2 * Radius)
}
function areaCircle(radius) {
return(pi * Radius * Radius)
}
Da Sie nun wissen, wie Variablenzugewiesen werden, hier ein kleiner Denkanstoß: Was
passiert, wenn ich versuche, eine Variablezu verwenden, der ich nie einen Wert
zugewiesen habe?
Antwort:
Antwort:
Ich habe eine incrementFortuna-Prozedur geschrieben, die den Wert der globalen Variablen
pesosInMyWallet verdoppelt. Geben Sie die Variable nicht an, wir haben das bereits für Sie
getan (mit einem geheimen Geldbetrag).
Antwort:
function increaseFortuna(){
pesosInMyWallet = pesosInMyWallet * 2
}
Wir haben gesehen, dass eine Variable nur einen Wert haben kann, so dass wir jedes Mal,
wenn wir ihr einen neuen Wert zuweisen, den vorherigen verlieren.
Antwort:
20
4. Boolesche Logik.
Beginnen wir mit etwas Einfachem: Erinnern Sie sich an den Betreiber! Sie wird als
Negation, not oder logisches Komplement bezeichnet und dient dazu, einen booleschen
Wert zu negieren.
Wenn ich den booleschen Wert von hasHungry habe, lautet das Komplement !hasHungry.
Ich habe die useClose-Prozedur definiert, damit wir den Verschluss eines Rucksacks öffnen
und schließen können.
Antwort:
Jetzt sind Sie dran! Ich habe isOlderOfAge definiert, das ein Alter erhält und daraus
YoungerOfAge wird.
Antwort:
function isOldestOf(age){
return(Alter >= 18)
}
function isMinorOfAge(age){
return(!isOldestOfAge(age))
}
Übung 3: Die Peripatetiker.
Ich habe eine esPeripatetic-Funktion definiert, die den Beruf einer Person, ihre Nationalität
und die Anzahl der Kilometer, die sie pro Tag zurücklegt, berücksichtigt. Jemand ist
peripatetisch, wenn er ein griechischer Philosoph ist und gerne zu Fuß geht (er geht mehr
als 2 Kilometer pro Tag).
Antwort:
Antwort:
verbrauchtwenigEnergie(24, 5)
verbrauchtwenigEnergie(24, 0)
verbrauchtwenigEnergie(21, 7)
verbrauchtwenigEnergie(18, 1)
Antwort:
win(true, 25)
win(false, 30)
win(false, 20)
win(true, 31)
Antwort:
Arcadio ist der Sohn von José Arcadio und Pilar Ternera.
Aureliano José ist der Sohn von Oberst Aureliano und Pilar Ternera.
Aureliano Segundo und Remedios sind die Kinder von Arcadio und Sofía De La
Piedad.
Um mit der Analyse dieser Familie zu beginnen, haben wir bereits die Funktionen
motherFrom und fatherFrom definiert.
Jetzt sind Sie an der Reihe, die Funktion areMeansBrothers zu definieren. Denken Sie
daran, dass Halbgeschwister eine Mutter oder einen Vater haben können, aber nicht beide,
denn.... dann wären sie Geschwister!
Antwort:
Probieren Sie Ihre Funktion areMeansSiblings mit den folgenden Werten aus und prüfen
Sie, ob sie sich wie die Tabelle verhält:
Antwort:
areHalfBrothers(arcadio, aurelianoJose)
areMeansBrothers(aurelianoSegundo, remedios)
sonMediosHermanos(aurelianoJose, remedios)
Im Gegensatz zu and, or und not wird xor normalerweise nicht in Sprachen definiert, aber
da Sie jetzt wissen, wie es funktioniert, können Sie es bei Bedarf von Hand definieren.
Mal sehen, ob Sie das verstehen: Ich habe die allgemeine Funktion xor definiert, die zwei
Boolesche Werte annimmt und den entsprechenden Wahrheitswert zurückgibt.
Antwort:
Wenn ein mathematischer Ausdruck mehrere Operatoren enthält, wissen wir, dass
Multiplikation und Division vor Addition und Subtraktion ausgeführt werden:
5 * 3 + 8 / 4 - 3 = 14
Wie in der Mathematik werden Ausdrücke bei der Verwendung logischer Operatoren in
einer bestimmten Reihenfolge ausgewertet, die alsRangfolge bezeichnet wird.
Antwort:
Ich habe die Funktion canRetire geschrieben, die das Alter und das Geschlecht einer Person
sowie die Anzahl der Beitragsjahre für die Rente erhält.
Das Mindestalter für Frauen liegt bei 60 Jahren, das für Männer bei 65 Jahren. In beiden
Fällen müssen Sie mindestens 30 Beitragsjahre vorweisen können.
Versuchen Sie, die Aufgabe in einer einzigen Vorstellung zu lösen! Dann wollen wir mal
sehen, wie es aussehen würde, wenn wir delegieren.
Antwort:
Erreichen Sie die Mindesthöhe von 1,5 m (oder 1,2 m, wenn Sie von einem
Erwachsenen begleitet werden).
Sie haben kein Herzleiden.
Ich habe die 3-Parameter-Funktion canClimb definiert, die die Körpergröße einer Person in
Metern, die Tatsache, ob sie in Begleitung ist und ob sie eine Herzerkrankung hat, erhält.
Antwort:
5. Verzeichnisse.
Übung 1: Lieblingsserie.
Um eine Reihe von Zeichenfolgen darzustellen, setzen wir alle Zeichenfolgen, an denen wir
interessiert sind, in eckige Klammern ([ und ]), die durch Kommas getrennt sind. Einfach,
nicht wahr?
Antwort:
SerienFavoritenvonAna
SerienFavoritenDeHector
["Hallo", "Welt!"]
["hallo", "hallo"]
Wir haben gerade gesehen, wie man auf einfache Weise Mengen von Dingen modellieren
kann. Mit[] bietetJavaScript eine einfache Möglichkeit, diese Elemente in Listen zu
gruppieren.
Gibt es eine maximale Anzahl von Elementen? Nein, es gibt kein Limit! Listen können eine
beliebige Anzahl von Elementen enthalten.
Und nicht nur das, auch die Ordnung ist wichtig. Zum Beispiel ist ["hallo", "Welt"] nicht
dasselbe wie ["Welt", "hallo"]: beide haben die gleichen Elemente, aber an
unterschiedlichen Positionen.
Antwort:
Menschen
Übung 3: Glücksspiele.
Wir können auch Mengen von Zahlen oder Booleschen Werten auf dieselbe Weise
darstellen, indem wir sie in eckige Klammern setzen und durch Kommas trennen. Wir
können Listen mit Zahlen, Listen mit Zeichenketten, Listen mit Booleschen Werten und so
weiter haben. Wir könnten sogar Listen von Listen haben!
Antwort:
Mal sehen, ob das klar ist. Probieren Sie die folgenden Abfragen in der Konsole aus:
LotterieNummern
salioCara
Toll, es scheint, dass eine Liste jede Art von Element enthalten kann! Wir können Listen
mit Booleschen Werten, mit Zahlen, mit Zeichenketten, mit Listen... haben.
Darüber hinaus können sie eine beliebige Anzahl von Elementen enthalten: eins, zwei,
fünfzehn, hundert.
Können wir dann leere Listen haben, d. h. mit keinen Elementen? Ja, natürlich!
let unaListaVacia = []
Antwort:
Inzwischen wissen wir, welche Dinge wir mit Listen darstellen können und wie wir dies
tun. Aber was können wir mit ihnen machen?
Beginnen wir mit dem einfachsten Teil: die Anzahl der Einträge in der Liste zu kennen.
Dies kann mit Hilfe der Längenfunktion geschehen, ähnlich wie bei den Strings.
Antwort:
length([])
length(lotteryNumbers)
length([4, 3])
Übung 6: Geschmacksverstärker.
Listen sind sehr nützlich, wenn sie mehrere Elemente enthalten. Aber es gibt noch mehr!
Mit der Funktion add, die zwei Parameter benötigt, nämlich die Liste und das Element,
können wir der Liste jederzeit Elemente hinzufügen.
Wie wir sehen können, wird durch das Hinzufügen ein Element zur Liste hinzugefügt,
wodurch die Liste größer wird. Aber wo in der Liste fügen Sie es hinzu? Am Anfang? Und
am Ende? In der Mitte?
Finden Sie es selbst heraus: Prüfen Sie in der Konsole, welche Gegenstände Habseligkeiten
enthalten, fügen Sie eine "Armbrust" hinzu und prüfen Sie die Habseligkeiten erneut.
Außerdem gibt es eine remove-Prozedur, die nur die Liste als Parameter erhält. Überprüfen
Sie die Konsole, um zu sehen, was sie tut.
Antwort:
Deklarieren Sie eine move-Prozedur, die zwei Listen nimmt, das letzte Element aus der
ersten entfernt und es der zweiten hinzufügt.
Antwort:
Und was passiert, wenn Sie ein Element, das es nicht hat, als Parameter an position
übergeben? Überzeugen Sie sich selbst!
Antwort:
Position(Arbeitstage, "osvaldo")
Übung 9: Enthält.
Ich habe die Funktion contains geschrieben, um festzustellen, ob eine Liste ein bestimmtes
Element enthält.
Wenn Sie die Abfragebeispiele aufmerksam verfolgt haben, werden Sie festgestellt haben,
dass Listen auch doppelte Elemente enthalten können: [1, 2, 1], ["hallo", "hallo"], usw.
Daher gibt position tatsächlich die Position desersten Vorkommens des Elements in der
Liste zurück.
Antwort:
Antwort:
Liste[0]
Wenn Sie nach einem Element an einer Position fragen, die gleich oder größer als die
Größe der Liste ist, erhalten Sie ein undefiniertes Ergebnis. Das hört sich nicht schlimm an,
aber das Problem ist, dass man mit undefiniert nichts wirklich Sinnvolles machen kann.
In diesem Sinne hier eine Herausforderung: Ich habe die Funktion medalSecondPosts neu
geschrieben, aber dieses Mal mit höchstens einem einzigen if. Vielleicht finden Sie die
Listen hier nützlich.
Wir erinnern Sie daran, was die Funktion bewirkt: Sie soll die Medaille zurückgeben, die
den ersten Plätzen in einem Wettbewerb entspricht.
Antwort:
function medalSecondPost(post){
if(post <= 3){
return(Medaille[Position])
} sonst {
return(Medaille[0])
}
}
Antwort:
function greet(people){
for(let person1 of persons){
print("Hallo" + " " + Person1);
}
}
6. Aufzeichnungen.
Antwort:
Kopieren Sie den Code und fügen Sie ihn in die Konsole ein
statueOfFreedom
christRedentor
Eiffelturm
tajMahal
Kolosseum
Das ist dein Moment des Denkmals! Speichern Sie Aufzeichnungen dieser Denkmäler, die
aus den Städten Teheran,Iran bzw. Rosario,Argentinien, stammen, in den Variablen
torreAzadi und monumentoNacionalALaBandera. Trauen Sie sich zu erforschen, in
welchem Jahr sie fertiggestellt wurden, um dieses Feld zu vervollständigen?
Antwort:
Antwort:
Antwort:
Funktion planetTemperature(planet){
return(planet.name + " hat eine Durchschnittstemperatur von " +
planet.averageTemperature + " Grad")
}
Entwickeln Sie die moveFile-Prozedur, die einen Datensatz und einen neuen Pfad erhält
und die Datei mit dem neuen Pfad ändert.
Antwort:
In der vorangegangenen Übung haben wir den Registrierungspfad geändert, aber wir haben
das Erstellungsdatum nicht verwendet. Benutzen wir es! Wir wollen wissen, ob eine Datei
aus dem letzten Jahrtausend stammt, was der Fall ist, wenn ihr Jahr vor 2000 liegt.
Entwickeln Sie die Funktion isPastMillennium, die eine Datei erhält und einen booleschen
Wert zurückgibt.
Antwort:
function isPastMillennium(file){
return(year(file.creation) < 2000)
}
Erstellen Sie eine Funktion moreDifficultToBake, die zwei Dessertdatensätze als Parameter
nimmt und denjenigen mit den meisten Zutaten zurückgibt.
Antwort:
Übung 8: Registrierungslisten.
So wie wir mit Listen von Zahlen, Booleschen Werten, Zeichenketten oder anderen Listen
arbeiten, können wir auch Datensätze auflisten. Mit den eckigen Klammern [ ] können Sie
alles tun, was Sie zuvor getan haben, z. B. entfernen, die Länge herausfinden oder nach dem
Element einer bestimmten Position fragen.
Probieren Sie die Listen der DessertsFavoriten und DenkmälerAmerikas in der Konsole aus.
Es gibt ein Dessert, das wir noch nicht gezeigt haben. Kannst du anhand der Zutaten
erkennen, um welches Dessert es sich handelt?
Antwort:
DessertsFavoriten
monumentosDeAmerica
Entwickeln Sie die Prozedur addFastDesserts, die eine Liste mit Schnelldesserts und ein
Dessert pro Parameter erhält. Beträgt die Garzeit eine Stunde oder weniger, wird der
Eintrag in die Liste aufgenommen.
Antwort:
Finden Sie heraus, was das Feld ingredients des Feldes dessert des menuChildren-
Datensatzes ergibt. Es ist ein Register im anderen!
Antwort:
menuChildren.dessert.ingredients
Ich habe eine Prozedur sweetenMenu definiert, die einen Menüdatensatz empfängt und
dessen Dessertzutaten Zucker hinzufügt. Wenn bereits Zucker enthalten ist, spielt das keine
Rolle.... mehr hinzufügen!
Antwort:
function sweetenMenu(menu){
add(menu.dessert.ingredients, "Zucker")
return menu.dessert
}
7. Touren.
Gibt es ein Problem mit der Funktion gainSemester, die wir oben geschrieben haben?
Funktioniert es auch mit vierteljährlichen Bilanzen? Wie sieht es mit viermonatigen
Quartalen aus?
Antwort:
Test auf der Konsole:
profitSemester
Wir möchten die Gewinne aller Salden in einer Liste addieren können, unabhängig davon,
wie viele es tatsächlich gibt; wir möchten eine Funktion profitTotal, die die Salden für jeden
beliebigen Zeitraum von Monaten addieren kann: Semester, Vierteljahr, Quartal usw. Wie
schwierig!
Antwort:
gananciaTotal([
{ Monat: "Januar", Gewinn: 2 },
{ Monat: "Februar", Gewinn: 3 }
])
Antwort:
Funktion gananciaTotal4(balancesOfAperiod){
let sum = 0
Summierung = Summierung + balancesOfAperiod[0].gain
Summierung = Summierung + balancesOfAperiod[1].gain
Summierung = Summierung + balancesOfAperiod[2].gain
Summierung = Summierung + balancesOfAperiod[3].gain
Rücksumme
}
Wir müssen also den Vorgang der Akkumulation mehrmals wiederholen, einmal für jedes
Element der Liste. Sagen wir (wieder) Hallo zum for...of!
Wie Sie sehen können, erlaubt uns das for...of, jedes Element einer Liste zu besuchen und
etwas damit zu tun; in diesem Fall werden wir jeden Saldo von balancesOfAperiod
besuchen.
Antwort:
profitTotal([
{ Monat: "März", Gewinn: 8 },
{ Monat: "August", Gewinn: 10 }
])
Anna hat neue Anforderungen! Nun fragte er uns: "Ich möchte wissen, wie viele Bilanzen
positiv waren, d.h. bei denen der Gewinn größer als Null war.
Antwort:
function amountOfBalancesPositive(balancesOfAperiod){
let Menge = 0
for(let balance of balancesOfOnePeriod){
Menge = Menge + ((Saldo.Gewinn) > 0)
}
Rücklaufmenge;
}
Kommen wir nun zu Anas nächstem Anliegen. Wir können bereits eine Summe der Erträge
berechnen und auch Zähler erstellen, jetzt werden wir Durchschnittswerte berechnen.
Ana würde gerne wissen, wie hoch der durchschnittliche Gewinn bei einer beliebigen
Anzahl von Guthaben ist.
Antwort:
Funktion gananciaPrommedio(gananciaTotal){
let sum = 0
for(let balance of gananciaTotal){
Summierung = (Summierung + Balance.gain)
}
return Summe / Länge (gainTotal)
}
Da wir alles tun können, worum sie uns bittet, möchte Ana den durchschnittlichen Gewinn
der positiven Salden wissen.
Ich habe die Funktionen definiert:
positivPositiver Gewinn, der sich aus der Summe der Gewinne der positiven Salden
ergibt.
averagePositiveProfit mit Aufruf von PositivePositiveProfit und
PositiveBalanceSheetAmount.
Antwort:
function positiveGain(balancesOfAperiod){
let sum = 0
for(let balance of balancesOfOnePeriod){
if(balance.gain > 0){
Summierung = Summierung + (Saldo.Gewinn)
}
}
Rücksumme
}
function averagePositiveProfits(balancesOfAperiod){
return PositiveGain(balancesOfAperiod) /
PositiveBalanceAmount(balancesOfAperiod)
}
Leider ist es nicht möglich, die Durchschnittsfunktion mit unserer Liste von Datensätzen zu
verwenden. Was wir brauchen, ist eine Liste, die nur die Erträge der einzelnen Bilanzen
enthält. Dazu müssen wir jedes Element der Liste umwandeln bzw.abbilden.
Vervollständigen Sie die Ertragsfunktion, die eine Liste von Salden annimmt und nur die
Erträge der einzelnen Salden ausgibt.
Antwort:
function earnings(balancesOfAperiod){
let profits = []
for(let balance of balancesOfOnePeriod){
add(Gewinn, Saldo.Gewinn)
}
Renditechancen
}
Mit Programmierung kann man alles, oder fast alles, machen. Wir haben bereits eine
Funktion erstellt, um die Anzahl der positiven Salden zu ermitteln
(numberOfPositiveBalances), nun wollen wir sehen, wie wir herausfinden können, welches
diese Salden sind.
Vervollständigen Sie die Funktion balancesPositive, die die Salden einer Periode aufnimmt
und eine Liste derjenigen zurückgibt, deren Gewinn größer als Null war.
Antwort:
function balancesPositive(balancesOfAperiod){
let balances = []
for(let balance of balancesOfOnePeriod){
if(balance.gain > 0){
add(Salden, Saldo)
}
}
Rücklaufsalden
}
Da wir nun die Gewinnfunktion und die positiven Salden haben, können wir die allgemeine
Durchschnittsfunktion verwenden, um herauszufinden, wie hoch der durchschnittliche
Gewinn der positiven Salden ist.
Definieren Sie die Funktion profitsFromBalancesPositive und verwenden Sie sie dann
zusammen mit average, um averageFromBalancesPositive zu definieren.
Antwort:
function gainsFromBalancesPositive(balancesOfAperiod){
return earnings(balancesPositive(balancesOfAperiod))
}
function averagePositiveBalances(balancesOfAperiod){
return
average(earningsPositiveBalanceStatements(balanceStatementsOfAperiod))
}
Wir werden eine neue Funktion kennenlernen, maximo, mit der wir den größten Wert in
einer Liste von Zahlen ermitteln können.
Mit dieser neuen Funktion habe ich die Funktion maxProfit definiert, die uns den höchsten
Gewinn unter den Guthaben über einen bestimmten Zeitraum angibt.
Antwort:
function maxProfit(balancesOfAperiod){
return max(Erträge(SaldenderPeriode))
}
Wir gehen davon aus, dass Sie den Namen erraten haben. Wenn nicht, ist sie minimal.
Definieren Sie die Funktion minimumPositiveProfit, die uns sagt, was der niedrigste
Gewinn aller positiven Salden ist.
Antwort:
function minimumPositiveProfit(balancesOfAperiod){
return minimo(gananciasDeBalancesPositivos(balancesDeUnPeriodo));
}
months, die bei einer Liste von Datensätzen eine Liste von Monaten zurückgibt;
Glück, das diejenigen Datensätze herausfiltert, die einen Gewinn von mehr als 1000
Dollar aufweisen;
LuckyMonths, gibt die Monate zurück, die Glück brachten.
Antwort:
Funktion halb(Zahl){
Rückgabe(1/2*Zahl)
}
Mal sehen, ob Sie es verstehen; ich habe die folgenden Funktionen geschrieben:
oben:nimmt eine Zahl und gibt diese Zahl minus eins zurück.
triple: gibt das Tripel einer Zahl zurück.
previousDelTriple: kombiniert die beiden vorhergehenden Funktionen:
multipliziert eine Zahl mit 3 und subtrahiert 1 davon.
Antwort:
function previous(Zahl){
Rückgabe(Zahl - 1)
}
Funktion Dreifach(Zahl){
return(Zahl * 3)
}
vorherige FunktionDelTriple(Zahl){
return(previous(triple(number)))
}
Probieren Sie die folgenden Ausdrücke in der Konsole aus, um zu sehen, ob Sie sie
verstehen:
4 + 5
Math.round(4.5)
functionMysterious(1, 2, 3) (wir haben sie bereits für dich deklariert und du kannst
sie verwenden)
Antwort:
Math.round(4.4)
Math.round(4.6)
Math.max(4, 7)
Math.min(4, 7)
Antwort:
Antwort:
Jetzt sind Sie dran! Dani sagt auch, dass jemand gerne liest, wenn die Anzahl der Bücher,
an die er/sie sich erinnert, mehr als 20 beträgt.
Antwort:
function likesRead(aNumber){
return(aZahl > 20)
}
Übung 8: Booleans.
Mal sehen, ob Sie es verstehen; ich habe die folgenden Funktionen geschrieben:
ThisEntre, nehmen Sie drei Zahlen und sagen Sie, ob die erste größer als die zweite
und kleiner als die dritte ist.
thisOutOfRange: nimmt drei Zahlen und sagt, ob die erste kleiner als die zweite
oder größer als die dritte ist.
Antwort:
Antwort:
function isWeekEnd(day){
return(Tag === "Samstag" || Tag === "Sonntag")
}
Mal sehen, ob das klar ist: Ich habe eine Funktion lengthFirstNameFull geschrieben, die
einen Vornamen und einen Nachnamen annimmt und deren Gesamtlänge zurückgibt, wobei
ein zusätzliches Leerzeichen zur Trennung der beiden gezählt wird.
Antwort:
Ich habe die Shout-Funktion geschrieben. Wir überlassen es Ihnen, die Funktion
convertToCase zu verwenden, die, erm.... nun ja... grundsätzlich eine Zeichenkette in
Großbuchstaben umwandelt.
Antwort:
Funktion shout(Wort){
return("¡" + convertToMayuscula(word) + "!")
}
Mal sehen, ob du es verstehst: Ich habe eine max-Funktion geschrieben, die wie Math.max
funktioniert (nicht zu gebrauchen!) und das Maximum zwischen zwei Zahlen liefert. Zum
Beispiel ist das Maximum zwischen 4 und 5 gleich 5, und das Maximum zwischen 10 und 4
ist 10.
Antwort:
Wir brauchen eine Vorzeichenfunktion, die bei einer Zahl den Wert zurückgibt:
Ich habe die Vorzeichenfunktion geschrieben. Möglicherweise benötigen Sie mehr als
einen, wenn.
Antwort:
Ich habe die Funktion isLuckyNumber geschrieben, die bei einer Zahl angibt, ob sie der
obigen Logik folgt. Es lohnt sich nicht, sie zu benutzen!
Antwort:
function isLuckyNumber(number) {
return (Zahl)>0 && (Zahl)<100 && (Zahl!=15);
}
Die Jury eines Turniers bat uns, eine Funktion medalSecondPlace zu entwickeln, die die
den ersten Plätzen entsprechende Medaille zurückgibt, und zwar nach folgender Logik
Antwort:
function medallaSegunPuesto(lugar){
if(Ort === 1){
return("gold")
} else if(Ort === 2) {
return("Silber")
} else if(place === 3) {
return("Bronze")
} sonst {
return("nichts")
}
}
Wie wir gerade gesehen haben, gibt es inJavaScript Zahlen, Boolesche Werte und
Zeichenketten:
Darüber hinaus gibt es Operationen, die für alleDatentypen funktionieren, zum Beispiel:
Antwort:
Bevor wir zum Schluss kommen, noch eine letzte Aufgabe: Welchen Wert haben die
folgenden Ausdrücke? Kreuzen Sie alle richtigen Punkte an!
Antwort:
4 + 4 gleich 8
"4" + "4" ist gleich "44".
Ich habe eine Funktion quantCuesta geschrieben, die aus der Anzahl der Zoll des Monitors
und der Menge des Arbeitsspeichers die geschätzten Kosten für unseren Computer
berechnet.
Antwort:
Jetzt, da wir wissen, wie viel ein Computer kostet, wollen wir wissen, ob ein Computerdas
Richtige für mich ist. Dies ist der Fall, wenn:
Ich habe die Funktion meIt's convenient geschrieben, die wiederum die Anzahl der Zoll und
die Menge des Speichers nimmt und uns sagt, ob es günstig ist, sie zu kaufen.
Antwort:
function meItChoices(inch,memory){
return (quantoCuesta(inch,memory) < 6000 && inch >= 32 && memory >= 8);
}
Übung 3: Dreiecke.
Zeit für Geometrie! Wir wollen ein paar Dinge über ein Dreieck wissen:
perimeterTriangle: Angesichts der drei Seiten eines Dreiecks wollen wir wissen,
wie lang sein Umfang ist.
areaTriangle: Angesichts der Basis und der Höhe eines Dreiecks wollen wir seinen
Flächeninhalt wissen.
Antwort:
Übung 4: Quadrate.
Und jetzt sind die Quadrate an der Reihe; wir wollen wissen
perimeterSquare: Bei einer Seite wollen wir wissen, wie lang ihr Umfang ist.
areaSquare: Bei einer Seite wollen wir wissen, wie groß ihre Fläche ist.
Antwort:
function perimeterSquare(side) {
Rückgabe (Seite * 4)
}
function areaSquare(side) {
Rückgabe (Seite * Seite)
}
Entwickeln Sie eine abgestimmte Funktion, die die Frequenz (eine Zahl) vonder Zentrale
empfängt und feststellt, ob diese Frequenz 440 Hz entspricht.
Antwort:
function thisFrequency(frequency){
return (Frequenz === 440)
}
Antwort:
function thisClose(frequency){
return (437 <= Frequenz && Frequenz <= 443 && Frequenz !== 440)
}
Übung 7: Plakate.
Ich habe die Funktion writeLittleBillboard geschrieben, die aus einem Titel, einem
Vornamen und einem Nachnamen einen einzigen String bildet.
Antwort:
Antwort:
Da wir nun unsere großen und kleinen Typenschilder schreiben können, brauchen wir
eineneue Funktion, die uns die optimale Größe des Typenschilds liefert:
Wenn Vor- und Nachname insgesamt mehr als 15 Buchstaben haben, wollen wir ein
kurzes Zeichen;
Ansonsten wollen wir ein langes Banner.
Ich habe die Funktion writePostLetterOptimal definiert, die einen Titel, einen Vornamen
und einen Nachnamen annimmt und mit Hilfe von writePostLetter ein kurzes oder langes
Plakat entsprechend den oben genannten Regeln erzeugt.
Antwort:
Ich habe eine Funktion decisionConMoneda geschrieben, die drei Parameter benötigt und
den zweiten zurückgibt, wenn der erste "cara" ist, oder den dritten, wenn "ceca".
Antwort:
Wir wollen den Wert der Stichkarten wissen, wenn wirEnvido spielen. Das wissen wir:
Ich habe eine Funktion valueSent geschrieben, die eine Buchstabennummer annimmt und
ihren Sendewert zurückgibt.
Antwort:
function valueSent(letter){
if(Buchstabe >= 1 && Buchstabe <= 7)
(Brief zurücksenden)
if(Buchstabe >= 10 && Buchstabe <= 12)
{Rückgabe 0}
}
Nun, ähm, nein, halt, zuerst wollen wir berechnen, wie viele Neidpunkte ein Spieler hat.
Das wissen wir:
Wenn die beiden Karten die gleiche Farbe haben, ist der Wert der Sendung die
Summe ihrer Sendewerte plus 20.
Andernfalls ist der Wert der Sendung der höchste Wert der Sendung zwischen
ihnen.
Entwickeln Sie unter Verwendung der Funktion sendValue (die wir bereits für Sie
geschrieben haben) die Funktion totalSendPoints, die die Werte und Farben von zwei
Karten nimmt und angibt, wie viel send sie insgesamt ergeben.
Antwort:
Beim Truco-Spiel können die gegnerischen Teams abwechselnd den Einsatz erhöhen. Wenn
zum Beispiel ein Spielertruco singt, kann ein anderer Spielerretruco singen. Es liegt auf der
Hand, dass die Einsätze immer höher werden:
Ich habe die Funktion valueChantTrick geschrieben, die den Gesang nimmt und zurückgibt,
wie viele Punkte er wert ist.
Antwort:
Funktion valueCantoTruco(canto){
if(canto === "truco"){
Rückgabe(2)
}
if(canto === "retruco"){
Rückgabe(3)
}
if(canto === "vale cuatro"){
zurück(4)
}
}
functionMysterious(2, 1)
Übung 2: Siebdruck.
Antwort:
Ich habe eine Funktion versosMartinFierro geschrieben, die die ersten Strophen des Martín
Fierro auf dem Bildschirm ausgibt, um zu sehen, ob es klar wird:
Antwort:
function versosMartinFierro() {
print("Hier fange ich an zu singen");
print("Im Takt der Sparren;");
print("Möge der Mann, der es enthüllt");
print("Ein außergewöhnlicher Kummer");
Rückgabe 0
}
Antwort:
function versosMartinFierro() {
print("Hier fange ich an zu singen");
print("Im Takt der Sparren;");
print("Möge der Mann, der es enthüllt");
print("Ein außergewöhnlicher Kummer");
}
InJavaScript ist alles, was wir außerhalb einerFunktion schreiben, implizit dieser
Einstiegspunkt. Wenn wir zum Beispiel ein Programm wollen, das das klassische "Hello,
world!" auf dem Bildschirm ausgibt, können wir es wie folgt schreiben:
print("Hallo Welt!");
Antwort:
print("Wir würfeln");
print("Der erste Wurf traf " + rollDead());
print("Der zweite Wurf traf " + rollDead());
print("Der dritte Wurf traf " + rollDead());
Übung 6: Zwänge.
Mal sehen, ob das klar ist. Ich habe eine Funktion elephantsSwingers geschrieben, die eine
Anzahl von Elefanten nimmt und einen Reim aus einem bekannten Lied "3 elephants were
swinging"zurückgibt.
Antwort:
function elephantsEquilibrants(number){
return(Zahl + " " + "Elefanten haben geschaukelt")
}
Nehmen wir an, dass die Zahl Pi gleich 3,14159265358979 ist (nicht unendlich, aber genau
genug für unsere Berechnungen):
Ich habe die Funktionen perimeterCircle und areaCircle definiert, die den Radius eines
Kreises erhalten und daraus seinen Umfang und seine Fläche zurückgeben.
Antwort:
function perimeterCircle(radius){
return(3.14159265358979 * 2 * Radius)
}
function areaCircle(radius) {
return(3.14159265358979 * Radius * Radius)
}
sei Pi = 3,14159265358979;
Ändern Sie die Stellen, an denen 3,14159265358979 für die Variable pi in den von uns
definierten Funktionen erscheint.
Antwort:
sei Pi = 3,14159265358979;
function perimeterCircle(radius){
return(pi * 2 * Radius)
}
function areaCircle(radius) {
return(pi * Radius * Radius)
}
Da Sie nun wissen, wie Variablenzugewiesen werden, hier ein kleiner Denkanstoß: Was
passiert, wenn ich versuche, eine Variablezu verwenden, der ich nie einen Wert
zugewiesen habe?
Antwort:
Antwort:
Ich habe eine incrementFortuna-Prozedur geschrieben, die den Wert der globalen Variablen
pesosInMyWallet verdoppelt. Geben Sie die Variable nicht an, wir haben das bereits für Sie
getan (mit einem geheimen Geldbetrag).
Antwort:
function increaseFortuna(){
pesosInMyWallet = pesosInMyWallet * 2
}
Wir haben gesehen, dass eine Variable nur einen Wert haben kann, so dass jedes Mal, wenn
wir einen neuen Wert zuweisen, der alte verloren geht.
Antwort:
20
4. Boolesche Logik.
Beginnen wir mit etwas Einfachem: Erinnern Sie sich an den Betreiber! Sie wird als
Negation, not oder logisches Komplement bezeichnet und dient dazu, einen booleschen
Wert zu negieren.
Wenn ich den booleschen Wert von hasHungry habe, lautet das Komplement !hasHungry.
Ich habe die useClose-Prozedur definiert, damit wir den Reißverschluss eines Rucksacks
öffnen und schließen können.
Antwort:
Jetzt sind Sie dran! Ich habe isOlderOfAge definiert, das ein Alter erhält und daraus
YoungerOfAge wird.
Antwort:
function isOldestOf(age){
return(Alter >= 18)
}
function isMinorOfAge(age){
return(!isOldestOfAge(age))
}
Ich habe eine esPeripatetic-Funktion definiert, die den Beruf einer Person, ihre Nationalität
und die Anzahl der Kilometer, die sie pro Tag zurücklegt, berücksichtigt. Jemand ist
peripatetisch, wenn er ein griechischer Philosoph ist und gerne zu Fuß geht (er geht mehr
als 2 Kilometer pro Tag).
Antwort:
Antwort:
verbrauchtwenigEnergie(24, 5)
verbrauchtwenigEnergie(24, 0)
verbrauchtwenigEnergie(21, 7)
verbrauchtwenigEnergie(18, 1)
Antwort:
Test an der Konsole:
win(true, 25)
win(false, 30)
win(false, 20)
win(true, 31)
Antwort:
Arcadio ist der Sohn von José Arcadio und Pilar Ternera.
Aureliano José ist der Sohn von Oberst Aureliano und Pilar Ternera.
Aureliano Segundo und Remedios sind die Kinder von Arcadio und Sofía De La
Piedad.
Um mit der Analyse dieser Familie zu beginnen, haben wir bereits die Funktionen
motherFrom und fatherFrom definiert.
Jetzt sind Sie an der Reihe, die Funktion areMeansBrothers zu definieren. Denken Sie
daran, dass Halbgeschwister eine Mutter oder einen Vater haben können, aber nicht beide,
denn.... dann wären sie Geschwister!
Antwort:
Probieren Sie Ihre Funktion areMeansSiblings mit den folgenden Werten aus und prüfen
Sie, ob sie sich wie die Tabelle verhält:
Antwort:
sonHalfBrothers(arcadio, aurelianoJose)
areMeansBrothers(aurelianoSegundo, remedios)
sonMediosHermanos(aurelianoJose,remedios)
Im Gegensatz zu and, or und not wird xor normalerweise nicht in Sprachen definiert, aber
da Sie jetzt wissen, wie es funktioniert, können Sie es bei Bedarf von Hand definieren.
Mal sehen, ob Sie das verstehen: Ich habe die allgemeine Funktion xor definiert, die zwei
Boolesche Werte annimmt und den entsprechenden Wahrheitswert zurückgibt.
Antwort:
5 * 3 + 8 / 4 - 3 = 14
Wie in der Mathematik werden Ausdrücke bei der Verwendung logischer Operatoren in
einer bestimmten Reihenfolge ausgewertet, die alsRangfolge bezeichnet wird.
Antwort:
Ich habe die Funktion canRetire geschrieben, die das Alter und das Geschlecht einer Person
sowie die Anzahl der Beitragsjahre für die Rente erhält.
Das Mindestalter für Frauen liegt bei 60 Jahren, das für Männer bei 65 Jahren. In beiden
Fällen müssen Sie mindestens 30 Beitragsjahre vorweisen können.
Versuchen Sie, die Aufgabe in einer einzigen Vorstellung zu lösen! Dann wollen wir mal
sehen, wie es aussehen würde, wenn wir delegieren.
Antwort:
Ich habe die 3-Parameter-Funktion canClimb definiert, die die Körpergröße einer Person in
Metern, die Tatsache, ob sie in Begleitung ist und ob sie eine Herzerkrankung hat, erhält.
Antwort:
5. Verzeichnisse.
Übung 1: Lieblingsserie.
Um eine Gruppe von Zeichenfolgen darzustellen, setzen wir alle Zeichenfolgen, an denen
wir interessiert sind, zwischen eckige Klammern ([ und ]), die durch Kommas getrennt sind.
Einfach, nicht wahr?
Antwort:
SerienFavoritenvonAna
SerienFavoritenDeHector
["Hallo", "Welt!"]
["hallo", "hallo"]
Wir haben gerade gesehen, wie man auf einfache Weise Mengen von Dingen modellieren
kann. Mit[] bietetJavaScript eine einfache Möglichkeit, diese Elemente in Listen zu
gruppieren.
Gibt es eine maximale Anzahl von Elementen? Nein, es gibt kein Limit! Listen können eine
beliebige Anzahl von Elementen enthalten.
Und nicht nur das, auch die Ordnung ist wichtig. Zum Beispiel ist ["hallo", "Welt"] nicht
dasselbe wie ["Welt", "hallo"]: beide haben die gleichen Elemente, aber an
unterschiedlichen Positionen.
Antwort:
Menschen
Übung 3: Glücksspiele.
Wir können auch Mengen von Zahlen oder Booleschen Werten auf die gleiche Weise
darstellen, indem wir sie in eckige Klammern setzen und durch Kommas trennen. Wir
können Listen mit Zahlen, Listen mit Zeichenketten, Listen mit Booleschen Werten und so
weiter haben. Wir könnten sogar Listen von Listen haben!
Antwort:
Mal sehen, ob das klar ist. Probieren Sie die folgenden Abfragen in der Konsole aus:
LotterieNummern
salioCara
Toll, es sieht so aus, als ob eine Liste jede Art von Element enthalten kann! Wir können
Listen mit Booleschen Werten, mit Zahlen, mit Zeichenketten, mit Listen... haben.
Darüber hinaus können sie eine beliebige Anzahl von Elementen enthalten: eins, zwei,
fünfzehn, hundert.
Können wir dann leere Listen haben, d. h. mit keinen Elementen? Ja, natürlich!
let unaListaVacia = []
Antwort:
Inzwischen wissen wir, welche Dinge wir mit Listen darstellen können und wie wir dies
tun. Aber was können wir mit ihnen machen?
Beginnen wir mit dem einfachsten Teil: die Anzahl der Einträge in der Liste zu kennen.
Dies kann mit Hilfe der Längenfunktion geschehen, ähnlich wie bei den Strings.
Antwort:
length([])
length(lotteryNumbers)
length([4, 3])
Übung 6: Geschmacksverstärker.
Listen sind sehr nützlich, wenn sie mehrere Elemente enthalten. Aber es gibt noch mehr!
Wir können auch jederzeit Elemente hinzufügen, indem wir die Funktion add verwenden,
die zwei Parameter benötigt: die Liste und das Element.
Wie man sieht, wird die Liste größer, wenn man ein Element hinzufügt. Aber wo in der
Liste fügen Sie es hinzu? Am Anfang? Und am Ende? In der Mitte?
Finden Sie es selbst heraus: Überprüfen Sie die Konsole, um zu sehen, welche Gegenstände
Habseligkeiten enthalten, fügen Sie eine "Armbrust" hinzu und überprüfen Sie die
Habseligkeiten erneut.
Außerdem gibt es eine remove-Prozedur, die nur die Liste als Parameter erhält. Überprüfen
Sie die Konsole, um zu sehen, was sie tut.
Antwort:
Übung 7: Übertragung.
Deklarieren Sie eine move-Prozedur, die zwei Listen nimmt, das letzte Element aus der
ersten entfernt und es der zweiten hinzufügt.
Antwort:
Und was passiert, wenn Sie per Parameter ein Element positionieren, das es nicht gibt?
Überzeugen Sie sich selbst!
Antwort:
Position(Arbeitstage, "osvaldo")
Übung 9: Enthält.
Ich habe die Funktion contains geschrieben, um festzustellen, ob eine Liste ein bestimmtes
Element enthält.
Wenn Sie die Abfragebeispiele aufmerksam verfolgt haben, werden Sie festgestellt haben,
dass Listen auch doppelte Elemente enthalten können: [1, 2, 1], ["hallo", "hallo"], usw.
Daher gibt position tatsächlich die Position desersten Vorkommens des Elements in der
Liste zurück.
Antwort:
Genauso wie es eine Funktion gibt, um herauszufinden, an welcher Position sich ein
Element befindet, kann es auch vorkommen, dass wir das Gegenteil wissen wollen: welches
Element sich an einer bestimmten Position befindet.
Antwort:
Liste[0]
Wenn Sie nach einem Element an einer Position fragen, die gleich oder größer als die
Größe der Liste ist, erhalten Sie ein undefiniertes Ergebnis. Das hört sich nicht schlimm an,
aber das Problem ist, dass man mit undefiniert nichts wirklich Sinnvolles machen kann.
Wir erinnern Sie daran, was die Funktion bewirkt: Sie soll die Medaille zurückgeben, die
den ersten Plätzen in einem Wettbewerb entspricht.
Antwort:
function medalSecondPost(post){
if(post <= 3){
return(Medaille[Position])
} sonst {
return(Medaille[0])
}
}
Lernen wir eine Möglichkeit kennen, die Elemente einer Liste mit einem neuen Freund
durchzugehen: die for-Schleife.
Antwort:
function greet(people){
for(let person1 of persons){
print("Hallo" + " " + Person1);
}
}
6. Aufzeichnungen.
Antwort:
Kopieren Sie den Code und fügen Sie ihn in die Konsole ein
statueOfFreedom
christRedentor
Eiffelturm
tajMahal
Kolosseum
Übung 2: Ihr eigenes Denkmal.
Das ist dein Moment des Denkmals! Speichern Sie Aufzeichnungen dieser Denkmäler, die
aus den Städten Teheran,Iran bzw. Rosario,Argentinien, stammen, in den Variablen
torreAzadi und monumentoNacionalALaBandera. Trauen Sie sich zu erforschen, in
welchem Jahr sie fertiggestellt wurden, um dieses Feld zu vervollständigen?
Antwort:
Wir deklarieren die Planeten Merkur, Mars und Saturn als Datensätze mit den folgenden
Informationen: Name, TemperaturDurchschnitt und ob er Ringe hat. Probieren Sie sie an
der Konsole aus!
Antwort:
Antwort:
Funktion planetTemperature(planet){
return(planet.name + " hat eine Durchschnittstemperatur von " +
planet.averageTemperature + " Grad")
}
Entwickeln Sie die moveFile-Prozedur, die einen Datensatz und einen neuen Pfad erhält
und die Datei mit dem neuen Pfad ändert.
Antwort:
function moveFile(record, pathNew){
let readme = register.path = pathNew
}
In der vorangegangenen Übung haben wir den Registrierungspfad geändert, aber wir haben
das Erstellungsdatum nicht verwendet. Benutzen wir es! Wir wollen wissen, ob eine Datei
aus dem letzten Jahrtausend stammt, was der Fall ist, wenn ihr Jahr vor 2000 liegt.
Entwickeln Sie die Funktion isPastMillennium, die eine Datei erhält und einen booleschen
Wert zurückgibt.
Antwort:
function esDelMilenioPasado(file){
return(year(file.creation) < 2000)
}
Erstellen Sie eine Funktion moreDifficultToBake, die zwei Dessertdatensätze als Parameter
nimmt und denjenigen mit den meisten Zutaten zurückgibt.
Antwort:
Übung 8: Registrierungslisten.
So wie wir mit Listen von Zahlen, Booleschen Werten, Zeichenketten oder anderen Listen
arbeiten, können wir auch Datensätze auflisten. Mit den eckigen Klammern [ ] können Sie
alles tun, was Sie zuvor getan haben, z. B. entfernen, die Länge herausfinden oder nach dem
Element einer bestimmten Position fragen.
Probieren Sie die Listen der DessertsFavoriten und DenkmälerAmerikas in der Konsole aus.
Es gibt ein Dessert, das wir noch nicht gezeigt haben. Kannst du anhand der Zutaten
erkennen, um welches Dessert es sich handelt?
Antwort:
DessertsFavoriten
monumentosDeAmerica
Entwickeln Sie die Prozedur addFastDesserts, die eine Liste mit Schnelldesserts und ein
Dessert pro Parameter erhält. Beträgt die Garzeit eine Stunde oder weniger, wird der
Eintrag in die Liste aufgenommen.
Antwort:
Finden Sie heraus, was das Feld ingredients des Feldes dessert des menuChildren-
Datensatzes ergibt. Es ist ein Register im anderen!
Antwort:
menuChildren.dessert.ingredients
Ich habe eine Prozedur sweetenMenu definiert, die einen Menüdatensatz empfängt und
dessen Dessertzutaten Zucker hinzufügt. Wenn bereits Zucker enthalten ist, spielt das keine
Rolle.... mehr hinzufügen!
Antwort:
function sweetenMenu(menu){
add(menu.dessert.ingredients, "Zucker")
return menu.dessert
}
7. Routen.
Gibt es ein Problem mit der Funktion gainSemester, die wir oben geschrieben haben?
Funktioniert es auch mit vierteljährlichen Bilanzen? Wie sieht es mit viermonatigen
Quartalen aus?
Antwort:
profitSemester
Wir möchten in der Lage sein, die Gewinne aller Salden in einer Liste zu addieren,
unabhängig davon, wie viele es tatsächlich gibt; wir möchten eine Funktion profitTotal, die
die Salden für einen beliebigen Zeitraum von Monaten addieren kann: Semester, Quartal,
Trimester usw. Wie schwierig!
Antwort:
gananciaTotal([
{ Monat: "Januar", Gewinn: 2 },
{ Monat: "Februar", Gewinn: 3 }
])
Antwort:
Funktion gananciaTotal4(balancesOfAperiod){
let sum = 0
Summierung = Summierung + balancesOfAperiod[0].gain
Summierung = Summierung + balancesOfAperiod[1].gain
Summierung = Summierung + balancesOfAperiod[2].gain
Summierung = Summierung + balancesOfAperiod[3].gain
Rücksumme
}
Wir müssen also den Vorgang der Akkumulation mehrmals wiederholen, einmal für jedes
Element der Liste. Sagen wir (wieder) Hallo zum for...of!
Wie Sie sehen können, erlaubt uns das for...of, jedes Element einer Liste zu besuchen und
etwas damit zu tun; in diesem Fall werden wir jeden Saldo von balancesOfAperiod
besuchen.
Antwort:
profitTotal([
{ Monat: "März", Gewinn: 8 },
{ Monat: "August", Gewinn: 10 }
])
Anna hat neue Anforderungen! Nun fragte er uns: "Ich möchte wissen, wie viele Bilanzen
positiv waren, d.h. bei denen der Gewinn größer als Null war.
Antwort:
function amountOfBalancesPositive(balancesOfAperiod){
let Menge = 0
for(let balance of balancesOfOnePeriod){
Menge = Menge + ((Saldo.Gewinn) > 0)
}
Rücklaufmenge;
}
Kommen wir nun zu Anas nächstem Anliegen. Wir können bereits eine Summe der Erträge
berechnen und auch Zähler erstellen, jetzt werden wir Durchschnittswerte berechnen.
Ana würde gerne wissen, wie hoch der durchschnittliche Gewinn bei einer beliebigen
Anzahl von Guthaben ist.
Antwort:
Funktion gananciaPrommedio(gananciaTotal){
let sum = 0
for(let balance of gananciaTotal){
Summierung = (Summierung + Balance.gain)
}
return Summe / Länge (gainTotal)
}
Da wir alles tun können, worum sie uns bittet, möchte Ana den durchschnittlichen Gewinn
der positiven Salden wissen.
positivPositiver Gewinn, der sich aus der Summe der Gewinne der positiven Salden
ergibt.
averagePositiveProfit mit Aufruf von PositivePositiveProfit und
PositiveBalanceSheetAmount.
Antwort:
function positiveGain(balancesOfAperiod){
let sum = 0
for(let balance of balancesOfOnePeriod){
if(balance.gain > 0){
Summierung = Summierung + (Saldo.Gewinn)
}
}
Rücksumme
}
function averagePositiveProfits(balancesOfAperiod){
return PositiveGain(balancesOfAperiod) /
PositiveBalanceAmount(balancesOfAperiod)
}
Leider ist es nicht möglich, die Durchschnittsfunktion mit unserer Liste von Datensätzen zu
verwenden. Was wir brauchen, ist eine Liste, die nur die Erträge der einzelnen Bilanzen
enthält. Dazu müssen wir jedes Element der Liste umwandeln bzw.abbilden.
Vervollständigen Sie die Ergebnisfunktion, die eine Liste von Bilanzen aufnimmt und nur
die Ergebnisse der einzelnen Bilanzen zurückgibt.
Antwort:
function earnings(balancesOfAperiod){
let profits = []
for(let balance of balancesOfOnePeriod){
add(Gewinn, Saldo.Gewinn)
}
Renditechancen
}
Mit Programmierung kann man alles, oder fast alles, machen. Wir haben bereits eine
Funktion erstellt, um die Anzahl der positiven Salden zu ermitteln
(numberOfPositiveBalances), nun wollen wir sehen, wie wir herausfinden können, welches
diese Salden sind.
Vervollständigen Sie die Funktion balancesPositive, die die Salden einer Periode aufnimmt
und eine Liste derjenigen zurückgibt, deren Gewinn größer als Null war.
Antwort:
function balancesPositives(balancesOfAperiod){
let balances = []
for(let balance of balancesOfOnePeriod){
if(balance.gain > 0){
add(Salden, Saldo)
}
}
Rücklaufsalden
}
Da wir nun die Gewinnfunktion und die positiven Salden haben, können wir die allgemeine
Durchschnittsfunktion verwenden, um herauszufinden, wie hoch der durchschnittliche
Gewinn der positiven Salden ist.
Definieren Sie die Funktion profitsFromBalancesPositive und verwenden Sie sie dann
zusammen mit average, um averageFromBalancesPositive zu definieren.
Antwort:
function gainsFromBalancesPositive(balancesOfAperiod){
return earnings(balancesPositive(balancesOfAperiod))
}
function averagePositiveBalances(balancesOfAperiod){
return
average(earningsPositiveBalanceStatements(balanceStatementsOfAperiod))
}
Wir werden eine neue Funktion kennenlernen, maximo, mit der wir den größten Wert in
einer Liste von Zahlen ermitteln können.
Mit dieser neuen Funktion habe ich die Funktion maxProfit definiert, die uns den höchsten
Gewinn unter den Guthaben über einen bestimmten Zeitraum angibt.
Antwort:
function maxProfit(balancesOfAperiod){
return max(Erträge(SaldenderPeriode))
}
Wir gehen davon aus, dass Sie den Namen erraten haben. Wenn nicht, ist sie minimal.
Definieren Sie die Funktion minimumPositiveProfit, die uns sagt, was der niedrigste
Gewinn aller positiven Salden ist.
Antwort:
function minimumPositiveProfit(balancesOfAperiod){
return minimo(gananciasDeBalancesPositivos(balancesDeUnPeriodo));
}
months, die bei einer Liste von Datensätzen eine Liste von Monaten zurückgibt;
Glück, das diejenigen Datensätze herausfiltert, die einen Gewinn von mehr als 1000
Dollar aufweisen;
LuckyMonths, gibt die Monate zurück, die Glück brachten.
Antwort:
function months(earningsPeriod){
let month = []
for(let period of earningsPeriod){
add(Monat, Zeitraum.Monat)
}
Rückgabemonat
}
function lucky(earningsPeriod){
let lucky = []
for(let period of earningsPeriod){
if(period.gain > 1000){
add(lucky, period);
}
}
Glück zurück;
}
function LuckyMonths(earningsPeriod){
return months(lucky(earningsPeriod));
}