Timpfeiffer/Komplexe Leistung
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Javascript</language>
<code id="5c89571c8a184" 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);
}
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 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);
}
}
</code>
<canvas w="400" h="400"></canvas>
<run id="5c950167158c3" id=5c89571c8a184 htmloutput>
const gl = 'Bitte einfügen!';
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>