Long Division

38 views (last 30 days)
Ben Davis
Ben Davis on 7 Mar 2012
Edited: Walter Roberson on 10 Sep 2019
Hi im trying to write a function, that is basically long division, so i will get a value and then also a remainder. Could anybody give me some starting advice please?
function [q,r]=Divide(x,y)
Thats what my first line of my function shall be, where q is the integer value and r the remainder.
Thanks!
  2 Comments
Jan
Jan on 7 Mar 2012
This is a double post. You got two answers to your former question already: http://www.mathworks.com/matlabcentral/answers/31403-writing-a-function-for-division
Ben Davis
Ben Davis on 7 Mar 2012
Hello, the answer you gave me is good but i need to somehow get it to work for when x is very large, so then q doesnt approximate:
For example i need my function to be able to perform commands like this:
[q,r]=Divide(2*ones(1,43),7)
But at the moment i cant get it too :\
got any tips? :)
Because for some reason when i call that on the command line i end up with q as =0 and r as 43 zero's in a line.
When the answer should be :
q = Columns 1 through 22
3 1 7 4 6 0 3 1 7 4 6 0 3 1 7 4 6 0 3 1 7 4
Columns 23 through 42
6 0 3 1 7 4 6 0 3 1 7 4 6 0 3 1 7 4 6 0
r = 2

Sign in to comment.

Answers (2)

Walter Roberson
Walter Roberson on 7 Mar 2012
When you do division by hand, on a piece of paper, what you see is a vector of digits in the numerator and a vector of digits in the denominator. Humans do not usually perceive a number such as 2893 as a single unit: we see it as "two eight nine three". "long division" deals with the situation.
So, if someone gave you pencil and paper and two vectors of digits (numerator and denominator), and asked you to do the division, how would you proceed?
  9 Comments
Walter Roberson
Walter Roberson on 7 Mar 2012
If you post what you have so far, someone might point out problems.
Ben Davis
Ben Davis on 8 Mar 2012
Edited: Walter Roberson on 10 Sep 2019
I tried to follow your steps and program it in that order. I have missed out the sections:
'Compare the denominator vector to the leading digits of the numerator vector. Is the denominator greater than those leading digits? If it is then the result-digit for that position is 0, and add an extra 0 to the end of the numerator vector to achieve the effect of multiplying by 10, and return to the beginning of the loop.'
So ,so far i have this:
function [q,r]=Fivide(x,y)
f=length(x)-length(y);
g=zeros(1,f);
x=[g,x];
y=[g,y];
q=x/y;
q=floor(q);
r=x-(q*y);
p=length(q)
for a=p:-1:1;
if x==0;
r=0;
end
if length(y)>length(x)
q=x;
end
while x(1)==0;
y(1)==0;
x(1)=[];
y(1)=[];
end
end
end
I have attempted to what i think many work for the function other than the section that i have missed out, i know i have most likely made many mistakes. But i really am trying my best :\ any feedback would be great.

Sign in to comment.


Daniel Shub
Daniel Shub on 7 Mar 2012
In your first comment to Walter, you wrote "and the process is repeated until an answer is obtained." That sounds a lot like a "while" loop to me. Think you could express what you do in terms of a while loop ...
Maybe: While the remainder is less than the denominator DO ...
Then from there think about how to write the do in pseudo code. Finally convert it to MATLAB

Categories

Find more on Introduction to Installation and Licensing 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!