Avatar billede visualdeveloper Nybegynder
14. august 2005 - 11:03 Der er 11 kommentarer og
1 løsning

Simpel ligning i c++

Hej eksperter...

jeg sidder og leger lidt med den smule c++ jeg har lært men jeg kan ikke få dette program til at løse denne simple ligning.


#include <iostream>

using namespace std;

main()
{
      double x;
      x + 5 = 23;
      cout << "x + 5 = 23  x = " << x << endl;
      system("pause");
      return 0;
      }


nogle der kan hjælpe mig med at løse ligninger i c++ !

Jeg har ikke særlig mange points men jeg kan også give karma !
Avatar billede arne_v Ekspert
14. august 2005 - 11:23 #1
den nemme men uinteressante løsning er:

omskriv til:

x = 23 - 5;

den rigtige løsning er:

bruge newtons formel + bruge funktion pointers:

#include <iostream>

using namespace std;

double f1(double x)
{
    return x - 10;
}

double f2(double x)
{
    return x * x - 25;
}

const double SMALL = 0.0000001;

typedef double (*fptr)(double x);

double solve(fptr f)
{
    double xlast = 0;
    double x = 1;
    while(fabs(x-xlast)>SMALL)
    {
        xlast = x;
        x = x - f(x) / ((f(x+SMALL/2)-f(x-SMALL/2))/SMALL);
    }
    return x;
}


int main()
{
    cout << "x - 10 = 0 => x = " << solve(f1) << endl;
    cout << "x * x - 25 = 0 => x = " << solve(f2) << endl;
    return 0;
}

[men det kræver altså både lidt C/C++ og lidt matematik at forstå]
Avatar billede nielle Nybegynder
14. august 2005 - 11:23 #2
Skulle kunne gøre det:

#include <iostream>

using namespace std;

main()
{
    double x;
    x + 5 = 23;
    cout << "x + 5 = 23  x = " << 23-5 << endl;
    system("pause");
    return 0;
}
Avatar billede visualdeveloper Nybegynder
14. august 2005 - 11:33 #3
ja jeg forstår ikke særlig meget af dit eksempel arne_v ligninger er åbenbart sværere at løse i c++ end jeg troede !
men kan det virkelig passe at denne simple ligning x + 5 = 23 er så svær for c++ at løse ??
Avatar billede arne_v Ekspert
14. august 2005 - 11:40 #4
prøv og løs problemet med papir programmering

tag et stykke papir for hver variabel og "kod" på et nyt stykke papir:

skriv tallet 1 på første ark
skriv det tal der står på første ark på andet ark

og du vil se at det ikke er helt ligetil.
Avatar billede nielle Nybegynder
14. august 2005 - 11:43 #5
Den algoritme arne_v bruger hedder "Newton's metode" og er - tro det eller ej - en af de mere simple numeriske metoder til løsning af ligninger ;^)

Men ja (eller nej, alt efter hvordan man drejer den), det at løse ligninger er ikke noget som er så trivielt som man umiddelbart skulle tro. Derfor bliver det som regel også til temmeligt mange linjer kode i C++. Når man så ikke kender algritmen så gør det jo heller ikke situationen bedre.
Avatar billede visualdeveloper Nybegynder
14. august 2005 - 12:09 #6
ok men lige en ting til....

hvordan finder jeg de 100 første primtal på den simpleste måde

start med at skriv hvordan man finder primtal
Avatar billede arne_v Ekspert
14. august 2005 - 12:15 #7
simplest bare tæl n op og divider med alle tal fra 2 til sqrt(n) og se om nogen går op
hvis nej så har du fundet et primtal

avanceret: søg på Sieve of Erastothenes
Avatar billede visualdeveloper Nybegynder
14. august 2005 - 12:25 #8
ok læg et svar og få dine points jeg tror lige jeg skal læse lidt mere for at forstå alt dette ;)
Avatar billede arne_v Ekspert
14. august 2005 - 12:28 #9
svar
Avatar billede visualdeveloper Nybegynder
14. august 2005 - 16:42 #10
Avatar billede arne_v Ekspert
14. august 2005 - 21:16 #11
Jeg kan godt lide den pædagogiske linie.

Jeg mener bestemt at du burde bruge moderne ANSI C++ og namespace std.

Og selvom det kun er artikel 1 kunne den godt bruge mere stof.
Avatar billede visualdeveloper Nybegynder
14. august 2005 - 21:18 #12
ok mange tak ;)
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