*** ¦pªG§Aªº¶i«×¤ñ¸ûºC, ¤§«eªº³£ÁÙ¨S½m¼ô, ¨º´N¥ýÄ~Äò½m²ß¤§«eªº; ©Î¬O«e¤T¶gªº½m²ßÃDÁÙ¨S§ËÀ´, ªü´NÁ|¤â§ì­Ó¤p§U±Ð¨Ó¸ò§AºCºC¬ã¨s ƒº ½Ðª`·N¤@©w­n§â¥¦­Ì§ËÀ´, ¦ý¬OºCºC¨Ó¨SÃö«Y! LAB-04 @ Fourth week Study how to use Loop to process an Array again (p.1/3) Problem: Input an integer n, then print out Pascal triangle of order n (n¶¥¤Ú´µ¥d¤T¨¤§Î) Purpose: To Master how to process an Array using Loops Description: Blaise Pascal(1623-1662) ¬O­Ó¼Æ¾Ç¤Ñ¤~, ¥Lµo©úªº Pascal Triangle (1653¦~)¥u¥Î ¨ì¥[ªk! ¥i¬O¸Ì­±ÂõۤG¶µ¦¡®i¶}¦¡¨t¼Æªºµª®×, ¥H¤Î C(m, n) ²Õ¦X¿ï¶µªºµª®×(¨Ò¦p¦³ m ±i¼³§JµP, ¥ô·N¬D¿ï n ±i, ½Ð°Ý¦@¦³´XºØ±¡§Î? ¤S¦p¤­¿ï¦hªº½Æ¿ï¿ï¾ÜÃD¦³´XºØ¥i¯à µª®×?), ½Ð¤Wºô¥´¤J ¡§wiki Pascal Triangle¡¨ ¬d¬Ý¨Ã¬ã¨s, ¬Ý¬Ý¥Lªº¬G¨Æ¤]¤£¿ù¡C ¼g­Óµ{¦¡¥i¥HŪ¤J¾ã¼Æ n, ¨Ã¦L¥Xn ¶¥ Pascal triangle (¤Ú´µ¥d¤T¨¤§Î); ¤@ª½°µ¨ì ¿é¤J n ¬O­t¼Æ«h°±¤î¡C (³o·N«ä¬O User ªí¥Ü¤£­nª±¤F :-! ) Blaise Pascal ÁÙµo©ú¤F¥[ªk¾¹(1642¦~), ¹L¤F¤j¬ù¤T¤Q¦~, ¼w°êGottfried Leibniz (µÜ¥¬¥§¯÷)»s³y¤F¤@³¡¥b­Ó­¼ªk¾¹(1673¦~ ), ³oÅý¤HÃþª¾¹D¥i¥Î¾÷¾¹¨ÓÀ°¦£­pºâ! Ãþ¦üÃD¥Ø: Magic square Å]¤è°}; (Diabolic square °­¤è°}) ©_¼Æ¶¥ªºÅ]¤è°}°µªk«Ü¾A¦Xªì¾ÇªÌ®³¨Ó½m²ß Array + Loop; ¥|ªº­¿¼Æ¶¥Å]¤è°}°µªk¤]¤£Ãø, ¤]«Ü¾A¦Xªì¾ÇªÌ®³¨Ó½m²ß Array + Loop; ½Ð¤Wºô¥´¤J "wiki magic square" ¬d¬ÝÅ]¤è°}»¡©ú¨Ã¬ã¨s ! «ØÄ³¤â¸}¤ñ¸û§Öªº¦P¾Ç, ½m§¹ Pascal Triangle «á, ¤]¸ÕµÛ¼g¥X¥i¥HŪ¤J¾ã¼Æ n µM«á ¦L¥X n ¶¥Å]¤è°}ªºµ{¦¡¡C°¸¼Æ¶¥¤¤­Y¤£¬O¥|ªº­¿¼Æ«h¤ñ¸ûÃø, ¥i¥H¥ý¼g¤@­ÓªÅªº¨ç¼Æµ¥ ¥H«á·|¤F¦A¸É¼g§¹¦¨ !ƒº More Hints: (1) ¬Ý¹L wiki »¡©úÁÙ¤£·|¼gªº, «ØÄ³¥ý§Ë¼ô¤E¤E­¼ªkªí½d¨Òµ{¦¡ (2) «ØÄ³¥ý¥Î two-dimensional array, ¦A§ï¥Î one-dimensional array (3) ¶i¶¥ÃD: Ū¤J¨â­Ó¯x°}(matrix)µM«á¦L¥X¸Ó¨â¯x°}ªº­¼¿n ________________________________________________________________________ ¤§«e¤w¸g»¡¤F ... ¬JµM¿ï¤F³oªù½Ò .. ¨º´N¤£­n«á®¬ ! ­n¥[ªo ! ________________________________________________________________________ §Æ±æ¤j®a¥i¥H«ù¤§¥H«í, ¾¨¶q¤£¯Ê½Ò, ¤@°_¨Ó½m²ß, ¤@°_°Q½×, ¦³°ÝÃD(¥]¬A¥»½Òµ{ªº°ÝÃD»P§Aªº¥²­×½Ò­p·§ªº°ÝÃD)´NÁ|¤â§ä¤p§U±Ð¹L¨Ó°Ý:-) ­è¶}©lı±o«ÜÃøªº¦P¾Ç¤]¤£­n¦Ç¤ß! ­n§Ô­@ ! §Ô­@¦³¨Ç¬Ý¤£À´ ¡K ¥u­n§A¨C¶g³£¦³¨Ó½m²ß, ¤@©w·|¶i¨B !!! LAB-04 @ 4-th week Study how to use Loop to process an Array (p.2/3) ¶}©l½m²ß¤§«e, ½Ð¤j®a¥ý¬Ý¬Ý¥H¤Uµ{¦¡¦³¦ó°ÝÃD? ´ú¸Õ¬Ý¸ò§A·Qªº¦³¦ó¤£¦P? * ª`·N ¦bprintf ¤ºªº %5d ªí¥Ü­n¦L¤@­Ó¾ã¼Æ¦û¥Î¤­®æ //ay2.c -- by tsaiwn@csie.nctu.edu.tw //wrong version -- ¦³ BUG ! ¬ã¨s array ¦p¦ó¦w±Æ? Row by Row ¦w±Æ! // ¥ý·Q¤@·Q³o­Óµ{¦¡·|¦L¥XÔ£? ? ª`·N array ªº¼gªk»P¥Îªk ! // test array and it's initialization (Cªº array¦b¹q¸£¸Ì¬O¤@¦C±µµÛ¤@¦C³sµÛ©ñªº) #include int x[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; //¤£°÷15­Ó·|¦Û°Ê¸É 0 int main( ) { int row, col; for(row=0; row < 3; ++row) { for(col=0; col <= 4; col++) printf(" %5d", x[row, col]); // ³o¸Ì¦³°ÝÃD ! À³¸Ó x[row][col] // ¦]¬° x[row, col] ·|³Q·í§@ x[col] ¤´¬O­Ó array //¦ý x ¬O2-dimensional, ¬G x[col] ·|³Q¸ÑÄÀ¦¨ &x[col][0] printf("\n"); // new Line ´«·s¦C } printf("Bye bye!\n"); getchar( ); // ­n¨ìÁä½LŪ¨ú´N·|¼È°± return 0; // ªí¥Ü¥¿±`µ²§ô } Hints: Some useful examples regarding Lab-04 //p40.c --- version 0 - ¥Î¤F¥ß©e¤uµ{Âà¥]·§©À: ¥t¼gfunction°µ¿é¤J ! // Try to write a function(¨ç¼Æ) long getLong( ); to read a Long int // µM«á¨C¦¸­nŪ¨ú¤@­Ó¾ã¼Æ´N ¡§¥s¡¨ (Call) ¥¦À°¦£°µ ! #include #include long n; // (ª`·N) atol( ), atoi( ), ¥H¤Î atof( ) ³£«Å§i¦b long getLong(void); // ¥ý«Å§i(Án©ú)·|¼g¤@­Ó getLong( ) function ƒº void pascal(int); // Án©ú·|¼g¤@­Ó¥i±µ¨ü¤@­Ó int °Ñ¼Æªºfunction ¥s°µ pascal int main( ) { // ¤j¦h¼Æ main program ³£³o¼Ë¶}ÀY while(49==49) { // (ª`·N) ¥i¥H§ï¥Î§Oªº¤èªk°µ Loop // ³z¹L getLong( ) Ū¨ú¾ã¼Æ¨ì n if( n < 0 ) break; // ­Y¬O­t¼Æ´N°± ! (ª`·N) ¥i¥H§ï¥Î§Oªº¤èªk pascal( (int)n ); // (cast) ¦]¬° n ¬O long, ¥i¬O¸Ó pascal ­n±µ¨ü int } // while // ·Q¿ìªk¼È°±¤@¤U¥H§K¥i¯à°{¤@¤U´N¤£¨£ }// main( long getLong( ) { // ¥H«á­n§ï¿é¤Jªº¤èªk¥u­n§ï³o function ´N¥i :-) long ans= -1; scanf("%ld", &ans); // simple, but not good! return ans; // use fgets( ) + atol( ) } void pascal(int n) { // Ãö©ó Pascal Triangle µ{¦¡, ½Ð°Ñ¦Ò¥»½Òµ{µ¹ªº§ë¼v¤ù¤º»¡©ú! // ÁÙ¤£·|ªº¥ý½m²ß¦L¥X©Ò¦³ 1 ¨ì n ªº©_¼Æ (Hint: k%2 !=0 «h k ´N¬O©_¼Æ) // ¦pªG§A¦³ K&R ½Ò¥», ¥i¬ã¨s½Ò¥»¤º°Q½× atoi »P atof ¨ç¼Æ¬O¦p¦ó¼gªº, // ¥i¥HÅý§A¼W¥[¥\¤O³á ! }// pascal( LAB-04 @ 4-th week Study how to use Loop to process an Array (p.3/3) Hints: Some useful examples regarding Lab-03 //p41.c --- - ¥Î¤F¥ß©e¤uµ{Âà¥]·§©À: ¥t¼gfunction°µ¿é¤J ! // In this version, we ¼g¤F¤@­Ó¥iŪ¤Jlong¾ã¼Æªº¨ç¼Æ(function) int getLong( ); // µM«á¨C¦¸­nŪ¨ú¤@­Ó¾ã¼Æ´N ¡§¥s¡¨ (Call) ¥¦À°¦£°µ ! #include #include long n; // (ª`·N) atol( ), atoi( ), ¥H¤Î atof( ) ³£«Å§i¦b long getLong(void); // ¥ý«Å§i(Án©ú)·|¼g¤@­Ó getLong( ) function ƒº void pascal(int); // Án©ú·|¼g¤@­Ó¥i±µ¨ü¤@­Ó int °Ñ¼Æªºfunction ¥s°µ pascal int main( ) { // ¤j¦h¼Æ main program ³£³o¼Ë¶}ÀY while(49==49) { // (ª`·N) ¥i¥H§ï¥Î§Oªº¤èªk°µ Loop printf("Pascal Triangle of order n, Give me n: "); n = getLong( ); // ¼g¦¨¨ç¼Æ (function; ¨ç¦¡) ¬O­Ó«Ü¦nªº²ßºD if( n < 0 ) break; // ­Y¬O­t¼Æ´N°± ! (ª`·N) ¥i¥H§ï¥Î§Oªº¤èªk pascal( (int)n ); // (cast) ¦]¬° n ¬O long, ¥i¬O¸Ó pascal ­n±µ¨ü int // (ª`·N) ¥i¥H°Ý user ­n¤£­nÄ~Äò? } // while printf("Bye bye!\nHit RETURN key ..."); getchar( ); // ¥ø¹ÏŪ¨ú¤@­Ó char, Åýµ{¦¡°±µÛµ¥ User «ö RETURN Áä return 0; // §iª¾§@·~¨t²Î(OS)ªí¥Ü§Ú­Ì³o¥Dµ{¦¡¥¿±`µ²§ô }// main( long getLong( ) { // ¥H«á­n§ï¿é¤Jªº¤èªk¥u­n§ï³o function ´N¥i :-) static char buf[99]; // a string buffer for input; why "static" ? double ans; fgets(buf, sizeof(buf), stdin); // stdin ´N¬OÁä½L, ­n°O±o§t¤J ans = atol(buf); // ±q¦r¦ê¤¤Åª¥X long ¾ã¼Æ (long) ////// ­Y¬O¹ê¼Æ´N§â atol §ï¬° atof ³o¤]¬O§O¤H¼g¦nªº¨ç¼Æ(¨ç¦¡) return ans; } void pascal(int n) { int i, k; // for Loop static int x[38][38]; // for Pascal Triangle; ª½±µ¼g 38 ¤£¤Ó¦n! ¥Î #define for(i = 0; i <= n; ++i) { //.. ¥ý§â¤E¤E­¼ªkªíªºµ{¦¡¬ã¨s²M·¡¹ï¦¹ÃD·|²¤¦³À°§U ƒº } // for(i }// pascal // Ãö©ó Pascal Triangle µ{¦¡, ½Ð°Ñ¦Ò¥»½Òµ{µ¹ªº§ë¼v¤ù¤º»¡©ú! // ÁÙ¤£·|ªº¥ý½m²ß¦L¥X©Ò¦³ 1 ¨ì n ªº©_¼Æ (Hint: k%2 !=0 «h k ´N¬O©_¼Æ) // ¦pªG§A¦³ K&R ½Ò¥», ¥i¬ã¨s½Ò¥»¤º°Q½× atoi »P atof ¨ç¼Æ¬O¦p¦ó¼gªº, // ¥i¥HÅý§A¼W¥[¥\¤O³á !