Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 181|回复: 6

pascal语法结构

[复制链接]

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
发表于 2024-6-23 00:23:09 | 显示全部楼层 |阅读模式
Functions/Procedures
在Pascal中, procedure是要执行的指令集,没有返回值, function是具有返回值的过程。 功能/程序的定义如下 -

  1. Function Func_Name(params...) : Return_Value;
  2. Procedure Proc_Name(params...);
复制代码


变量 (Variables)
变量定义放在以var关键字开头的块中,然后是变量的定义,如下所示:

  1. var A_Variable, B_Variable ... : Variable_Type;
复制代码


Pascal变量在函数的代码体外声明,这意味着它们不在begin和end对中声明,但它们在过程/函数的定义之后和begin关键字之前声明。 对于全局变量,它们在程序头之后定义。

回复

使用道具 举报

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
 楼主| 发表于 2024-6-23 00:34:23 | 显示全部楼层
  1. PROGRAM SimSS;
复制代码

pascal首行都是program开始,接程序名字
回复

使用道具 举报

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
 楼主| 发表于 2024-6-23 00:36:07 | 显示全部楼层
  1. {$UNITPATH ../Units/} {first tell compiler where our own units are located}


  2. USES {our own, generic ones:}
  3.      TypesAndConstants,
  4.      InputOutputUtils,
  5.      NumericalUtils,
  6.      {our drift-diffusion stuff:}  
  7.      DDTypesAndConstants,
  8.      TransferMatrix,
  9.      DDRoutines,
  10.      {and normal units:}
  11.      Math,  
  12.      StrUtils,
  13.      SysUtils;
复制代码
pascal语言的程序中,通过在程序的开头使用uses命令,说明所需要使用的单元
也就是pascal有些函数并不是开始就加载的,需要哪些就用哪些,有点像C语言的头文件

需要注意的是{$UNITPATH ../Units/} ,这个{$打头的语句不是注释,是告诉系统单元的目录在哪里
回复

使用道具 举报

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
 楼主| 发表于 2024-6-23 00:37:20 | 显示全部楼层
  1. VAR parameterFile : ShortString;

  2.         prev, curr, new : TState; {store the previous point in time, the current one and the new}
  3.         {curr: solved, stored, done, 1 time step ago
  4.         new: to be solved, latest time that was read}

  5.         stv : TStaticVars; {all variables that are calculated at the start of the simulation and then remain constant}

  6.         par : TInputParameters; {all input parameters}

  7.         VCount, MainIt, CountAcceptedSolutions : INTEGER;

  8.         quit_Voc, Conv_Main, acceptNewSolution : BOOLEAN;

  9.         uitv , log : TEXT; {the output files}

  10.         JVSim, JVExp : TJVList; {stores the current-voltage characteristics}
  11.    
  12.         MsgStr : ANSISTRING = ''; {Ansistrings have no length limit, init string to ''}
  13.        
  14.         StatusStr : ANSISTRING;
复制代码

定义全局变量,里面的格式是 变量名:数据类型
回复

使用道具 举报

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
 楼主| 发表于 2024-6-23 01:02:20 | 显示全部楼层
接下来直接看主函数部分
  1. BEGIN {main program}
  2.         Print_Welcome_Message(ProgName, version);
复制代码

看到里面调用了Print_Welcome_Message函数,这个函数就在DDRoutines单元中
打开DDRoutines单元 源文件 DDRoutins.pas,可以找到
  1. PROCEDURE Print_Welcome_Message(ProgName : TProgram; version : STRING);
  2. {Prints a welcome message, lists the authors and shows the name and verion of the program.}
  3. VAR strprogname : STRING;
  4. BEGIN
  5.     Str(ProgName, strprogname); {convert variable ProgName to a string}
  6.     WRITELN('Welcome to ',strprogname,' version ',version,'.');
  7.     WRITELN('Copyright (C) 2020, 2021, 2022, 2023, 2024, S. Heester, Dr T.S. Sherkar,');
  8.     WRITELN('Dr V.M. Le Corre, Dr M. Koopmans, F. Wobben,');
  9.     WRITELN('and Prof L.J.A. Koster, University of Groningen.');
  10.     WRITELN;
  11. END;
复制代码

回复

使用道具 举报

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
 楼主| 发表于 2024-6-23 09:44:32 | 显示全部楼层
   
  1. {if '-h' or '-H' option is given then display some help and exit:}
  2.     IF hasCLoption('-h') THEN Display_Help_Exit(ProgName);
  3.         writeln('参数是---------------------',parameterFile); {此时parameterFIle还没有定义}
  4.     Determine_Name_Parameter_File(parameterFile); {either default or user-specified file with all the parameters}
  5.         writeln('参数是---------------------',parameterFile); {simulation_setup.txt}
  6.     IF NOT Correct_Version_Parameter_File(parameterFile, version, TRUE, ProgName) THEN Stop_Prog('Version of SIMsalabim and '+parameterFile+' do not match.', EC_DevParCorrupt);
复制代码

从上面语句可以看出;
Determine_Name_Parameter_File(parameterFile)语句,给parameterFile进行了赋值,赋值为simulation_setup.txt,而这个文件则记录了参数文件。
这个函数使用SysUtils 单元中的 ParamStr() 函数获取命令行参数(这个函数具体怎么运作还没搞清楚,和主题算法无关,不做深究)

回复

使用道具 举报

374

主题

1167

帖子

3683

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3683
 楼主| 发表于 2024-6-23 12:14:16 | 显示全部楼层
接下来是初始化:
  1. {Initialisation:}
  2.     Read_Parameters(parameterFile, MsgStr, par, stv, ProgName); {Read parameters from input file}
  3.     Check_Parameters(stv, par, ProgName); {perform a number of chekcs on the paramters. Note: we need Vt}
  4.     Set_Number_Digits(par.limitDigits, SizeOf(myReal)); {limits number of digits in floating point}
  5.     Prepare_Log_File(log, MsgStr, par, version); {open log file}
  6.     IF par.autoTidy THEN Tidy_Up_Parameter_Files(parameterFile, FALSE, stv, par); {clean up file but don't exit!}
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2024-11-23 16:35 , Processed in 0.048145 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表