Timpfeiffer/Komplexe Leistung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
<code id="5c89571c8a184">
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;break;
    case '+': parameter.b =  1;break;
    case '-': parameter.b = -1;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;
  console.log(parameter);
  return(parameter);
}

function infos(gleichung){
    var ae = gleichung.indexOf('x²'), //Ende von a
        be = gleichung.indexOf('x', ae + 2); //Ende von b
    //a,b,c herausfinden:
    var a = gleichung.substring(gleichung.indexOf('=') + 1, ae) * 1,
        b = gleichung.substring(ae + 2, be) * 1,
        c = gleichung.substring(be + 1) * 1,
        p = b / a, 
        q = c / 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));
    }
    else return console.error('Die angegebene Funktion konnte nicht verarbeitet werden!');

    //Scheitelpunkt:
    var x = Number((- (p / 2)).toFixed(3)),
        y = Number((a * (- (p * p / 4) + q)).toFixed(3));

    //Ausgabe:
    console.log(`Nullstelle 1: ${x1}`);
    console.log(`Nullstelle 2: ${x2}`);
    console.log(`Scheitelpunkt: S(${x}|${y})`);
}

var xAchse = 400 / 2, yAchse = 400 / 2;

function koordinatensystem(canvas, turtle){
    canvas.clear();
    turtle.hide();
    turtle.move(0, xAchse);
    turtle.right(90);
    turtle.forward(400);
    turtle.move(yAchse, 0);
    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);
    }
}

function parabel(turtle, gleichung){
    var ae = gleichung.indexOf('x²'), //Ende von a
        be = gleichung.indexOf('x', ae + 2); //Ende von b
    //a,b,c herausfinden:
    var a = gleichung.substring(gleichung.indexOf('=') + 1, ae) * 1,
        b = gleichung.substring(ae + 2, be) * 1,
        c = gleichung.substring(be + 1) * 1;

    for(var x = -10; x <= 10; x += 0.0025){
        posx = 20 * x + yAchse;
        posy = -20 * (a * x * x + b * x + c) + xAchse;
        turtle.move(posx, posy);
        turtle.forward(0.01)
    }
    turtle.hide();
}
</code>

<canvas w="400" h="400"></canvas>

<run id="5c8fd13de85cd" id=5c89571c8a184>
const gleichung = "y=4x²+1x-2";
let parameter = parameter(gleichung);
if(!parameter) return console.log('Die angegebene Funktion ist keine quadratische Funktion!');
infos(parameter);
koordinatensystem(canvas1, turtle1);
parabel(turtle1, parameter);
</run>