Mam zrobione 2 programy, jeden w c# (kompletny z okienkiem z obliczeniami c#), drugi w c++ ze wstawkami z asm (obliczenia w asm). Ten w c++ działa bez problemu natomiast nie wiem jak wstawić te wstawki asm do kodu c# tak aby to działało. Byłbym bardzo wdzięczny gdyby ktoś mi z tym pomógł.
c#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public string a;
public string b;
public string c;
public double p;
public double q;
private void textBox1_TextChanged(object sender, EventArgs e)
{
string a = this.textBox1.Text;
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
string b = this.textBox1.Text;
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
string c = this.textBox1.Text;
}
private void button1_Click(object sender, EventArgs e)
{
string d =( this.textBox1.Text + " x^2 + " + this.textBox2.Text +" x + "+ this.textBox3.Text);
textBox4.Text = d;
int a = Convert.ToInt32(textBox1.Text); //konwertuje z string(textbox) na int do oblicznien
int b = Convert.ToInt32(textBox2.Text);
int c = Convert.ToInt32(textBox3.Text);
double delta = ((b * b) - (4 * a * c));
double p = (-1*((-1 * b)) / (2 * a));
double q = (-1 * (delta / (4 * a)));
if (a == 0) //sprawdza czy jest x^2
{
textBox5.Text = ("rownanie liniowe");
}
else if (delta > 0)
{
double x1 = (((-1 * b) - Math.Sqrt(delta)) / (2 * a));//x1
double x2 = (((-1 * b) + Math.Sqrt(delta)) / (2 * a));//x2
string y1 = Convert.ToString(x1);//konvertuje na string do textboxa
string y2 = Convert.ToString(x2);
string f = Convert.ToString(delta);
textBox5.Text = ("delta = " + f + " x1 = " + y1 + " x2 = " + y2);//wyswietla w textbox
}
else if(delta == 0){
double x1 = (((-1 * b) ) / (2 * a));
string y1 = Convert.ToString(x1);
string f = Convert.ToString(delta);
textBox5.Text = ("delta = " + f + " x1 = " +y1);
}
else
{
textBox5.Text = ("brak rozwiazan w R");
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void c_Click(object sender, EventArgs e)
{
}
private void textBox4_TextChanged(object sender, EventArgs e)
{
}
private void textBox5_TextChanged(object sender, EventArgs e)
{
}
}
}
c++
double del(double a, double b, double c, double delta, double s) {
_asm
{
finit // inicjalizacja i reset koprocesora
fld b //załadowanie zmiennej b na stos
fmul b //pomnożenie b*b
fld a //załadowanie zmiennej a na stos
fld c //załadowanie zmiennej c na stos
fmul st, st(1) //pomnożenie a ze szczytem stosu czyli c
fld s //załadowanie stałej s czyli 4 na szczyt stosu
fmul st, st(1) //pomnożenie stałej s czyli 4 ze starym szczytem stosu czyli a*c
fsub st(3), st //odjęcie b*b od 4*a*c
fxch st(3) //zamiana obliczonej delty ze szczytem stosu
fstp delta //zdjęcie wyniku ze stosu i zapisanie go do zmiennej delta
}
return delta;
}
double pierwiastek(double delta)
{
double pierw = 0;
_asm
{
finit //inicjalizacja i reset koprocesora
fld delta //załadowanie delty na stos
fsqrt //obliczenie pierwiastka delty
fstp pierw //zdjęcie obliczonego pierwiastka i zapisanie go do zmiennej pierw
}
return pierw;
}
double zero(double b, double a, double x0)
{
double m = 2;
double l = -1;
_asm
{
finit //inicjalizacja i reset koprocesora
fld b //załadowanie zmiennej b na stos
fmul l //pomnożenie b*(-1)
fstp x0 //zdjęcie wyniki u zapisanie go do zmiennej x0
fld a //załadowanie zmiennej a
fmul m //pomnożenie 2*a
fld x0 //załadowanie x0 na stos
fdiv st, st(1) //podzielenie -b/2*a
fstp x0 //zdjęcie wyniku i zapiasnie go do zmiennej x0
}
return x0;
}
double jeden( double b, double a, double pierw)
{
double l = -1;
double m = 2;
double x1 = 0;
_asm {
finit //inicjalizacja i reset koprocesora
fld b //załadowanie zmiennej b na stos
fmul l //pomnożenie b*(-1)
fld pierw // załadowanie zmiennej pierw (pierwiastek z delty) na stos
fsub st(1), st //odjęcie -b-pierw
fstp x1 //zdjęcie wyniku i zapisanie go do zmiennej x1
fld a //załadowanie zmiennej a
fmul m //pomnożenie 2*a
fld x1 //załadowanie x1 na stos
fdiv st, st(1) //podzielenie -b-pierw/2*a
fstp x1 //zdjęcie wyniku i zapiasnie go do zmiennej x1
}
return x1;
}
double dwa( double b, double a, double pierw)
{
double l = -1;
double m = 2;
double x2 = 0;
_asm {
finit //inicjalizacja i reset koprocesora
fld b //załadowanie zmiennej b na stos
fmul l //pomnożenie b*(-1)
fld pierw // załadowanie zmiennej pierw (pierwiastek z delty) na stos
fadd st(1), st //odjęcie -b-pierw
fstp x2 //zdjęcie wyniku i zapisanie go do zmiennej x2
fld a //załadowanie zmiennej a
fmul m //pomnożenie 2*a
fld x2 //załadowanie x1 na stos
fdiv st, st(1) //podzielenie -b+pierw/2*a
fstp x2 //zdjęcie wyniku i zapiasnie go do zmiennej x2
}
return x2;
}
using namespace std;
int main()
{
double a, b, c, delta = 0, s = 4, d = 2, x = 0, x1 = 0, x2 = 0, x0 = 0, pierw = 0;
cout << "podaj a: ", cin >> a;
cout << "podaj b: ", cin >> b;
cout << "podaj c: ", cin >> c;
delta = del(a, b, c, delta, s);
cout << "Delta wynosi: " << delta << endl;
pierw = pierwiastek(delta);
cout << "Pierw wynosi: " << pierw << endl;
if (delta < 0) cout << "Delta jest rowna 0, brak rozwiązań" << endl;
else if (delta == 0) cout << "Delta rowna 0, x0 wynosi: " << zero(b, a, x0) << endl;
else
{
x1 = jeden (b, a, pierw);
cout << "Delta wieksza niz 0, dwa rozwiazania x1: " << x1 << endl;
x2 = dwa( b, a, pierw);
cout << "x2: " << x2 << endl;
}
system("pause");
}