Timpfeiffer/Komplexe Leistung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
=Prolog=
Wie Sie sicherlich dem Titel schon entnehmen konnten, behandeln die folgenden Seiten quadratische Funktionen. Des Weiteren werde ich auf deren Implementation in ein JavaScript-Programm vertieft eingehen. Die quadratische Funktion ist ein Jahrhunderte bekanntes beeindruckendes Phänomen, welches auch seinen Nutzen in der Physik bringt. Viele Wissenschaftler haben mithilfe quadratischer Funktionen verschiedenste Phänomene der Physik beschrieben.<br>
JavaScript ist eine der wichtigsten Programmiersprachen<sup>[1]</sup> der Welt. Es findet in vielen Bereichen Anwendung, so zum Beispiel auch in der Programmierung eines “Bots” für den Kommunikationsdienst “Discord”. Auf diesem Wege befasste ich mich weiterführender mit JavaScript außerhalb des Unterrichtes – Erfolgreich.<br>
Das sich im folgenden Verlauf der Seite befindende Programm, welches dort näher erläutert wird, implementiert die Ermittlung der Nullstellen und des Scheitelpunktes einer vorher definierten quadratischen Funktion und stellt diese grafisch dar. Im Nachwort werde ich einige Mängel und Fehler des Programms näher betrachten. Außerdem können sie dort auch mögliche Anwendungen für dieses Programm finden.<br><br>
<sup>[1]</sup> http://www.commag.org/die-wichtigsten-programmiersprachen-unserer-zeit/

=Grundlagen zu quadratischen Funktionen=

=Anwendungen quadratischer Funktionen in der Physik=

=Grundlagen zu JavaScript=

=Programm=
==Herausfinden der Parameter==
<code id="5c950c31a1103" readonly>
function getabc(gleichung) {
  gleichung = gleichung.replace('y=','');
  if(gleichung.startsWith('+')) gleichung = gleichung.replace('+','');
  var parameter = {
    'a': '',
    'b': '',
    'c': ''
  }
  
  //get a
  //setting up some variables
  let check = false,
      digits = 0,
      posa = gleichung.indexOf('x²') - 1;
  
  //case splitting
  if(posa == -2) return;
  else switch(gleichung[posa]){
    case undefined: parameter.a =  1; gleichung = gleichung.replace(`x²`,''); break;
    case '+': parameter.a =  1; gleichung = gleichung.replace(`+x²`,''); break;
    case '-': parameter.a = -1; gleichung = gleichung.replace(`-x²`,''); break;
    default: while(!check){
      if(gleichung[posa - digits] * 1 || gleichung[posa - digits] == '0' || gleichung[posa - digits] == '.'){
	parameter.a += gleichung[posa - digits];
	digits++;
      }
      else{
      	if(gleichung[posa - digits] == '-') parameter.a += '-';
	check = true;
      	parameter.a = parameter.a.split('').reverse().join('') * 1;
      	gleichung = gleichung.replace(`${parameter.a}x²`,'');
      }
    }
  }
  if(gleichung.startsWith('+')) gleichung = gleichung.replace('+','');
  
  //get b
  //setting up some variables
  check = false;
  digits = 0;
  let posb = gleichung.indexOf('x') - 1;
	
  //case splitting
  if(posb == -2) parameter.b = 0;
  else switch(gleichung[posb]){
    case undefined: parameter.b =  1;gleichung = gleichung.replace(`x`,'');break;
    case '+': parameter.b =  1;gleichung = gleichung.replace(`+x`,'');break;
    case '-': parameter.b = -1;gleichung = gleichung.replace(`-x`,'');break;
    default: while(!check){
      if(gleichung[posb - digits] * 1 || gleichung[posb - digits] == '0' || gleichung[posb - digits] == '.'){
	parameter.b += gleichung[posb - digits];
	digits++;
      }
      else{
      	if(gleichung[posb - digits] == '-') parameter.b += '-';
	check = true;
      	parameter.b = parameter.b.split('').reverse().join('') * 1;
      	gleichung = gleichung.replace(`${parameter.b}x`,'');
      }
    }
  }
  if(gleichung.startsWith('+')) gleichung = gleichung.replace('+','');
  if(gleichung.endsWith('+')) gleichung = gleichung.substring(0, gleichung.length - 1);
  
  //get c
  parameter.c = gleichung * 1;
  return(parameter);
}
</code>

==Ausgabe der Nullstellen und des Scheitelpunktes==
<code id="5c950c31a117a" readonly>
function infos(parameter){
  //pq-Form:
  let p = parameter.b / parameter.a, 
      q = parameter.c / parameter.a;
  
  //Nullstelle:
  var x1 = 0,
      x2 = 0;
  if((p * p / 4) - q < 0){
    x1 = 'nicht definiert';
    x2 = 'nicht definiert';
  }
  else if((p * p / 4) - q == 0){
    x1 = Number((- (p / 2)).toFixed(3));
    x2 = 'nicht definiert';
  }
  else if((p * p / 4) - q > 0){
    x1 = Number((- (p / 2) + Math.sqrt((p * p / 4) - q)).toFixed(3));
    x2 = Number((- (p / 2) - Math.sqrt((p * p / 4) - q)).toFixed(3));
  }

  //Scheitelpunkt:
  var x = Number((- (p / 2)).toFixed(3)),
      y = Number((parameter.a * (- (p * p / 4) + q)).toFixed(3));
  
  //Ausgabe:
  console.log(`<i>Nullstelle 1:</i> <b>${x1}</b><br> <i>Nullstelle 2:</i> <b>${x2}</b><br> <i>Scheitelpunkt:</i> <b>S(${x}|${y})</b>`);
}
</code>

==Grafische Darstellung==
<code id="5c950c31a11e2" readonly>
function grafik(canvas, turtle, parameter){
  canvas.clear();
  turtle.hide();
  turtle.move(0, xAchse);
  turtle.right(90);
  turtle.forward(400);
  turtle.move(yAchse, 0);
  console.log('<font color="#ffffff">    Hier könnte Ihre Werbung stehen!</font>')
  turtle.right(90);
  turtle.forward(400);
  for(var i = 1; i <= 19; i++){
    turtle.move(20 * i, xAchse - 5);
    turtle.forward(10);
    turtle.left(90);
    turtle.move(yAchse - 5, 20 * i);
    turtle.forward(10);
    turtle.right(90);
  }
  for(var x = -10; x <= 10; x += 0.0025){
    posx = 20 * x + yAchse;
    posy = -20 * (parameter.a * x * x + parameter.b * x + parameter.c) + xAchse;
    turtle.move(posx, posy);
    turtle.forward(0.01);
  }
}
</code>

==Ergebnis am "Front-End"==
<canvas w="400" h="400"></canvas>

<run id="5c950c31a1253" htmloutput>
const gl = 'Bitte einfügen!';
let pm = getabc(gl);
if(!pm) console.log('<i>Die angegebene Funktion ist keine quadratische Funktion!</i>');
else {
  infos(pm);
  var xAchse = 400 / 2, yAchse = 400 / 2;
  grafik(canvas1, turtle1, pm);
}
</run>

=Nachwort=