Code:
#include <stdio.h>
#include <math.h>
//void single_quad();
void wrong_choice();
void no_letters_a();
void no_letters_b();
void no_letters_c();
void input_a();
void input_b();
void input_c();
void run_calc();
int main(double a, double b, double c)//this bit here was already pointed out, it was part of my attempts to figure out pointers, hadn't cleared it out before posting the old code
{
double a;
double b;
double c;
char choice = ' ';
do
{
input_a();
getc(stdin);
printf("\nIf you would like to input another equation, please hit 'y', otherwise hit 'n':\t");
scanf_s("%c", &choice, 1);
if (choice == '%c')
{
do
{
wrong_choice();
getc(stdin);
} while (choice != 'y', choice != 'n');//here goes the function for when a character other than 'y' or 'n' is input
}
printf("\n");
}while (choice == 'y');
return 0;
}
void input_a()
{
double a;
printf("Please enter the variable for 'a':\t");
scanf_s("%lf", &a);
if (a == '%lf')
{
do
{
no_letters_b();
getc(stdin);
} while (a > 2000000000 || a < -2000000000);
}
input_b();
return a;
//printf("%lf\n", a);
}
void input_b()
{
double b;
printf("Please enter the variable for 'b':\t");
scanf_s("%lf", &b);
if (b == '%lf')
{
do
{
no_letters_b();
}while (b > 2000000000 || b < -2000000000);
}
input_c();
return b;
}
void input_c()
{
double c;
printf("Please enter the variable for 'c':\t");
scanf_s("%lf", &c);
if (c == '%lf')
{
do
{
no_letters_c();
}while (c > 2000000000 || c < -2000000000);
}
run_calc();// it's here I keep running into an issue, "too few arguments in function to call" is all I get
return c;
}
void run_calc(double a, double b, double c)
{
double a_calc = a;
double b_calc = b;
double c_calc = c;
printf("\na = %lf\nb = %lf\nc = %lf\n", &a_calc, &b_calc, &c_calc);
double d = -a_calc;
double e = -b_calc;
double f = -c_calc;
|
|
|
|//all these lines are where the equation's code is, took up well over half the post with that alone so I cut it out
|
|
}
void wrong_choice()
{
char choice = ' ';
printf("I'm sorry, that selection is not recognized, please input 'y' for yes or 'n' for no.");
scanf_s("%c", &choice, 1);
printf("\n");
}
void no_letters_a()
{
double a;
getc(stdin);
printf("\nI'm sorry, you have input an unrecognized value, please input a numeric digit:\t");
scanf_s("%lf", &a);
if (a < 2000000000 && a > -2000000000)
{
input_b();
}
else
{
no_letters_a();
}
}
void no_letters_b()
{
double b;
printf("\nI'm sorry, you have input an unrecognized value, please input a numeric digit:\t");
scanf_s("%lf", &b);
if (b < 2000000000 && b > -2000000000)
{
input_c();
}
else
{
no_letters_b();
}
}
void no_letters_c()
{
double a;
double b;
double c;
printf("\nI'm sorry, you have input an unrecognized value, please input a numeric digit:\t");
scanf_s("%lf", &c);
if (c < 2000000000 && c > -2000000000)
{
run_calc();
}
else
{
no_letters_c();
}
}
The new code is below, this time I left in the part that actually runs through the equation, as I'm looking for any tips, tricks, advice, etc for ways I could maybe optimize things... Basically looking to see if there are any ways of doing things easier than I have, and if there are, what those ways would be. Only have like 3 weeks experience doing anything with programming language at all, so trying to build my skills with it as soon as I can, I appreciate any help that might be offered.
Code:
#include <stdio.h>
#include <math.h>
void wrong_choice(char* choice);
void wrong_a(double* a);
void wrong_b(double* b);
void wrong_c(double* c);
void input_a(double* a);
void input_b(double* b);
void input_c(double* c);
void run_calc(double* a, double* b, double* c);
int main(void)
{
double a;
double b;
double c;
char choice = ' ';
do
{
input_a(&a);
input_b(&b);
input_c(&c);
printf("\na = %lf\nb = %lf\nc = %lf\n", a, b, c);
run_calc(&a, &b, &c);
getc(stdin);
printf("\nIf you would like to input another equation, please hit 'y', otherwise hit 'n':\t");
scanf_s("%c", &choice, 1);
if (choice != 'y' && choice != 'n')
{
wrong_choice(&choice);
}
printf("\n");
}while (choice == 'y');
return 0;
}
void input_a(double* a)
{
printf("Please enter the variable for 'a':\t");
scanf_s("%lf", a);
if (*a > 2000000000 || *a < -2000000000)
{
wrong_a(a);
}
}
void input_b(double* b)
{
printf("Please enter the variable for 'b':\t");
scanf_s("%lf", b);
if (*b > 2000000000 || *b < -2000000000)
{
wrong_b(b);
}
}
void input_c(double* c)
{
printf("Please enter the variable for 'c':\t");
scanf_s("%lf", c);
if (*c > 2000000000 || *c < -2000000000)
{
wrong_c(c);
}
}
void run_calc(double* a, double* b, double* c)
{
double d = -(*a);
double e = -(*b);
double f = -(*c);
if (a > 0 && b > 0 && c > 0)//if statements set up quadratics for different uses of +/- signs, needs to be reviewed to make sure all combinations are used
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx+%.0lf.\n", a, b, c);
}
else
if (a > 0 && b > 0 && c < 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx-%.0lf.\n", a, b, f);
}
else
if (a > 0 && b < 0 && c > 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2-%.0lfx+%.0lf.\n", a, e, c);
}
else
if (a < 0 && b > 0 && c > 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx+%.0lf.\n", a, b, c);
}
else
if (a < 0 && b < 0 && c < 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx+%.0lf.\n", a, e, f);
}
else
if (a > 0 && b < 0 && c < 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx+%.0lf.\n", a, e, f);
}
else
if (a > 0 && b > 0 && c < 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx+%.0lf.\n", a, b, f);
}
else
if (a < 0 && b > 0 && c < 0)
{
printf("\nThe quadratic equation entered is: %.0lfx^2+%.0lfx+%.0lf.\n", a, b, f);
}
double f1 = -(*b);
double f2 = ((*b) * (*b)) - (4 * (*a) * (*c));
double f3 = sqrt(f2);
double f3_5 = sqrt(-f2);
double f4 = 2 * (*a);
double f5 = (f1 + f3) / f4;
double f6 = (f1 - f3) / f4;
double f7 = -(*c) / (*b);
double f8 = sqrt((-f2 / f3_5));
double f9 = -sqrt((-f2 / f3_5));
if (a == 0 && b == 0)
{
printf("\nERROR. Input not allowed. Variables 'a' and 'b' cannot both be 0.\n\n");
}
else if (a == 0)
{
printf("\nThe equation given is in the linear format. The answer is x=%lf.\n", f7);
}
else if (f2 < 0)
{
printf("\nThe discriminate of the equation given equals %lf.\nTherefore, this is a complex number.\n", f2);
if (f8 == f9)
{
printf("\nThe x-intercept is the complex number %lf+%lfi.\nThe solutions is %lf+%lfi.\n", f1 / f4, f8, f1 / f4, f8);
}
else if (f8 != f9)
{
printf("\nThe x-intercepts are the complex numbers %lf+%lfi and %lf-%lfi.\nThe solutions are x=%lf+%lfi or x=%lf-%lfi.\n", f1 / f4, f8, f1 / f4, f8, f1 / f4, f8, f1 / f4, f8);
}
}
else
{
printf("\nThe discriminate of the equation given equals %lf.\nTherefore, this is not a complex number.\n", f2);
if (f5 == f6)
{
printf("\nThere is only one x-intercept: (%.0lf,0).\nThe solution is x=%lf", f5, f5);
}
else
{
printf("\nThe x-intercepts are: (%.0lf,0), and (%.0lf,0).\nThe solutions are x=%lf or x=%lf.\n", f5, f6, f5, f6);
}
}
}
void wrong_choice(char* choice)
{
getc(stdin);
printf("I'm sorry, that selection is not recognized, please input 'y' for yes or 'n' for no:\t");
scanf_s("%c", choice, 1);
if (*choice != 'y' && *choice != 'n')
{
do
{
wrong_choice(choice);
} while (*choice != 'y' && *choice != 'n');
}
printf("\n");
}
void wrong_a(double* a)
{
getc(stdin);
printf("\nI'm sorry, you have input an unrecognized value, please input a numeric digit for 'a':\t");
scanf_s("%lf", a);
if (*a > 2000000000 || *a < -2000000000)
{
wrong_a(a);
}
printf("Thank you.\n\n");
}
void wrong_b(double* b)
{
getc(stdin);
printf("\nI'm sorry, you have input an unrecognized value, please input a numeric digit for 'b':\t");
scanf_s("%lf", b);
if (*b > 2000000000 || *b < -2000000000)
{
wrong_b(b);
}
printf("Thank you.\n\n");
}
void wrong_c(double* c)
{
getc(stdin);
printf("\nI'm sorry, you have input an unrecognized value, please input a numeric digit for 'c':\t");
scanf_s("%lf", c);
if (*c > 2000000000 || *c < -2000000000)
{
wrong_c(c);
}
printf("Thank you.\n\n");
return c;
}
PS. Sorry if the code seems scrunched, still not quite used to posting on here, and the copy/paste wasn't wanting to behave haha...