On the internet I found the code below. The code does what it is supposed to do: solving quadratic equations. My question is: if you were to rate this code on a scale from 1 (terrible, couldn't be worse) to 10 (expert, couldn't be better), knowing that the programmer makes a living out of programming. All indentation and comments is his/hers.

Thanks you for you time, Bilderbikkel

[code]

#include

#include

#include

using namespace std;

void one(){

float a = 0.0; //here we declare the variables and use float because we

float b = 0.0; //are dealing with square roots

float c = 0.0;

float x1 = 0.0;

float x2 = 0.0;

float x3 = 0.0;

float x4 = 0.0;

//this section gets user input and displays message

cout << "Enter the coefficients a , b , c for equation in the form ax^ + bx + c = 0:

";

cout << "Enter value for a:

";

cin >> a;

cout << "Enter value for b:

";

cin >> b;

cout << "Enter value for c:

";

cin >> c;

//are all the coefficients 0? if so both roots are 0

if(a == 0 && b == 0 && c == 0){

x1 = 0;

x2 = 0;

cout << "The roots are:" "

"

<< "x1 = " << x1 << " , " << "x2 = " << x2 << "

";

}

//is c the only non-zero number? if so tell the user

if(a == 0 && b == 0 && c != 0){

c = c;

cout << "There are no roots" "

"

<< "c = " << c << "

";

}

//is a zero? if so solve the resulting linear equasion and notify user

if(a == 0 && b != 0 && c !=0){

cout << "The values entered do not make a quadratic expression" "

"

<< "x = " << -c/b << "

";

}

//if b is zero and c is zero tell user

if(a == 0 && b != 0 && c == 0){

x1 = 0;

x2 = 0;

cout << "The roots are:" "

"

<< "x1 = " << x1 << " , " << "x2 = " << x2 << "

";

}

//if b and c are equal to zero then ax^=0 and since a cannot be zero without x being

// zero also let user know

if(a != 0 && b == 0 && c == 0){

x1 = 0;

x2 = 0;

cout << "The values entered result in ax^= 0; so both roots are 0" "

"

<< "x1 = " << x1 << " , " << "x2 = " << x2 << "

";

}

//factor out x from ax^+bx=0 and either x = 0 or ax + b =0

//then solve the linear equation

if(a != 0 && b != 0 && c == 0){

x1 = 0;

x2 = -b/a;

cout << "The roots are:" "

"

<< "x1 = " << x1 << " , " << "x2 = " << x2 << "

";

}

//now we get to use the square root function and let the user

//know they have some imaginary numbers to deal with

if(a < 0 && b == 0 && c < 0){

x1 = -b/(2*a);

x4 = (b*b)-(4*a*c);

x4 = -x4;

x2 = sqrt(x4)/(2*a);

x3 = -sqrt(x4)/(2*a);

cout << "The roots are not real numbers:" "

"

<< "x1 =" << x1 << " + " << x2 << " * i " << "

"

<< "x2 =" << x1 << " + " << x3 << " * i " << "

";

}

if(a > 0 && b == 0 && c > 0){

x1 = -b/(2*a);

x4 = (b*b)-(4*a*c);

x4 = -x4;

x2 = sqrt(x4)/(2*a);

x3 = -sqrt(x4)/(2*a);

cout << "The roots are not real numbers:" "

"

<< "x1 =" << x1 << " + " << x2 << " * i " << "

"

<< "x2 =" << x1 << " + " << x3 << " * i " << "

";

}

//now a and c are opposite signs so the answer will be real

if(a > 0 && b == 0 && c < 0){

x1 = (-b + (sqrt(pow(b,2)-(4*a*c))))/(2*a);

x2 = (-b - (sqrt(pow(b,2)-(4*a*c))))/(2*a);

cout << "The roots are:" "

"

<< "x1 = "<< x1 << " , " << "x2 = "<< x2 << "

";

}

if(a < 0 && b == 0 && c > 0){

x1 = (-b + (sqrt(pow(b,2)-(4*a*c))))/(2*a);

x2 = (-b - (sqrt(pow(b,2)-(4*a*c))))/(2*a);

cout << "The roots are:" "

"

<< "x1 = "<< x1 << " , " << "x2 = "<< x2 << "

";

}

//ok now if we end up not having to take the square root of a neg

// do the math

if(a != 0 && b != 0 && c != 0 && (4*a*c) <= pow(b,2)){

x1 = (-b + (sqrt(pow(b,2)-(4*a*c))))/(2*a);

x2 = (-b - (sqrt(pow(b,2)-(4*a*c))))/(2*a);

cout << "The roots are:" "

"

<< "x1 = "<< x1 << " , " << "x2 = " << x2 << "

";

}

//here we have to deal with non x intercepts ie: sqrt(-1)

// alter the formula slightly to give correct output and

// let the user know

if(a != 0 && b != 0 && c != 0 && (4*a*c)> pow(b,2)){

x1 = -b/(2*a);

x4 = (b*b)-(4*a*c);

x4 = -x4;

x2 = sqrt(x4)/(2*a);

x3 = -sqrt(x4)/(2*a);

cout << "The roots are not real numbers" "

"

<< "x1 =" << x1 << " + " << x2 << " * i " << "

"

<< "x2 =" << x1 << " + " << x3 << " * i " << "

";

}

char g;

cout << "Solve another equation? (y for yes or n for no)

";

cin >> g;

if(g !='y'){

exit(0);

}

return;

}

//keep output from vanishing before we can read it.

void two(){

char g ;

cout << "Press c and then Enter to continue...." "

";

cout << "Press s and then enter to stop....." "

";

cin >> g;

if (g == 'c')

for(int i=0; i<100; i++)// who wants to run this more that 99 times? if you are using this program for

//any thing other than some quick calculations (for example as part of another program)

// you may want to comment this part out. The for loop keeps the program from

//running away in an infinate loop, but may not be usable in another program.

//If 99 times is not enough, change the value in the for loop, but be careful

//with no limits the for loop can run the program in the background by accident

one();

}

int main(){

one();

two();

return 0;

}

[/code]

bilderbikkel

It looks like you're new here. If you want to get involved, click one of these buttons!

- 140.8K All Categories
- 103.6K Programming Languages
- 6.4K Assembler Developer
- 401 Assembly Code Share
- 239 Getting started in assembly
- 4.6K x86 Assembly
- 1.9K Basic
- 97 Qbasic
- 39.9K C and C++
- 5.6K Beginner C/C++
- 330 C/C++ on Linux/Unix
- 450 C/C++ Windows API
- 522 C++ Builder
- 253 C++ Game Development
- 3.3K C++ MFC
- 103 C++.NET
- 404 Visual C++
- 2.9K C#
- 7.9K Delphi and Kylix
- 334 Advanced Delphi
- 360 Delphi beginners
- 4 Haskell
- 9.7K Java
- 56 Enterprise JavaBeans
- 1.3K Java Beginners
- 304 Java Server Pages
- 4.1K Pascal
- 1.3K Perl
- 11 Perl 6
- 2K PHP
- 546 Python
- 37 Ruby
- 4.4K VB.NET
- 258 Advanced VB.Net
- 1.6K VBA
- 20.8K Visual Basic
- 767 Access databases and VB
- 831 Advance Visual Basic
- 1.2K Beginner VB
- 2.6K Game programming
- 315 Console programming
- 90 DirectX Game dev
- 1 Minecraft
- 112 Newbie Game Programmers
- 2 Oculus Rift
- 9K Applications
- 1.8K Computer Graphics
- 279 3D Graphics
- 129 DirectX
- 125 OpenGL
- 740 Computer Hardware
- 9 Cooling & Overclocking
- 3.4K Database & SQL
- 1.1K Access
- 91 ADO Programming
- 288 MySQL
- 358 Oracle
- 440 SQL-Server
- 535 Electronics development
- 1.6K Matlab
- 628 Sound & Music
- 25 DirectSound
- 257 XML Development
- 3.3K Classifieds
- 200 Co-operative Projects
- 198 For sale
- 190 FreeLance Software City
- 1.9K Jobs Available
- 603 Jobs Wanted
- 209 Wanted
- 2.9K Microsoft .NET
- 1.8K ASP.NET
- 1.1K .NET General
- 22 .NET WEB-Services
- 129 .NET WinForms
- 14 .NET XML
- 50 ADO.NET
- 142 C# & VB.NET School Support
- 3.4K Miscellaneous
- 4 Join the Team
- 354 Comments on this site
- 69 Computer Emulators
- 2.1K General programming
- 187 New programming languages
- 621 Off topic board
- 200 Mobile & Wireless
- 72 Android
- 126 Palm Pilot
- 338 Multimedia
- 154 Demo programming
- 184 MP3 programming
- 0 Bash scripts
- 27 Cloud Computing
- 1 Witsbits Go Cloud
- 53 FreeBSD
- 1.7K LINUX programming
- 1 Awk scripting
- 332 Linux Support
- 0 Sed scripting
- 370 MS-DOS
- 0 Shell scripting
- 321 Windows CE & Pocket PC
- 4.1K Windows programming
- 177 COM/DCOM
- 61 Networking And Security
- 17 Windows 2003 Server
- 6 Windows Vista
- 176 Windows XP
- 940 Software Development
- 417 Algorithms
- 68 Object Orientation
- 24 RUP & UML
- 91 Project Management
- 95 Quality & Testing
- 268 Security
- 63 Evil Scripting
- 81 Hacking
- 7.7K WEB-Development
- 1.8K Active Server Pages
- 61 AJAX
- 4 Bootstrap Themes
- 55 CGI Development
- 28 ColdFusion
- 224 Flash development
- 1.4K HTML & WEB-Design
- 1.4K Internet Development
- 131 Mobile Internet & Messaging
- 211 Wireless development
- 2.2K JavaScript
- 37 JQuery
- 304 WEB Servers
- 153 Apache
- 79 IIS
- 150 WEB-Services / SOAP

## Comments

Main issues are:

- Poor indention. It isn't readable.

- Lack of modular programming. It should have functions or a class for the calculations, and those functions shouldn't contain user i/o.

- Obfuscation. Lines like

x1 = (-b + (sqrt(pow(b,2)-(4*a*c))))/(2*a);

aren't readable.

- The code doesn't handle the line feed character from stdin.

- Implicit typecasts between int and float. This is a potential bug, as one doesn't know if "int" is signed or unsigned when dealing with portable code.

Minor issues:

- Implicit typecasts between float and double. Creates unnecessary execution time and program size.

- No function prototypes.

- math.h instead of

- The code is using the questionable exit() function.