Right, so I am brand new to programming (doing it for a module at uni). We have to write a programme to find real solutions to a quadratic to 3 decimal places. We need to use command line arguments and the if-else construct.
Looking over various code I have found online and the very little that I actually do understand, I put this together and would like to understand what it all means I have made bold the bits I am unsure about.
For the first bold bit;Code:#include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc, char* argv[]) { double a, b, c, valida, validb, validc, x1, x2; int valid_input; if(argc != 4) { printf("Enter three arguments\n"); exit(EXIT_FAILURE); } else { valida=sscanf(argv[1], "%lg", &a); validb=sscanf(argv[2], "%lg", &b); validc=sscanf(argv[3], "%lg", &c); valid_input = (valida != 0) && (valida != EOF); valid_input = valid_input && (validb !=0) && (validb != EOF); valid_input = valid_input && (validc !=0) && (validc != EOF); if(!valid_input) { printf("Please enter 3 valid digits...\n"); exit(EXIT_FAILURE); } else { if((a==0)&&(b==0)) { printf("It is not possible to find the roots of these numbers \n"); printf("as both 'a' and 'b' coefficients are zero\n"); exit(EXIT_FAILURE); } if(a==0) { x1 = (-(c/b)); printf("There is 1 root"); printf("x1 = %.3lf\n",x1); } else { if(((b*b)-(4*a*c)) > 0) { x1 = ((-b)+(sqrt((b*b)-(4*a*c))))/(2*a); x2 = ((-b)-(sqrt((b*b)-(4*a*c))))/(2*a); printf("There are 2 roots\n"); printf("x1 = %.3lf\n",x1); printf("x2 = %.3lf\n",x2); exit(EXIT_SUCCESS); } if(((b*b)-(4*a*c)) == 0) { x1 = ((-b)/(2*a)); printf("There is 1 root\n"); printf("x = %.3lf\n",x1); exit(EXIT_SUCCESS); } else { printf("Cannot calculate imaginary roots\n"); exit(EXIT_FAILURE); } } } } return(0); }
-Should I be using float or double?
-Is it right to set valid_input as an integer?
-Should I define a,b,c,x1,x2 before main()?
For the second (validation);
-Is %lg correct? and if using float, it should be %f, right?
-In the valid_input bit, have I said that it is only valid if ALL 3 lines are met or is each one separate (as in is it only invalid if a,b and c are zero, or if any of them are)?
For the third bit;
-Is %.3lf correct for 3 decimal places?
-Would it be different if it was a float? %.3f?
-Does it need an exit(EXIT_SUCCESS) after it?
In general;
-Should I define the discriminant before main() and then use it in the if-else instead?
---------------------------
I apologise if I have gone against any board rules, I have read the FAQ and searched the forum before posting and tried to follow the guidelines....
Thanks



LinkBack URL
About LinkBacks


