More help with probability...
1 view (last 30 days)
Show older comments
Hey, so I fixed the first part of this code, but now the for loop where I use "strcmpi" is not working properly. It's only accounting for "peach' and my peach_count returns 100000 and the other fruits are 0. It's really weird because my function works fine.
function x = produce
A = 1e5;
B = rand;
C = ceil(A*B);
if (C>=1 && C<= 20000);
C = 'peach';
elseif (C>= 20001 && C<= 55000);
C = 'panana';
elseif (C >= 55001);
C = 'papaya';
end
x = C
clc; clear all;
peach_count = 0; panana_count = 0; papaya_count = 0;
N = 1e6;
for k = 1:N
fruit = produce;
if strcmpi(fruit,'peach')
peach_count = peach_count + 1;
elseif strcmpi(fruit, 'panana')
panana_count = panana_count + 1;
elseif strcmpi(fruit, 'papaya')
papaya_count = papaya_count + 1;
end
end
What am I doing wrong??
6 Comments
Matt Kindig
on 24 Apr 2013
To explain a little bit about why I was having you do those commands:
- 'which produce' indicates the path to the produce.m file. I was specifically curious whether you had multiple 'produce.m' files on your path, which your results indicate you do not.
- 'whos produce' indicates information about any variables 'produce' in your workspace. I had thought that perhaps you had a variable called 'produce' as well, which was overriding the function call. However, the fact that the whos command returned nothing indicates this is not the case.
I must admit that I'm stumped. Are you putting the function into a separate file as the script? In other words, you should have two different m-files:
=== produce.m
function C = produce
A = 1e5;
B = rand;
C = ceil(A*B);
if (C>=1 && C<= 20000);
C = 'peach';
elseif (C>= 20001 && C<= 55000);
C = 'panana';
elseif (C >= 55001);
C = 'papaya';
end
=== main.m (or some other name)
clc; clear;
peach_count = 0; panana_count = 0; papaya_count = 0;
N = 1e6;
for k = 1:N
fruit = produce;
if strcmpi(fruit,'peach')
peach_count = peach_count + 1;
elseif strcmpi(fruit, 'panana')
panana_count = panana_count + 1;
elseif strcmpi(fruit, 'papaya')
papaya_count = papaya_count + 1;
end
end
Accepted Answer
Ahmed A. Selman
on 24 Apr 2013
Just pay attention to how you use function call inside a program. Either you have two files as stated above, or use one main (calling function) which contains another (inner) function as:
% This is the main (calling) function
function output=firstFunction
peach_count = 0; panana_count = 0; papaya_count = 0;
N = 1e6;
for k = 1:N
fruit = produce;
if strcmpi(fruit,'peach')
peach_count = peach_count + 1;
elseif strcmpi(fruit, 'panana')
panana_count = panana_count + 1;
elseif strcmpi(fruit, 'papaya')
papaya_count = papaya_count + 1;
end
end
output=[peach_count;panana_count;papaya_count];
% Here is the inner function
function x = produce
A = 1e5;
B = rand;
C = ceil(A*B);
if (C>=1 && C<= 20000);
C = 'peach';
elseif (C>= 20001 && C<= 55000);
C = 'panana';
elseif (C >= 55001);
C = 'papaya';
end
x = C;
So, when you run:
OutPut=firstFunction
OutPut=
200191
349241
450568
Note: The output varies since it's based on a random creation.
Regards
More Answers (0)
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!