Clear Filters
Clear Filters

Index exceeds matrix dimensions

2 views (last 30 days)
Chris
Chris on 6 Nov 2011
clear
clc
count_eight=0;
clear
clc
count_eight=0;
RandStream.setDefaultStream = (RandStream('mt19937ar','seed',sum(100*clock)));
roll=input('Enter number of rolls \n');
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
end
if dice1+dice2==8
count_eight=count_eight+1;
end
fprintf('Percentage of times an 8 appeared %.1f ',count_eight(roll*100));
display('End of Program')
roll=input('Enter number of rolls \n');
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
end
if dice1+dice2==8
count_eight=count_eight+1;
end
fprintf('Percentage of times an 8 appeared %.1f ',count_eight(roll*100));
display('End of Program')
ERROR MESSAGE:
??? Index exceeds matrix dimensions.
Error in ==> Homework10 at 51
fprintf('Percentage of times an 8 appeared
%.1f ',count_eight(roll*100));

Accepted Answer

Image Analyst
Image Analyst on 6 Nov 2011
Well at least you made a good attempt at it. but count_eight is a scalar while you try to print it out as an array in your fprintf. Try it this way:
clear;
clc;
count_eight=0;
RandStream.setDefaultStream = (RandStream('mt19937ar','seed',sum(100*clock)));
response = inputdlg('Enter number of rolls \n');
roll = str2double(response{1});
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
if dice1+dice2==8
count_eight=count_eight+1;
end
end
message = sprintf('8 appeared %d times in %d rolls = %.2f%%', ...
count_eight, roll, count_eight/roll*100);
uiwait(msgbox(message));

More Answers (2)

Sven
Sven on 6 Nov 2011
It's just a small typo, I think:
fprintf('Percentage of times an 8 appeared %.1f ',count_eight(roll*100));
should be:
fprintf('Percentage of times an 8 appeared in %.1f percent of rolls',count_eight/roll*100);
Let me clarify though: The error is caused by a typo. Note however that I don't think the program does what you intend.
Where you have written:
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
end
if dice1+dice2==8
count_eight=count_eight+1;
end
Notice that you are only checking if dice one and two add up to 8 after the loop through many dice has finished. Ie, you're only checking once!
I think you want:
for rolling = 1:roll
dice1 = randi(6);
dice2 = randi(6);
if dice1+dice2==8
count_eight=count_eight+1;
end
end
There is, however, an even better way of doing that. This way is very "MATLABBY" because it doesn't use loops:
dice1 = randi(6,roll,1);
dice2 = randi(6,roll,1);
count_eight = sum(dice1+dice2 == 8);

Chris
Chris on 7 Nov 2011
Thanks for the advice guys.

Categories

Find more on Entering Commands in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!