Upgrade to Pro — share decks privately, control downloads, hide ads and more …

BASIC C++

BASIC C++

Humorous lightning talk at ACCU 2017 and Sweden CPP Stockholm showing how to write BASIC in C++

Björn Fahller

April 26, 2017
Tweet

More Decks by Björn Fahller

Other Decks in Programming

Transcript

  1. ACCU 2017
    BASIC
    BASIC
    C++
    C++
    Björn Fahller

    View Slide

  2. ACCU 2017

    View Slide

  3. ACCU 2017

    View Slide

  4. ACCU 2017
    B A S I C !

    View Slide

  5. ACCU 2017
    10 PRINT “BASIC ROXXORS!!!”
    20 GOTO 10

    View Slide

  6. ACCU 2017
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  7. ACCU 2017
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  8. ACCU 2017
    Function getting a random number
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  9. ACCU 2017
    Function getting a random number
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  10. ACCU 2017
    Function getting a random number
    For loop
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  11. ACCU 2017
    Function getting a random number
    For loop
    Output is trivial!
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  12. ACCU 2017
    For loop
    Output is trivial!
    Function getting a random number
    And so is input
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  13. ACCU 2017
    For loop
    Output is trivial!
    Function getting a random number
    And so is input
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60
    Highly visible control flow
    without looking up names

    View Slide

  14. ACCU 2017
    For loop
    Output is trivial!
    And so is input
    Function getting a random number
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60
    No tabs vs. spaces

    View Slide

  15. ACCU 2017
    For loop
    Output is trivial!
    Function getting a random number
    And so is input
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60
    No tabs vs. spaces
    No snake_case vs CamelCase

    View Slide

  16. ACCU 2017
    For loop
    Output is trivial!
    Function getting a random number
    And so is input
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60
    No tabs vs. spaces
    No snake_case vs CamelCase
    No naming of functions or types

    View Slide

  17. ACCU 2017
    10 LET MAX=10
    20 LET X = 0
    30 GOTO 60
    40 X = INT(RND(1)*(MAX-1) + 1)
    50 RETURN
    60 GOSUB 40
    70 LET TIMES=0
    80 LET GUESS=0
    90 LET MAXGUESS = 5
    100 PRINT "Guess a number between 1 and ", MAX
    110 FOR TIMES = 1 TO MAXGUESS
    120 INPUT GUESS
    130 IF GUESS == X THEN GOTO 220
    140 LET RELATIVE="big"
    150 IF GUESS > X THEN GOTO 170
    160 RELATIVE = "small"
    170 PRINT "Too ", RELATIVE
    180 NEXT
    190 PRINT "Fail after ", MAXGUESS, " tries"
    200 PRINT "The number is ", X
    210 GOTO 230
    220 PRINT "Only ", TIMES, " guesses. Well done!"
    230 LET RETRY = "N"
    240 INPUT "Want to try again (Y/N)?", RETRY
    250 IF RETRY=="Y"||RETRY=="y" THEN GOTO 60

    View Slide

  18. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  19. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  20. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  21. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  22. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  23. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  24. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  25. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  26. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  27. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  28. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  29. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  30. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  31. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  32. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  33. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  34. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }

    View Slide

  35. ACCU 2017
    #include
    int main() {
    _10: LET MAX=10;
    _20: LET X = 0;
    _30: GOTO _60;
    _40: X = INT(RND(1)*(MAX-1) + 1);
    _50: RETURN;
    _60: GOSUB _40;
    _70: LET TIMES=0;
    _80: LET GUESS=0;
    _90: LET MAXGUESS = 5;
    _100:PRINT "Guess a number between 1 and ", MAX;
    _110:FOR TIMES = 1 TO MAXGUESS;
    _120:INPUT GUESS;
    _130:IF GUESS == X THEN GOTO _220;
    _140:LET RELATIVE="big";
    _150:IF GUESS > X THEN GOTO _170;
    _160:RELATIVE = "small";
    _170:PRINT "Too ", RELATIVE;
    _180:NEXT;
    _190:PRINT "Fail after ", MAXGUESS, " tries";
    _200:PRINT "The number is ", X;
    _210:GOTO _230;
    _220:PRINT "Only ", TIMES, " guesses. Well done!";
    _230:LET RETRY = "N";
    _240:INPUT "Want to try again (Y/N)?", RETRY;
    _250:IF RETRY=="Y"||RETRY=="y" THEN GOTO _60;
    }
    C++ today is as
    simple as BASIC
    was in the 80s!

    View Slide

  36. ACCU 2017

    https://github.com/rollbear/basicpp
    – Please contribute!
    Björn Fahller
    @bjorn_fahller
    cpplang.slack.com
    @rollbear
    swedencpp.slack.com

    View Slide