www.plusplanet.de
Schulinfos von F. Töns



11.05.2021
Sieh' dir folgende Pixelgrafik an:
Bild "Informatik_EF_Abi2023:20210510_baumdemo.png"
Dort sind 4 "Pixelbäume" zu sehen. Diese bestehen aus einem Stamm (einfach nur ein schwarzer Streifen) und mehreren identischen "Blätterdächern", die etwas verstreut am Stamm angeordnet sind

Aufgabe:
Programmiere mit unserer im Unterricht erarbeiteten Vorlage (mit der wir schon Smilies erstellt haben) einen solchen Pixelbaum!
Hinweise:
Die fünf "Blätterdächer" an einem Baum sind wie unsere Smilies konstruiert.
Der Stamm muss zuerst gezeichnet werden (dies macht man am Besten mit einer Schleife) und dann zeichnet man die Blätterdächer darüber.

Zur Programmierung benutzt ihr entweder eure Version aus dem Unterricht, oder ihr benutzt folgende Basisversion von mir:
20210500_pixelgrafik_gui_basic_3_smileybasis.zip


04.05.2021
Bitte lade folgendes Projekt herunter:
20210500_pixelgrafik_gui_basic.zip
Bevor Du dies Projekt in BlueJ öffnen kannst, musst Du es entpacken! Also doppelklicken UND ZUSÄTZLICH das Verzeichnis herauskopieren! Dann erst das Projekt in BlueJ öffnen.
(Hinweis: Wenn man das Verzeichnis nicht herauskopiert, startet BlueJ zwar, sagt aber, dass er das Projekt nicht finden kann oder sowas!)

Dann schaue Dir folgenden Podcast an:
www.plusplanet.de/video/20210504_vidcast_pixelgrafik_bluej.mp4

27.04.2021
Zelluläre Automaten
Forschungsaufträge:
Aufgabe 2: Ändere das Programm so, dass eine pbm-Datei herauskommt:
www.plusplanet.de/miscrawhtml/sierpinski.pbm
Aufgabe 3: Finde und benenne (mit der entsprechenden Zahl) die Regel, die (bei einem Startpixel) ein vollkommen schwarzes Dreieck zeichnet.
Aufgabe 4: Finde und benenne (mit der entsprechenden Zahl) die Regel, die (bei einem Startpixel) ein Muster zeichnet, welches abwechselnd schwarze und weiße Linien zeichnet.
Aufgabe 4: Momentan findet man ein Folgepixel dadurch, dass man sich die drei Pixel über dem zu zeichnenden Pixel anschaut. Erweitere das Programm so, dass die FÜNF Pixel über dem zu zeichnenden Pixel berücksichtigt werden und finde Regeln, die möglichst spannende Muster erzeugen!
Kleiner Ansporn: https://softologyblog.wordpress.com/2018/09/17/extended-neighborhood-1d-cellular-automata/

27.04.2021
Zelluläre Automaten
Plan für heute:
Klärung der Bedeutung von "Regel 30" und wie man auf die 30 kommt.
Aufgabe 1: Erstelle Regel 99
Aufgabe 2: Ändere das Programm so, dass eine pbm-Datei herauskommt:
www.plusplanet.de/miscrawhtml/sierpinski.pbm
Aufgabe 3: Finde und benenne (mit der entsprechenden Zahl) die Regel, die (bei einem Startpixel) ein vollkommen schwarzes Dreieck zeichnet.


23.04.2021
Zelluläre Automaten

Siehe dir die folgende Datei einerseits in Notepad++ an und andererseits in irfanview:
www.plusplanet.de/miscrawhtml/sierpinski.pbm

Lies schließlich folgenden Artikel:
https://de.wikipedia.org/wiki/Regel_30
Fertige eine Sicherheitskopie deines Programms an und programmiere die Regel 30!

Versuche zu verstehen, warum die Regel 30 so heißt wie sie heißt und erstelle dann das Muster für Regel 99!




26.03.2021

Eine etwas verbesserte Klasse "Person":



public class Person {
    int sirStatus = 0; // 0=susceptible, 1=infected, 2=immune
    int daysInfected = 0;
    int location = 0; // einer von insgesamt maxLocations Orten

    int maxLocations = 100;
    int maxDaysInfected = 14;

    boolean newInfection;

    public void init() {
        // neuen Zufallsort bestimmen
        location = (int)(Math.random() * maxLocations);
        newInfection = false;
    }

    public void infiziereMitWahrscheinlichkeit(double w) {
        if(sirStatus == 0 ) {
            if(Math.random() < w) {
                newInfection = true;
            }
        }
    }

    public void zeitschritt() {
        // neuen Zufallsort bestimmen
        location = (int)(Math.random() * maxLocations);
        // int locationDiff = (int)((Math.random()-0.5) * 6);
        // location = location + locationDiff;
        // if(location >= maxLocations) {
        //     location = maxLocations-1;
        // }
        // if(location < 0 ) {
        //     location = 0;
        // }
        

        if(newInfection) {
            sirStatus = 1;
            newInfection = false;
        }
        // Infektionstage hochzählen
        if( sirStatus == 1) {
            daysInfected = daysInfected + 1;
            if(daysInfected >= maxDaysInfected) {
                sirStatus = 2;
            }
        }
    }

    public boolean istInfiziert() {
        if(sirStatus == 1) {
            return true;
        }
        return false;
    }

    public boolean gleicherOrtWie(Person x) {
        if(location == x.location) {
            return true;
        }
        return false;
    }

    public String toString() {
        String status = "";

        if(sirStatus == 0) {
            status = "Ort: "+location+" anfällig";
        }
        if(sirStatus == 1) {
            status = "Ort: "+location+" infiziert ("+daysInfected+". Tag)";
        }
        if(sirStatus == 2) {
            status = "Ort: "+location+" immun";
        }
        return status;
    }
}







16.03.2021
Ein minimaler "Kosenamengenerator"
Damit wir in der Pandemiesimulation ganz einfach tausende von Personen simulieren können, müssen wir das Konzept "Arrays" verstehen, also die Verwaltung mehrerer gleichartiger Objekte.


public class Haupt {
    public static void main() {
        Kosenamengenerator k = new Kosenamengenerator();
        
        for(int i = 0; i < 19; i++) {
            String n = k.getName();
            System.out.println("Hallo, "+n);
        }
    }
}
// -------------------
// Aufgabe 1: Erweitere den Generator um neue teil- und hauptworte
// Aufgabe 2: Erweitere den Generator um ein beschreibendes Adjektiv:
//            Beispielergebnis: "hübsches Mäusezähnchen" oder "blühendes Zimtfünkchen"
// Aufgabe 3: Erweitere das Adjektiv auf zwei Wortteile:
//            Beispielergebnis: "wunderhübsches Mäusezähnchen" oder "zauberblühendes Zimtfünkchen"
public class Kosenamengenerator {
    String[] teilworte;
    String[] hauptworte;
    
    public Kosenamengenerator() {
        teilworte = new String[6];
        hauptworte = new String[7];
        
        teilworte[0] = "Mäuse";
        teilworte[1] = "Schnurzel";
        teilworte[2] = "Zauber";
        teilworte[3] = "Zimt";
        teilworte[4] = "Wuschel";
        teilworte[5] = "Traum";
        
        hauptworte[0] = "zähnchen";
        hauptworte[1] = "würfelchen";
        hauptworte[2] = "bärchen";
        hauptworte[3] = "schneckchen";
        hauptworte[4] = "fünkchen";
        hauptworte[5] = "flocke";
        hauptworte[6] = "spatz";
    }
    
    public int zufall(int von, int bis) {
        int differenz = bis - von + 1;
        int zufallszahl = (int) (Math.random() * differenz);
        return von + zufallszahl;
    }
    
    public String getName() {
        String teil1 = teilworte[zufall(0,5)];
        String teil2 = hauptworte[zufall(0,6)];
        return teil1 + teil2;
    }
}



16.03.2021


public class Haupt {
    public static void main(String[] args) {
        Person pa = new Person();
        Person pb = new Person();
        Person pc = new Person();
        
        pa.init();
        pb.init();
        pc.init();
        
        pa.infiziereMitWahrscheinlichkeit(1.0);
                
        for(int i = 0; i < 20; i++) {
            if(pa.istInfiziert()) {
                if(pa.gleicherOrtWie(pb)) {
                    pb.infiziereMitWahrscheinlichkeit(0.2);
                }
                if(pa.gleicherOrtWie(pc)) {
                    pc.infiziereMitWahrscheinlichkeit(0.2);
                }
            }
            // gleiche Abfragen für pb
            if(pb.istInfiziert()) {
                if(pb.gleicherOrtWie(pa)) {
                    pa.infiziereMitWahrscheinlichkeit(0.2);
                }
                if(pb.gleicherOrtWie(pc)) {
                    pc.infiziereMitWahrscheinlichkeit(0.2);
                }
            }
            // gleiche Abfragen für pc
            if(pc.istInfiziert()) {
                if(pc.gleicherOrtWie(pa)) {
                    pa.infiziereMitWahrscheinlichkeit(0.2);
                }
                if(pc.gleicherOrtWie(pb)) {
                    pb.infiziereMitWahrscheinlichkeit(0.2);
                }
            }
            
            
            // Statusausgabe:
            System.out.println("Zeitschritt "+i);
            System.out.println("Status Person a: "+pa.toString());
            System.out.println("Status Person b: "+pb.toString());
            System.out.println("Status Person c: "+pc.toString());  

            pa.zeitschritt();
            pb.zeitschritt();
            pc.zeitschritt();
            
        }
    }
}

// ----------------------------------------------------------

public class Person {
    int sirStatus = 0;     // 0=susceptible, 1=infected, 2=immune
    int daysInfected = 0;  // wird hochgezählt, falls Person infiziert ist
    int location = 0;      // einer von 10 Orten
    
    public void init() {
        // neuen Zufallsort bestimmen
        location = (int)(Math.random() * 10);        
    }
    
    public void infiziereMitWahrscheinlichkeit(double w) {
        if(sirStatus == 0 ) {
            if(Math.random() < w) {
                sirStatus = 1;
            }
        }
    }
    
    public void zeitschritt() {
        // neuen Zufallsort bestimmen
        location = (int)(Math.random() * 10);
        
        // Infektionstage hochzählen
        if( sirStatus == 1) {
            daysInfected = daysInfected + 1;
            if(daysInfected >= 14) {
                sirStatus = 2;
            }
        }
    }
    
    public boolean istInfiziert() {
        if(sirStatus == 1) {
            return true;
        }
        return false;
    }
    
    public boolean gleicherOrtWie(Person x) {
        if(location == x.location) {
            return true;
        }
        return false;
    }
    
    public String toString() {
        String status = "";
        
        if(sirStatus == 0) {
            status = "Ort: "+location+" anfällig";
        }
        if(sirStatus == 1) {
            status = "Ort: "+location+" infiziert ("+daysInfected+". Tag)";
        }
        if(sirStatus == 2) {
            status = "Ort: "+location+" immun";
        }
        return status;
    }
}




15.12.2020
Lesestoff für den Distanzunterricht:
00000000_033_IF11_Klassen_und_Objekte.pdf


11.12.2020
Realisierung des Smiley-Spiels:
• Ein zweites, rotes Icon erstellen
• In der Action-performed-Methode für jeden Button eine if-Anweisung erstellen (die dann die Icons der entsprechenden Nachbarbuttons ändert). Problem: wir wissen nicht, ob wir die gelb oder rot machen müssen!
• Einführung der Methoden setName(...) getName() und equals(). Setzen aller Namen auf "-"
• Schreiben der ersten korrekten if-Anweisung.


Fortgeschrittene Ideen fürs Smiley-Spiel:
• Ein Button "Reset", der alles wieder auf die Ausgangssituation stellt.
• Bei jedem Buttonclick wird eine Variable hochgezählt, die die Anzahl der benötigten Klicks mitzählt. Dadurch kann man eine Art Punktestand programmieren, der auch immer in einem Label angezeigt werden könnte.
• Neuer Button "Undo" (letzten Schritt rückgängig machen). Dazu "merkt" man sich in einer Variablen, welcher Button als letztes gedrückt wurde - und dann "drückt" man diesen im Programm erneut. Dazu muss man nur die letzte Aktion erneut durchführen, da ja ein doppelter Buttonclick eigentlich nichts verändert (außer vielleicht den Punktestand).
• Änderung der Spiellogik auf drei (statt zwei) unterschiedliche Zustände?


17.11.2020
http://www.plusplanet.de/miscrawhtml/canvas_basic_01.html
Speichere diese Datei ab und versuche, folgendes zu programmieren:
• Eine Linie von rechts nach links
• Eine Linie von oben nach unten
• Eine gestrichelte Linie (Richtung egal)
• Mehrere waagerechte Linien untereinander, die sich aber in der Helligkeit ändern (Links schwarz, rechts weiß)
• Mehrere waagerechte Linien untereinander, die sich abwechselnd in der Helligkeit ändern (Links schwarz, rechts weiß - nächste Linie links weiß, rechts schwarz)


10.11.2020
http://www.plusplanet.de/miscrawhtml/reverse.html


03.11.2020
Eine Demonstration eines Multiple-Choice-Tests:
http://www.plusplanet.de/quizmeister_demo/index.php


27.10.2020
Zahlenspielereien
Lege eine neue Datei mit dem Namen index.html an und kopiere diesen Inhalt dort hinein:





<!DOCTYPE html>
<html>
<head>
<title>TODO</title>
<meta charset="UTF-8">

<script>
'use strict';


// Berechnet alle Teiler der Zahl a
// Beispiel: Teilemenge(24) ist 1,2,3,4,6,8,12,24
//           Teilemenge(25) ist 1,5,25
// Ergebnis: eine Zeichenkette der Art "1,2,3,4,6,8,12,24"
function teilermenge(a) {
    return "Todo!";
}

// Berechnet die Fakultät der Zahl a
// Beispiel: faku(5) ist 1*2*3*4*5 = 120
// Ergebnis: eine ganze Zahl.
function faku(a) {
return "Todo!";
}

// Berechnet die Summe aller Zahlen von 1 bis a
// Beispiel: summeBis(5) ist 1+2+3+4+5 = 15
// Ergebnis: eine ganze Zahl.
function summeBis(a) {
return "Todo!";
}

// Berechnet das kleinste gemeinsame Vielfache der beiden Zahlen a und b.
// Beispiel: kgV(12,8) ist 24, denn sowohl 12*2=24 und 8*3=24
//           und es gibt keine kleinere Zahl mit dieser Eigenschaft.
// Ergebnis: eine ganze Zahl.
function kgV(a,b) {
return "Todo!";
}
// Berechnet den größten gemeinsamen Teiler der beiden Zahlen a und b.
// Beispiel: ggT(12,8) ist 4, denn sowohl 12 und 8 sind durch 4 teilbar
//           und es gibt keine größere Zahl mit dieser Eigenschaft.
// Ergebnis: eine ganze Zahl.
function ggT(a,b) {
var ergebnis = 1;
for(var i = a; i >= 1; i--) {
if((istPTeilbarDurchQ(a,i)=="ja") && (istPTeilbarDurchQ(b,i) == "ja")) {
ergebnis = i;
break;
}
}
return ergebnis;
}

// Überprüft, ob die testzahl eine Primzahl ist.
// Die 1 ist keine Primzahl, 2 ist eine Primzahl (Spezialfälle)
// 3 ist eine Primzahl, 4 ist keine Primzahl, da 2*2 = 4 ist. usw.
// Ergebnis: "ja" oder "nein"
function istPrimzahl(testzahl) {
var ergebnis = "ja";
if(testzahl == 1) {
return "nein";
}
for(var i = 2; i < testzahl; i++) {
if(istPTeilbarDurchQ(testzahl,i)=="ja") {
ergebnis = "nein";
}
}
return ergebnis;
}

// Überprüft, ob die Zahl p durch die Zahl q (ohne Rest) teilbar ist.
// Beispiel: 16 ist durch 8 teilbar, denn  16 durch 8 = 2
//           16 ist aber nicht durch 12 teilbar, denn 16 durch 12 = 1 Rest 4
// Ergebnis: "ja" oder "nein"
function istPTeilbarDurchQ(p,q) {
if((p%q) == 0) {
return "ja";
} else {
return "nein";
}
}

function reaktion() {
    var za = document.getElementById('myInputZahlA').value;
    var zb = document.getElementById('myInputZahlB').value;

    var ergebnis = "";
ergebnis = ergebnis + "Ist Zahl A durch B teilbar? " + istPTeilbarDurchQ(za,zb) + "<br>";
ergebnis = ergebnis + "Ist Zahl B durch A teilbar? " + istPTeilbarDurchQ(zb,za) + "<br><br>";

ergebnis = ergebnis + "Ist Zahl A eine Primzahl? " + istPrimzahl(za) + "<br>";
ergebnis = ergebnis + "Ist Zahl B eine Primzahl? " + istPrimzahl(zb) + "<br><br>";

ergebnis = ergebnis + "Der ggT von A und B ist: " + ggT(za,zb) + "<br><br>";
ergebnis = ergebnis + "Das kgV von A und B ist: " + kgV(za,zb) + "<br><br>";

ergebnis = ergebnis + "Die Teilermenge von Zahl A ist: " + teilermenge(za) + "<br>";
ergebnis = ergebnis + "Die Teilermenge von Zahl B ist: " + teilermenge(zb) + "<br><br>";

ergebnis = ergebnis + "Die Fakultät von Zahl A ist: " + faku(za) + "<br>";
ergebnis = ergebnis + "Die Fakultät von Zahl B ist: " + faku(za) + "<br><br>";

ergebnis = ergebnis + "Die Summe 1+2+3+ ... + Zahl A ist: " + summeBis(za) + "<br>";
ergebnis = ergebnis + "Die Summe 1+2+3+ ... + Zahl B ist: " + summeBis(zb) + "<br><br>";

    // ----------- Ausgabe ---------------------

    document.getElementById('textfeld').innerHTML = ergebnis;
}


</script>
</head>

<body  style="text-align:center;">

<h1>Mathematische Untersuchungen</h1>

<div id="textfeld" style="text-align:center;">
(Es wurde noch nichts generiert!)
</div>
<br> <br> <br>
<div style="text-align:center;">
Zahl A<input type="text" id="myInputZahlA"> <br>
Zahl B<input type="text" id="myInputZahlB"> <br>
<input type="button" onClick="reaktion();" value="Klick"><br>
</div>
<br><br>
<b>Aufgaben:</b><br>
1) Optimiere den Primzahltest: Man muss nicht alle Elemente bis zur Testzahl durchprobieren.<br>
2) Optimiere die ggT-Berechnung: Man muss höchstens bis zur kleineren der beiden Zahlen durchprobieren.<br>
3) Schreibe die noch fehlenden Funktionen.<br>
</body>
</html>










06.10.2020
ROT13
Baue folgenden Code in das bestehende Projekt ein:


function rot13Anwendung() {
    var eingabe = document.getElementById('myInputWort').value;
    var verschluesselterText = rot13(eingabe);  
    // ----------- Ausgabe ---------------------
    document.getElementById('textfeld').innerHTML = verschluesselterText;
}

function rot13(text) {
    text = text.toLowerCase();
    var abc = "abcdefghijklmnopqrstuvwxyz";
    var ergebnis = "";
    for(var i = 0; i < text.length; i++) {
        var zeichen = text.charAt(i);
        var zeichenIndex = abc.indexOf(zeichen);
        if (zeichenIndex != - 1) {
            zeichenIndex = zeichenIndex + 13;
            if(zeichenIndex >= 26) {
                zeichenIndex = zeichenIndex - 26;
            }
            ergebnis = ergebnis + abc.charAt(zeichenIndex);
        } else {
            ergebnis = ergebnis + zeichen;      
        }
    }
    return ergebnis;
}


Im HTML-Teil dann noch folgende Zeile

<input type="button" onClick="rot13Anwendung();" value="ROT13"><br>




02.10.2020
Ein paar Textspielereien


<!DOCTYPE html>
<html>
<head>
<title>TODO</title>
<meta charset="UTF-8">

<script>
'use strict';

function zaehleA(eingabe) {
    var erg = "";
    var zaehler = 0;
    
    for(var i = 0; i < eingabe.length; i++) {
        if(eingabe.charAt(i) == 'a') {
            zaehler = zaehler + 1;
        }
    }
    erg = "Ich zaehle "+zaehler+" mal den Vokal 'a'.";
    return erg;
}

function zaehleB(eingabe) {
    var erg = "";
    var zaehler = 0;
    
    for(var i = 0; i < eingabe.length; i++) {
        if(eingabe.charAt(i) == 'b') {
            zaehler = zaehler + 1;
        }
    }
    erg = "Ich zaehle "+zaehler+" mal den Vokal 'b'.";
    return erg;
}


function reaktion() {
    var wort = document.getElementById('myInputWort').value;

    var ergebnis = zaehleA(wort);
    ergebnis = ergebnis + "<br>" + zaehleB(wort);
    // ----------- Ausgabe ---------------------

    document.getElementById('textfeld').innerHTML = ergebnis;
}
</script>
</head>

<body>

<h1>TODO</h1>

<div id="textfeld" style="text-align:center;">
(Es wurde noch nichts generiert!)
</div>
<br> <br> <br>
<div style="text-align:center;">
Gib ein Wort ein <input type="text" id="myInputWort"> <br>
<input type="button" onClick="reaktion();" value="Klick">
</div>
Aufgaben:<br>
1a) Zähle alle 'a' in der Eingabe.<br>
1b) Zähle alle Vokale in der Eingabe.<br>
2) Gib an, ob das Wort ein Palindrom ist.<br>
3) Erzeuge die b-Sprache aus dem Wort. ("Ibinfobormabatibik ibist toboll")<br>
4) Drehe das Wort um.<br>
5) Erzeuge eine Hervorhebung in der Art    H E R V O R H E B U N G<br>
4) Ersetze jeden Vokal mit a, e, i oder u ("Drei Chinesen mit dem Kontrabass")<br>
4) Erzeuge Anagramme.<br>

</body>
</html>



22.09.2020
Spaß-Persönlichkeitsanalyse für Märchenfiguren


<!DOCTYPE html>
<html>
<head>
<title>Super-Persönlichkeitsanalyse</title>
<meta charset="UTF-8">

<script>
'use strict';

function reaktion() {
    var alter = document.getElementById('myInputAlter').value;
var groesse = document.getElementById('myInputGroesse').value;
var geschlecht = document.getElementById('myInputGeschlecht').value;

var ergebnis = "";

if(geschlecht == "m") {
ergebnis = "Aus Dir wird einmal ein mutiger Ritter!";
}
if(geschlecht == "w") {
ergebnis = "Aus Dir wird einmal eine zauberschöne Prinzessin!";
}

    // ----------- Ausgabe ---------------------

    document.getElementById('textfeld').innerHTML = ergebnis;
}
</script>
</head>

<body>

<h1>Super-Persönlichkeitsanalyse für Märchenfiguren</h1>

<div id="textfeld" style="text-align:center;">
(Es wurde noch nichts generiert!)
</div>
<br> <br> <br>
<div style="text-align:center;">
Dein Alter <input type="text" id="myInputAlter"> (in Jahre)<br>
Deine Körpergröße <input type="text" id="myInputGroesse"> (in cm)<br>
Dein Geschlecht <input type="text" id="myInputGeschlecht"> (w oder m)<br>
<input type="button" onClick="reaktion();" value="Klick">
</div>
Aufgaben:<br>
1) Erweitere die Funktion "reaktion()" so, dass eine detailliertere "Analyse" erstellt wird. Dazu musst Du if-Anweisungen verschachteln.<br>
2) Bevor eine Analyse erstellt wird, sollte überprüft werden, ob die Eingabedaten OK sind. Falls nicht, sol eine Fehlermeldung ausgegeben werden.<br>
</body>
</html>



15.09.2020
Zufalls-Songtexte mit Javascript (Teil 2)

<html>

<head>
<title>Songtext per Zufall</title>
<script>

function songtext() {
    var zeile = "";
    
    // -----------------------------------------

    // Zufallszahlen zwischen 0 und 1 erzeugen:
    var zzahlA = Math.random();
    var zzahlB = Math.random();
    
    // Je nach Wert von zzahlA ersten Satzteil wählen
    if( (zzahlA >= 0.0) && (zzahlA < 0.5) ) {
        zeile = zeile + "Your girlfriend is a ";
    }
    if( (zzahlA >= 0.5) && (zzahlA < 1.0) ) {
        zeile = zeile + "Your boyfriend is a ";
    }

    // Je nach Wert von zzahlB zweiten Satzteil wählen
    if( (zzahlB >= 0.0) && (zzahlB < 0.5) ) {
        zeile = zeile + "funny bird!";
    }
    if( (zzahlB >= 0.5) && (zzahlB < 1.0) ) {
        zeile = zeile + "boring duck!";
    }

    // -----------------------------------------
    zeile = zeile + "<br>";
    // -----------------------------------------

    // Zufallszahlen zwischen 0 und 1 erzeugen:
    var zzahlC = Math.random();
    
    // Je nach Wert von zzahlC Satztyp wählen
    if( (zzahlC >= 0.0) && (zzahlC < 0.5) ) {
        zeile = zeile + "Yeah Yeah Yeah!";
    }
    if( (zzahlC >= 0.5) && (zzahlC < 1.0) ) {
        zeile = zeile + "Oh no! Oh no! Oh no!";
    }

    // ----------- Ausgabe ---------------------

    document.getElementById('textfeld').innerHTML = zeile;
}
</script>
</head>

<body>

<h1>Zufälliger Songtext</h1>

<div id="textfeld" style="text-align:center;">
(Es wurde noch nichts generiert!)
</div>
<br> <br> <br>
<input type="button" onClick="songtext();" value="Klick">

</body>
</html>




11.09.2020
Zufalls-Songtexte mit Javascript
Kopiere folgenden Programmcode in eine Datei mit Namen songtexter.html (oder ähnlich - aber mit der Endung .html)


<html>

<head>
<title>Songtext per Zufall</title>
<script>

function songtext() {
    var name;
    name = document.getElementById('eingabe').value;
    
    // Zufallszahlen zwischen 0 und 1 erzeugen:
    var zzahlA = Math.random();
    var zzahlB = Math.random();
    
    var zeile = "Hey "+name+"! ";
    
    // Je nach Wert von zzahlA ersten Satzteil wählen
    if( (zzahlA >= 0  ) && (zzahlA < 0.3) ) {
        zeile = zeile + "Your girlfriend is a ";
    }
    if( (zzahlA >= 0.3) && (zzahlA < 0.6) ) {
        zeile = zeile + "Your boyfriend is a ";
    }
    if( (zzahlA >= 0.6) && (zzahlA < 0.8) ) {
        zeile = zeile + "Your mama is a ";
    }
    if( (zzahlA >= 0.8) && (zzahlA < 1.0) ) {
        zeile = zeile + "Your papa is a ";
    }

    // Je nach Wert von zzahlB zweiten Satzteil wählen
    if( (zzahlB >= 0.0) && (zzahlB < 0.4) ) {
        zeile = zeile + "funny bird!";
    }
    if( (zzahlB >= 0.4) && (zzahlB < 0.8) ) {
        zeile = zeile + "intelligent owl!";
    }
    if( (zzahlB >= 0.8) && (zzahlB < 1.0) ) {
        zeile = zeile + "boring hipster!";
    }

    document.getElementById('textfeld').innerHTML = zeile;
}
</script>
</head>

<body>

<h1>Zufälliger Songtext</h1>

<div id="textfeld" style="text-align:center;">
(Es wurde noch nichts generiert!)
</div>

<br>
<br>
<br>

<input type="text" id="eingabe"> <br>
<input type="button" onClick="songtext();" value="Klick">

</body>

</html>



25.08.2020
EVA: Glitch-Art
Erstelle mit deinem Wissen über Daten und deren Darstellung ein "Glitch-Art"-Kunstwerk!


14.08.2020
Zusammenhang Lightbot und Programmierung

* Ein Programmierer gibt Befehle (an den Computer oder Roboter oder...)
* Befehle werden nach der Reihe abgearbeitet
* Befehlsfolgen können zu einer Einheit zusammengefasst werden und wiederholt ausgeführt werden
* Ein Programm belegt Speicherplatz, und der ist nicht unendlich groß


     Bit : Kleinste Informationseinheit:
           "An oder Aus" oder "1 oder 0" oder "schwarz oder weiß"
    Byte : Ein Byte besteht aus 8 Bits / "ein Buchstabe",
           256 Werte sind damit darstellbar
Kilobyte = 1024 Byte
Megabyte = 1024 Kilobyte
Gigabyte = 1024 Megabyte
Terabyte = 1024 Gigabyte




14.08.2020

Light-Bot

Das LightBot-Spiel: www.plusplanet.de/swf_lightbotMUELL/lightbot.html

Grundlagen Windows

* Erstelle auf dem Desktop ein Verzeichnis mit dem Namen "Informatikhelden"
* Erstelle ein Dokument (ein einfacher Kurztext wie "Hallo Informatik" genügt) in der Textverarbeitungssoftware "Open-Office" und speichere es ab in dem Ordner "Informatikhelden"
* Erstelle ein Dokument in dem Programm "Notepad" oder "Notepad++" (beides auf dem Desktop zu finden) mit dem gleichen Text wie in der vorigen Aufgabe. Auch Dieses Dokument soll wieder in dem Verzeichnis "Informatikhelden" abgespeichert werden.
* Schaue Dir den Inhalt des Ordners "Informatikhelden" mit dem Datei-Explorer an und erkläre, welche Unterschiede die beiden abgespeicherten Dateien besitzen.

Daten und Information

Speichere folgenden Text als Textdatei (z.B. bild.txt) auf den Desktop. Ändere dann den Namen in bild.pbm
Ein Doppelclick auf die Datei startet dann nicht mehr den Texteditor, sondern einen Bildbetrachter.
Erkläre, was du siehst, und warum du das siehst! Lies ggf. den Text https://de.wikipedia.org/wiki/Portable_Anymap auf der Wikipedia dazu.

P4 144 16
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
zzzzzzzzOOOOOOOO
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz
OOOOOOOOzzzzzzzz



Daten im Zahlenformat anzeigen

Dafür gibt es z.B. einen Dienst im Internet: https://hexed.it/

Daten hörbar machen:

Download von Audacity, einem Audioeditor:
http://downloads.sourceforge.net/portableapps/AudacityPortable_2.1.1.paf.exe?download
Beliebige Daten können damit "hörbar" gemacht werden, indem man folgendes tut:
Datei->Importieren...->Raw-Audio
Dann erscheint ein Fenster mit Einstellungen (am Besten die Voreinstellungen unverändert lassen).

Daten sichtbar machen

Mit dem Programm IrfanView kann man Daten als Grafik interpretieren lassen, wenn man folgende Schritte befolgt:
Zunächst muss fügt man am Anfang der Textdatei folgende Zeile ein:
P4 200 150
(Dies ist notwendig, damit IrfanView die Datei als Grafikdatei im PBM-Format erkennt. Dabei bedeuten die Zahlen 200 und 150, dass das Bild 200 Pixel breit und 150 Pixel hoch ist)
Als nächstes muss man die Dateinamenserweiterung von .txt in .pbm umbenennen. Schließlich kann man diese Datei dann in IrfanView hineinladen.


03.11.2020
Multiple-Choice-Test:
http://www.plusplanet.de/quizmeister_20201103_ifef/index.php


28.04.2021
http://www.plusplanet.de/miscrawhtml/20210428_funktionsuntersuchung.jpg