Thread: Moving Average Question

  1. #1
    Registered User
    Join Date
    Apr 2007
    Posts
    133

    Moving Average Question

    I have figured out everything I need for this program except for one thing. I need to create a moving average. I'm working with 2 stocks and I need to keep a moving average for each one. And then store the 16 values in an array.

    I'm am working with stock prices of two difference stocks for 20 days.

    So for instance
    stock 1 avg day 1 through 5
    stock 1 avg day 2 through 6
    ...... and so on until all 16 values for the array are filled.

    and

    stock 2 avg day 1 through 5
    stock 2 avg day 2 through 6
    and so on...

    below is my entire program I will bold the function I am having the issue with.

    (It's the calc_Mov_Average function)


    Any help would be great! Due in an hour and a half.

    Code:
    //Doug Miller
    
    //Project #4 - Working with stock information and organizing them.
    
    #include <stdio.h>
    
    #include <conio.h>
    
    #include "util.h"
    
    
    
    
    #define MAX_STOCKS 20
    #define MOV_MAX 16
    
    float stock1[MAX_STOCKS] = 
    {34.25,40.50,36.50,40.00,
    30.25,30.25,35.50,36.00,
    34.25,37.00,34.00,35.00,
    36.25,34.25,40.50,41.50,
    41.50,40.00,36.50,34.50};
    
    float mov_Stock1[MOV_MAX] = {0.0};
    
    
    float  stock2[MAX_STOCKS] = 
    {40.25,38.50,34.50,33.50,
    30.50,29.75,37.50,38.00,
    34.75,38.00,34.25,37.00,
    34.25,37.50,34.50,38.50,
    37.50,37.25,38.25,37.50};
    
    float mov_Stock2[MOV_MAX] = {0.0};
    
    
    
    //Report 1 Functions
    int first_Greater (float stock1[], float stock2[]);
    int second_Greater (float stock1[], float stock2[]);
    int same_Price (float stock1[], float stock2[]);
    void print_Report1(int first_Greater, int second_Greater, int same_Price);
    //END OF REPORT 1 FUNCTIONS
    
    //Report 2 Functions
    double average_First (float stock1[]);
    double average_Second (float stock2[]);
    int exceeded_Average_First (float stock1[], double average_First);
    int exceeded_Average_Second (float stock2[], double average_Second);
    void print_Report2 (double average_First, double average_Second, int exceeded_Average_First, int exceeded_Average_Second);
    
    
    //END OF REPORT 2 FUNCTIONS
    
    //Report 3 Functions
    void calc_Mov_Average (float stock[], float movAvg[]);
    void print_Report3 (float mov_Stock1[], float mov_Stock2[]);
    
    
    //END OF REPORT 3 FUNCTIONS
    
    
    //Report 4 Functions
    
    int first_Mov_Greater (float mov_Stock1[], float mov_Stock2[]);
    int second_Mov_Greater (float mov_Stock1[], float mov_Stock2[]);
    int mov_Same (float mov_Stock1[], float mov_Stock2[]);
    void print_Report4 (int first_Mov_Greater, int second_Mov_Greater, int mov_Same);
    
    //END OF REPORT 4 FUNCTIONS
    
    
    
     
    
    int main()
    
    {
    	
    	
    	
    	
    							//BEGINNING OF REPORT 1 VARIABLES
    
    	int first_Greater_C = 0;
    	int second_Greater_C = 0;
    	int same_C = 0;
    							//END OF REPORT 1 VARAIABLES
    
    						
    							//BEGINNING OF REPORT 2 VARIABLES
    
    	double average_First_C = 0.0;
    	double average_Second_C = 0.0;
    	int exceeded_Average_CF = 0;
    	int exceeded_Average_CS = 0;
    
    							//END OF REPORT 2 VARAIABLES
    
    							//BEGINNIGN OF REPORT 4 VARIABLES
    
    	int mov_First_Greater_C = 0;
    	int mov_Second_Greater_C = 0;
    	int mov_Same_C = 0;
    
    							//END OF REPORT 4 VARAIBALES
    	
    	
    							
    							//BEGINNING OF REPORT 1 CALLS
    
    	//Print Title
    	PrintTitle();
    
    	//Print Date
    	PrintDate(); 
    
    	//Find First Stock Being Greater 
    	first_Greater_C = first_Greater(stock1, stock2);
    
    	//Find Second Stock Being Greater
    	second_Greater_C = second_Greater(stock1, stock2);
    
    	//Finding The Stocks To Be The Same
    	same_C = same_Price(stock1, stock2);
    
    	//Printing Report 1
    	print_Report1(first_Greater_C, second_Greater_C, same_C);
    
    	//Pause Screen
    	PauseScreen();
    
    							//END OF REPORT 1 CALLS
    
    
    							//BEGINNING OF REPORT 2 CALLS
    	
    	//Print Title
    	PrintTitle();
    
    	//Print Date
    	PrintDate();
    	
    	//Find Average FIRST DAY
    	average_First_C = average_First(stock1); 
    
    	//Find Average SECOND DAY
    	average_Second_C = average_Second(stock2); 
    
    	//Exceeded Average FRIST DAY
    	exceeded_Average_CF = exceeded_Average_First(stock1, average_First_C);
    
    	//Exceeded Average SECOND DAY
    	exceeded_Average_CS = exceeded_Average_Second(stock2, average_Second_C);
    
    	//Printing Report 2
    	print_Report2(average_First_C, average_Second_C, exceeded_Average_CF, exceeded_Average_CS);
    
    	//Pause Screen
    	PauseScreen();
    
    
    							//END OF REPORT 2 CALLS
    
    
    							//BEGINNING OF REPORT 3 CALLS
    	
    	//Print Title
    	PrintTitle();
    
    	//Print Date
    	PrintDate();
    	
    	//Find floating average first stock
    	calc_Mov_Average(stock1, mov_Stock1); 
    
    	//Find floating average second stock
    	calc_Mov_Average(stock2, mov_Stock2);
    
    	//Printing Report 3
    	print_Report3(mov_Stock1, mov_Stock2);
    
    	//Pause Screen
    	PauseScreen();
    
    
    							//END OF REPORT 3 CALLS
    
    
    
    							//BEGINNING OF REPORT 4 CALLS
    
    	//Print Title
    	PrintTitle();
    
    	//Print Date
    	PrintDate(); 
    
    	//Find First Stock MOVING AVERAGE Being Greater 
    	mov_First_Greater_C = first_Mov_Greater(mov_Stock1, mov_Stock2);
    
    	//Find Second Stock MOVING AVERAGE Being Greater
    	mov_Second_Greater_C = second_Mov_Greater(mov_Stock1, mov_Stock2);
    
    	//Finding MOVING AVERAGE To Be The Same
    	mov_Same_C = mov_Same(mov_Stock1, mov_Stock2);
    
    	//Printing Report 4
    	print_Report4(mov_First_Greater_C, mov_Second_Greater_C, mov_Same_C);
    
    	//Pause Screen
    	PauseScreen();
    
    							//END OF REPORT 4 CALLS
    
    
    
    
    _getch();
    
    return 0;
    
    }//END OF MAIN
    
    int first_Greater (float stock1[], float stock2[])
    {
    
    	int i = 0;
    	int f_Greater_Count = 0;
    
    	for (i = 0; i < MAX_STOCKS; i++)
    	{
    		if (stock1[i] > stock2[i])
    			{	
    				f_Greater_Count = f_Greater_Count + 1;
    			}
    	}
    
    
    	return f_Greater_Count;
    
    
    }//END OF COUNTING THE FIRST STOCK BEING GREATER
    
    int second_Greater (float stock1[], float stock2[])
    {
    
    	int i = 0;
    	int s_Greater_Count = 0;
    
    	for (i = 0; i < MAX_STOCKS; i++)
    	{
    		if (stock1[i] < stock2[i])
    			{	
    				s_Greater_Count = s_Greater_Count + 1;
    			}
    	}
    
    
    	return s_Greater_Count;
    
    
    }//END OF COUNTING THE SECOND STOCK BEING GREATER
    
    int same_Price (float stock1[], float stock2[])
    
    {
    
    	int i = 0;
    	int same_Count = 0;
    
    	for (i = 0; i < MAX_STOCKS; i++)
    	{
    		if (stock1[i] == stock2[i])
    			{	
    				same_Count = same_Count + 1;
    			}
    	}
    
    
    	return same_Count;
    
    
    }//END OF FIND THE STOCKS BEING THE SAME
    
    
    void print_Report1(int first_Greater, int second_Greater, int same_Price)
    {
    
    	printf("REPORT ONE\n\n");
    	printf("The amount of days stock one is greater is: &#37;d\n\n", first_Greater);
    	printf("The amount of days the stock two is greater is: %d\n\n", second_Greater);
    	printf("The amount of days the stocks are the same is: %d\n\n", same_Price);
    
    }//END OF PRINTING REPORT 1
    
    
    double average_First (float stock1[])
    {
    
    	double average = 0;
    	double sum = 0;
    
    		for (int i = 0; i < MAX_STOCKS; i++)
    		{	
    			sum = (stock1[i] + sum); 
    		}
    
    		average = (sum/(double)MAX_STOCKS);
    
    	return average;
    
    
    }//END OF FINDING AVERAGE
    
    double average_Second (float stock2[])
    {
    
    	double average = 0;
    	double sum = 0;
    
    		for (int i = 0; i < MAX_STOCKS; i++)
    		{	
    			sum = (stock2[i] + sum); 
    		}
    
    		average = (sum/(double)MAX_STOCKS);
    
    	return average;
    
    
    }//END OF FINDING AVERAGE
    
    int exceeded_Average_First (float stock1[], double average_First)
    
    {
    	
    	int i = 0;
    	int first_Greater_C = 0;
    	
    	for (i = 0; i < MAX_STOCKS; i++)
    	{
    		if (stock1[i] > average_First)
    			{ 
    				first_Greater_C = (first_Greater_C + 1);
    				//printf("Stock[%d]: %f Count: %d\n\n", i, stock1[i], first_Greater_C); 
    			}
    	}
    
    
    	return first_Greater_C;
    
    
    }// END OF EXCEEDED FIRST AVERAGE
    
    
    int exceeded_Average_Second (float stock2[], double average_Second)
    
    {
    	
    	int i = 0;
    	int second_Greater_C = 0;
    	
    	for (i = 0; i < MAX_STOCKS; i++)
    	{
    		if (stock2[i] > average_Second)
    			{ 
    				second_Greater_C = (second_Greater_C + 1);
    			}
    	}
    
    	return second_Greater_C;
    
    
    }// END OF EXCEEDED FIRST AVERAGE
    
    void print_Report2 (double average_First, double average_Second, int exceeded_Average_First, int exceeded_Average_Second)
    
    {
    
    	printf("REPORT 2\n\n");
    	printf("The average of the first stock is %.2lf\n\n", average_First);
    	printf("The average of the second stock is %.2lf\n\n", average_Second);
    	printf("The first stock exceeded it's average %d times\n\n", exceeded_Average_First);
    	printf("The second stock exceeded it's average %d times\n\n", exceeded_Average_Second);
    
    }// END OF PRINTING REPORT 2
    
    void calc_Mov_Average (float stock[], float movAvg[])
    {
    
    	int i = 0;
    	int mov_Index = 0;
    	int prime_Count = 0;
    	float running_Sum = 0;
    
    	for (i = 0; i < MAX_STOCKS; i++)
    	{
    		//Prime running sum with first 5 elements
    		if (prime_Count < 5)
    		{
    			running_Sum = (stock[i] + running_Sum);
    
    			//On fifth element calc first moving average
    			if (prime_Count = 4)
    			{
    					movAvg[mov_Index] = (running_Sum/5);
    					mov_Index++;
    			}
    
    			prime_Count = (prime_Count + 1);
    		}
    		else
    		{
    			//Calc running sum on remaining elements
    			//	By adding the next elements in the sum and subtracting the element before the sum
    			running_Sum = ((running_Sum + stock[i]) - stock[i-5]); 
    			movAvg[mov_Index] = (running_Sum/5);
    			mov_Index++;
     		}
    	
    	}//END OF FOR
    
    }//END OF CALC MOVING AVERAGE
    
    
    void print_Report3 (float mov_Stock1[], float mov_Stock2[])
    
    {
    
    	int i = 0;
    	int start = 1;
    	int stop = 5;
    
    	for (i = 0; i < MOV_MAX; i++)
    	{
    		
    		printf("REPORT 3\n\n");
    		printf("Day %d to %d for stock 1: %f\n\n", start, stop, mov_Stock1[i]);
    		printf("Day %d to %d for stock 2: %f\n\n", start, stop, mov_Stock2[i]);
    		
    		start++;
    		stop++;
    
    	}//END OF FOR
    
    		
    
    }//END OF PRINTING REPORT 3
    
    
    int first_Mov_Greater (float mov_Stock1[], float mov_Stock2[])
    {
    
    	int i = 0;
    	int movf_Greater_Count = 0;
    
    	for (i = 0; i < MOV_MAX; i++)
    	{
    		if (mov_Stock1[i] > mov_Stock2[i])
    			{	
    				movf_Greater_Count = movf_Greater_Count + 1;
    			}
    	}
    
    
    	return movf_Greater_Count;
    
    
    }//END OF COUNTING THE FIRST STOCK BEING GREATER
    
    int second_Mov_Greater (float mov_Stock1[], float mov_Stock2[])
    {
    
    	int i = 0;
    	int movs_Greater_Count = 0;
    
    	for (i = 0; i < MOV_MAX; i++)
    	{
    		if (mov_Stock1[i] < mov_Stock2[i])
    			{	
    				movs_Greater_Count = movs_Greater_Count + 1;
    			}
    	}
    
    
    	return movs_Greater_Count;
    
    
    }//END OF COUNTING THE SECOND STOCK BEING GREATER
    
    int mov_Same (float mov_Stock1[], float mov_Stock2[])
    
    {
    
    	int i = 0;
    	int mov_Same_Count = 0;
    
    	for (i = 0; i < MOV_MAX; i++)
    	{
    		if (mov_Stock1[i] == mov_Stock2[i])
    			{	
    				mov_Same_Count = mov_Same_Count + 1;
    			}
    	}
    
    
    	return mov_Same_Count;
    
    
    }//END OF FIND THE STOCKS BEING THE SAME
    
    void print_Report4(int first_Mov_Greater, int second_Mov_Greater, int mov_Same)
    {
    
    	printf("REPORT FOUR\n\n");
    	printf("The amount of days the moving average was greater for the first stock is: %d\n\n", first_Mov_Greater);
    	printf("The amount of days the moving average was greater for the second stock is: %d\n\n", second_Mov_Greater);
    	printf("The amount of days the moving average is the same for both stocks is: %d\n\n", mov_Same);
    
    }//END OF PRINTING REPORT 4

  2. #2
    Deathray Engineer MacGyver's Avatar
    Join Date
    Mar 2007
    Posts
    3,210
    Am I missing something or did you just post this over here?

    http://cboard.cprogramming.com/showthread.php?t=89033

  3. #3
    Registered User
    Join Date
    Apr 2007
    Posts
    133
    Different question with corrections. Any ideas?
    Last edited by GCNDoug; 04-23-2007 at 12:35 PM.

  4. #4
    Registered User
    Join Date
    Apr 2007
    Posts
    133
    Guess no one knows how to do this...

  5. #5
    Woof, woof! zacs7's Avatar
    Join Date
    Mar 2007
    Location
    Australia
    Posts
    3,459
    I'd say that the length of your homework warrents a pastebin, rather than being posted in here... Also if your going to post the same code more than once because you have more than one question, don't just ask more than one question in the same post.

    I'd try narrow down the problem, rather than - "oh no one of my functions doesn't work, I'll post it on CProgramming and get someone else to fix it for me".

    Try reask your question simpler, if you wrote it then your the only person who best knows what it does and how it works (without someone else studying every line).

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. C program using structs to calculate grades
    By TampaTrinDM88 in forum C Programming
    Replies: 4
    Last Post: 07-06-2009, 12:33 PM
  2. fgets question
    By mattyg in forum C Programming
    Replies: 2
    Last Post: 12-01-2008, 04:25 AM
  3. Design layer question
    By mdoland in forum C# Programming
    Replies: 0
    Last Post: 10-19-2007, 04:22 AM
  4. Code Question
    By lyoncourt in forum C Programming
    Replies: 3
    Last Post: 09-16-2007, 04:33 PM
  5. the definition of a mathematical "average" or "mean"
    By DavidP in forum A Brief History of Cprogramming.com
    Replies: 7
    Last Post: 12-03-2002, 11:15 AM