Timpfeiffer/Komplexe Leistung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
=Eigenschaften und graphische Darstellung quadratischer Funktionen=
==Herausfinden der Parameter==
<code id="5c950c31a1103">
function getabc(gleichung) {
  gleichung = gleichung.replace(/(?:y=|f\(x\)=)/,'');
  if(gleichung.startsWith('+')) gleichung = gleichung.replace('+','');
  var parameter = {
    'a': '',
    'b': '',
    'c': ''
  }
  
  let check = false,
      digits = 0,
      posa = gleichung.indexOf('x²') - 1;
  
  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('+','');
  
  check = false;
  digits = 0;
  let posb = gleichung.indexOf('x') - 1;
	
  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);
  
  parameter.c = gleichung * 1;
  return(parameter);
}
</code>

==Ausgabe der Nullstellen und des Scheitelpunktes==
<code id="5cdbb5849b632">
function infos(parameter){
 if(parameter.a == 0){
  //mn-Form:
  let m = parameter.b,
      n = parameter.c;

  //Nullstelle:
  var x0 = 0;
  if(m==0)
    if(n==0)
      x0 = 'unendlich viele NST';
    else
      x0 = 'keine NST';
  else
    x0 = Number(- n / m);
  
  //Ausgabe:
  console.log(`<i>Nullstelle:</i> <b>${x0}</b>`);
 }
 else{
  //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">
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="5cdbb5849b6bd" htmloutput>
const gl = '0.5x²+2x-3';
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>