Write a program that lets the user enter the total rainfall for each of 12 months into an array of doubles. The program should calculate and display the total rainfall for the year and the average monthly rainfall. Use bubble sort and sort the months with the lowest to highest rain amounts. Use the binary search and search for a specific rain amount. If the rain amount is found, display a message showing which month had that rain amount. Input Validation: Do not accept negative numbers for monthly rainfall figures.

Respuesta :

Answer:

Program approach:-

  • Using the header file.
  • Using the standard namespace I/O.
  • Define the main function.
  • Check whether entered the value is negative.
  • Find the middle position of the array.
  • Display message if value not found.
  • Returning the value.

Explanation:

Program:-

//required headers

#include <stdio.h>

#include<iostream>

using namespace std;

//main function

int main()

{   double rain[12], temp_rain[12], sum=0, avg=0, temp;

   int month=0, i, j, n=12, low=0, mid=0, high=12, x, found=0;

   char month_name[][12]={"January", "February", "March", "April", "May", "June",

   "July", "August", "September", "October", "November", "December"};

 

   //store input values to arrays rain and temp_rain

   while(month<n)

   {   cout<<"Enter the total rainfall for month "<<month+1<<" :";

       cin>>temp;

     

       //check whether the entered value is negative

       if(temp<0)

       {   cout<<"Enter a non negative value"<<endl;

       }

     

       else

       {   rain[month]=temp;

           temp_rain[month]=temp;

         

           //total sum is found out and stored to sum

           sum+=temp;

           month++;

       }

   }

 

   //find average rainfall

   avg=sum/n;

 

   //display total and average rainfall for the year

   cout<<"Total rainfall for the year: "<<sum<<endl;

   cout<<"Average rainfall for the year: "<<avg<<endl;

 

   //perform bubble sort on temp_rain array

   for(i=0; i<n-1; i++)    

   {   for (j=0; j<n-i-1; j++)

       {   if (temp_rain[j]>temp_rain[j+1])

           {

               temp=rain[j];

               temp_rain[j]=temp_rain[j+1];

               temp_rain[j+1]=temp;

           }

       }

   }

   //get search value and store it to x

   cout<<"Enter the value to search for a specific rain amount: ";

   cin>>x;

   //perform binary search on temp_rain array

   while (low<=high)

  {

      //find the middle position of the array

      int mid=(low+high)/2;

      //if a match is found, set found=1

      if(x==temp_rain[mid])

      {   found=1;

          break;

      }

       //ignore right half if search item is less than the middle value of the array

      else if(x<temp_rain[mid])

          high=mid-1;

       //ignore left half if search item is higher than the middle value of the array

      else

          low=mid+1;

  }

 

   //if a match is found, then display the month for the found value

   if(found==1)

   {

       for(i=0; i<n; i++)

       {   if(x==rain[i])

               cout<<"Found matching rainfall for this month: "<<month_name[i];

         

       }

     

   }

 

   //display message if value not found

   else

       cout<<"Value not found.";

 

   return 0;

}