Avatar billede simondid Nybegynder
24. oktober 2012 - 10:04 Der er 7 kommentarer

c++ løs -2x-4=7x+1 hjælp ?? skole opgave....

hej

åhh har fået en  stilled en opgave om at lave et c++ program som kan løse denne ligning -2x-4=7x+1 og sener hænd en 2. grands ligning er sådan  lige pt. på rimelig bar bund i forhold til at løse det har før hænd arbejde med java og lommeregner og ved der fra at den bedste løsning var at få inputtet som en array  og der efter lave om i den og så regne den ud på en eller anden måde.

men dette er meget lang tid siden og kan endelig ikke helt huske løsningen  eller finde de postes jeg før hænd har lavt omkring det .... ☹ ved der findes nogle Be skrævende tekniker til at løse sådan nogle matematiske problemer med men kan desværre ikke huske hvad de hedder nogle der kan hjælpe ??
Avatar billede MADOlsen Forsker
24. oktober 2012 - 11:31 #1
http://www.eksperten.dk/list/spoergsmaal/simondid

Ovenstående link giver dig en oversigt over de spørgsmål du tidligere har stillet, bl.a. dem ang. lommeregneren :-)
Avatar billede simondid Nybegynder
24. oktober 2012 - 14:31 #2
lol :( hade lige over set den funktion mange tak :) lige et hurtigt spørgsmål nogle der ved om det kan lade sige gøre at skrive den kode om til c++ og ikke mindst håndter 2 grands ligninger??
Avatar billede arne_v Ekspert
26. oktober 2012 - 20:03 #3
Til inspiration:

#include <iostream>
#include <cmath>

using namespace std;

typedef double (*fptr)(double x);

const double EPS = 0.0000001;

double f1(double x)
{
    return -2*x-4;
}

double f2(double x)
{
    return 7*x+1;
}

double f(fptr lhs, fptr rhs, double x)
{
    return lhs(x)-rhs(x);
}

double df(fptr lhs, fptr rhs, double x)
{
    return (f(lhs,rhs,x+EPS)-f(lhs,rhs,x))/EPS;
}

double solve(fptr lhs, fptr rhs)
{
    double x = 0;
    double oldx = -1;
    while(fabs(x - oldx) > EPS)
    {
        oldx = x;
        x = oldx - f(lhs,rhs,oldx)/df(lhs,rhs,oldx);
    }
    return x;
}

int main()
{
    cout << solve(f1,f2) << endl;
    return 0;
}
Avatar billede simondid Nybegynder
27. oktober 2012 - 16:02 #4
takker for inspirationen heldig hvis fik vi lidt mere info om hvordan det kan lade sig gøre at løse opgave :) her et det stykke arbejde jeg har lavt indtil videre som virker rat godt syntes jeg selv :)

mit største problem lige pt er at den ikke kan tage tal som består af mere end 1 tal og heller ikke 2 grads ligninger hvis i har nogle ider til at løse det kunne det være fedt

[code]


#include <iostream>



using namespace std;
void behandelLigning(char input[]);
char ligning[100];

float tempA=0;
float tempAA=0;
float tempC=0;
float tempB=0;
float a = 0;
float b = 0;
float c = 0;
float final;
int main(int argc, const char * argv[])
{
   
   
   
    cout << "velkommen til lommeregneren :)"<<endl;
    cin >> ligning;
    behandelLigning(ligning);
   
   
   
    return 0;
}
void behandelLigning(char input[]){
   
    for (int i =0; i<100; i++) {
       
        if (input[i]=='x') {
            tempAA=input[i-1]-48;
            if (input[i-2]=='-') {
               
                // b=b*-1;
                tempAA=tempAA*-1;
            }else if (input[i-2]=='+'){
               
                tempAA=tempAA*tempAA/tempAA;
            }
            cout << " tempAA før = ="<<tempAA<<" x"<<endl;

            tempA=tempA+tempAA;
           
        }
       
        if (isdigit(input[i])) {
            if(input[i+1]=='x'){
                // gør ingen ting da det er en x værdi
            }else{
               
                if (b==48) {
                    tempB=input[i]-48;
                }else{
                    tempB=input[i]-48;
                }
               
               
                if (input[i-1]=='-') {
                   
                    // b=b*-1;
                   
                    tempB=tempB*-1;
                }else if (input[i-1]=='+'){
                }
               
                cout << "tempB før = ="<<tempB<<endl;
                b=b+tempB*-1;
            }
        }
       
        //^^^^ før ligheds tegnet under efter ligheds tegnet
       
        if (input[i]=='=') {
            for (int re =0; i<100; i++) {
                if (input[i]=='x') {
                    tempAA=input[i-1]-48;
                    if (input[i-2]=='-') {
                       
                        // b=b*-1;
                        tempAA=tempAA*-1;
                    }else if (input[i-2]=='+'){
                       
                        tempAA=tempAA*tempAA/tempAA;
                    }
                    cout << " tempAA efter = ="<<tempAA<<" x"<<endl;
                    tempA=tempA+tempAA*-1;
                   
                }
               
                if (isdigit(input[i])) {
                    if(input[i+1]=='x'){
                        // gør ingen ting da det er en x værdi
                    }else{
                       
                        if (c==48) {
                            tempC=input[i]-48;
                        }else{
                            tempC=input[i]-48;
                        }
                       
                       
                        if (input[i-1]=='-') {
                           
                            // b=b*-1;
                           
                            tempC=tempC*-1;
                        }else if (input[i-1]=='+'){
                            // gør ingen ting da det er +
                        }
                       
                        cout << "tempC efter = ="<<tempC<<endl;
                        c=c+tempC;
                    }
                }
               
            }
           
           
           
           
        }
       
       
    }
    a=tempA;
    // a=tempA+tempAA;
    cout <<endl;
    cout<<"tempA="<<tempA<<endl;
    cout<<"tempAA="<<tempAA<<endl;
   
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    cout<<"c="<<c<<endl;
    if (c==48) {
        final=b+(c-48);
    }else{
        final = b+c;
    }
   
   
    cout<<"fianl b+c = "<<final<<endl;
   
    cout<<"x="<<final/a;
   
}
[/code]
Avatar billede simondid Nybegynder
27. oktober 2012 - 16:06 #5
åhh kan see at det ikke er blevet kopieret rigtig ind så her er lige et pastbin link i stedet :)

http://pastebin.com/S1N9bpbL

kan man rediger et post i stedet for at double poste?
Avatar billede arne_v Ekspert
27. oktober 2012 - 23:31 #6
Det der er vel mere en parsnings opgave en en lignings loesning.
Avatar billede simondid Nybegynder
29. oktober 2012 - 08:26 #7
åhh hvis jeg vidste hvad du mener med parsnings opgave så vill jeg sikker give dig rat :)

i har ikke nogle ider til hvis dan det kan lade sig gøre at få tal med to tal i fx. 22
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester