lignings lommeregner i c++?

Tags:    c++ ligning lommregner x y

Hej alle sammen =)

Har fået en opgave i programmering som jeg har lidt problemer med.

Jeg skal lave en lignings lommeregner som selv går ind og finder x plads.

Altså hvis jeg skriver "6x+3=0" så skal den selv kunne gå ind i ligningen og finde de forskellig værdier og derefter løse dem.

en jeg har lidt problemer med at få det til at virke =(

Håber i kan hjælpe mig =)

p.s: er ny til c++



7 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Måske hvis du postet noget af det c++ kode du har prøvet dig frem med, så ville der kunne komme nogle forslag til ændringer :)



#include <cstdlib>
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
float a;
float b;

char ligning [25];
cout << "Indtast en ligning med 1 x og uden lighedstegn. Det er indforstået at den indtastede ligning er lig med 0" << "\n";
cin >> ligning;

for(int i = 0; i < 25; i++)
{
if(ligning=='x')
{

if(ligning[i-1]>='0' && ligning[i-1]<='9')
{
a=ligning[i-1]-'0';
if(ligning[i-2]=='-')
a=a*-1;

}

if(ligning[i+2]>='0' && ligning[i+2]<='9')
{
b=ligning[i+2]-'0';
if(ligning[i+1]=='-')
b=b*-1;
}

cout << "x = " << b/a*-1 <<"\n";


}


}


system("PAUSE");

}



kan godt få det til at virke =)

men hvordan for jeg det til at virke hvis det er flere x værdier og hvis der er tal på den anden side af lighedstegnet ?




Indlæg senest redigeret d. 12.11.2013 18:40 af Bruger #17766
Jeg kender personligt ikke noget til C++ men er sikker på der er en anden her inde som kan komme med et godt svar på det, nu der er nogen kode :)

evt bruge bb tags når du poster kode her på udvikleren.

[ code lang="C++"] ... [ /code] -- uden mellemrum




okay =) mange tak Kenneth =)



Det var ellers også noget af en opgave. Det kræver parsing, hvilket ikke er helt simpelt.
Skal den kunne klare kommatal, negative tal og forskellige rækkefølger af addenderne?
Altså både:
-3,7x + 4,851
og
4,851 + -3,7x
og
4,851 - 3,7x

???
Eller må vi sætte nogle begrænsninger?



ja vi gik også direkte fra en simpel + - lommeregner til dette, så det var lidt meget på en gang.

behøver ikke være med komma tal =) hehe =)



Indlæg senest redigeret d. 12.11.2013 20:08 af Bruger #17766
Ok...ikke kommatal, så bliver det lidt nemmere. Og hvis vi kan "kræve" at man man heller ikke kan skrive "x + 7" men skal skrive en eksplicit faktor for x...altså "1x + 7", så bliver det lidt nemmere.

Du skal så søge en streng igennem, og vurdere hvert tegn et ad gangen. Det starter med et tal...altså en række decimaler med et muligt fortegn. Tallet afsluttes når du kommer til et X hvorefter der kommer et antal (muligvis nul) mellemrum efterfulgt af et + eller minus efterfulgt af et antal mellemrum efterfulgt af en række decimaler (muligvis med et foranstillet fortegn).
Dvs. du skal have to tal, som kan initialiseres til 0. Det ene er en faktor på X, det andet er addenden.

Det bliver nemmere hvis disse to tal altid ses som værende positive, men kan ganges op med enten 1 eller -1 alt efter om du så et minus til start, så start med følgende:

Fold kodeboks ind/udC kode 


Hvis du så ser et minus tegn inden du skal til at læse tallet foran X, så ændrer du xScaleSign til -1.

Når du så læser tallet, så ganger du xScale op med 10 og lægger decimalen til. Det gør du sålænge der er flere decimaler. Altså noget i stil med dette:

Fold kodeboks ind/udC kode 

Ovenstående burde læse tallet fra strengen og konvertere det til binær repræsentation, som er lettere at arbejde med. Koden tillader et minus som fortegn men ikke et eksplicit plus...det kan du jo selv tilføje.

Prøv selv at lave resten på samme måde, og spørg så igen, hvis du går i stå.



t