# Average of a stream of numbers

Difficulty Level: Rookie
Given a stream of numbers, print average (or mean) of the stream at every point. For example, let us consider the stream as 10, 20, 30, 40, 50, 60, …

```  Average of 1 numbers is 10.00
Average of 2 numbers is 15.00
Average of 3 numbers is 20.00
Average of 4 numbers is 25.00
Average of 5 numbers is 30.00
Average of 6 numbers is 35.00
..................
```

To print mean of a stream, we need to find out how to find average when a new number is being added to the stream. To do this, all we need is count of numbers seen so far in the stream, previous average and new number. Let n be the count, prev_avg be the previous average and x be the new number being added. The average after including x number can be written as (prev_avg*n + x)/(n+1).

## C++

 `#include ` ` `  `// Returns the new average after including x ` `float` `getAvg(``float` `prev_avg, ``int` `x, ``int` `n) ` `{ ` `    ``return` `(prev_avg * n + x) / (n + 1); ` `} ` ` `  `// Prints average of a stream of numbers ` `void` `streamAvg(``float` `arr[], ``int` `n) ` `{ ` `    ``float` `avg = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``avg = getAvg(avg, arr[i], i); ` `        ``printf``(````"Average of %d numbers is %f "````, i + 1, avg); ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver program to test above functions ` `int` `main() ` `{ ` `    ``float` `arr[] = { 10, 20, 30, 40, 50, 60 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``streamAvg(arr, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to find average  ` `// of a stream of numbers ` `class` `GFG { ` ` `  `    ``// Returns the new average after including x ` `    ``static` `float` `getAvg(``float` `prev_avg, ``float` `x, ``int` `n) ` `    ``{ ` `        ``return` `(prev_avg * n + x) / (n + ``1``); ` `    ``} ` ` `  `    ``// Prints average of a stream of numbers ` `    ``static` `void` `streamAvg(``float` `arr[], ``int` `n) ` `    ``{ ` `        ``float` `avg = ``0``; ` `        ``for` `(``int` `i = ``0``; i < n; i++)  ` `        ``{ ` `            ``avg = getAvg(avg, arr[i], i); ` `            ``System.out.printf(````"Average of %d numbers is %f "````, ` `                                                   ``i + ``1``, avg); ` `        ``} ` `        ``return``; ` `    ``} ` ` `  `    ``// Driver program to test above functions ` `    ``public` `static` `void` `main(String[] args) ` `    ``{ ` `        ``float` `arr[] = { ``10``, ``20``, ``30``, ``40``, ``50``, ``60` `}; ` `        ``int` `n = arr.length; ` `        ``streamAvg(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by Smitha Dinesh Semwal `

## Python3

 `# Returns the new average ` `# after including x ` `def` `getAvg(prev_avg, x, n): ` `    ``return` `((prev_avg ``*`  `             ``n ``+` `x) ``/`  `            ``(n ``+` `1``)); ` ` `  `# Prints average of  ` `# a stream of numbers ` `def` `streamAvg(arr, n): ` `    ``avg ``=` `0``; ` `    ``for` `i ``in` `range``(n): ` `        ``avg ``=` `getAvg(avg, arr[i], i); ` `        ``print``(``"Average of "``, i ``+` `1``, ` `              ``" numbers is "``, avg); ` ` `  `# Driver Code ` `arr ``=` `[``10``, ``20``, ``30``, ` `       ``40``, ``50``, ``60``]; ` `n ``=` `len``(arr); ` `streamAvg(arr, n); ` ` `  `# This code is contributed ` `# by mits `

/div>

## C#

 `// C# program to find average  ` `// of a stream of numbers ` `using` `System; ` ` `  `class` `GFG  ` `{ ` ` `  `    ``// Returns the new average ` `    ``// after including x ` `    ``static` `float` `getAvg(``float` `prev_avg,  ` `                        ``float` `x, ``int` `n) ` `    ``{ ` `        ``return` `(prev_avg * n + x) / (n + 1); ` `    ``} ` ` `  `    ``// Prints average of  ` `    ``// a stream of numbers ` `    ``static` `void` `streamAvg(``float``[] arr,  ` `                          ``int` `n) ` `    ``{ ` `        ``float` `avg = 0; ` `        ``for` `(``int` `i = 0; i < n; i++)  ` `        ``{ ` `            ``avg = getAvg(avg, arr[i], i); ` `            ``Console.WriteLine(``"Average of {0} "` `+  ` `                                ``"numbers is {1}"``,  ` `                                     ``i + 1, avg); ` `        ``} ` `        ``return``; ` `    ``} ` ` `  `    ``// Driver Code ` `    ``public` `static` `void` `Main(String[] args) ` `    ``{ ` `        ``float``[] arr = {10, 20, 30,  ` `                       ``40, 50, 60}; ` `        ``int` `n = arr.Length; ` `        ``streamAvg(arr, n); ` `    ``} ` `} ` ` `  `// This code is contributed by mits `

## PHP

 ` `

Output :

```Average of 1 numbers is 10.000000
Average of 2 numbers is 15.000000
Average of 3 numbers is 20.000000
Average of 4 numbers is 25.000000
Average of 5 numbers is 30.000000
Average of 6 numbers is 35.000000
```

The above function getAvg() can be optimized using following changes. We can avoid the use of prev_avg and number of elements by using static variables (Assuming that only this function is called for average of stream). Following is the oprimnized version.

## C

 `#include ` ` `  `// Returns the new average after including x ` `float` `getAvg(``int` `x) ` `{ ` `    ``static` `int` `sum, n; ` ` `  `    ``sum += x; ` `    ``return` `(((``float``)sum) / ++n); ` `} ` ` `  `// Prints average of a stream of numbers ` `void` `streamAvg(``float` `arr[], ``int` `n) ` `{ ` `    ``float` `avg = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) { ` `        ``avg = getAvg(arr[i]); ` `        ``printf``(````"Average of %d numbers is %f "````, i + 1, avg); ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver program to test above functions ` `int` `main() ` `{ ` `    ``float` `arr[] = { 10, 20, 30, 40, 50, 60 }; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr); ` `    ``streamAvg(arr, n); ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to return  ` `// Average of a stream of numbers ` `class` `GFG ` `{ ` `static` `int` `sum, n; ` `     `  `// Returns the new average ` `// after including x ` `static` `float` `getAvg(``int` `x) ` `{ ` `    ``sum += x; ` `    ``return` `(((``float``)sum) / ++n); ` `} ` ` `  `// Prints average of a ` `// stream of numbers ` `static` `void` `streamAvg(``float``[] arr, ` `                      ``int` `n) ` `{ ` `    ``float` `avg = ``0``; ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `    ``{ ` `        ``avg = getAvg((``int``)arr[i]); ` `        ``System.out.println(``"Average of "``+ (i + ``1``) +  ` `                           ``" numbers is "` `+ avg); ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args) ` `{ ` `    ``float``[] arr = ``new` `float``[]{ ``10``, ``20``, ``30``, ` `                               ``40``, ``50``, ``60` `}; ` `    ``int` `n = arr.length; ` `    ``streamAvg(arr, n); ` `} ` `} ` ` `  `// This code is contributed by mits `

## Python3

 `# Returns the new average ` `# after including x ` `def` `getAvg(x, n, ``sum``): ` `    ``sum` `=` `sum` `+` `x; ` `    ``return` `float``(``sum``) ``/` `n; ` ` `  `# Prints average of a  ` `# stream of numbers ` `def` `streamAvg(arr, n): ` `    ``avg ``=` `0``; ` `    ``sum` `=` `0``; ` `    ``for` `i ``in` `range``(n): ` `        ``avg ``=` `getAvg(arr[i], i ``+` `1``, ``sum``); ` `        ``sum` `=` `avg ``*` `(i ``+` `1``); ` `        ``print``(``"Average of "``, end ``=` `""); ` `        ``print``(i ``+` `1``, end ``=` `""); ` `        ``print``(``" numbers is "``, end ``=` `""); ` `        ``print``(avg); ` `    ``return``; ` ` `  `# Driver Code ` `arr``=` `[ ``10``, ``20``, ``30``,  ` `       ``40``, ``50``, ``60` `]; ` `n ``=` `len``(arr); ` `streamAvg(arr,n); ` ` `  `# This code is contributed by mits `

## C#

 `using` `System; ` ` `  `class` `GFG ` `{ ` `static` `int` `sum, n; ` `     `  `// Returns the new average ` `// after including x ` `static` `float` `getAvg(``int` `x) ` `{ ` ` `  `    ``sum += x; ` `    ``return` `(((``float``)sum) / ++n); ` `} ` ` `  `// Prints average of a ` `// stream of numbers ` `static` `void` `streamAvg(``float``[] arr, ``int` `n) ` `{ ` `    ``float` `avg = 0; ` `    ``for` `(``int` `i = 0; i < n; i++) ` `    ``{ ` `        ``avg = getAvg((``int``)arr[i]); ` `        ``Console.WriteLine(``"Average of {0} numbers "` `+  ` `                             ``"is {1}"``, (i + 1), avg); ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver Code ` `static` `int` `Main() ` `{ ` `    ``float``[] arr = ``new` `float``[]{ 10, 20, 30, ` `                               ``40, 50, 60 }; ` `    ``int` `n = arr.Length; ` `    ``streamAvg(arr, n); ` ` `  `    ``return` `0; ` `} ` `} ` ` `  `// This code is contributed by mits `

## PHP

 ` `

Output:

```Average of 1 numbers is 10.0
Average of 2 numbers is 15.0
Average of 3 numbers is 20.0
Average of 4 numbers is 25.0
Average of 5 numbers is 30.0
Average of 6 numbers is 35.0```

Thanks to Abhijeet Deshpande for suggesting this optimized version.

Related article:
Program for average of an array (Iterative and Recursive)