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

  1. ├ ╠ANGUAGE ╘UTORIAL
  2. -------------------
  3. ╠ESSON 7 OF 11
  4.  
  5.  
  6. ╬╧╘┼: ╙╒┬╙╘╔╘╒╘╔╧╬╙ ╞╧╥ ╙╨┼├╔┴╠ ├
  7. ╠┴╬╟╒┴╟┼ ├╚┴╥┴├╘┼╥╙:
  8.  
  9. ╠┼╞╘ ├╒╥╠┘ ┬╥┴├╦┼╘:   █
  10. ╥╔╟╚╘ ├╒╥╠┘ ┬╥┴├╦┼╘:  ▌
  11. ┬┴├╦ ╙╠┴╙╚:           \
  12. ╘╔╠─┼:                »
  13. ╓┼╥╘╔├┴╠ ┬┴╥:         ▀
  14. ╒╬─┼╥╙├╧╥┼:           ñ
  15.  
  16.  
  17. ═ORE ╞╒╬├╘╔╧╬╙, INCLUDING MAIN() -
  18.  
  19. ┘OU MAY RECALL, IN A PREVIOUS LESSON, 
  20. THAT WE PASSED FLOAT ARGUMENTS X AND 
  21. Y TO A FUNCTION ( WHICH WE CALLED 
  22. AVERAGE(X,Y) ) WHICH RETURNED THE 
  23. AVERAGE: (X+Y)/2. ╔T WAS SOMETHING 
  24. LIKE: 
  25.  
  26. 1  MAIN() 
  27.    █
  28. 2    FLOAT X,Y,A;                                              
  29. 3    PRINTF("\N ┼NTER TWO NUMBERS 
  30.         (SEPARATED BY A SPACE) : ");
  31. 4    SCANF("%F%F",&X,&Y);                                      
  32. 5    A=AVERAGE(X,Y);                                           
  33. 6    PRINTF("\N ╘HE AVERAGE OF %F 
  34.         AND %F IS %F",X,Y,A);        
  35. 7  ▌                                                             
  36. 8  FLOAT AVERAGE (A,B);                                          
  37. 9  FLOAT A, B;                                                   
  38. 10 █                                                             
  39. 11   FLOAT Z;                                                  
  40. 12   Z=(A+B)/2;                                                
  41. 13   RETURN(Z);                                                
  42. 14 ▌ 
  43.  
  44. ╘HE FUNCTION AVERAGE(A,B) WAS INVOKED 
  45. IN LINE 5, WHERE WE PASSED IT COPIES 
  46. OF THE VARIABLES X AND Y. ╘HE 
  47. FUNCTION ITSELF STARTS IN LINE 8 AND 
  48. IT MAKES NO DIFFERENCE WHAT NAME THE 
  49. FUNCTION GIVES TO ITS ARGUMENTS 
  50. ..THEY ARE, AFTER ALL, ONLY PRIVATE 
  51. COPIES OF THE TWO VARIABLES WHICH 
  52. MAIN() USES. ╫HATEVER AVERAGE DOES 
  53. WITH ITS COPIES, IT DOES ╬╧╘ EFFECT 
  54. THE ORIGINAL X AND Y.  ╫E COULD HAVE 
  55. SIMPLIFIED THE FUNCTION BY REPLACING 
  56. LINES 11, 12, 13 BY: 
  57.  
  58. RETURN( (A+B)/2); 
  59.  
  60. ┴NYWAY, WE MENTIONED THAT PRINTF(), 
  61. SCANF(), GETCHAR() AND MAIN() WERE 
  62. ┴╠╠ FUNCTIONS. ╫HEREAS ╫┼ WRITE THE 
  63. FUNCTIONS MAIN() AND (IN THIS 
  64. EXAMPLE) AVERAGE(), THE OTHERS ARE A 
  65. STANDARD PART OF THE ├ LIBRARY.
  66. ╘HERE IS NO DIFFERENCE BETWEEN THE 
  67. WAY THAT ├ LIBRARY FUNCTIONS AND 
  68. USER-WRITTEN ├ FUNCTIONS WORK IN A ├ 
  69. PROGRAM. ┴ LIBRARY OF FUNCTIONS IS 
  70. INCLUDED WITH ALL ├ COMPILERS TO 
  71. PROVIDE PREWRITTEN, STANDARD VERSIONS 
  72. OF FUNCTIONS WHICH ARE COMMONLY 
  73. REQUIRED BY MOST ├ PROGRAMS. ╙OME 
  74. COMPILERS WILL PROVIDE THE ├ SOURCE 
  75. CODE FOR THE STANDARD LIBRARY 
  76. FUNCTIONS AND SOME WILL NOT. ╩UST 
  77. REMEMBER THAT THESE STANDARD LIBRARY 
  78. FUNCTIONS ARE NO DIFFERENT THAN THE 
  79. ONES YOU WILL WRITE FOR YOUR OWN 
  80. PROGRAMS. ╫HEN YOU BECOME SKILLFUL 
  81. ENOUGH IN ├ PROGRAMMING YOU MAY WELL 
  82. DECIDE TO WRITE YOUR OWN VERSIONS OF 
  83. THE STANDARD LIBRARY FUNCTIONS TO 
  84. REPLACE ONES THAT CAME WITH YOUR 
  85. COMPILER.
  86.  
  87. ╒SER-WRITTEN FUNCTIONS PERFORM TASKS
  88. REQUIRED BY A SPECIFIC PROGRAMMING 
  89. TASK. ╘HESE FUNCTIONS CAN ALSO BE 
  90. PLACED IN A LIBRARY MAINTAINED BY THE 
  91. PROGRAMMER TO HAVE THEM AVAILABLE FOR 
  92. FUTURE PROGRAMMING TASKS. ╧NCE USER-
  93. WRITTEN FUNCTIONS ARE AVAILABLE FROM 
  94. A LIBRARY THEY MAY BE CALLED BY A ├ 
  95. PROGRAM IN THE SAME MANNER AS THE 
  96. ORIGINAL ├ LIBRARY FUNCTIONS THAT 
  97. CAME WITH THE COMPILER. ═OST ├ 
  98. COMPILERS HAVE A LIBRARY UTILITY FOR 
  99. THE PURPOSE OF MAINTAINING USER-
  100. WRITTEN FUNCTIONS IN LIBRARY FORM.
  101.  
  102.  
  103. ╙OME ├-COMPILERS AUTOMATICALLY GIVE 
  104. YOUR MAIN() PROGRAM ACCESS TO THE 
  105. STANDARD INPUT OUTPUT ( STDIO ) 
  106. ROUTINES SUCH AS PRINTF(), ETC. ┬╒╘, 
  107. ═╧╙╘ ─╧ ╬╧╘.  
  108.  
  109. ╘O BE SURE THAT YOU INCLUDE THESE 
  110. STDIO FUNCTIONS IN YOUR MAIN() 
  111. PROGRAM (ASSUMING YOU WILL BE USING 
  112. THEM) YOU SHOULD BEGIN YOUR 
  113. PROGRAM...  
  114.  
  115. #INCLUDE <STDIO.H>  /* ╒SE THIS! */
  116. MAIN()   
  117. ........  
  118. ........  
  119.  
  120.  
  121. ╫HEN THE ├-COMPILER SEES THE #INCLUDE 
  122. <STDIO.H> IT WILL APPEND TO YOUR 
  123. MAIN() PROGRAM ALL THE INPUT-OUTPUT 
  124. FUNCTIONS IN THE ├ LIBRARY.  
  125. ─ON'T FORGET #INCLUDE <STDIO.H>. ╔T
  126. MAY ALSO BE WRITTEN IN THE FORMAT 
  127. #INCLUDE "STDIO.H". ├HECK YOUR 
  128. COMPILER DOCUMENTATION FOR DETAILS.
  129.  
  130. ╘HE USE OF THE LINE:
  131.  
  132. #INCLUDE...
  133.  
  134. IN A ├ PROGRAM IS AN INSTRUCTION TO A 
  135. PART OF THE COMPILER CALLED A 
  136. 'PREPROCESSOR'. ╘HE #INCLUDE 
  137. INSTRUCTION TO THE PREPROCESSOR TELLS 
  138. IT TO FIND THE SPECIFIED FILE AND ADD 
  139. THAT WHOLE FILE TO YOUR PROGRAM. ╘HIS 
  140. USUALLY MEANS THAT THE HEADER FILE 
  141. MUST BE LOCATED ON THE SAME DISK AS 
  142. YOUR PROGRAM SOURCE FILE WHEN BEGIN 
  143. TO COMPILE IT BUT SEE YOUR COMPILER 
  144. DOCUMENTATION FOR DETAILS.
  145.  
  146. ╔T IS STANDARD PRACTICE TO CALL THESE 
  147. #INCLUDE'D FILES 'HEADER' FILES. ╘HEY 
  148. ARE CALLED HEADER FILES BECAUSE THEY 
  149. APPEAR AT THE HEAD OF A PROGRAM. ╘O 
  150. DESIGNATE THESE HEADER FILES IT IS 
  151. STANDARD PRACTICE TO GIVE THE 
  152. FILENAMES OF HEADER FILES AN 
  153. EXTENSION OF '.H' AS YOU SAW ABOVE 
  154. FOR THE STANDARD INPUT-OUTPUT HEADER 
  155. FILE (IE. STDIO.H).
  156.  
  157.  
  158. ╬OW, IF PRINTF() AND SCANF() AND 
  159. AVERAGE() ETC. CAN BE PASSED 
  160. ARGUMENTS, WHY NOT MAIN() ???  
  161. ┴S A MATTER OF FACT, WE ├┴╬ PASS 
  162. ARGUMENTS TO MAIN().  
  163.  
  164. ╙UPPOSE YOUR MAIN() PROGRAM WAS 
  165. EXPECTED TO ADD A SERIES OF NUMBERS 
  166. AND THAT YOU COMPILED/LINKED IT WITH 
  167. THE NAME SUM. ╬OW YOU COULD RUN THE 
  168. SUM PROGRAM BY TYPING ITS NAME, SUM, 
  169. AFTER WHICH A SCANF() FUNCTION CALL 
  170. (IN THE PROGRAM) WOULD INPUT THE 
  171. NUMBERS WHICH WERE TO BE ADDED. ╘HEN 
  172. YOUR PROGRAM WOULD PRINTF() THE SUM.  
  173.  
  174. ┬╒╘, WOULDN'T IT BE NICE TO RUN THE 
  175. SUM PROGRAM BY TYPING: 
  176.  
  177. SUM  10.5 -15.23 6.7   
  178.  
  179. ...ON THE COMMAND LINE AND HAVE THE
  180. SUM PROGRAM RUN, AND ALSO HAVE THE 
  181. NUMBERS 10.5 -15.23 AND 6.7 PASSED 
  182. TO THE PROGRAM AS  ARGUMENTS?
  183. ╫E'LL TALK ABOUT HOW TO DO THIS.
  184.  
  185.  
  186. ╘HE MAIN() ARGUMENTS -
  187.  
  188. ╚ERE WE #INCLUDE THE STDIO.H LIBRARY 
  189. (WE'LL NEED THIS STUFF).  
  190.  
  191. 0  #INCLUDE <STDIO.H>
  192. 1  MAIN(NUMBER,TERM) 
  193.    /* NUMBER & TERM ARE ┴╥╟╒═┼╬╘╙
  194.       OF THE FUNCTION MAIN()    */
  195. 2  INT NUMBER; 
  196.    /* FIRST MAIN() ARGUMENT     */
  197. 3  CHAR *TERM[];   
  198.    /* SECOND MAIN() ARGUMENT    */
  199. 4  █  
  200.    /* OPENING BRACKET OF MAIN() */
  201.  
  202. ╘HE FIRST ARGUMENT (HERE CALLED 
  203. NUMBER) IS ┴╠╫┴┘╙ AN INTEGER!  ╘HE 
  204. SECOND ARGUMENT (HERE CALLED TERM) IS 
  205. ┴╠╫┴┘╙ DECLARED AS: 
  206.  
  207. CHAR *NAME[];   
  208.  
  209. ...NAME OF SECOND ARGUMENT GOES IN 
  210. HERE (IN OUR EXAMPLE, IT'S TERM).  
  211. ┬┼├┴╒╙┼ IT IS DECLARED CHAR *TERM WE 
  212. SEE THAT TERM IS A POINTER!  ┬┼├┴╒╙┼ 
  213. WE REFER TO IT AS TERM[] WE SEE THAT 
  214. TERM IS AN ┴╥╥┴┘!  
  215.  
  216. ╔N FACT, THE SECOND ARGUMENT IS 
  217. ┴╠╫┴┘╙ AN ┴╥╥┴┘ OF ╨╧╔╬╘┼╥╙ WHICH 
  218. POINT TO CHARACTER STRINGS (THAT'S 
  219. WHY WE SAID CHAR).  ╔F WE CALLED UPON 
  220. OUR (COMPILED/LINKED) PROGRAM WITH 
  221. THE COMMAND STRING: 
  222.  
  223. SUM  10.5 -15.23 6.7 
  224.  
  225. THEN THIS CONTAINS 4 ELEMENTS, NAMELY:
  226.  
  227. SUM AND 10.5 AND -15.23 AND 6.7 
  228.  
  229. ...(SEPARATED BY A SPACE).
  230.  
  231. ╔T IS THE NUMBER 4 WHICH GETS PASSED 
  232. TO MAIN() AS ITS FIRST ARGUMENT!
  233. (..IN OUR EXAMPLE, NUMBER IS THE 
  234. INTEGER 4). ┴ND THE SECOND ARGUMENT?
  235. ╘HE SECOND ARGUMENT WHICH GETS PASSED 
  236. TO MAIN() IS (ARE?) THE STRINGS: 
  237.  
  238. SUM AND 10.5 AND -15.23 AND 6.7
  239.  
  240. ┬╒╘, MAIN() RECEIVES THIS LIST OF 
  241. STRINGS AS AN ┴╥╥┴┘ OF ╨╧╔╬╘┼╥╙.
  242. (╥EMEMBER THAT IN ├ THE FIRST ELEMENT 
  243. IN AN ARRAY IS ELEMENT NUMBER ZERO).
  244.  
  245. TERM[0] POINTS TO THE STRING SUM 
  246. TERM[1] POINTS TO THE STRING 10.5 
  247. TERM[2] POINTS TO THE STRING -15.23
  248. TERM[3] POINTS TO THE STRING 6.7 
  249.  
  250. ╬╧╘┼: WHEN WE REFER TO THE STRING
  251. -15.23 WE MEAN A COLLECTION OF 7 
  252. CHARACTERS: '-' AND '1' AND '5' AND 
  253. '.' AND '2' AND '3' AND '\0'.  
  254. (REMEMBER THE '\0' WHICH TERMINATES 
  255. STRINGS?) ╫E MAY PICK OUT THE NUMBERS 
  256. 10.5 AND -15.23 ETC. BY REFERRING TO 
  257. TERM[1] AND TERM[2] ETC.  
  258.  
  259. ╧F COURSE, THEY ARE ╬╧╘ (REALLY) 
  260. NUMBERS (?!@#$) BUT STRINGS OF ┴╙├╔╔ 
  261. CHARACTERS. ╘O ADD THEM UP, WE MUST 
  262. CONVERT THEM TO FLOATING POINT 
  263. NUMBERS....  
  264.  
  265.  
  266. ╙OME ╙╒═ PROGRAMMING ...  
  267. ╚ERE IS THE COMPLETE PROGRAM WITH 
  268. BOTH REMARKS AND INSERTED 
  269. EXPLANATIONS:
  270.  
  271. 0  #INCLUDE <STDIO.H>
  272. 1  MAIN(NUMBER,TERM) 
  273. 2  INT NUMBER; 
  274.    /* FIRST  MAIN() ARGUMENT */
  275. 3  CHAR *TERM[]; 
  276.    /* SECOND MAIN() ARGUMENT */  
  277. 4  █   
  278.    /* ╬╧╫ START MAIN()   */  
  279. 5  FLOAT NEXT, SUM=0;  
  280.    /* COUPLE OF FLOATS   */  
  281. 6  INT N;  
  282.    /* AN INT TO COUNT TERMS  */ 
  283. 7  FOR (N=1; N<NUMBER; N++) █
  284.    /* LOOP THRU' TERMS   */  
  285. ╚ERE WE BEGIN OUR LOOP, WHICH SUMS 
  286. THE TERMS.  ┬EGINNING WITH TERM[1] 
  287. (THE FIRST NUMBER) WE LET N CYCLE 
  288. THRU' THE TERMS (INCREMENTING EACH 
  289. TIME, WITH N++).  
  290.  
  291. 8  NEXT=ATOF(TERM[N]); 
  292.    /* ├╧╬╓┼╥╘ NEXT TERM  */  
  293. ╚ERE'S OUR CONVERSION OF THE ┴╙├╔╔ 
  294. STRING (ONE FOR EACH NUMBER) TO A 
  295. FLOAT. (╘HIS ASCII TO FLOAT FUNCTION 
  296. IS PART OF ANY RESPECTABLE ├-LIBRARY 
  297. ...WHICH IS ONE REASON WHY WE 
  298. #INCLUDED STDIO.H).  ╬OTE THAT WE 
  299. GIVE TO ATOF() THE POINTER TO THE 
  300. ┴╙├╔╔ STRING, NAMELY TERM[N] (FOR 
  301. EACH VALUE OF N IN OUR FOR-LOOP).  
  302.  
  303. 9  SUM=SUM+NEXT;   
  304.    /* ADD IT TO SUM  */  
  305. ╚ERE WE ADD THE FLOAT ( GENERATED IN 
  306. ╠INE 8 BY ATOF() ) TO OUR SUM ( WHICH 
  307. WAS INITIALIZED TO 0 IN ╠INE 5 ).  
  308.  
  309. 10 PRINTF("\N%8.3F",NEXT); 
  310.    /* PRINT EACH TERM*/  
  311. ╩UST TO PROVE THAT ATOF() IS DOING 
  312. ITS JOB, WE'LL PRINT EACH FLOAT WHICH 
  313. IT GENERATES ...EACH ON A \NEWLINE.  
  314.  
  315. 11 ▌
  316.    /* END OF FOR-LOOP*/  
  317.  
  318. 12 PRINTF("\N╙╒═=%8.3F,SUM);   
  319.    /* PRINT THE SUM  */  
  320. ╫E END THE FOR-LOOP, AFTER WHICH WE 
  321. PRINTF() OUR SUM (USING 8 POSITIONS 
  322. ON THE SCREEN, AND PRINTING TO 3 
  323. DECIMAL PLACES).  
  324.  
  325. 13 ▌   
  326.    /* END OF MAIN()  */  
  327.  
  328. ╞OR READABILITY HERE IS THE PROGRAM 
  329. WITHOUT COMMENTS OF ANY KIND AND 
  330. FORMATTED,NEARLY,AS ├ SOURCE CODE
  331. LISTINGS SHOULD APPEAR:
  332.  
  333. #INCLUDE <STDIO.H>
  334.  
  335. MAIN(NUMBER,TERM) 
  336. INT NUMBER;
  337. CHAR *TERM[]; 
  338.   FLOAT NEXT, SUM=0;
  339.   INT N; 
  340.  
  341.   FOR (N=1; N<NUMBER; N++) █
  342.     NEXT=ATOF(TERM[N]);
  343.     SUM=SUM+NEXT;
  344.     PRINTF("\N%8.3F",NEXT);
  345.   ▌
  346.   PRINTF("\N╙╒═=%8.3F,SUM);
  347.  
  348. ╔N RESPONSE TO SUM  10.5 -15.23 6.7, 
  349. OUR PROGRAM WILL PRINT: 
  350.     
  351.     10.500  
  352.     -15.230 
  353.     6.700 
  354. ╙╒═=   1.970  
  355. ╬OTE: ┼ACH TERM IS PRINTED AFTER
  356. 4 SPACES, AND 4 SPACES WAS JUST 
  357. ENOUGH FOR:
  358.  
  359. ╙╒═=
  360.  
  361. ┴LTHOUGH ( IN OUR PROGRAM ) TERM[0] 
  362. IS SUPPOSED TO POINT TO THE NAME OF 
  363. THE PROGRAM ( IN OUR EXAMPLE IT WAS 
  364. SUM ) SOME ├-COMPILERS DO ╬╧╘ PROVIDE 
  365. THIS! ╔N PARTICULAR, SOME ═╙-─╧╙ 
  366. COMPILERS DO ╬╧╘ PASS THE NAME TO THE 
  367. COMPILED PROGRAM, SO SOME ├-COMPILERS 
  368. RUNNING UNDER ═╙-─╧╙ DO NOT (├┴╬╬╧╘) 
  369. IMPLEMENT THIS FEATURE OF THE ├ 
  370. LANGUAGE. ╔NSTEAD, REFERENCE TO THIS
  371. ZEROTH STRING MAY YIELD GARBAGE OR A
  372. BLANK (╬╒╠╠) STRING. ╞ORTUNATELY,
  373. ├ ╨OWER DOES ALLOW YOU TAKE ADVANTAGE
  374. OF COMMAND LINE ARGUMENTS.
  375.  
  376.  
  377. [┼ND OF ╠ESSON 7 OF 11]
  378.