|
Could someone help me out with this program?
Draw the circle on a sheet of paper. Remember how big the paper is (how high & how wide, which gives us the total area), and how big the circle is.
2. Randomly pick points on the paper (say, by throwing darts). For each point we randomly pick, we'll do the following:
a. If the point is inside (or on the line of) the circle, we'll increment our counter that keeps track of the number of points that landed inside the circle.
b. If the point isn't inside/on the circle, and you need to, and increment another counter to keep track of that.
c. Either way, increment your "How many times did I pick a point?" counter
d. Darts that fall outside the paper are ignored entirely.
Even better would be to find a way to make sure that your randomly selected points never end up outside the paper in the first place.
3. Once you're done throwing all the darts in step 2, figure out what percentage of the darts fell inside the circle.
As an example, let's say you threw 1,000 darts, 534 of them landed inside/on the boundary of the circle, and 466 landed outside the circle, but on the paper. Thus, 53.4% of the darts landed in the circle.
4. Figure out how big the sheet of paper is (what the total area is).
As a continuing example, let's say that the paper is 100 inches wide, and 200 inches tall, for a total area of (100x200=20,000)
5. Estimate that the area of the circle to be the size of the paper, multiplied by the percentage of points that were inside the circle.
As a continuing example, we'll estimate that the size of the circle is 53.4% of 20,000, or (20,000 * .534=) 10,680 square inches.
The downside is that this is computationally intensive (i.e., you can't really do this by hand). The upside is that this works for *ANY* shape, no matter how complicated. For this homework assignment, we'll stick with circles, and only circles.
Your task is to write a program that will demonstrate how accurate this method is, depending on how many points you randomly select. Basically, you're going to go through, and use the Monte Carlo method to estimate the area of the circle, then use the real formula to find the actual area, then compare the two. The 'error' here will be measured as the percentage difference between the estimated & real circle (so if the circle is 314 units in size, and the estimate is 0, then the error is -100%, meaning that we're 100% below the real size. If the estimate is 345.4 units, then the error is +10%, meaning that we're 10% over the actual size).
An example of the output is given below. Everything that's highlighted in gray is optional output – your program isn't required to produce this output, if you don’t want to. The rest of it is required output. Make the columns of the table line up as best you can.
In addition to accomplishing the above objective, you have two additional, technical goals:
1. Use functions and methods in order to modularize your code as much as possible. If you know how to, and want to create classes here, that would be great.
2. You want to minimize the amount of code you copy-and-paste, so use an array to store the number of points to randomly select each time, and iterate through that. In the below example, there's an array that holds 1, 10, 100, 500, 1000, 5000, 10000, 50000, 100000. The objective here is that by adding numbers to / removing numbers from this array, we can quickly & easily try different numbers of points. The program should run correctly for different numbers of points, even if the only thing changed between runs are the numbers in that array. Similarly, in order to make sure that you could test out many different sized circles (and on different sized sheets of paper), make sure to set up your code so that you can change the size of the paper by changing just one (or maybe two) variables (instead of simply writing in '100' everywhere for the size of the paper), and that you can change only a few variable(s) if you want to change the location or size(radius) of the circle.
Example Output
Welcome To The MonteCarlo Circle Area Estimator!!
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 1 randomly selected points
% of Randomly Picked Points Inside The Circle: 0
Estimated Total Area Of the Circle: 0
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 314.159265358979, which is -100% of the real circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 10 randomly selected points
% of Randomly Picked Points Inside The Circle: 0
Estimated Total Area Of the Circle: 0
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 314.159265358979, which is -100% of the real circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 100 randomly selected points
% of Randomly Picked Points Inside The Circle: 0
Estimated Total Area Of the Circle: 0
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 314.159265358979, which is -100% of the real circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 500 randomly selected points
% of Randomly Picked Points Inside The Circle: 0.026
Estimated Total Area Of the Circle: 260
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 54.1592653589793, which is -17.2394295922144% of the rea
l circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 1000 randomly selected points
% of Randomly Picked Points Inside The Circle: 0.024
Estimated Total Area Of the Circle: 240
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 74.1592653589793, which is -23.6056273158902% of the rea
l circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 5000 randomly selected points
% of Randomly Picked Points Inside The Circle: 0.0262
Estimated Total Area Of the Circle: 262
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 52.1592653589793, which is -16.6028098198468% of the rea
l circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 10000 randomly selected points
% of Randomly Picked Points Inside The Circle: 0.0301
Estimated Total Area Of the Circle: 301
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 13.1592653589793, which is -4.18872425867901% of the rea
l circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 50000 randomly selected points
% of Randomly Picked Points Inside The Circle: 0.03042
Estimated Total Area Of the Circle: 304.2
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 9.95926535897934, which is -3.17013262289088% of the rea
l circle
************************************************************
Max X: 100
Max Y: 100
Total Area of Surrounding Space: 10000
Basing our estimate on 100000 randomly selected points
% of Randomly Picked Points Inside The Circle: 0.03225
Estimated Total Area Of the Circle: 322.5
Actual Total Area Of the Circle: 314.159265358979
The estimate was off by 8.34073464102067, which is 2.65493829427249% of the real
circle
************************************************************
Max X: 100
Max Y: 100
Radius of Circle: 10
Num Points Off by (%)
1 -100%
10 -100%
100 -100%
500 -17.2394295922144%
1000 -23.6056273158902%
5000 -16.6028098198468%
10000 -4.18872425867901%
50000 -3.17013262289088%
100000 2.65493829427249%
|
|
|
|
|
Can you post your teachers email? We might have some questions to ask...
|
|
|
|
|
Mark Churchill wrote: Can you post your teachers email?
BTW, I have downloaded Diamond Binding from your site. Honestly speaking it is the best one. But I haven't seen a method to use Stored Procedures as we did in LINQ.
|
|
|
|
|
Thanks Glad you like it!
The basic answer is that we don't support object persistance through stored procs.
The long answer is that we don't think it is necessary for a few reasons. Diamond Binding queries the database differently depending on what you are doing - say you are retrieving a Customer record, it may choose to bring back the Address object that Customer.Address references in one query by joining the table on. Additionally the query API (FindByProperty, etc) will obviously generate different queries. CRUD stored procedures would be less flexible and lead to worse performance for the query strategies that Diamond Binding uses.
Generally speaking we provide a level of abstraction from the database so you don't have to worry about the query mechanics - as it says on the tin, we take over between the database and the domain objects
|
|
|
|
|
Hi All,
I implemented a C# class library and registered it to be visible for COM objects, then i used it from VB6 application and it works fine. Now the problem is that i want to raise an event in the .NET COM and pass it as an event in VB6. i.e. when the .NET COM catched an exception i want it to raise event in the VB6 application to log the event (because the logger works there). Any ideas?
Thanks,
Mayy
modified on Wednesday, February 06, 2008 5:44:05 PM
|
|
|
|
|
Is using underline in C# names a bad idea?
I think per_user_quote is more readable than PerUserQuote especially when your eyes are looking at a lot of them at once. And even your editor can read per_user_quote without a problem but PerUserQuote looks like an invalid statement to it (This is happening as I am typing this and editor is showing a red line under PerUserQuote!).
Kaveh Shahbazian
|
|
|
|
|
Technically it's not a bad idea but it goes against the coding conventions that various people are following (i.e. the ones set out by Microsoft).
It's quite common though to use private variables for properties named such:
private int m_Id;
public int Id
{
get { return this.m_Id; }
set { this.m_Id = value; }
}
|
|
|
|
|
|
It doesn't make sense to use one standard for personal coding and one for business. You will cause unnecessary work when you forget and use your personal standard when working on business code, then have to go back and correct it. It's easier to remember and use one standard, practice it and it becomes habit.
only two letters away from being an asset
|
|
|
|
|
Kaveh Shahbazian wrote: showing a red line under PerUserQuote!).
Sounds like you're using Word.
|
|
|
|
|
No! I was not using word! I was just typing directly into 'THIS' editor of www.codeproject.com!
Kaveh Shahbazian
|
|
|
|
|
hi there:
how can i read araic text from text file????
best regards
|
|
|
|
|
The same way you read English, except right to left
only two letters away from being an asset
|
|
|
|
|
Member 3584153 wrote: how can i read araic text from text file????
TextReader fstream = new StreamReader("myfile.txt");
string s = fstream.ReadToEnd();
led mike
|
|
|
|
|
Or:
string s = File.ReadAllText("myfile.txt");
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
I am a beginner who is learning C# and have come across a problem that, while I have a workaround, would like to find out what I am doing wrong. I have tried searching, but I doubt I am using the correct terminology. Any assistance is very much appreciated!
If I create a class and place an object of that class into an ArrayList, is it possible to access the members of the object of a particular element of the ArrayList without having to first cast it to a new class?
<br />
public class Customer<br />
{<br />
public Name;<br />
}<br />
<br />
ArrayList myArray = new ArrayList();<br />
Customer c = new Customer();<br />
<br />
ArrayList.Add(c);<br />
<br />
ArrayList[0].Name = "Bob Smith";<br />
<br />
Customer temp = new Customer();
temp = ArrayList[0];
<br />
MessageBox.Show(temp.Name);<br />
My understanding of why the first way doesn't work is because an ArrayList could hold different object types. So I need to box/unbox it before I can use it. Is there some other way to go about doing what I am attempting here withouth the boxing/unboxing(I think these are the right terms)? If I am not using the terminology correctly, please let me know as that may be why my searches are comming up with very little information on what I am trying to do.
Thank you for your time and your patience with a beginner!
|
|
|
|
|
hpjchobbes wrote: without having to first cast it to a new class?
.NET 1.X collections require casting. .NET 2.0 introduced Generic Containers (System.Collections.Generic ) that provide typed Collection capabilities.
led mike
|
|
|
|
|
there's always
List< Customer > myArray = new List< Customer > ();
if you aren't tied to using an ArrayList
|
|
|
|
|
hpjchobbes wrote: My understanding of why the first way doesn't work is because an ArrayList could hold different object types. So I need to box/unbox it before I can use it
Sounds about right to me.
You could use a Generic List to achieve what you're trying to do. It is in the System.Collections.Generic namespace, and is similar to an array list, but the items contained in it are strongly typed (so you won't have to do the boxing/unboxing)
You could use it as follows:
<br />
List<Customer> myCustomerList = new List<Customer>();<br />
<br />
Customer customer = new Customer();<br />
<br />
myCustomerList.Add(customer);<br />
myCustomerList[0].Name = "Bob Smith";<br />
----
Edit: Doh! Too slow...
|
|
|
|
|
hpjchobbes wrote: If I create a class and place an object of that class into an ArrayList, is it possible to access the members of the object of a particular element of the ArrayList without having to first cast it to a new class?
You don't cast the object to a new class, you cast the reference of the object to the class. Creating a new class instance serves no purpose at all, that instance would be thrown away when you assign the new reference to the variable.
Customer temp;
temp = (Customer)ArrayList[0];
hpjchobbes wrote: So I need to box/unbox it before I can use it.
Actually, boxing is only used for value types. If you for example store integers in an ArrayList, each integer is boxed inside an object which is stored on the heap. That way the integer becomes a reference type so that the reference can be stored in the ArrayList.
If you are using framework 2, you can use a generic list instead. They are type safe, so there is no need for any casting:
List<Customer> list = new List<Customer>();<br />
list.Add(new Customer());<br />
<br />
list[0].Name = "Eric Gently";<br />
<br />
Customer temp = list[0];
Generic lists also works with value types, so there is no boxing if you store value types in a list.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
Thanks for the answers everyone! I am using 2.0 so I looked at the generic List<t> and it seems to do what I need!
Looks like I have yet another topic to add to my list of things to learn: When to use ArrayList or List<t>
Thanks again for the information and assistance!!
|
|
|
|
|
hpjchobbes wrote: Looks like I have yet another topic to add to my list of things to learn: When to use ArrayList or List
There's no need to use ArrayList in .NET 2.0 anymore.
modified 12-Sep-18 21:01pm.
|
|
|
|
|
hpjchobbes wrote: When to use ArrayList
That is very easy: Never.
If you ever need a list of object references, use List<object> instead of ArrayList .
Most of the time when you store objects of different types in a list, they still have a common base type that you can use rather than an object reference, like for example List<Control> for storing references to any type of controls.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
Hi I createed a DB under MS SQL 2005, table has 3 columns name, box, PhoneNumber.
In my c# code i want to check if the phone number entered by the user exists under PhoneNumber column of my table.
Thanks in advance.
|
|
|
|
|
So what have you tried that doesn't work?
Most people won't be inclined to give you any help unless they see you've at least tried something yourself.
Posting code that you're having problems with at least shows that you've tried to figure the problem out...
|
|
|
|
|