Thread: function to find average

  1. #1
    Registered User
    Join Date
    Oct 2008
    Posts
    92

    function to find average

    Hi, i have a problem with this function. It runs well when I enter data for 1 student, but when I have 2 or more students I don't have wright result. Please can anyone point to me where I am wrong.
    Thank you.

    Code:
    void find_student_ave(void)
    {
    	
    	for(i=0;i<student;++i)
    	{
    		test_sum=0;
    		for(j=0;j<3;++j)	
    		{	
    			test_sum+=grades[i][j];
    		}
    			test_ave[i]=(float)test_sum/3;
    	}
    				
    	for(i=0;i<student;++i)
    	{
    		quiz_sum=0;
    		for(j=3; j<8;++j)
    		{
    			quiz_sum+=grades[i][j];	
    		}
    			quiz_ave[i]=(float)quiz_sum/5;
    	}
    			
    	for(i=0;i<student;++i)
    	{
    		h_work_sum=0;
    		for(j=8;j<18;++j)
    		{
    			h_work_sum+=grades[i][j];
    		}
    			h_work_ave[i]=(float)h_work_sum/10;	
    	}
    
    
    	while(i<student);
    	{
    		i=0;
    		student_ave[i]=((0.5*test_ave[i])+(0.3*quiz_ave[i])+(0.2*h_work_ave[i]));
    		++i;
    	}
    }

  2. #2
    Registered User
    Join Date
    Nov 2007
    Posts
    46
    Really difficult to understand what's going on when you're using global variables like that, and not even posting that part of the code... That together with magic numbers makes things hard to read. But anyway, here are two things you could start by looking at:

    Code:
    while(i<student);
    {
    	i=0;
    	student_ave[i]=((0.5*test_ave[i])+(0.3*quiz_ave[i])+(0.2*h_work_ave[i]));
    	++i;
    }

  3. #3
    Registered User
    Join Date
    Oct 2008
    Posts
    92
    Thank you, I fixed those 2 errors, but I'm still having wrong output.
    Here is a program, sorry for not posting it in a begining. I decided to use in this program global veriables, because I am using each function just once, I did not want to pass to them anything and I did not need to return anything.
    Code:
    #include<stdio.h>
    
    int grades[][18]={0};
    int test_sum=0, quiz_sum=0, h_work_sum=0;
    int student;
    int i, j;
    int test_highest=0, quiz_highest=0, h_work_highest=0;
    int test_lowest=100, quiz_lowest=100, h_work_lowest=100;
    float test_ave[]={0}, quiz_ave[]={0}, h_work_ave[]={0};
    float student_ave[]={0};
    float ave[]={0};
    
    
    void get_grade(void)
    {
    	for(i=0;i<student;++i)
    
    		{
    			printf("\t\t\tEnter grades for student# %i\n", i+1);
    			printf("Test grade\n"); // enter test grades
    				for(j=0;j<3;++j)	
    				{	
    					scanf("%i",&grades[i][j]);
    				}
    					printf("Quiz grade\n"); // enter quiz grades
    					for(j=3; j<8;++j)
    					{
    						scanf("%i",&grades[i][j]);	
    					}
    							printf("Homework grade\n");  // enter homework grades
    							for(j=8;j<18;++j)
    							{
    								scanf("%i",&grades[i][j]);	
    							}
    		}
    }
    
    void print_grades(void)
    {
    	
    
    	for(i=0;i<student;++i)
    	{
    		printf("\n\t\t\tStudent #%i   ",i+1);
    			
    		printf("\nTest grades:\n");
    			for(j=0;j<3;++j)	
    				{	
    					 printf("%i  ",grades[i][j]);
    				}
    					printf("\nQuiz grades:\n");
    					for(j=3; j<8;++j)
    					{
    						printf("%i  ",grades[i][j]);	
    					}
    							printf("\nHomework grades:\n");
    							for(j=8;j<18;++j)
    							{
    								printf("%i  ",grades[i][j]);	
    							}
    							printf("\n");
    	}
    	
    
    }
    
    void find_highest_grade(void)
    {
    	for(i=0;i<student;++i)
    
    	{	
    		for(j=0;j<3;++j)
    		{
    			if(grades[i][j]>test_highest)
    				test_highest=grades[i][j];
    		}
    				for(j=3;j<8;++j)	
    				{	
    					if(grades[i][j]>quiz_highest)
    						quiz_highest=grades[i][j];
    				}
    				
    						for(j=8;j<18;++j)	
    						{
    							if(grades[i][j]>h_work_highest)
    								h_work_highest=grades[i][j];
    						}
    	}
    		
     
    }
    
    void find_lowest_grade(void)
    {
    	for(i=0;i<student;++i)
    
    	{	
    		for(j=0;j<3;++j)
    		{	
    			if(grades[i][j]<test_lowest)
    				test_lowest=grades[i][j];
    		}
    		
    				for(j=3;j<8;++j)	
    				{	
    					if(grades[i][j]<quiz_lowest)
    						quiz_lowest=grades[i][j];
    				}
    						for(j=8;j<18;++j)	
    						{
    							if(grades[i][j]<h_work_lowest)
    								h_work_lowest=grades[i][j];
    						}
    	}
    
    }
    void find_student_ave(void)
    {
    	
    	for(i=0;i<student;++i)
    	{
    		test_sum=0;
    		for(j=0;j<3;++j)	
    		{	
    			test_sum+=grades[i][j];
    		}
    			test_ave[i]=(float)test_sum/3;
    	}
    				
    	for(i=0;i<student;++i)
    	{
    		quiz_sum=0;
    		for(j=3; j<8;++j)
    		{
    			quiz_sum+=grades[i][j];	
    		}
    			quiz_ave[i]=(float)quiz_sum/5;
    	}
    			
    	for(i=0;i<student;++i)
    	{
    		h_work_sum=0;
    		for(j=8;j<18;++j)
    		{
    			h_work_sum+=grades[i][j];
    		}
    			h_work_ave[i]=(float)h_work_sum/10;	
    	}
    
    	i=0;
    	while(i<student)
    	{
    		
    		student_ave[i]=((0.5*test_ave[i])+(0.3*quiz_ave[i])+(0.2*h_work_ave[i]));
    		++i;
    	}
    }
    
    int main(void)
    {
    		printf("Enter number of students in a class:  ");
    		scanf("%i", &student);
    
    		get_grade();
    		print_grades();
    		find_highest_grade();
    		find_lowest_grade();
    
    		printf("\n\n\t\tTest\tQuiz\tH/work\n");
    		printf("---------------------------------------\n");
    		printf("Lowest grade    %i\t%i\t  %i\n", test_lowest, quiz_lowest, h_work_lowest);
    		printf("Highest grade   %i\t%i\t  %i\n",test_highest, quiz_highest, h_work_highest);
    		printf("\n");
    
    		find_student_ave();
    	
    		printf("\n\nStudent  Test Ave.  Quiz Ave.  H/work Ave.  Overall Ave.\n");
    		printf("------------------------------------------------------\n");
    		for(i=0; i<student; ++i)
    		{
    			printf("  %i\t  %.2f\t     %.2f\t%.2f\t       %.2f\n",i+1,test_ave[i], quiz_ave[i], h_work_ave[i], student_ave[i]);
    
    		}
    	
    }

  4. #4
    Registered User
    Join Date
    Oct 2008
    Posts
    92
    I change find_student_ave function, but still having the same problem, starting from 2 student wrong output, can't understand why, code suppose to work. I need help, please.
    Here si the function:
    Code:
    void find_student_ave(void)
    {
    	for(i=0;i<student;++i)
    	{	
    		test_sum=0;
    		quiz_sum=0;
    		h_work_sum=0;
    
    		for(j=0;j<3;++j)	
    		{	
    			test_sum+=grades[i][j];
    		}
    				for(j=3; j<8;++j)
    				{
    					quiz_sum+=grades[i][j];	
    				}
    						for(j=8;j<18;++j)
    						{
    							h_work_sum+=grades[i][j];
    						}
    
    		student_ave[i]=((0.5*((float)test_sum/3))+(0.3*((float)quiz_sum/5))+(0.2*((float)h_work_sum/10)));
    	}	
    }
    and this the program:

    Code:
    #include<stdio.h>
    
    int grades[][18]={0};
    int test_sum=0, quiz_sum=0, h_work_sum=0;
    int student;
    int i, j;
    int test_highest=0, quiz_highest=0, h_work_highest=0;
    int test_lowest=100, quiz_lowest=100, h_work_lowest=100;
    float student_ave[]={0};
    float ave[]={0};
    
    
    void get_grade(void)
    {
    	for(i=0;i<student;++i)
    
    		{
    			printf("\t\t\tEnter grades for student# %i\n", i+1);
    			printf("Test grade\n"); // enter test grades
    				for(j=0;j<3;++j)	
    				{	
    					scanf_s("%i",&grades[i][j]);
    				}
    					printf("Quiz grade\n"); // enter quiz grades
    					for(j=3; j<8;++j)
    					{
    						scanf_s("%i",&grades[i][j]);	
    					}
    							printf("Homework grade\n");  // enter homework grades
    							for(j=8;j<18;++j)
    							{
    								scanf_s("%i",&grades[i][j]);	
    							}
    		}
    }
    
    void print_grades(void)
    {
    	
    
    	for(i=0;i<student;++i)
    	{
    		printf("\n\t\t\tStudent #%i   ",i+1);
    			
    		printf("\nTest grades:\n");
    			for(j=0;j<3;++j)	
    				{	
    					 printf("%i  ",grades[i][j]);
    				}
    					printf("\nQuiz grades:\n");
    					for(j=3; j<8;++j)
    					{
    						printf("%i  ",grades[i][j]);	
    					}
    							printf("\nHomework grades:\n");
    							for(j=8;j<18;++j)
    							{
    								printf("%i  ",grades[i][j]);	
    							}
    							printf("\n");
    	}
    	
    
    }
    
    void find_highest_grade(void)
    {
    	for(i=0;i<student;++i)
    
    	{	
    		for(j=0;j<3;++j)
    		{
    			if(grades[i][j]>test_highest)
    				test_highest=grades[i][j];
    		}
    				for(j=3;j<8;++j)	
    				{	
    					if(grades[i][j]>quiz_highest)
    						quiz_highest=grades[i][j];
    				}
    				
    						for(j=8;j<18;++j)	
    						{
    							if(grades[i][j]>h_work_highest)
    								h_work_highest=grades[i][j];
    						}
    	}
    		
     
    }
    
    void find_lowest_grade(void)
    {
    	for(i=0;i<student;++i)
    
    	{	
    		for(j=0;j<3;++j)
    		{	
    			if(grades[i][j]<test_lowest)
    				test_lowest=grades[i][j];
    		}
    		
    				for(j=3;j<8;++j)	
    				{	
    					if(grades[i][j]<quiz_lowest)
    						quiz_lowest=grades[i][j];
    				}
    						for(j=8;j<18;++j)	
    						{
    							if(grades[i][j]<h_work_lowest)
    								h_work_lowest=grades[i][j];
    						}
    	}
    
    }
    void find_student_ave(void)
    {
    	for(i=0;i<student;++i)
    	{	
    		test_sum=0;
    		quiz_sum=0;
    		h_work_sum=0;
    
    		for(j=0;j<3;++j)	
    		{	
    			test_sum+=grades[i][j];
    		}
    				for(j=3; j<8;++j)
    				{
    					quiz_sum+=grades[i][j];	
    				}
    						for(j=8;j<18;++j)
    						{
    							h_work_sum+=grades[i][j];
    						}
    
    		student_ave[i]=((0.5*((float)test_sum/3))+(0.3*((float)quiz_sum/5))+(0.2*((float)h_work_sum/10)));
    	}	
    }
    
    int main(void)
    {
    		printf("Enter number of students in a class:  ");
    		scanf_s("%i", &student);
    
    		get_grade();
    		print_grades();
    		find_highest_grade();
    		find_lowest_grade();
    
    		printf("\n\n\t\tTest\tQuiz\tH/work\n");
    		printf("---------------------------------------\n");
    		printf("Lowest grade    %i\t%i\t  %i\n", test_lowest, quiz_lowest, h_work_lowest);
    		printf("Highest grade   %i\t%i\t  %i\n",test_highest, quiz_highest, h_work_highest);
    		printf("\n");
    
    		find_student_ave();
    
    	
    		printf("\n\nStudent  Overall Ave.\n");
    		printf("-------------------------\n");
    		for(i=0; i<student; ++i)
    		{
    			printf("  %i\t    %.2f\n", i+1, student_ave[i]);
    
    		}
    	
    }

  5. #5
    Registered User
    Join Date
    Oct 2008
    Posts
    92
    I found that actual problem is in a first function get_grades and not in find_student_ave, trying to fix it.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Undefined Reference Compiling Error
    By AlakaAlaki in forum C++ Programming
    Replies: 1
    Last Post: 06-27-2008, 11:45 AM
  2. Bisection Method function value at root incorrect
    By mr_glass in forum C Programming
    Replies: 3
    Last Post: 11-10-2005, 09:10 AM
  3. Change this program so it uses function??
    By stormfront in forum C Programming
    Replies: 8
    Last Post: 11-01-2005, 08:55 AM
  4. Creating a student grade book-how?
    By Hopelessly confused in forum C Programming
    Replies: 5
    Last Post: 10-03-2002, 08:43 PM
  5. Contest Results - May 27, 2002
    By ygfperson in forum A Brief History of Cprogramming.com
    Replies: 18
    Last Post: 06-18-2002, 01:27 PM