home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / Information / C.TUTOR.1.SFX / lesson4 < prev    next >
Encoding:
Text File  |  1991-03-07  |  8.7 KB  |  424 lines

  1.  
  2. ├ ╠ANGUAGE ╘UTORIAL
  3. -------------------
  4. ╠ESSON 4 OF 11
  5.  
  6.  
  7. ╬OTE: SUBSTITUTIONS FOR SPECIAL C
  8. LANGUAGE CHARACTERS:
  9.  
  10. LEFT CURLY BRACKET:   █
  11. RIGHT CURLY BRACKET:  ▌
  12. BACK SLASH:           \
  13. TILDE:                »
  14. VERTICAL BAR:         ▀
  15. UNDERSCORE:           ñ
  16.  
  17.  
  18. ╞OR, WHILE AND OTHER GOOD STUFF -
  19.  
  20. MAIN() 
  21. █  /* OPENING BRACKET OF MAIN() */
  22.   INT I /* DEFINE I AS INTEGER */
  23.   I=1;  /* DECLARE I TO BE 1 */
  24.   WHILE (I<11); 
  25.       PRINTF("\N THE SQUARE OF %D IS
  26.              %D",I,I*I);
  27.       I=I+1;
  28.   
  29. ▌ /* CLOSING BRACKET OF MAIN() */
  30.  
  31. ╞IND THE ERROR ABOVE!
  32.  
  33. INT I SHOULD BE:  INT I;
  34. WE FORGOT THE SEMI-COLON!
  35.  
  36. INT I;   WITH SEMI-COLON!
  37.  
  38. ╬OW THAT WE'RE DEBUGGING OUR PROGRAM, 
  39. LET'S CHANGE THESE LINES SO THAT THE 
  40. DECLARATION AND THE INITIALIZATION OF 
  41. I ARE TOGETHER: 
  42.  
  43. MAIN() 
  44.   INT I=1;   
  45.   WHILE (I<11) █
  46.     PRINTF("\N THE SQUARE OF %D IS
  47.            %D",I,I*I); 
  48.     I=I+1;
  49.   ▌
  50. ▌  
  51.  
  52.   
  53. ╚ERE'S SOMETHING NEW...IT SAYS TO 
  54. EXECUTE CERTAIN STATEMENTS AGAIN AND 
  55. AGAIN AS LONG AS I<11, WHICH MEANS 
  56. I LESS THAN 11.
  57.  
  58. ╘HE CONDITION WHICH IS TESTED IN A 
  59. WHILE() LOOP APPEARS BETWEEN THE 
  60. ROUNDED BRACKETS:
  61.  
  62. WHILE (CONDITION) 
  63.   DO SOMETHING;
  64.  
  65.  
  66. ┴S LONG AS THE CONDITION IS TRUE THE 
  67. LOOP CONTINUES TO REPEAT. ╘HIS MEANS 
  68. THAT THE CONDITION WHILE(I>0) CAN BE 
  69. REPLACED AS FOLLOWS: 
  70.  
  71. WHILE (I) 
  72.   DO SOMETHING;
  73.  
  74.  
  75. ╫HEN I BECOMES ZERO IT IS FALSE AND 
  76. THE LOOP STOPS EXECUTING.
  77.  
  78. ┼XECUTE WHAT STATEMENTS? -
  79.  
  80. WHILE (I<11) █
  81.   STUFF;
  82.  
  83. ┴LL THE 'STUFF' BETWEEN THESE CURLY 
  84. BRACKETS IS EXECUTED.
  85. ╘HIS 'STUFF' SAYS TO PRINTF:
  86.  
  87. THE SQUARE OF 'VALUE OF I' IS 
  88. 'VALUE OF I*I' /* I TIMES I */
  89.  
  90.  
  91. ╨RETTY PROGRAMS -
  92.  
  93. ╨ROGRAMS ARE EASIER TO READ WHEN 
  94. LINES ARE INDENTED APPROPRIATELY.
  95.  
  96. MAIN()  /* SEXY PROGRAM */
  97. █   /* START MAIN() */
  98.   INT I=1; /* DECLARE I=1 */
  99.   WHILE (I<11)█   /* WHILE I<11 */
  100.     PRINTF("\N THE SQUARE OF %D IS 
  101.             %D",I,I*I);  
  102.       /* PRINT I, I*I */
  103.     I=I+1;  /* INCREMENT I */
  104.   ▌  /* END OF WHILE */
  105. ▌ /* END OF MAIN  */
  106.  
  107. ┴NYTHING BETWEEN /* AND */ IS A 
  108. COMMENT AND IS IGNORED BY THE C-
  109. COMPILER (IT'S FOR HUMAN CONSUMPTION 
  110. ONLY) SO WE'VE ADDED A COMMENT TO 
  111. EVERY LINE. ╬OW WE CAN SEE WHAT THE 
  112. PROGRAM DOES BY READING ONLY THE 
  113. COMMENTS!  ╔NDENTING THE VARIOUS 
  114. PARTS MAKES FOR EASIER READING (AGAIN 
  115. FOR HUMAN CONSUMPTION ...THE  
  116. COMPILER DOESN'T CARE).  
  117.  
  118. ╘HE START AND END OF MAIN() ARE EASY 
  119. TO SPOT  (ALTHOUGH DIFFERENT 
  120. PROGRAMMERS USE DIFFERENT FORMATS, WE 
  121. WILL ALWAYS START AND END MAIN() WITH 
  122. █ AND ▌ IN THE FIRST COLUMN). 
  123.  
  124. ...AND WE START A WHILE LOOP WITH: 
  125. WHILE (....) █, AND END IT WITH ▌,  
  126. PLACED DIRECTLY BELOW THE W IN WHILE.  
  127.  
  128. ╫E WILL ALWAYS INDENT (BY 2 SPACES) 
  129. THESE INSIDE LOOPS.  
  130.  
  131. ╫HY WON'T THE FOLLOWING COMPILE?
  132.  
  133. MAIN()  /* SEXY PROGRAM */
  134. █     /* START MAIN() */
  135.   INT I=1; /* DECLARE I=1 */
  136.   WHILE (I<11); █  /* WHILE I<11 */
  137.     PRINTF("\N THE SQUARE OF %D IS 
  138.            %D",I,I*I);  
  139.       /* PRINT I, I*I */
  140.     I=I+1;  /* INCREMENT I */
  141.   ▌  /* END OF WHILE */
  142. ▌ /* END OF MAIN  */
  143.  
  144. ╫HEREAS MOST C STATEMENTS END IN A 
  145. SEMI-COLON, THE WHILE (...) DOES NOT,
  146. (USUALLY),WE MUST DELETE THE ; AFTER 
  147. THE WHILE.  
  148.  
  149. MAIN()  /* SEXY PROGRAM */
  150. █     /* START MAIN() */
  151.   INT I=1;/* DECLARE I=1  */
  152.   WHILE (I<11) █ /* WHILE I<11   */
  153.     PRINTF("\N THE SQUARE OF %D IS 
  154.            %D",I,I*I);  
  155.       /* PRINT I, I*I */
  156.     I=I+1;  /* INCREMENT I  */
  157.   ▌  /* END OF WHILE */
  158. ▌ /* END OF MAIN  */
  159.  
  160. ╘HE CONSTRUCTION:
  161.  
  162. I=1; 
  163. WHILE (I<11) █
  164.   SOME STATEMENTS; 
  165.   I=I+1;   
  166.  
  167. ╧CCURS SO OFTEN (IN ANY LANGUAGE) 
  168. THAT A SLICK MECHANISM EXISTS FOR 
  169. HANDLING THIS LOOP: 
  170.  
  171. FOR (I=1; I<11; I=I+1) █
  172.   SOME STATEMENTS; 
  173.  
  174. ╘HE PARTS OF A FOR() LOOP:
  175.  
  176. FOR(A;B;C)
  177.  
  178. ╨ART A: INITIALIZATION OF ONE OR MORE 
  179. VARIABLES. ╔F MORE THAN ONE SEPARATE 
  180. VARIABLES WITH A COMMA.
  181.  
  182. ╨ART B: CONDITION WHICH IS TESTED. 
  183. WHILE THE CONDITION IS TRUE THE LOOP 
  184. REPEATS.  
  185.  
  186. ╨ART C: OPERATION ON THE LOOP 
  187. VARIABLES. ╧FTEN THIS IS TO INCREMENT 
  188. OR DECREMENT THEM.
  189.  
  190. ╬ONE OF THE THREE PARTS NECESSARILY 
  191. NEEDS TO BE USED BUT THE SEMI-COLONS 
  192. MUST BE INCLUDED.
  193.  
  194. FOR(;;) █
  195.   DO SOMETHING;
  196.  
  197. ╘HIS FOR LOOP WOULD EXECUTE FOREVER, 
  198. OR, PRESUMEABLY, UNTIL BROKEN OUT OF 
  199. IN THE 'DO SOMETHING' STATEMENTS.
  200.  
  201. ╔N OUR PROGRAM THE FOR LOOP LOOKS 
  202. LIKE THIS: 
  203.  
  204. MAIN()  /* SEXY PROGRAM */
  205. █   /* START MAIN() */
  206.   INT I;  /* DECLARE I*/
  207.   FOR (I=1; I<11; I=I+1) █
  208.     /* THE FOR LOOP */
  209.     PRINTF("\N THE SQUARE OF %D IS 
  210.            %D",I,I*I);  
  211.       /* PRINT I, I*I */
  212.   ▌  /* END OF FOR  */
  213. ▌ /* END OF MAIN  */
  214.  
  215. ╬OTE THAT THE FOR LOOP AUTOMATICALLY 
  216. INITIALIZES I TO 1, THEN DOES THE 
  217. PRINTF() AGAIN AND AGAIN, EACH TIME 
  218. INCREMENTING I, UNTIL I HAS THE VALUE 
  219. 11. ╘HE PROGRAM EXITS FROM THIS LOOP 
  220. AFTER PRINTF-ING FOR THE LAST TIME 
  221. WITH I=10 BECAUSE THE OPERATOR '<' 
  222. SPECIFIES THAT 'I' MUST BE 'LESS 
  223. THAN' 11. ╔N THIS CASE THE FOR LOOP 
  224. DOES EXACTLY WHAT THE WHILE LOOP DID 
  225. ONLY IN A MORE CONCISE FASHION.  
  226. ╙OMETIMES IT IS MERELY A MATTER OF 
  227. STYLE AND CHOICE IN DECIDING WHICH OF 
  228. THE TWO, WHILE OR FOR, TO USE IN A 
  229. LOOP.  
  230.  
  231. ╘HE VALUE OF I, AFTER THE EXIT FROM 
  232. THE LOOP, IS 11.  ╘O CHECK IT ALL 
  233. OUT, WE LEAVE OUR WORD PROCESSOR 
  234. AFTER SAVING THIS SOURCE CODE UNDER 
  235. THE NAME PROGRAM2.C, THEN TYPE: 
  236.  
  237. CC PROGRAM2.C
  238.  
  239. ╘HEN (ASSUMING IT COMPILES WITHOUT 
  240. ERRORS!) WE FINISH WITH: 
  241.  
  242. LINK PROGRAM2.O
  243.  
  244. ╘HEN WE TYPE: 
  245.  
  246. PROGRAM2
  247.  
  248. AND THE EXECUTABLE PROGRAM WILL LOAD 
  249. FROM DISK, THEN EXECUTE, TO GIVE: 
  250.  
  251.  THE SQUARE OF 1 IS 1
  252.  THE SQUARE OF 2 IS 4
  253.  THE SQUARE OF 3 IS 9
  254.  THE SQUARE OF 4 IS 16
  255.  THE SQUARE OF 5 IS 25
  256.  THE SQUARE OF 6 IS 36
  257.  THE SQUARE OF 7 IS 49
  258.  THE SQUARE OF 8 IS 64
  259.  THE SQUARE OF 9 IS 81
  260.  THE SQUARE OF 10 IS 100
  261.  
  262. ╫HAT ABOUT THIS CASE? -
  263.  
  264. 1 I=5;  
  265. 2 WHILE (I<5) █
  266. 3 SOME STATEMENTS;  
  267. 4 ▌
  268.  
  269. ╔N THIS PIECE OF CODE, THE WHILE LOOP 
  270. WILL BE EXECUTED ONLY AS LONG AS I<5 
  271. (IE. I IS LESS THAN 5).  ╙INCE WE SET 
  272. I=5 IN LINE 1, THE LOOP WOULD BE 
  273. BYPASSED ALTOGETHER!  
  274.  
  275. ╘HE CONDITION, IN A WHILE LOOP, IS 
  276. CHECKED AT THE BEGINNING OF THE LOOP!  
  277.  
  278. ╒SUALLY THIS IS WHAT WE WANT ...BUT,
  279. SOMETIMES IT IS NOT: 
  280.  
  281. WHILE (SAM>100) █
  282. ------------------------------------
  283. SOME STATEMENTS WHICH CALCULATE SOME
  284. NUMBERS AND USE THESE TO COMPUTE THE
  285. VALUE OF SAM.
  286. ------------------------------------
  287.  
  288. ╔N THIS PIECE OF CODE THE VALUE OF 
  289. SAM IS NOT EVEN KNOWN UNTIL WE GO 
  290. THROUGH THE WHILE LOOP ...SO WE WANT 
  291. TO CHECK THE WHILE-CONDITION AT THE 
  292. END OF THE LOOP !!!  
  293.  
  294. ─O THIS FOR A WHILE -
  295.  
  296. ╫E REPLACE THE PREVIOUS CONSTRUCTION 
  297. BY A DO-WHILE LOOP: 
  298.  
  299. DO █
  300. ------------------------------------
  301. SOME STATEMENTS WHICH CALCULATE SOME
  302. NUMBERS AND USE THESE TO COMPUTE THE
  303. VALUE OF SAM.
  304. ------------------------------------
  305. ▌ WHILE (SAM>100);  
  306.  
  307. ╘HE WHILE-CONDITION IS CHECKED AT THE
  308. END OF THE LOOP!
  309.  
  310. 1 DOUBLE X=1.0, Y, E;   
  311.   /* DOUBLE PRECISION */ 
  312. 2 DO █ /* START OF THE DO-LOOP */ 
  313. 3   Y=2.0*SIN(X); /* CALCULATE Y */ 
  314. 4   E=FABS(Y-X);  
  315.     /* CALCULATE ERROR */ 
  316. 5   X=Y;  /* CHANGE X TO Y */ 
  317. 6 ▌ WHILE (E>.0000005);   
  318.   /* END CONDITION  */ 
  319. 7 PRINTF("X-2SIN(X)=%F WHEN X=%F",E,X);   
  320.  
  321. ╘HIS PROGRAM SEGMENT CALULATES THE 
  322. ROOT OF THE EQUATION: 
  323.  
  324. X-2*SIN(X)=0
  325.  
  326. ╔T STARTS WITH X=1.0, IN LINE 1, THEN 
  327. REPEATEDLY REPLACES X BY Y IN LINE 5, 
  328. WHERE Y IS CALCULATED AS 2.0*SIN(X) 
  329. IN LINE 3.  
  330.  
  331. ╫HILE THE CONDITION, THE FLOATING 
  332. POINT ABSOLUTE, OR 'FABS', VALUE OF 
  333. Y-X, CALCULATED IN LINE 4, IS GREATER 
  334. THAN .0000005 WE REPEAT THE LOOP.  
  335.  
  336. ╞INALLY, WHEN THE WHILE-CONDITION, IN 
  337. LINE 6, IS FALSE (I.E. WHEN E IS 
  338. EQUAL TO OR LESS THAN .0000005), WE 
  339. PRINT: 
  340.  
  341. X-2SIN(X)=0.000000 WHEN X=1.895494 
  342.  
  343. ├ORRECT TO 6 DECIMAL PLACES SINCE A 
  344. %FLOAT IS 6 PLACES BY DEFAULT.  
  345.  
  346. ╔T'S NICE TO CHECK THE ERROR E AFTER 
  347. WE GO THROUGH THE LOOP!  
  348.  
  349. ┴ REVIEW -
  350.  
  351. WHILE (SOMETHING IS TRUE ) █
  352.   DO THESE STATEMENTS;
  353.  
  354. FOR (INITIALIZE VARIABLES;REPEAT,IF
  355.      THIS IS TRUE;DO THIS AT END OF
  356.      LOOP) █
  357.   DO THESE STATEMENTS;  
  358.  
  359. ╬OTE: IF THERE IS ONLY ONE STATEMENT 
  360. TO PERFORM, IN EITHER A WHILE OR A 
  361. FOR LOOP, THEN WE DON'T NEED THE █
  362. AND ▌.
  363.  
  364. FOR (I=0; I<11; I=I+1) 
  365.   /* NO OPENING █ */
  366.   PRINTF("\N THE SQUARE OF %D IS 
  367.          %D",I,I*I);  
  368.     /* OR CLOSING ▌ */
  369.  
  370. DO █
  371.   DO THESE STATEMENTS; 
  372. ▌ WHILE (SOMETHING IS TRUE); 
  373.  
  374. ╬OTE: THE WHILE WHICH OCCURS AT THE 
  375. END OF A DO LOOP NEEDS A SEMI-COLON.
  376.  
  377. ╫E CAN ALSO INVOKE A FUNCTION, LIKE
  378. GETCHAR(), AS A CONDITION, INSIDE A
  379. WHILE STATEMENT:
  380.  
  381. MAIN()
  382.   CHAR KEY;
  383.   WHILE ( (KEY = GETCHAR()) != 'E' )
  384.     PRINTF(" YOU PRESSED %C\N",KEY);
  385. PRINTF("\N  THAT'S THE END!");
  386.  
  387. ╬OTE: '!=' MEANS 'NOT EQUAL TO' IN
  388. C-SPEAK.
  389.  
  390. ╫E WAIT FOR A SINGLE KEYPRESS 
  391. (THAT'S WHAT GETCHAR() DOES), AND 
  392. ASSIGN THE KEY TO THE CHAR VARIABLE 
  393. KEY VIA KEY=GETCHAR(), AND SO LONG AS 
  394. THE KEY PRESSED IS NOT EQUAL TO THE 
  395. LETTER 'E', WE PRINTF() THE KEY  (AS 
  396. A %CHARACTER) AND THEN A \NEWLINE.  
  397.  
  398. ╬OTE: SCANF("%C",&KEY) WOULD REQUIRE 
  399. YOUR PRESSING THE ENTER KEY AFTER 
  400. EACH OF THE LETTERS A, B, ETC., SO
  401. WE USED GETCHAR().
  402.  
  403. ╘HIS PROGRAM WOULD GIVE (IF YOU 
  404. PRESSED A THEN B THEN C ETC.): 
  405.  
  406. A  YOU PRESSED A
  407. B  YOU PRESSED B
  408. C  YOU PRESSED C
  409. D  YOU PRESSED D
  410. E
  411.    THAT'S THE END!
  412.  
  413. [END OF LESSON 4 OF 11]
  414.