Computer Science Canada

HELP ON TURING- PERFECT SQUARE

Author:  dinktsr [ Mon Apr 26, 2004 5:05 pm ]
Post subject:  HELP ON TURING- PERFECT SQUARE

i struggle so much at this it's not even funny...
i need a program that keep inputting integers until a perfect square (ex. 81, 9) between 40 and 100
PLEASE HELP ME, WITHOUT THIS IM DEAD, THANKS IN ADVANCE

Author:  Tony [ Mon Apr 26, 2004 5:08 pm ]
Post subject: 

eh? Confused what seems to be the problem? Laughing
code:

var num:int
loop
put "what number?"
get num
exit when round(sqrt(num))**2 = num
end loop
put "the end"

Author:  Paul [ Mon Apr 26, 2004 5:17 pm ]
Post subject: 

wha...?
here's how I would do it, it might be sucky, but i always like to showoff my newly learned knowledge (strintok) Razz
code:

for a: 40..100
if strintok (realstr(sqrt (a),0))then
put a
exit
else
put a, " "..
end if
end for

Author:  Tony [ Mon Apr 26, 2004 5:18 pm ]
Post subject: 

hah, while we at it, might also use if sqrt(num) mod 1 = 0 to test for a perfect square Laughing

Author:  Cervantes [ Mon Apr 26, 2004 5:29 pm ]
Post subject: 

jeeze, thats the way i did it. I made the prog but then just as i was about to post my "do your own homework" rant followed by "this is how in english, not in code", I scroll down and there's tony's very blatant answer staring at me.
Mad

anywho, I don't understand this bit.
code:

exit when round(sqrt(num))**2 = num

if you take the sqrt of a perfect square and you get an integer. round it and you get an integer. square it and you get the first number
but take the sqrt of a non-perfect square number and you get a num with decimals, round that and you get an integer, square that and you get the number you started with, yes? but obviously if you input 10 into your prog it doesn't exit, but if you input 9 it does. Confused

Author:  Tony [ Mon Apr 26, 2004 5:38 pm ]
Post subject: 

Cervantes - since round drops the decimal point, when you square the number it will not be the same as the one you squared.

It is basically a test to see if the squareroot of a number is an integer (perfect square) or not. That's why I later posted with mod 1 method, as non integer root will have a .something remainder.

10 (non perfect square) sqrt = 3.16
round(3.16) = 3
3 * 3 = 9
9 != 10

Wink

Author:  Cervantes [ Mon Apr 26, 2004 5:49 pm ]
Post subject: 

i have an incredibly strong urge to edit my above post and erase all my moronic ramblings Embarassed


: