====== Arrays ======
===== Initialisierung und Zugriff =====
Eindimensionale Arrays, Grundlagen
a = [7,11,13,42]; // Array mit 4 Elementen
console.log(a); // Ganzes Array ausgeben
console.log(`Das erste Element ist a[0]=${a[0]}`);
console.log(`Das Array hat a.length=${a.length} Elemente`);
console.log(`Das letzte Element ist a[a.length-1]=${a[a.length-1]}`);
console.log("Zweites Element mit 1111 überschreiben: a[1] = 'Hallo';");
a[1] = 'Hallo'; // Zweites Element überschreiben
console.log(a); // Ganzes Array ausgeben
Initialisierung mit .push
// Array befüllen mit push
a = []; // Leeres Array
for (let i=0; i<10; i++) {
a.push(i*i+i+1); // Neuen Wert hinten anfügen
}
console.log(a);
Initialisierung mit [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from|Array.from]]
Das erste Argument ist ein Objekt, das die //property// ''length'' hat.
Das zweite Argument ist eine Funktion, die als zweiten Parameter den jeweiligen Index bekommt. Der erste Parameter wäre das i-te Element vom Objekt, das aber hier einfach ignoriert wird (und sowieso ''undefined'' wäre).
a = Array.from({length:10}, (_,i)=>i*i+i+1);
console.log(a);
===== Mehrdimensionale Arrays =====
// Drei Punkte, gegeben als Array von 2 Koordinaten
dreieck = [[1,2], [5,3], [2,-1]];
console.log(dreieck);
console.log(`Zweiter Punkt dreieck[1]=${dreieck[1]}`);
console.log(`x-Koordinate vom 3. Punkt ist dreieck[2][0]=${dreieck[2][0]}`);
// Distanz zwischen den Punkten
for (let i=0; i<3; i++) {
for (let j=(i+1); j<3; j++) {
let l=0;
for (let k=0; k<2; k++) {
l+=(dreieck[i][k]-dreieck[j][k])**2;
}
l=l**0.5; // Wurzel!
console.log(`Distanz von Punkt ${i} zu Punkt ${j} ist ${l}`);
}
}
Initialisierung
wuerfel = [];
for (let x=0; x<2; x++) {
for (let y=0; y<2; y++) {
for (let z=0; z<2; z++) {
wuerfel.push([x,y,z]);
}
}
}
console.log(wuerfel);
// Variante mit Bitoperationen und Array.from
// (i>>1) Verschiebt die Bits von i um eine Stelle nach rechts (niederwertigstes Bit fällt weg)
// & 1 rechnet bitweise UND, d.h. alle ausser das niederwertigste Bit werden gelöscht.
wuerfel = Array.from({length:8}, (_,i) => [i & 1, (i >> 1) & 1, (i>>2) & 1]);
// Variante für n Dimensionen
n = 4;
tesseract = Array.from({length:2**n}, (_,i) => Array.from({length:n}, (_,k) => (i>>k) & 1));
===== Pascal-Dreieck =====
==== Erzeugung ====
Erster Schritt: Aus einer Zeile die nächste generieren.
zeile = [1,4,6,4,1];
neu = [1]; // Zeile startet mit 1
for (let i=0; i
Als Funktion verpacken und verwenden
function nextline(zeile) {
let neu = [1]; // Zeile startet mit 1
for (let i=0; i
==== Ausgabe ====
Hilfsfunktionen:
* String mit einer gegebenen Anzahl Leerschlägen erzeugen
* Zahl mit Leerschlägen auf gegebene Länge auffüllen.
function wiederholen(n, zeichen=" ") {
let s = "";
for (let i=0; i
Oder very fancy:
function wiederholen(n, zeichen=" ") {
return Array.from({length:n}, ()=>zeichen).join("");
}
Zahlen mit nötigen Leerschlägen ausgeben:
function fuellen(zahl, n) {
let s = zahl.toString();
s += wiederholen(n-s.length);
return s;
}
Oder zentriert:
function fuellen(zahl, n) {
zahl = zahl.toString();
let fehlen = n-zahl.length;
let vorne = Math.floor(fehlen/2);
return wiederholen(vorne)+zahl+wiederholen(fehlen-vorne);
}
Und jetzt die flexible Ausgabe:
function ausgabe(pascal) {
let n = pascal.length-1; // Index der letzten Zeile
let space = pascal[n][Math.floor(n/2)].toString().length+1; // Grösster Koeffizient, Länge in Buchstaben+1
let s = "";
for (let i=0; i<=n; i++) {
s += wiederholen(Math.floor((n-i)*space/2));
s += pascal[i].map((e)=>fuellen(e,space)).join("")
s += "\n"; // Zeilenumbruch
}
return s;
}
==== Pascaldreieck direkt erzeugen ====
// = n*(n-1)*(n-2)*...*(n-k+1) / (1*2*3*...*k)
function binomial(n,k) {
if (k<0 || k>n) return 0;
if (k==0 || k==n) return 1;
if (k>n/2) return binomial(n,n-k);
let r=n;
for (let i=1; iArray.from({length:n+1}, (_,k)=>binomial(n,k)));
==== Screencast ====
[[https://fginfo.ksbg.ch/~ivo/videos/informatik/ffprog24-2/02-pascal-dreieck.mp4|Weltöffentlich]] und für [[https://bldsg-my.sharepoint.com/:v:/g/personal/ivo_bloechliger_ksbg_ch/EVSGwxcSndZOhy7htMcPplgBHRko1oNh_e0PZQQINOQ-hw?nav=eyJyZWZlcnJhbEluZm8iOnsicmVmZXJyYWxBcHAiOiJPbmVEcml2ZUZvckJ1c2luZXNzIiwicmVmZXJyYWxBcHBQbGF0Zm9ybSI6IldlYiIsInJlZmVycmFsTW9kZSI6InZpZXciLCJyZWZlcnJhbFZpZXciOiJNeUZpbGVzTGlua0NvcHkifX0&e=iBDwEE|St. Gallen Microsofties]]
function nextLine(zeile) {
let neu = [1];
for (let i=0; izeichen).join("");
}
function zahlfuellen(zahl, n) {
zahl = zahl.toString();
let fehlt = n-zahl.length;
let vorne = Math.floor(fehlt/2);
return wiederholen(vorne)+zahl+wiederholen(fehlt-vorne);
}
function ausgabe(n) {
let d = dreieck(n);
let largest = d[n][Math.floor(n/2)];
let space = largest.toString().length+1;
let s = "";
for (let i=0; i<=n; i++) {
s += wiederholen(space*(n-i)/2);
s += d[i].map((e)=>zahlfuellen(e,space)).join("");
s += "\n"; // Zeilenumbruch
}
return s;
}
console.log(ausgabe(10));