1、数据可视化分析1.2 数据可视技术的意义数据可视技术的应用嵌套:IF 表达式1 THEN BEGINIF 表达式2 THEN BEGIN语句序列1ENDIF ELSE BEGIN语句序列2ENDELSE ENDIF ELSE BEGINIF THEN BEGIN语句序列3ENDIF ELSE BEGIN语句序列4ENDELSE ENDELSE功能:根据三个表达式的值来选择执行四个语句序列中的一个流程图:见下页图例 编程序,计算并输出 y 的值,其中x 的值要求从键盘任意输入。PRO Chapter04MS5FunctionREAD, PROMPT=请输入X = ?, xIF x LE 3 TH
2、EN BEGINIF x LE -6 THEN BEGINy = 3 * x 2 - x + 1ENDIF ELSE BEGINIF x LE -3 THEN BEGINy = 5 * x 2 - 3 * x + 1ENDIF ELSE BEGINy = 7 * x 2ENDELSEENDELSEENDIF ELSE BEGINIF x LE 6 THEN BEGINy = 5 * x 2 + 3 * x + 1ENDIF ELSE BEGINy = 3 * x 2 + x + 1ENDELSEENDELSEPRINT, y = , yENDIF语句嵌套的另外两种常见格式CASE语句格式:CA
3、SE 表达式 OF表达式1:BEGIN语句序列1 END 表达式n:BEGIN语句序列n END ELSE :BEGIN语句序列n+1 END ENDCASE功能:根据表达式的值与表达式1到 表达式n中的每一个表达式的值相比较,来选择执行n1个语句序列中的一个语句序列。例 编程序Chapter04Month.pro,输入1月到12月中的任意一个月份数字,输出该月份的英文单词。程序如下:; Chapter04Month.proPRO Chapter04MonthREAD, PROMPT=请输入月份(1 , . , 12):, mCASE m of 1 : PRINT, January & 2 :
4、 PRINT, February 3 : PRINT, March & 4 : PRINT, April 5 : PRINT, May & 6 : PRINT, June 7 : PRINT, July & 8 : PRINT, August 9 : PRINT, September & 10 : PRINT, October 11 : PRINT, November & 12 : PRINT, December ELSE : PRINT, 输入的月份无效! ENDCASEEND例 设计程序Chapter04MS6Function.pro,要求从键盘任意输入一个值x,计算并输出函数 f (x)
5、 的值,程序如下。其中f(x)为:; Chapter04MS6Function.proPRO Chapter04MS6FunctionREAD, PROMPT=请输入X = ?, xCASE 1 of x LT 0: y = 2 * x + 1 x LT 1: y = 3 * x + 2 x LT 2: y = 4 * x +3 x LT 3: y = 5 * x + 4 x LT 4: y = 6 * x + 7 ELSE: y = 8 * x * x + 1ENDCASEPRINT, f ( x ) = , yEND是指在程序执行过程中,根据实际需要,程序中的某一段程序需要循环是指在程序执
6、行过程中,根据实际需要,程序中的某一段程序需要循环执行若干次,具有这种结构的程序称为循环结构程序。执行若干次,具有这种结构的程序称为循环结构程序。如果某个程序中有语句序列如果某个程序中有语句序列A A,该语句序列,该语句序列A A要根据指定条件表达式的值循环执行,要根据指定条件表达式的值循环执行,直到条件表达式的值为假为止。显然语句序列直到条件表达式的值为假为止。显然语句序列A A在程序执行过程中,在程序执行过程中, 要循环执行若要循环执行若干次。循环结构的流程图可以用图干次。循环结构的流程图可以用图4.1.3.14.1.3.1表示表示格式:格式:WHILE WHILE 表达式表达式 DO D
7、O 语句语句 格式:格式:WHILE WHILE 表达式表达式 DO BEGIN DO BEGIN语句序列语句序列A A ENDWHILE ENDWHILE功能:根据表达式的值,循环执行语句序列功能:根据表达式的值,循环执行语句序列A A若干次。若干次。例1设计程序Chapter04Sum1000.pro,计算并输出1 + + 1000。程序为:; Chapter04Sum1000.proPRO Chapter04Sum1000sum = 0L & i = 1WHILE i LE 1000 DO BEGINsum = sum + i & i+ENDWHILEPRINT, 1 + 2 + + 1
8、000 = , sumEND格式:格式:CONTINUECONTINUE功能:在循环语句中,用于终止本次循环,转向功能:在循环语句中,用于终止本次循环,转向WHILEWHILE进行下一次循环。进行下一次循环。格式:格式:WHILE WHILE 表达式表达式1 DO BRGIN1 DO BRGIN语句序列语句序列1 1IF IF 表达式表达式2 THEN BEGIN2 THEN BEGIN语句序列语句序列2 2CONTINUECONTINUEENDIFENDIF语句序列语句序列3 3ENDWHILEENDWHILE例例 计算并输出计算并输出2 + 4 + + 10002 + 4 + + 1000
9、,设计程序如下:,设计程序如下:; Chapter04SumEven1000.pro; Chapter04SumEven1000.proPRO Chapter04SumEven1000PRO Chapter04SumEven1000sum = 0L & sum = 0L & i i = 1 = 1WHILE WHILE i i LE 1000 DO BEGIN LE 1000 DO BEGINIF IF i i MOD 2 THEN BEGIN MOD 2 THEN BEGINi i+ & CONTINUE+ & CONTINUEENDIFENDIFsum = sum + sum = sum
10、+ i i & & i i+ENDWHILEENDWHILEPRINT, 2+4+ +1000 =, sumPRINT, 2+4+ +1000 =, sumENDEND格式:BREAK功能:用在循环语句中。用于无条件退出包含该BREAK语句的最内层循环,转向执行该层循环语句ENDWHILE后面的语句。WHILE和BREAK的组合格式为:格式:WHILE 表达式1 DO BEGIN语句序列1IF 表达式2 THEN BEGIN语句序列2BREAKENDIF语句序列3ENDWHILE例 编程序Chapter04MSum.pro,要求从键盘任意输入两个数,计算并输出这两个数的和;然后询问是否重复执行
11、上述操作,直到不愿意执行为止。; Chapter04MSum.proPRO Chapter04MSumyn = WHILE 1 DO BEGIN READ,PROMPT=请输入X=, x READ,PROMPT=请输入Y=, y PRINT,x,+,y,=, x+y READ,PROMPT=继续吗?(Y/N):, yn IF STRUPCASE(yn) EQ Y THEN BEGINCONTINUE ENDIF ELSE BEGINBREAK ENDELSEENDWHILEEND格式1:FOR 变量 = 初值,终值 ,步长 DO 语句格式2:FOR 变量 = 初值,终值 ,步长 DO BEGI
12、N语句序列A ENDFOR功能:用变量来控制循环次数,使序列A循环执行指定的次数。例 编程序Chapter04Graphics.pro,用FORENDFOR语句输出下面图形,其中最底层为15个*。程序如下:; Chapter04Graphics.pro; Chapter04Graphics.proPRO Chapter04GraphicsPRO Chapter04Graphics FOR FOR i i = 1, 15 DO BEGIN = 1, 15 DO BEGIN Ss=REPLICATE( Ss=REPLICATE(* *, , i i) ) PRINT, Ss PRINT, Ss E
13、NDFOR ENDFORENDEND* * * AToJ.pro AToX.pro AToJ.pro AToX.pro * * * c = STRING(65B) = A c = STRING(65B) = A嵌套格式:WHILE WHILE 表达式表达式1 DO BEGIN1 DO BEGIN语句序列语句序列1 1WHILE WHILE 表达式表达式2 DO BEGIN2 DO BEGIN语句序列语句序列2 2WHILE WHILE 表达式表达式3 DO BEGIN3 DO BEGIN语句序列语句序列3 3ENDWHILEENDWHILEENDWHILEENDWHILE ENDWHILEEN
14、DWHILE例例 编程序编程序Chapter04Table99.proChapter04Table99.pro,输出下列九九乘法表。程序如下:,输出下列九九乘法表。程序如下:1 1* *1=11=11 1* *2=2 22=2 2* *2=42=41 1* *3=3 23=3 2* *3=6 33=6 3* *3=93=91 1* *4=4 24=4 2* *4=8 34=8 3* *4=12 44=12 4* *4=164=161 1* *5=5 25=5 2* *5=10 35=10 3* *5=15 45=15 4* *5=20 55=20 5* *5=255=251 1* *6=6 2
15、6=6 2* *6=12 36=12 3* *6=18 46=18 4* *6=24 56=24 5* *6=30 66=30 6* *6=366=361 1* *7=7 27=7 2* *7=14 37=14 3* *7=21 47=21 4* *7=28 57=28 5* *7=35 67=35 6* *7=42 77=42 7* *7=497=491 1* *8=8 28=8 2* *8=16 38=16 3* *8=24 48=24 4* *8=32 58=32 5* *8=40 68=40 6* *8=48 78=48 7* *8=56 88=56 8* *8=648=641 1*
16、*9=9 29=9 2* *9=18 39=18 3* *9=27 49=27 4* *9=36 59=36 5* *9=45 69=45 6* *9=54 79=54 7* *9=63 89=63 8* *9=72 99=72 9* *9=819=81; Chapter04Table99.pro; Chapter04Table99.proPRO Chapter04Table99PRO Chapter04Table99i i = 1 = 1WHILE WHILE i i LT 10 DO BEGIN LT 10 DO BEGINj = 1j = 1WHILE j LE WHILE j LE i
17、 i DO BEGIN DO BEGINPRINT,jPRINT,j, ,* *, ,i i,=,=,i i* *j, FORMAT=(4X,I1,1X,A1,1X,I1,1X,A1,1X,I2,$)j, FORMAT=(4X,I1,1X,A1,1X,I1,1X,A1,1X,I2,$)j = j +1j = j +1ENDWHILEENDWHILEPRINT, FORMAT = ( / ) PRINT, FORMAT = ( / ) i i = = i i +1 +1ENDWHILEENDWHILEENDEND例例 编程序编程序Chapter04Table993.proChapter04Tab
18、le993.pro,输出九九乘法表。程序如下:,输出九九乘法表。程序如下:; Chapter04Table993For.pro; Chapter04Table993For.proPRO Chapter04Table993ForPRO Chapter04Table993For FOR FOR i i=1, 9 DO BEGIN=1, 9 DO BEGIN FOR j = 1, FOR j = 1, i i DO BEGIN DO BEGIN PRINT, j, PRINT, j,* *, ,i i,=,=,i i* *j,FORMATj,FORMAT=(4X,I1,1X,A1,1X,I1,1X,
19、A1,1X,I2,$)=(4X,I1,1X,A1,1X,I1,1X,A1,1X,I2,$) ENDFOR ENDFOR PRINT, FORMAT=( / ) PRINT, FORMAT=( / ) ENDFOR ENDFORENDENDalgorithm.proalgorithm.proAlgorithmAlgorithm系统编程分析系统编程分析.doc.docTestRunTime1.pro ; TestRunTime2.proTestRunTime1.pro ; TestRunTime2.pro例例 编写自定义函数编写自定义函数FactorialFactorial(n n)= n!= n
20、!,计算并输出,计算并输出0 n0 n的阶乘的阶乘; Factorial; FactorialFUNCTION Factorial, nFUNCTION Factorial, ny = 1LLy = 1LLIF n NE 0 THEN BEGINIF n NE 0 THEN BEGINFOR FOR i i = 1, n DO BEGIN = 1, n DO BEGINy = y y = y * * i iENDFORENDFORENDIFENDIFRETURN, yRETURN, yENDEND; Factorialn.pro; Factorialn.proPRO PRO Factorial
21、NFactorialNREAD, PROMPT=READ, PROMPT=输入一个整数输入一个整数:, n:, nFOR FOR i i = 0, n DO BEGIN = 0, n DO BEGINPRINT, PRINT, i i , ! = , Factorial ( , ! = , Factorial ( i i ) )ENDFORENDFORENDEND定义参数应该有以下要求:定义参数应该有以下要求:参数一般要有确定的顺序和确定的类型。参数一般要有确定的顺序和确定的类型。参数在定义时可以没有确定的值,而只需要定义其类型和位置。参数在定义时可以没有确定的值,而只需要定义其类型和位置。参
22、数在定义时可以是变量、数组、结构、指针或对象。参数在定义时可以是变量、数组、结构、指针或对象。参数的使用一般是在函数和过程的相互调用时,参数的使用应该参数的使用一般是在函数和过程的相互调用时,参数的使用应该有以下要求:有以下要求:参数在使用时,一般是必选项。参数在使用时,一般是必选项。参数在使用时,可以是有确定值的常量、变量、函数、数组、参数在使用时,可以是有确定值的常量、变量、函数、数组、结构、指针或对象或者由它们组成的有确定值的表达式。结构、指针或对象或者由它们组成的有确定值的表达式。参数在使用时,必须先定义,再使用。参数在使用时,必须先定义,再使用。参数在使用时,参数的个数,类型和顺序要
23、和定义时保持一致。参数在使用时,参数的个数,类型和顺序要和定义时保持一致。参数是在函数和过程相互调用时,进行相互传输和交换的数据。参数是在函数和过程相互调用时,进行相互传输和交换的数据。定义关键字应该有以下要求:定义关键字应该有以下要求:关键字一般要有确定的类型。关键字一般要有确定的类型。关键字的顺序一般是任意的。关键字的顺序一般是任意的。关键字在定义时可以没有确定的值,而需要确定其类型。关键字在定义时可以没有确定的值,而需要确定其类型。关键字在定义时可以是变量、数组、结构、指针或对象。关键字在定义时可以是变量、数组、结构、指针或对象。关键字的使用一般是在函数和过程的相互调用时,使用关键字应该
24、有以下要求:关键字的使用一般是在函数和过程的相互调用时,使用关键字应该有以下要求:关键字在使用时,一般是可选项。关键字在使用时,一般是可选项。关键字在使用时,可以是有确定值的常量、变量、函数、数组、结构、指针或对象关键字在使用时,可以是有确定值的常量、变量、函数、数组、结构、指针或对象或者由它们组成的有确定值的表达式。或者由它们组成的有确定值的表达式。关键字在使用时,必须先定义,再使用。关键字在使用时,必须先定义,再使用。关键字在使用时,其类型要和定义时保持一致。关键字在使用时,其类型要和定义时保持一致。关键字在使用时,其个数可以比定义时少。关键字在使用时,其个数可以比定义时少。关键字在使用时
25、,其顺序可以和定义时不一致,而且其顺序是可以任意的。关键字在使用时,其顺序可以和定义时不一致,而且其顺序是可以任意的。关键字是在函数和过程相互调用时,进行相互传输和交换的数据或者进行运行环境关键字是在函数和过程相互调用时,进行相互传输和交换的数据或者进行运行环境设置设置程序的相互调用程序的相互调用MyFunctionFileMyFunctionFile( ( 实参实参1 1,实参,实参n n ,实字,实字1 1,实字,实字n)n)MyProcedureFileMyProcedureFile,实参,实参1 1,实参,实参n n ,实字,实字1 1,实字,实字n n程序的相互调用程序的相互调用程序
26、的嵌套调用是指在第一个过程调用第二个过程时,允许第二个过程继续调用第程序的嵌套调用是指在第一个过程调用第二个过程时,允许第二个过程继续调用第三个过程,依次下去有限次调用,这种关系称为过程的嵌套调用。三个过程,依次下去有限次调用,这种关系称为过程的嵌套调用。IDL6.4IDL6.4系统允许过系统允许过程嵌套调用的层数没有限制。程序嵌套用的示意图如图程嵌套调用的层数没有限制。程序嵌套用的示意图如图Chapter04CubeVolumeMain.pro Chapter04CubeVolume.proChapter04CubeVolumeMain.pro Chapter04CubeVolume.pro全局变量和局部变量全局变量和局部变量 Chapter04SetPeople.pro Chapter04GetPeople.pro Chapter04SetPeople.pro Chapter04GetPeople.pro 8 88 8 IDLIDL提供了提供了4141种颜色表,可种颜色表,可用不带参数的用不带参数的LOADCTLOADCT命令命令装入指定的颜色装入指定的颜色表。表。LOADCT, 20LOADCT, 20 ; ; 画圆画圆 (x-100)2 + (y-100)2 =1002(x-100)2 + (y-100)2 =1002