int main(int argc, char* argv[])
{
    if(argc!=4) 
    {
        printf( "Usage: %s <v> <a> <t>", argv[0] );
        exit( EXIT_FAILURE );
    }
    double b = atof(argv[1]);
    double T = atof(argv[2]);
    double f = atof(argv[3]);
    double acctng[3] = {0, b*T, -b};
    double dectng[1] = {-f};
    
    /* Defining the Acceleration polynomials for the car */
    polynomial acc_car = polynomial_construct(2, acctng);
    polynomial dec_car = polynomial_construct(0, dectng);  
    
    /* Velocity and distance polynomials for the accelerating car */
    polynomial velocity_of_acc_car = polynomial_integrate(acc_car);
    polynomial distance_trvd_acc_car = polynomial_integrate(velocity_of_acc_car);
    
    /* Evaluating the distance travelled by the accelerating car in time T */
    double distance_1 = polynomial_evaluate(distance_trvd_acc_car, T);
    polynomial velocity_of_dec_car = polynomial_integrate(dec_car);
    velocity_of_dec_car.coeff[0] = polynomial_evaluate(velocity_of_acc_car, T);
    
    double time_of_stop = -velocity_of_dec_car.coeff[0]/velocity_of_dec_car.coeff[1];
    polynomial distance_trvd_dec_car = polynomial_integrate(velocity_of_dec_car);
    double distance_2 = polynomial_evaluate(distance_trvd_dec_car, time_of_stop);
    /*
    polynomial_print(acc_car);
    polynomial_print(velocity_of_acc_car);
    polynomial_print(distance_trvd_acc_car);
    polynomial_print(dec_car);
    polynomial_print(velocity_of_dec_car);
    polynomial_print(distance_trvd_dec_car);
    printf("The distance_1 travelled by the car is %.4f\n", distance_1 );
    printf("The distance_2 distance travelled by the car is %.4f\n");
    */
    printf("%.4f\n", time_of_stop );
    printf("%f\n", distance_1 + distance_2);
    
}
Example #2
0
int integrate(entry_t **list, char *args)
{
	complex_t *z = NULL;
	entry_t *e = NULL;
	polynomial_t *q = NULL;
	size_t size = 0, i = 0;
	char **table = NULL, *c = NULL, count = 0;

	if (list == NULL || args == NULL)
		return EXIT_FAILURE;

	table = split(args, ' ', &size);
	if (table == NULL || size == 1)
	{
		if (table != NULL)
		{
			free(*table);
			free(table);
		}

		return EXIT_FAILURE;
	}

	e = entry_get(*list, table[1]);
	if (e == NULL || e->type != POLYNOMIAL)
	{
		for (i = 0; i < size; i++)
			free(table[i]);

		free(table);

		return EXIT_FAILURE;
	}

	if (size > 2)
	{
		c = args;
		while (count < 2)
		{
			if (*c == ' ')
				count++;

			c++;
		}

		z = complex_fromString(c);
		if (z == NULL)
		{
			for (i = 0; i < size; i++)
				free(table[i]);

			free(table);

			return EXIT_FAILURE;
		}

		q = polynomial_integrate((polynomial_t*) e->polynomial, z);
	}
	else
		q = polynomial_integrate((polynomial_t*) e->polynomial, NULL);

	if (q == NULL)
	{
		if (z != NULL)
			complex_free(z);

		for (i = 0; i < size; i++)
			free(table[i]);

		free(table);

		return EXIT_FAILURE;
	}

	polynomial_display(q);
	fprintf(stdout, "\n");

	entry_add(list, (void*) q, POLYNOMIAL);

	for (i = 0; i < size; i++)
		free(table[i]);

	free(table);

	return EXIT_SUCCESS;
}