need help getting started
Hi,so i am quite new to the rebol community and have been assigned a project to work on.So to be frank i started reading rebol 2 days ago and i am quite confused since i worked with c++ before that.I am stuck at flow control and operators(sad i know).So basicaly i thought of when i moved from delphi to c++,basically if one of you guys can provide me with a rebol version of this small program i whipped up(flow control number check-the basics) it would be of great help to me,so here is my program and thanks in advance. It inputs an integer number n and outputs the sum: 1+22+32+...+n2.I use input validation for n to be positive. #include using namespace std; int main() { int n; cin >> n; if (n < 0) return 1; int sum = 0; int i = 0; while (i <= n) sum += i*i; cout << sum; return 0; }
posted by: martin 18-Jan-2011/11:43:38-8:00
oops actually it is 1+2^2+3^2+.....+n^2
posted by: martin 18-Jan-2011/12:54:54-8:00
This is one way of doing it: ...the forever loop -- keeps ASKing until it gets an integer > 0 ...the FOR loop adds up the squares forever [ n: ask "please enter an integer (1 or larger): " if all [not error? try [n: to-integer n] n > 0] [break] print "oops --- can't convert that to an integer greater than zero, please try again" ] sum: 0.0 for i 1 n 1 [ sum: i * i + sum ] print sum
posted by: Sunanda 18-Jan-2011/14:41:11-8:00
Martin, I'm assuming you wanted an i++ increment in your while loop: while (i <= n) { sum += i*i; i++; } A REBOL equivalent to your program is: main: does [ n: to-integer ask "Input integer: " if n < 0 [return 1] sum: 0 i: 0 while [i <= n] [ sum: sum + (i * i) i: i + 1 ] print sum return 0 ] main
posted by: Nick 19-Jan-2011/1:15:50-8:00
But this is much more REBOLish: do main: [ sum: 0 repeat i to-integer ask "number: " [sum: sum + (i * i)] sum ]
posted by: Nick 19-Jan-2011/1:30:56-8:00
Here is another version in one-line: sum: 0 repeat i either 0 < n: to-integer ask "" [n] [1] [sum: i * i + sum] Copy & paste this line into Console and try.
posted by: Endo 19-Jan-2011/4:12:24-8:00
Here is the explanation: set sum variable to 0. (sum: 0) get input from user. (ask "") convert it to integer. (to-integer) if it is a positive number then return it else return 1. (either 0 < n [n] [1]) repeat the block [sum: i * i + sum], n times, count i from 1 to n. if user input is not a number then to-integer gives invalid argument error. You can simply ignore that error by using an attempt. attempt [sum: 0 repeat i either 0 < n: to-integer ask "" [n] [1] [sum: i * i + sum]] which returns none if any error occurs in the given block. Or you can give show an error message, using try: either error? try [sum: 0 repeat i either 0 < n: to-integer ask "" [n] [1] [sum: i * i + sum]] [print "Please enter a number."] [sum] if no error occurred return sum.
posted by: Endo 19-Jan-2011/4:22:07-8:00
That's one of the things I love about REBOL - there's less cruft than any other language. All of my programs are SMALL, and that makes them easier to edit later. Martin, my example doesn't require the 'main' function - it can also all be reduced to one line: s: 0 repeat i to-integer ask "" [s: i * i + s] s
posted by: Nick 21-Jan-2011/0:15:08-8:00
And that is what I love about Rebol, in any other language when you try to make your code smaller it is getting complicated, unreadable. But it is not like that in Rebol, you can make your code smaller and nicer and faster at the same time. At the beginning Rebol sources look complicated if you don't have enough knowledge. But then it looks simple, especially when you learn how to read the order-of-commands.
posted by: Endo 21-Jan-2011/3:00:14-8:00
|