LCD,GCM
Author |
Message |
MysticAngel
|
Posted: Sun Apr 06, 2003 10:13 am Post subject: (No subject) |
|
|
l how would u frame the code ? |
|
|
|
|
|
Sponsor Sponsor
|
|
|
yuethomas
|
Posted: Sun Apr 06, 2003 11:27 am Post subject: (No subject) |
|
|
Oh sorry, I misunderstood.
I don't know of any algorithms, so I'll use a dumb one here...
code: | % checking proper factors of a
var a : int := 30
var sum : int := 0
% an optimisation note: when a is odd
% the largest factor cannot exceed a/3;
% when a is even it cannot exceed a/2.
if floor(a/2) = a/2 then % checks for parity
for b : 2 .. floor (a/2)
% even though a/2 is an integer,
% I doubt a/2 will return a variable
% of type integer... so just wrap it
% in a function that returns a integer.
if floor (a/b) = a/b then sum += b
end for
else % a is odd
for b : 3 .. ceil (a/3)
% now a isn't necessarily divisible by
% 3, so take the larger value here
% just to be safe
if floor (a/b) = a/b then sum += b
end for
end if
put "SUM OF PROPER FACTORS OF ", a, " IS ", b |
|
|
|
|
|
|
Prince
|
Posted: Mon Apr 07, 2003 10:02 am Post subject: (No subject) |
|
|
code: |
function properFactors (n : int) : int
var x, y, temp : int := 0
for decreasing i : n .. 1 by 1
x := n mod i
if x = 0 then
y := n div i
if y not= n then
temp := temp + y
end if
end if
end for
result temp
end properFactors
|
now doesnt that seem a whole lot simpler... it works too |
|
|
|
|
|
Prince
|
Posted: Mon Apr 07, 2003 10:04 am Post subject: (No subject) |
|
|
btw, yuethomas, proper factors do include 1 |
|
|
|
|
|
yuethomas
|
Posted: Mon Apr 07, 2003 4:35 pm Post subject: (No subject) |
|
|
My mistake. |
|
|
|
|
|
MysticAngel
|
Posted: Wed Apr 09, 2003 9:19 pm Post subject: (No subject) |
|
|
Can u plz check my code. It is supposed to give the reverse of a number.
eg. 72--27
code: |
function reverse (n:int) : int
var digits,sum,r : int
var count : int := 0
loop
digits := n mod 10
r := n div 10
count := count + 1
exit when count >= 0
end loop
result digits
end reverse |
|
|
|
|
|
|
Asok
|
Posted: Wed Apr 09, 2003 9:27 pm Post subject: (No subject) |
|
|
I believe that was allready posted for reversing numbers, actually I guarantee it. Search the forums. |
|
|
|
|
|
MysticAngel
|
Posted: Wed Apr 09, 2003 9:35 pm Post subject: (No subject) |
|
|
but u are using instr... which i dont want to use, there are errors there anyways..... i know how to do it without the function. but when i use the function i get a bit confused like what to ouput. my code gives out i think just the first reverse number. can u plz check it
code: |
function reverse (n:int) : int
var digits,sum,r : int
var count : int := 0
loop
digits := n mod 10
r := n div 10
count := count + 1
exit when count >= 0
end loop
result digits
end reverse |
|
|
|
|
|
|
Sponsor Sponsor
|
|
|
yuethomas
|
Posted: Wed Apr 09, 2003 9:46 pm Post subject: (No subject) |
|
|
code: | function reverse (n:int) : int
var digits : int
var count : int := 0
var r: int := n
loop
digits := digits * 10 + r mod 10
r := r div 10
exit when r = 0
end loop
result digits
end reverse |
Edit: (thank you Tony) |
|
|
|
|
|
Tony
|
Posted: Wed Apr 09, 2003 9:49 pm Post subject: (No subject) |
|
|
well its all wrong.
it will result in n mod 10 which is the remainder of n after dividing by 10. Since your exit statment will get you out of loop right away. I dont even understand what you're trying to do
first of all... to get the number of digits, you keep on dividing by multiples of 10 until your result is <= 0.
after that, you go in revese order starting with the largest digit, divide it by 10**(digit - 1). Floor it into int value and you get isolated digit. Then add it to new varaible, but first you need to multiply it by a multiple of 10 to place it in the right spot.
Ah damn, yuethomas beat me to it with a working code... I'm giving some bits for the help |
Tony's programming blog. DWITE - a programming contest. |
|
|
|
|
MysticAngel
|
Posted: Wed Apr 09, 2003 9:55 pm Post subject: (No subject) |
|
|
it works the way he said |
|
|
|
|
|
MysticAngel
|
Posted: Thu Apr 10, 2003 9:59 pm Post subject: (No subject) |
|
|
k this function woud return a value that is between 0 and 9. it takes the entered number and adds its digits together. eg. 79 = 7 + 9 = 16 and 1+6 = 7. so the digital root of the 79 is 7. my function is working for some parts. not all thouhg. canu plz check the code ????
code: |
function digitalroot (n : int) : int
var digits, count, r, sum : int := 0
loop
count := count + 1
digits := n mod 10
r := n div 10
sum := sum + r
exit when sum >= 0 and sum <= 9
end loop
result sum
end digitalroot |
|
|
|
|
|
|
Prince
|
Posted: Thu Apr 10, 2003 10:14 pm Post subject: (No subject) |
|
|
1. u dont need a count for this one... 2. if ur gonna do it the way u hav it, make it so that sum := digits + r and not sum := sum + digits... heres how i did it
code: |
function digitalRoot (var n : int) : int
var a, b, c, x : int := 0
loop
a := n mod 10
n := n div 10
c := c + a
exit when a = 0
end loop
a := c div 10
b := c mod 10
x := a + b
result x
end digitalRoot
|
im no good at explainin things so im not gonna start here (even tho its my code )... if i can remember wat i was thinkin wen i made this ill repost |
|
|
|
|
|
Prince
|
Posted: Fri Apr 11, 2003 10:08 am Post subject: (No subject) |
|
|
looking at ur code again, and actually testing it this time, ive found ur error:
code: |
digits := n mod 10
r := n div 10
sum := sum + r % error on this line
exit when sum >= 0 and sum <= 9
|
it happens wen u split the number apart... since r is between 0 and 9 already, adding it to sum (which is 0) does nothing... wat it should b doing is split the number then add digits and r until they r a single digit |
|
|
|
|
|
MysticAngel
|
Posted: Tue Apr 15, 2003 6:24 pm Post subject: (No subject) |
|
|
How would i do the same thing for three or more numbers
code: |
function Sumofsquares (n : int) : int
var a, b, d : int := 0
a := n mod 10
b := n div 10
d := a ** 2 + b ** 2
result d
end Sumofsquares |
|
|
|
|
|
|
|
|