Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it
Index -> Programming, Turing -> Turing Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
deworld




PostPosted: Fri Nov 06, 2015 5:28 pm   Post subject: I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

What is it you are trying to achieve?
To make a program that uses loops to do the collatzconjecture: divide even numbers by 2 and odd multiply by 3 add 1
User can input whatever natural number they wish
Must be bulletproof
and user must be able to repeat the program

What is the problem you are having?
I can't seem to use an if statement to confirm if its a even number or not to then div 2 or multiply 3 add 1 then div 2
It keeps giving me a console that doesn't finish

Describe what you have tried to solve this problem
i have tried to experiment with loops inside ifs to repeat the div but with no success


Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
<Answer Here>

Turing:



var input : int
var strin, input2 : string

put "Enter any natural number"
loop
    get strin
    exit when strintok (strin)
    put "Not a natural number." ..
end loop
input := strint (strin)
loop
    loop
        if input = 0 then
            put "This is not a natural number. Rlease renter a number ABOVE 0"
            get input
        elsif input < 0 then
            put "This is too low. Please renter a number ABOVE 0"
            get input
        end if
        exit when input >= 1
    end loop

    loop
        if input div 2 = 1 then
            input := input div 2
            put input
        elsif (input * 3 + 1) div 2 = 1 then
            input := (input * 3 + 1) div 2
            put input
        end if
        exit when input = 1
    end loop
    exit when input = 1
end loop






Please specify what version of Turing you are using
4.1.1
Sponsor
Sponsor
Sponsor
sponsor
Zren




PostPosted: Fri Nov 06, 2015 5:53 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

I think you're mixing up div with mod. div is used to count how many time the right side can go into the left side. Eg: 11 div 2 expands to 5 since 2 goes into 11 five times, with a remainder of 1 (think of long division).

mod is used to get the remainder.

To check if a number is even, it must be divisible by two and have no remainder.

As an aside, try to only use get input in one location so you can keep all your user validation code in a single place. Right now your program isn't bulletproof if I enter asdfasdf after getting the error "This is too low. Please renter a number ABOVE 0".
Insectoid




PostPosted: Fri Nov 06, 2015 5:57 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

code:
if input div 2 = 1 then


This is identical to saying 'if input = 2 then input := 1'.

How do you tell if a number is even or odd? I can guarantee that '(input * 3 + 1) div 2' will not tell you if it's even or odd. Maybe have a peek at the mod command.
deworld




PostPosted: Fri Nov 06, 2015 6:24 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

I'm not sure whats wrong i've done what i could to clean it up but I cant find out whats making it so it cant output it.


On a side note i have made it so the input in the loop only has 1 get input so i bulletproofed it so you cant write letters made 2 get inputs because i'm not sure how to combine both of them into 1 input.
Insectoid




PostPosted: Fri Nov 06, 2015 6:41 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

You already have code that checks if the input is a number and converts it or gives an error as required. If you need to get new input from the user, just run that code again. You could make that code a procedure, or you could put it inside another loop that restarts when you detect that the number is unnatural.
deworld




PostPosted: Fri Nov 06, 2015 6:51 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

so something like this?
loop

loop
get strin
exit when strintok (strin)
put "Not a natural number. Please try again: " ..
end loop
input := strint (strin)

if input = 0 then
put "This is not a natural number. Rlease renter a number ABOVE 0"
elsif input < 0 then
put "This is too low. Please renter a number ABOVE 0"
end if
exit when input >= 1

end loop
Insectoid




PostPosted: Fri Nov 06, 2015 7:28 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

Does it work?
deworld




PostPosted: Fri Nov 06, 2015 9:35 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

yup i finnaly got it to work let me know if you catch anything i missed/did wrong

var input : int
var cont : string

var strin : string

loop
put "Enter any natural number"
loop

loop
get strin
exit when strintok (strin)
put "Not a number. Please try again: " ..
end loop
input := strint (strin)
if input < 1 then
put "This is not a natural number(number ABOVE 0). Rlease renter a number: " ..
end if
exit when input >= 1

end loop

loop
exit when input = 1 %exit
if input mod 2 = 0 then %if even then
input := input div 2 %Calculation
put input,", " ..
else
input := input * 3 + 1 %Calculation
put input,", " ..
end if
end loop
put ""
put "Do you wish to restart the program?(yes or no)"
get cont
if cont ~= "yes" and cont ~= "no"then
put "Invalid input, please enter yes or no in lowercase."
get cont
end if
exit when cont = "no"
end loop
Sponsor
Sponsor
Sponsor
sponsor
deworld




PostPosted: Fri Nov 06, 2015 9:38 pm   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

also 2 little questions for the continue at the end is there a way for it to be uppercase and lowercase without having to put another line of code?

and for a put statement how can you list them like a graph without putting 10 different put statements? friend recommends a for loop ... is this the optimal/regular way to do it or is it just for my unique situation?
Zren




PostPosted: Sat Nov 07, 2015 10:50 am   Post subject: RE:I cant seem to use a if statement to check if its even or not to then apply the collatzconjecture on it

Make sure both strings are either completely lowercase or uppercase before comparing them.
Display posts from previous:   
   Index -> Programming, Turing -> Turing Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 10 Posts ]
Jump to:   


Style:  
Search: