Timpfeiffer/Komplexe Leistung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
<code id="5c89571c8a184">
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(`Nullstelle 1: ${x1}`);
  console.log(`Nullstelle 2: ${x2}`);
  console.log(`Scheitelpunkt: S(${x}|${y})`);
}

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 grafik(canvas, turtle, parameter){
	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);
  }
  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);
  }
  turtle.hide();
}
</code>

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

<run id="5c8fd13de85cd" id=5c89571c8a184>
const gl = 'y=20x-x+44';
let pm = getabc(gl);
if(!pm) console.log('Die angegebene Funktion ist keine quadratische Funktion!');
else {
  infos(pm);
  var xAchse = 400 / 2, yAchse = 400 / 2;
  grafik(canvas1, turtle1, pm);
}
</run>