Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

iMasterWeb

macrumors regular
Original poster
Mar 15, 2009
158
0
Hi there, me again! So right now, I'm trying to create a program that will, based on user input, calculate the density (which includes mass and volume) of an object.

The problem is that there's something wrong with my code, and I'm not sure what...whenever I run the program it stops after I enter the mass and it puts some text in the console, and then asks for my password (entering my password doesn't fix the problem) It seems like a pretty basic program, so could someone help me out? Thsanks!

@interface:
Code:
#import <Foundation/Foundation.h>


@interface Calculator_Methods : NSObject {
	int volume;
	int mass;
	int density;
}

@property int volume, mass, density;

-(void) regObjCalc;
-(void) irregObjCalc;
-(void) densityCalc;

@end

@implementation:
Code:
#import "Calculator Methods.h"


@implementation Calculator_Methods

@synthesize volume, mass, density;

//Calculates the mass of a regular object
-(void) regObjCalc  
{
	int length, height, width;
	NSLog(@"Please enter mass:");
	scanf("%i", mass);
	NSLog(@"Please enter length:");
	scanf("%i", length);
	NSLog(@"And height:");
	scanf("%i", height);
	NSLog(@"And width:");
	scanf("%i", width);
	volume = length * width * height;
}
//Calculates the mass of an irregular object
-(void) irregObjCalc 
{
	int startHeight, endHeight;
	NSLog(@"Please enter mass:");
	scanf("%i", mass);
	NSLog(@"Please enter the starting height of the water:");
	scanf("%i", startHeight);
	NSLog(@"Please enter the ending height of the water:");
	scanf("%i", endHeight);
	volume = endHeight - startHeight;
}
-(void) densityCalc
{
	density = mass / volume;
	NSLog(@"Density = mass/volume\n Mass = %i\nVolume = %i\n Density = %i/%i\n%i/%i = %i\nDensity = %i g/mL", mass, volume, mass, volume, mass, volume, density, density);
}
	
@end

main:
Code:
#import "Calculator Methods.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
	
	Calculator_Methods *myObject = [[Calculator_Methods alloc] init];
	char usrInput;
	NSLog(@"Please enter'a' to find the density of an irregular object and 'b' to ifnd the density of a regular object");
	scanf("%c", &usrInput);
	switch (usrInput) {
		case 'a':
			[myObject irregObjCalc];
			break;
		case 'b':
			[myObject regObjCalc];
			break;
	}
	[myObject densityCalc];
	[pool drain];
    return 0;
}

(don't ask why I named the class Calculator_Methods...I was being a little literal :D)

Thanks again!

-iMaster
 
Perhaps a more effective way would be to make a method with parameters that take the given values mass and volume. And you could have a similar method to calculate volume and the other calculations.

Code:
-(double)calculateDensityForMass: (double)mass andVolume: (double)volume 
{
double denisty;
density = mass / volume;
return density;
}
 
Did you just upgrade to SL? Xcode asked for my admin password the first time I ran the debugger. No idea why, though.

On to your program. You are going to get some weird answers even if it worked because your variables should be floats not int's. And, you've got expressions with integer division. Also your scanf's take a pointer to the variable.

In your program, you might want to account for whatever units you are anticipating. Finally, when calculating the density of an irregularly shaped object, the change in height of water is not the volume. It's related, but you are missing a piece.

crackpip
 
Thanks crackpit! Got it working!

(P.S. when using water displacement, the volume of an irregularly shaped object IS found by subtracting start height from end height...at least according to some sites on the internet and my science teacher :p)
 
(P.S. when using water displacement, the volume of an irregularly shaped object IS found by subtracting start height from end height...at least according to some sites on the internet and my science teacher :p)

Measuring the change in height only gives you units of length, and volume is measured in cubic units. You're neglecting the area of the water's surface, measured in square units. So change in height (units) times surface area (square units) gives cubic units. Use millimeters for units, for example.

Example. Submerge your hand in a swimming pool: measure the change in water height (very tiny, probably not even measurable). Submerge your hand in a 1 gal bucket half-filled with water: measure the change in height (definitely measurable).
 
Thanks crackpit! Got it working!

(P.S. when using water displacement, the volume of an irregularly shaped object IS found by subtracting start height from end height...at least according to some sites on the internet and my science teacher :p)

Chown33 explained what I was hinting at. What your teacher may be talking about is using a beaker or graduated cylinder, which are calibrated to measure volume. In this case, you aren't measuring a starting and ending height; you are measuring starting and ending volume. You can tell because the markings on the side will have a volume unit (e.g mL or cm^3).

crackpip
 
OOOOOOOOOOHHHHHHHH. I see what you're saying now...my bad. But for my purposes, the current code will suffice
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.