| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 
 |  
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <float.h>
 
static int racine_delta(int delta);
static void usage(char *);
 
 
 
int
main(int argc, char *argv[])
{
	if (argc != 4)
		usage(argv[0]);
	int a = floor(atof(argv[1]));
	if (a == 0);
		usage(argv[0]);
	int b = floor(atof(argv[2]));
	int c = floor(atoi(argv[3]));
 
	int delta = (b * b) - (4 * a * c);
 
	if (delta != 0)
	{
		printf("Deux solutions %s :\n\n", (delta < 0) ? "complexes et conjuguees" : "reelles");
		int d = printf("%d + %s(%d * rac(%d))\n", -b, (delta < 0) ? "i" : "", racine_delta(delta), abs(delta / (racine_delta(delta) * racine_delta(delta))));
		int e;
		for (e = 1; e <= d; e++)
		{
			printf("-");
		}
		if (delta > 0)
		{
			printf(" = %f\n", (-b + sqrt(delta)) / (2 * a));
		}
		else if (delta < 0)
		{
			printf(" = %f + i * %f\n", ((float)-b/(2*a)), (sqrt(abs(delta)))/(2 * a));
		}
		printf("%d\n\n", 2 * a);
 
		d = printf("%d - %s(%d * rac(%d))\n", -b, (delta < 0) ? "i" : "", racine_delta(delta), abs(delta / (racine_delta(delta) * racine_delta(delta))));
		for (e = 1; e <= d; e++)
		{
			printf("-");
		}
		if (delta > 0)
		{
			printf(" = %f\n", (-b + sqrt(delta)) / (2 * a));
		}
		else if (delta < 0)
		{
			printf(" = %f - i * %f\n", ((float)-b/(2*a)), (sqrt(abs(delta)))/(2 * a));
		}
		printf("%d\n", 2 * a);
	}
	if (delta == 0)
	{
		printf("Une solution reelle double :\n\n");
		int d = printf("%d\n",-b);
		int e;
		for (e = 1; e <= d; e++)
		{
			printf("-");
		}
		printf(" = %f\n", (float)-b/(2*a));
		printf("%d\n", 2 * a);
	}
	return EXIT_SUCCESS;
}
 
static int
racine_delta(int delta)			// Fonction retournant la racine du plus grand carré entier dont delta est un multiple
{
	if (delta < 0)
	{
		delta = abs(delta);
	}
 
 
		int val_maxi = floor(sqrt(delta));
		int i;
		int t = 1;
		for (i = val_maxi; i > 0; i--)
		{
			if ( delta - (floor(delta/(i*i))*(i*i)) == 0)
			{
				t = i;
				i = -1;
			}
		}
	return t;
}
 
static void
usage(char *s)
{
	fprintf(stderr, "Usage: %s \"a\" \"b\" \"c\" avec a different de zero", s);
	exit(EXIT_FAILURE);
} | 
Partager