Problem
Write a script to calculate the volume of a pyramid, which is 1/3 * base * height, where the base is length * width. Prompt the user to enter values for the length, width, and height, and then calculate the volume of the pyramid. When the user enters each value, he or she will then also be prompted for ‘i’ for inches or ‘c’ for centimeters. (Note: 2.54 cm = 1 inch.) The script should print the volume in cubic inches with three decimal places. As an example, the output format will be:
This program will calculate the volume of a pyramid. Enter the length of the base: 50 Is that i or c? i Enter the width of the base: 6 Is that i or c? c Enter the height: 4 Is that i or c? i The volume of the pyramid is xxx.xxx cubic inches.
Solution
This problem has been taken from the book A Practical introduction to Matlab by stormy Attaway. This is a must read book for Matlab programmers. This will make your path to success in Matlab easy and yes you will become a pro in Matlab after reading this book.
The above problem can be solved using a couple of if else statements. In this problem we will ask the user to give the input of the length of base and the we will ask if the user has entered the value of base in inch or centimeter. If the user has entered the value in cm then we will convert the value in inch and replace the value of the base in inch instead in cm. If the user has entered the value in inch then we will not change anything. In the similar way we will ask the user to enter the width of the base and height of the pyramid check if the user has entered the value in cm and convert the value to inch.
Refer to the program section first and try to understand what is going on in the program and if you have any doubt then refer to the explanation section to see the detailed explanation of the program.
To solve the problem, so of the concepts you need to know are as follows:
1) How to stop a script if condition is not met?
2) fprintf in Matlab
3) request user input
4) if, elseif, else in Matlab
5) return in Matlab
6) Matlab comments
The above problem can be solved using a couple of if else statements. In this problem we will ask the user to give the input of the length of base and the we will ask if the user has entered the value of base in inch or centimeter. If the user has entered the value in cm then we will convert the value in inch and replace the value of the base in inch instead in cm. If the user has entered the value in inch then we will not change anything. In the similar way we will ask the user to enter the width of the base and height of the pyramid check if the user has entered the value in cm and convert the value to inch.
Refer to the program section first and try to understand what is going on in the program and if you have any doubt then refer to the explanation section to see the detailed explanation of the program.
To solve the problem, so of the concepts you need to know are as follows:
1) How to stop a script if condition is not met?
2) fprintf in Matlab
3) request user input
4) if, elseif, else in Matlab
5) return in Matlab
6) Matlab comments
Program
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | %This program will calculate the volume of pyramid fprintf('This Program will calculate the volume of a pyramid\n') length_base = input('Enter the length of the base: '); units_length_base = input('Is that i or c? ','s'); if units_length_base == 'c' length_base = length_base/2.54; elseif units_length_base == 'i' length_base = length_base; else fprintf('You have entered a wrong input!\n'); return end width_base = input('Enter the width of the base: '); units_width_base = input('Is that i or c? ','s'); if units_width_base == 'c' width_base = width_base/2.54; elseif units_width_base == 'i' width_base = width_base; else fprintf('You have entered a wrong input!\n'); return end height = input('Enter the height: '); units_height = input('Is that i or c? ','s'); if units_height == 'c' height = height/2.54; elseif units_height == 'i' height = height; else fprintf('You have entered a wrong input!\n'); return end volume = length_base*width_base*height/3; fprintf('The volume of the pyramid is %.4f\n',volume); |
Explanation
Line 1: This is a Matlab comment. This states what this program is meant for. This is like heading for the article for programmers and the users will not be able to see this.
Line 3: This fprintf will display the user what the program will do.
Line 5: Ask the user to input the length of the base of the pyramid
Line 6: Ask the user to input the units of the length of the base of the pyramid that the user has entered. I think you have observed a 's' after the text that is displayed to the user. 's' means that the user will enter a string and not a number. We will have to specify this because Matlab by default assumes that the user will input a number and if you have not specified the 's' then Matlab will raise an error to the user saying that he has entered a wrong input and if the user is not a Matlab programmer he will get mad seeing this error and will not use your software, :) Because first impression is the best impression!!
Line 8-15: These are if elseif and else statements. First in the if statement I am checking that if the user has entered the units as 'c', if the user has entered 'c' then this if statement gets executed and the value of the length_base gets converted from centimeters to inches. This assures that we get our output in cubic inches. Elseif the user has entered the value in 'i', then we are keeping the same. You might have a doubt why I have created an elseif statement. If I have not created this statement then if the user will enter 'i', then the else statement will get executed and the user will get a error even if he/she is correct. So I have added this elseif. Finally the else statement gets executed if the user has not entered any of 'c' or 'i'. Remember that in an if elseif and else statements only one of these gets executed. If anyone of them gets executed then the remaining are not executed. You can see that there is return at the end of the else statement. What does return mean in Matlab code? It means that the program has done whatever it has to do and so Matlab(computer), stop further running of the program and come back to prompt mode as usual(i.e. it will stop running the program and show the >> so that the user can use the interpreter again.)
Line 16-38: These all lines are the repetitions of Line 5-15 but they are asking the user for different input and the values are being stored in corresponding variables.
Line40: Here the value of the volume is calculated based on the formula given in the question and the value is stored in volume variable.
Line 41: The user is displayed with a beautiful output showing the value of the volume for the value of the corresponding variables he/she has entered. The output will show upto 4 numbers after decimals because we have used '.4f' stating that round off the numbers upto 4 decimals and show the value.
Line 5: Ask the user to input the length of the base of the pyramid
Line 6: Ask the user to input the units of the length of the base of the pyramid that the user has entered. I think you have observed a 's' after the text that is displayed to the user. 's' means that the user will enter a string and not a number. We will have to specify this because Matlab by default assumes that the user will input a number and if you have not specified the 's' then Matlab will raise an error to the user saying that he has entered a wrong input and if the user is not a Matlab programmer he will get mad seeing this error and will not use your software, :) Because first impression is the best impression!!
Line 8-15: These are if elseif and else statements. First in the if statement I am checking that if the user has entered the units as 'c', if the user has entered 'c' then this if statement gets executed and the value of the length_base gets converted from centimeters to inches. This assures that we get our output in cubic inches. Elseif the user has entered the value in 'i', then we are keeping the same. You might have a doubt why I have created an elseif statement. If I have not created this statement then if the user will enter 'i', then the else statement will get executed and the user will get a error even if he/she is correct. So I have added this elseif. Finally the else statement gets executed if the user has not entered any of 'c' or 'i'. Remember that in an if elseif and else statements only one of these gets executed. If anyone of them gets executed then the remaining are not executed. You can see that there is return at the end of the else statement. What does return mean in Matlab code? It means that the program has done whatever it has to do and so Matlab(computer), stop further running of the program and come back to prompt mode as usual(i.e. it will stop running the program and show the >> so that the user can use the interpreter again.)
Line 16-38: These all lines are the repetitions of Line 5-15 but they are asking the user for different input and the values are being stored in corresponding variables.
Line40: Here the value of the volume is calculated based on the formula given in the question and the value is stored in volume variable.
Line 41: The user is displayed with a beautiful output showing the value of the volume for the value of the corresponding variables he/she has entered. The output will show upto 4 numbers after decimals because we have used '.4f' stating that round off the numbers upto 4 decimals and show the value.
Input/output
volume of pyramid calculations using Matlab |
Try it yourself
1) There is a bug in the program which I have created. Find out what the bug is and comment in the comment box below.
2) Modify the above program such that the user can also enter the value in foot a third option. But the output should be in cubic inches. Comment your program in the comment box below and help others who were not able to solve the problem.
3) Modify the program so that the user can also select the units in which the output can come. Eg: User will be prompted with two options for cubic inches and cubic centimeters. Comment your program in the comment box below so that other user can get help from your program.
Final Note
As always I have tried to explain the post in such a way that it is easy for everyone to understand, but if you have any doubt or couldn't understand anything then please do contact me or comment in the comment box below. You can contact me from here: Contact me.
The above program was high lighted using hilite.me web app.
The problem has been taken from stormy attway's book - introduction to programming with Matlab. Thanks to the excellency of the book.
Keywords: pyramid, return