Write Java and C programs to implement prefixes averages algorithm.

Prefix Average Problem: Sometimes it is useful to know the "prefix average" of a set of values. For an example, if you are an extravagant person and wonder what the average expenses you make each day for a given month. You may keep an array of everyday expenses like:

------------------------------------ 
| 500 | 400 | 600 | 350 | 470 | ... 
------------------------------------

If you also want to keep track of the "daily average" of your expenses for each day of the month, you can simply compute the average of all the days up-to and including the day you want the average for. For example, on day 1 there have 500 bucks been spent. The average expenses per day will be the total expenses (500) divided by the number of days (1) for an average of 1 in day. By day 3 the daily average has changed substantially: a total of 1500 bucks have been spent (500+400+600) over the course of 3 days, giving a daily average of 500 in day.

This computation is known as the prefix average. It averages all the "previous" values. Usually it is used to find the prefix average for every location in an array. Prefix average is very useful in financial analysis applications.

Here, we develop C and Java program to compute prefix averages of an array. We develop a method computePrefixAvg that takes an array arr storing n integers, where n >= 1 and returns an array containing prefix averages of the array passed to computePrefixAvg. Function computePrefixAvg runs in linear time.

Following are the Java and C codes respectively to compute prefix averages of an array.

Java code for prefix averages problem.

class PrefixAverage
{
  public static void main(String[] args)
  {
    int arr[] = {12, 14, 13, 15, 19, 17, 16, 11, 18, 20};
    int pfavg[], i, j, k; 
 
    pfavg = computePrefixAvg(arr);
 
    System.out.println("Array Elements              Average");
    System.out.println("===================================");
    for (i = 0; i < 10; i ++ )
    {
      for (j = 0; j <= i; j++)
      {
        System.out.print(arr[j] + " ");
      }
      for (k = 10; k > j; k--)
      {
        System.out.print("   ");
      }
      System.out.println(" : " + pfavg[i]);
    }  
  }
 
  static int[] computePrefixAvg(int arr[])
  {
    int length = arr.length;
    int[] pfArr = new int[length];
    int sum = 0;
 
    for(int i = 0; i < length; i++)
    {
      sum += arr[i];
      pfArr[i] = sum / (i + 1);
    }
 
    return pfArr;
  }
}
 
OUTPUT
======
D:\JavaPrograms>javac PrefixAverage.java
 
D:\JavaPrograms>java PrefixAverage
Array Elements              Average
===================================
12                             : 12
12 14                          : 13
12 14 13                       : 13
12 14 13 15                    : 13
12 14 13 15 19                 : 14
12 14 13 15 19 17              : 15
12 14 13 15 19 17 16           : 15
12 14 13 15 19 17 16 11        : 14
12 14 13 15 19 17 16 11 18     : 15
12 14 13 15 19 17 16 11 18 20  : 15

C code for prefix averages problem.

#include <stdio.h>
#define SIZE 10
 
void computePrefixAvg(int*, int*);
 
int main()
{
  int arr[] = {12, 14, 13, 15, 19, 17, 16, 11, 18, 20};
  int pfavg[SIZE], i, j, k; 
 
  computePrefixAvg(arr, pfavg);
 
  printf("Array Elements              Average\n");
  printf("===================================\n");
  for (i = 0; i < 10; i ++ )
  {
    for (j = 0; j <= i; j++)
    {
	  printf("%d ", arr[j]);
    }
    for (k = 10; k > j; k--)
    {
	  printf("   ");
    }
    printf(" : %d\n", pfavg[i]);
  }  
}
 
void computePrefixAvg(int* arr, int* pfArr)
{
  int sum = 0;
 
  for(int i = 0; i < SIZE; i++)
  {
    sum += arr[i];
    pfArr[i] = sum / (i + 1);
  }
}
 
OUTPUT
======
Array Elements              Average
===================================
12                             : 12
12 14                          : 13
12 14 13                       : 13
12 14 13 15                    : 13
12 14 13 15 19                 : 14
12 14 13 15 19 17              : 15
12 14 13 15 19 17 16           : 15
12 14 13 15 19 17 16 11        : 14
12 14 13 15 19 17 16 11 18     : 15
12 14 13 15 19 17 16 11 18 20  : 15

Hope you have enjoyed reading C and Java programs for prefix averages proble. Please do write us if you have any suggestion/comment or come across any error on this page. Thanks for reading!



Get Free Tutorials by Email

About the Author

is the main author for cs-fundamentals.com. He is a software professional (post graduated from BITS-Pilani) and loves writing technical articles on programming and data structures.

Today's Tech News

Plans drawn up for world's tallest wooden skyscraperPosted on Monday February 19, 2018

The 70-storey tower would be 90% wood and have trees and other foliage on every level.

Probe after 'drone made helicopter crash'Posted on Monday February 19, 2018

Investigations are launched after a helicopter reportedly crashed after swerving to avoid a consumer drone.

Dark web paedophile Matthew Falder jailed for 32 yearsPosted on Monday February 19, 2018

Matthew Falder blackmailed victims into sending sexual images that he then shared on the dark web.

Courtesy BBC News

AD BLOCKER DETECTED!

Advertisements help running this site for free.


To view the content please disable AdBlocker and refresh the page.

×