ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

学习 Pascal:从程序结构到数据类型的完整入门指南(learnxinyminutes-docs 实战详解)

学习 Pascal:从程序结构到数据类型的完整入门指南(learnxinyminutes-docs 实战详解) 文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载Pascal 是 Niklaus Wirth 于 1968–69 年设计、1970 年发布的命令式与过程式编程语言它以结构化编程和数据结构化理念著称长期被用于教学与工程实践。本指南以 learnxinyminutes-docs 仓库中的 es/pascal.md 西班牙语译文其英文原文为 pascal.md为骨架逐行拆解 Pascal 的程序解剖结构、变量声明、全部标准数据类型、运算规则以及函数与过程的参数传递机制。读完本文你将能够独立读懂并编写一个完整的 Pascal 程序从program头到end.收尾从const/type/var声明区到begin…end主程序块并掌握递归函数与按引用/按值传参的实战写法。Pascal 语言简介与编译运行前提Pascal 是一门大小写不敏感case-insensitive的命令式、过程式语言其设计目标是小而高效通过强制结构化编程与数据结构化来培养良好编程习惯。语言以法国数学家、哲学家与物理学家布莱兹·帕斯卡Blaise Pascal命名。要编译并运行 Pascal 程序需要一个免费的 Pascal 编译器最常用的是 Free Pascal。仓库中 es/pascal.md 明确给出了这一前提ru/pascal.md 还补充了面向 .NET 平台的 PascalABC.NET 作为备选编译环境。本文所有示例均以 Free Pascal 所支持的经典 Pascal 方言为准例如string类型属于多数编译器内置的扩展而非 ISO 标准类型这一细节下文会专门说明。Pascal 程序的基本解剖结构在动手写代码前先理解一个 Pascal 程序的强制骨架。以下是 es/pascal.md 提供的完整程序解剖示例//Anatomía de un programa en Pascal //Esto es un comentario { Esto es un comentario multilínea } //nombre del programa program learn_pascal; //-- no olvides el punto y coma const { Aquí es donde se debe declarar valores constantes. } type { Aquí es donde se debe declarar un tipo de datos personalizado } var { aquí es donde se debe declarar una variable } //área principal del programa begin { área para declarar su instrucción } end. // El final de un área principal del programa debe requerir un símbolo .要点如下注释//表示单行注释{ ... }表示多行注释部分编译器也支持(* ... *)。程序头program关键字后跟程序名行尾必须有分号;漏掉分号是初学者最常见的编译错误。声明区顺序依次为const常量、type自定义数据类型、var变量每个区段内缩进书写声明。主程序块begin ... end.包裹实际指令整个程序结束的end后必须跟句点.而不是分号——这是区分程序结束与函数/过程结束的关键语法信号函数/过程结束用end;。仓库中 th/pascal.md 将begin...end.明确比作其他语言的main function指出程序从此处开始执行并强调 Pascal 对代码结构非常严格。变量声明的三种等价写法Pascal 要求所有变量在使用前先声明且提供了多种风格。以下是 es/pascal.md 给出的三种方式//declarando variable //puedes hacer esto var a:integer; var b:integer; //o esto var a : integer; b : integer; //o esto var a,b : integer;逐条声明每行一个var 变量名:类型;。分组声明用一个var关键字开头后续每行声明一个变量。逗号合并同一类型的多个变量可以写在同一行用逗号分隔如var a,b : integer;。pt-br/pascal.md 的译文进一步强调所有变量声明都必须放在var块中不能像某些语言那样在使用处临时引入变量。这也是 Pascal 强调先声明、后使用的结构化纪律。数据类型与运算详解完整程序 Learn_More本节以 es/pascal.md 中的Learn_More程序为完整载体覆盖常量、自定义类型、全部常见数据类型与运算符。该程序结构完整program、const、type、var、主块Begin...End.是理解 Pascal 类型系统的绝佳范本。常量声明constconst PI 3.141592654; GNU GNU No Es Unix; // las constantes se nombran convencionalmente usando CAPS (mayúscula) // sus valores son fijos y no se pueden cambiar durante el tiempo de ejecución // tiene cualquier tipo de datos estándar (enteros, reales, booleanos, characteres, cadenas)常量名约定使用全大写命名便于与变量区分。常量值在编译期固定运行时不可修改。常量可以持有任意标准类型整数、实数、布尔、字符、字符串。自定义类型typetype ch_array : array [0..255] of char; // los son nuevos tipos que especifican la longitud y el tipo de datos // esto define un nuevo tipo de datos que contiene 255 caracteres // (esto es funcionalmente equivalente a una variable string[256]) md_array : array of array of integer; // los arreglos anidados son equivalentes a los arreglos multidimensionales // puede definir arreglos de longitud cero (0) que son de tamaño dinámico // esta es una matriz bidimensional de enterosarray [0..255] of char定义一个含 256 个字符元素的新类型ch_array它功能上等价于string[256]。array of array of integer是嵌套数组等价于多维数组array of ...形式的零长度数组即动态数组dynamically sized array此处声明的是一个二维整数矩阵类型。变量声明与完整数据类型表以下代码段见 es/pascal.md集中展示了 Pascal 的核心数据类型及其精确取值范围强烈建议对照注释逐行阅读//Declarando variables var int, c, d : integer; // Tres variables que contienen números enteros. // los enteros son de 16 bits y están limitados al rango [-32,768..32,767] r : real; // una variable que contiene un número real como tipos de datos // el rango de los reales pueden variar entre [3.4E-38..3.4E38] bool : boolean; // una variable que contiene un valor booleano (True/False) ch : char; // una variable que contiene un valor de carácter // Las variables char se almacenan como tipos de datos de 8 bits, por lo que no hay UTF str : string; // una variable no estándar que contiene un valor de cadena // Las cadenas son una extensión incluida en la mayoría de los compiladores de Pascal. // se almacenan como una matriz de caracteres con una longitud predeterminada de 255. s : string[50]; // una cadena con longitud máxima de 50 caracteres. // puede especificar la longitud de la cadena para minimizar el uso de memoria my_str: ch_array; // Puedes declarar variables de tipos personalizados. my_2d : md_array; // Las matrices de tamaño dinámico deben dimensionarse antes de que puedan usarse. // tipos de datos enteros adicionales b : byte; // rango [0..255] shi : shortint; // rango [-128..127] smi : smallint; // rango [-32,768..32,767] (entero estándar) w : word; // rango [0..65,535] li : longint; // rango [-2,147,483,648..2,147,483,647] lw : longword; // rango [0..4,294,967,295] c : cardinal; // longword i64 : int64; // rango [-9223372036854775808..9223372036854775807] qw : qword; // rango [0..18,446,744,073,709,551,615] // tipos reales adicionales rr : real; // rango depende de la plataforma (i.e., 8-bit, 16-bit, etc.) rs : single; // rango [1.5E-45..3.4E38] rd : double; // rango [5.0E-324 .. 1.7E308] re : extended; // rango [1.9E-4932..1.1E4932] rc : comp; // rango [-2E641 .. 2E63-1]值得注意的细节标准integer为 16 位范围[-32,768..32,767]这是经典 Pascal 的默认整型smallint与之等同。若需要更大范围需显式使用longint、int64等。char是 8 位数据类型仅支持单字节字符因此没有 UTF/Unicode 支持。string并非 ISO 标准类型而是多数 Pascal 编译器的扩展实现底层是字符数组默认最大长度 255string[50]可显式限定最大长度以节省内存。real的取值范围依赖平台8 位、16 位等平台实现不同而single/double/extended/comp提供了明确的精度与范围选择。自定义类型如ch_array、md_array声明后即可作为普通类型使用体现 Pascal 的强类型特性——pt-br/pascal.md 特别注明Pascal 是一门强类型语言。赋值、算术与逻辑运算Begin主块内的操作演示见 es/pascal.mdBegin int : 1;// como asignar un valor a una variable r : 3.14; ch : a; str : manzana; bool : true; //pascal no es un lenguaje sensible a mayúsculas y minúsculas //operación aritmética int : 1 1; // int 2 sobrescribiendo la asignacion anterior int : int 1; // int 2 1 3; int : 4 div 2; //int 2 operación de división donde el resultado será redondeado. int : 3 div 2; //int 1 int : 1 div 2; //int 0 bool : true or false; // bool true bool : false and true; // bool false bool : true xor true; // bool false r : 3 / 2; // un operador de división para reales r : int; // Puede asignar un entero a una variable real pero no a la inversa c : str[1]; // asigna la primera letra de str a c str : hola mundo; // combinando cadenas my_str[0] : a; // asignación de matriz necesita un índice setlength(my_2d,10,10); // inicializa matrices de tamaño dinámico: matriz 10 × 10 for c : 0 to 9 do // los arreglos comienzan en 0 y terminan en longitud - 1 for d : 0 to 9 do // Para los contadores de bucle hay que declarar variables. my_2d[c,d] : c * d; // aborda las matrices multidimensionales con un único conjunto de corchete End.逐条解读赋值运算符是:与比较运算符严格区分这是 Pascal 最显著的语法特征之一。整数除法用div结果向下取整3 div 2 1、1 div 2 0实数除法用/3 / 2 1.5。逻辑运算or、and、xor分别对应或、与、异或。类型兼容方向整数可以赋给实数变量自动提升反之不行。字符串下标从 1 开始str[1]取第一个字符注意与数组从 0 开始不同字符串可用拼接。数组下标从 0 开始my_str[0] : a按索引逐元素赋值数组不能整体赋值。动态数组必须先setlength再使用setlength(my_2d,10,10)将二维动态数组初始化为 10×10。for循环计数器必须是已声明的变量且数组遍历范围为0..length-1多维数组用单一对方括号[c,d]寻址而非[c][d]。函数与过程参数传递机制与递归最后一个完整示例Functional_Programming见 es/pascal.md演示了 Pascal 的函数、过程、递归以及按引用传参与按值传参的本质区别program Functional_Programming; Var i, dummy : integer; function recursion_factorial(const a: integer) : integer; { calcula recursivamente el factorial del parámetro entero a } // Declare variables locales dentro de la función. // e.g.: // Var // local_a : integer; Begin If a 1 Then // devuelva valores de las funciones asignando un valor al nombre de la función recursion_factorial : a * recursion_factorial(a-1) Else recursion_factorial : 1; End; // termine una función usando un punto y coma después de la instrucción End. procedure obtener_entero(var i : integer; dummy : integer); { obten la entrada del usuario y almacenarla en el parámetro entero i. los parámetros que preceden a var son variables, lo que significa que su valor puede cambiar fuera del parámetro. Los parámetros de valor (sin var) como dummy son estáticos y los cambios realizados dentro del alcance de la función/procedimiento no afectan la variable que se pasa como parámetro } Begin write(Escriba un entero: ); readln(i); dummy : 4; // dummy no cambiará el valor fuera del procedimiento End; Begin // bloque de programa principal dummy : 3; obtener_entero(i, dummy); writeln(i, ! , recursion_factorial(i)); // muestra i! writeln(dummy , dummy); // siempre muestra 3 ya que dummy no ha cambiado. End.函数function返回值机制函数通过function 名字(参数列表): 返回类型;声明示例中recursion_factorial(const a: integer): integer接收一个整数参数并返回整数。返回值通过把值赋给函数名实现在函数体内写recursion_factorial : 表达式即完成返回本示例用a * recursion_factorial(a-1)实现递归阶乘基线条件a 1时返回1。函数/过程可以声明局部变量在函数体内的Var块声明但注意局部变量与返回值机制相互独立。函数以End;结尾带分号与主程序的End.带句点形成对照。函数内可声明局部变量如注释所示local_a : integer其作用域仅限于该函数。const参数修饰符表示参数在函数内不可修改适合只读传入的数值。过程procedure与参数传递var 引用 vs 值传递obtener_entero(var i: integer; dummy: integer)过程完整演示了两种传参方式var前缀参数 按引用传递by referencei在过程内被readln(i)写入调用结束后i的新值会回传给调用方——这是 Pascal 中过程向外输出结果的标准手段。无var的参数 按值传递by valuedummy在过程内被赋为4但这一改动不影响过程外的变量。主程序中dummy : 3后调用过程最后writeln(dummy , dummy)依然输出3直观验证了值传递的隔离性。输入输出write / readln / writelnwrite(Escriba un entero: )向终端输出提示文本不换行。readln(i)读取用户输入并存入变量i因为i是按引用传入的读取结果能带出过程。writeln(i, ! , recursion_factorial(i))输出并换行多个参数用逗号分隔数值会被自动转换为文本输出。在仓库中继续深入文档族与工程规范本指南对应的完整可运行代码位于仓库根目录的 pascal.md英文原版frontmatter 声明name: Pascal、filename: learnpascal.pas即网站可下载的代码文件名其多语言译文分布在 es/pascal.md西班牙语、pt-br/pascal.md巴西葡萄牙语、ru/pascal.md俄语额外补充了 PascalABC.NET 编译器选项与 th/pascal.md泰语。对照阅读各语言版本可以交叉印证类型范围、div//的语义以及var参数等关键结论的一致性。关于本文所引用文档的元数据格式可参考仓库的 CONTRIBUTING.md每个 Markdown 文件头部包含 YAML frontmattername、contributors、translators、filename等字段站点构建时会据此生成页面并聚合代码下载lint/frontmatter.py 中的校验脚本则规定了 frontmatter 允许的键集合与类型约束。内容风格上CONTRIBUTING.md 倡导以代码示例代替冗长叙述、面向有经验的程序员、使用 UTF-8 编码——这正是 pascal.md 系列文档采用大量带注释的完整程序来讲解语法的原因所在。若要在本地构建整个文档站点以查看渲染效果可参照 CONTRIBUTING.md 的流程克隆站点仓库并将本仓库嵌套至其source/docs/目录安装 Python 依赖后执行构建脚本并在本地 HTTP 服务预览。对于本指南更直接的实践路径是安装 Free Pascal 编译器将上文三个完整程序程序解剖、Learn_More、Functional_Programming分别保存为.pas文件编译运行逐步修改常量的值、改变div//的操作数、给dummy传不同参数以实际运行结果验证本文讲解的每一条规则。赞分享文档教程【免费下载链接】learnxinyminutes-docsCode documentation written as code! How novel and totally my idea!项目地址https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs点击查看免费下载相关推荐HTML5 入门实战从语法骨架到完整网页构建learnxinyminutes-docs 速览指南HTML5 入门实战从语法骨架到完整网页构建learnxinyminutes docs 速览指南 本指南以 learnxinyminutes docs 仓文档教程地理空间行业地图从Awesome Geospatial Companies看全球790公司分布格局地理空间行业地图从Awesome Geospatial Companies看全球790公司分布格局 地理空间行业正在经历前所未有的快速发展从卫星遥感、GIGIS文档learnxinyminutes-docs 德文版 Elixir 指南从基础类型到 Actor 并发的完整实战教程learnxinyminutes docs 德文版 Elixir 指南从基础类型到 Actor 并发的完整实战教程 本篇技术指南以本仓库 de/elixir.文档教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表