Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <time.h>
- #define MEMORY_SIZE (15)
- typedef struct link {
- double coeff;
- int pow;
- struct link * next;
- } poly;
- poly *polyArray[MEMORY_SIZE];// array of 15 polynomials to play with
- // /** The function prototypes */
- void createPoly(poly **);
- void showPoly(poly *);
- void deletePoly(poly *);
- int main(void) {
- int a;
- for( a = 0; a < MEMORY_SIZE; a++ )
- {
- polyArray[a] = NULL;//Initialise each element of the array of pointers to NULL
- }//end for
- createPoly(&polyArray[0]);
- showPoly(polyArray[0]);
- srand(time(NULL));
- createPoly(&polyArray[1]);
- showPoly(polyArray[1]);
- showPoly(polyArray[0]);
- int count;
- for(count = 0; count < MEMORY_SIZE; count++)
- {
- deletePoly(polyArray[count]);
- }
- showPoly(polyArray[0]);
- return 0;
- }// End Main Function
- //////////////////////////////////////////////////////////////////////////////////////
- void createPoly(poly **node) {
- poly *tempnode; //To hold the temporary last address
- tempnode = (poly*)malloc( sizeof(poly) ); //create the first node
- *node = tempnode; //Store the head address to the reference variable
- int flag = 1 + rand()%3;; // A flag to control the number of terms
- int counter;
- for( counter = 0; counter <= flag; counter++ )
- {
- tempnode->pow = ( flag-counter );
- tempnode->coeff = ( (double)(rand()%20) )/( (double)(1 + rand()%20) );
- if( (counter < flag) && (counter >= 0) )
- {
- tempnode->next = (poly*)malloc( sizeof(poly) ); //Grow the list
- }
- else if ( counter == flag )
- {
- tempnode->next = NULL;
- }
- tempnode = tempnode->next;
- }
- }//end function createPoly
- void deletePoly(poly *node) {
- poly *temp;//Create pointer to poly called 'temp'
- while( node->next != NULL );
- {
- temp = node->next;//Assign the address of the next node to 'temp'
- free( node );//Delete the current node
- node = temp;//Assign the address of the next node in the list to 'node'
- }//end while
- node = NULL;//Set pointer 'node' to NULL to prevent a "lingering" pointer
- }//end function 'deletePoly'
- void showPoly(poly * node) {
- while(node->next != NULL) {
- if(node->coeff == 0)
- {
- node = node->next;
- }
- else if(node->coeff == 1 && node->pow > 1)
- {
- printf("[x^%i]", node->pow);
- node = node->next;
- }
- else if(node->coeff == 1 && node->pow == 1)
- {
- printf("[x]");
- node = node->next;
- }
- else if(node->coeff != 0 && node->pow == 0)
- {
- printf("(%.2lf)", node->coeff);
- node = node->next;
- }
- else if(node->pow == 0 && node->coeff == 0)
- {
- node = node->next;
- }
- else if(node->coeff != 1 && node->pow > 1 && node->coeff != 0)
- {
- printf("(%.2lf)[x^%i]", node->coeff, node->pow);
- node = node->next;
- }
- else if(node->coeff != 1 && node->pow == 1 && node->coeff != 0)
- {
- printf("(%.2lf)[x]", node->coeff);// no need to print x to the power 0
- node = node->next;
- }
- if(node->next != NULL)
- {
- printf(" + ");
- }
- }
- }//end function showPoly
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement