MakeCode: Listenabfrage Element mit Wert "0" funktioniert nicht auf dem Calliope


#1

Ausgangssituation: Ich lege ein Array (“testArray”) der Größe 3 an und füge zwei Zahlen größer Null hinzu.
Jetzt frage ich ab, ob dieses Array den Wert (die Zahl) 0 enthält (“testArray” finde Position von >0<) und weise das Ergebnis (die Position) einer Variablen zu.
In der MakeCode-Simulations-Umgebung erhalte ich dafür korrekt den Wert -1, da ja kein Element in dem Array den Wert 0 hat.
Wenn ich das Programm allerdings auf dem Calliope laufen lasse, bekomme ich aber das Ergebnis 2, sprich es wird an der letzten Position des Arrays der Wert 0 gelesen. Ich denke, die Funktion sollte auch für den Wert 0 auf dem Calliope auch -1 liefern, denn wenn ich z.B. statt der 0 den Wert 7 auf dem Calliope abfrage, bekomme ich auch korrekt -1 geliefert.

Beispiel-Programm: https://makecode.com/_68A62XTub4oC


#2

Hallo,

ich schaue mal nur auf die Ausgangssituation und die ist so nicht richtig. Die Parameter im Block “Erstelle Array mit” legen die Werte fest. In deinem Programm wird also ein Array erstellt, das genau ein Element hat und dieses den Wert 3. Da das Array bei 0 beginnt, gilt also testArray[0] = 3.
Makecode nennt es Array, es ist aber eine Liste und du kannst dynamisch erweitern mit “füge Werte am Ende hinzu”. Bei NEPO heißt es Liste, dort sind es aber statische Arrays. Die Übersetzung ist unglücklich.

Den Rest schaue ich mir bei Gelegenheit mal an.

Toni


#3

Die Parameter im Block “Erstelle Array mit” legen die Werte fest

Dann müsste ich dort aber mehrere Elemente angeben können, was aber nicht geht: Ich kann im MakeCode-Editor nur eine Zahl (ein Puzzleteil) einfügen.

Das erzeugte JS sieht so aus:
let testArray: number[] = []
testArray = [3]
testArray[0] = 5

Ich vermute auch, dass auf dem Calliope mini statische Arrays verwendet werden. Möglicherweise werden sie schon mit 0 vor-initialisiert. Sollte es ein dynamisches Array sein, könnte eine ‘/0’-Terminierung das Problem verursachen?

Selbst in dem Fall, dass das Array dann lediglich den Wert 3 enthält, müsste die genannte Abfrage für den Wert 0 als Ergebnis -1 liefern, da dieser Wert ja nicht vorhanden ist.


#4

Du kannst mehrere Werte anlegen, indem du auf das Zahnradsymbol klickst und dann den Wertblock, sooft er benötigt wird, einfügst. Wenn du die Listendurchlaufschleife nutzt, sieht man die Werte und die dynamische Größenänderung auch prima. Unter https://moodle.wossidlogymnasium.de/mod/resource/view.php?id=9558 gibt es ein AB, dass ich jüngst für meine Schüler erstellt habe.


#5

Das und vieles mehr ist im neuen Makecode besser/logischer gelöst. Hoffenlich kommt eine Umsetzung für Calliope Mini
Unbenannt