You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Commodore 64版Kyan Pascal编译错误求助:数组下标异常及byte类型问题

问题解决与修正后的代码

错误1:数组索引错误("Too many indices on the closing bracket of a[t]")

Kyan Pascal对标识符大小写不敏感,你的generatedata过程中局部变量A(integer类型)覆盖了全局数组变量a。编译器将代码中的a[t]识别为对整数变量A使用索引操作,这属于非法语法,因此报错。

解决方法:

  • 重命名局部变量A为其他名称(比如idxA),避免与全局数组a冲突;
  • 同时修正bubblesort过程中同样的大小写问题:将A[i]、A[j]改为a[i]、a[j],统一用小写a避免混淆。

错误2:不支持byte类型("Type identifier expected")

Kyan Pascal没有内置byte类型,你已经定义的btyp = 1 .. 255子界类型可以直接替代byte;如果需要0-255的范围,只需将子界调整为0 .. 255即可。

额外代码问题修正

原代码中generatedata过程的随机交换逻辑无效:R := a[a];是错误操作,正确的随机交换数组元素逻辑应为交换a[idxA]和a[idxB]的值。


修正后的完整代码

Program sort;
Type btyp = 1 .. 255;
Var a : array [1..100] of integer;

Procedure generatedata;
Var t     : btyp;
    idxA, idxB, temp : integer;
Begin
  For t:= 1 to 100 do a[t] := t;
  For t := 1 to 255 do begin
    idxA := random * 100 + 1;  // 生成1-100的有效数组索引
    idxB := random * 100 + 1;
    temp := a[idxA];
    a[idxA] := a[idxB];
    a[idxB] := temp;
  End;
End;

Procedure bubblesort;
Var i,j,k : integer;
Begin
  For i := 1 to 99 do begin
    for j := i to 100 do begin
      If a[i] > a[j] then begin
        k := a[i];
        a[i] := a[j];
        a[j] := k;
      End;
    End;
  End;
End;

Procedure showdata;
Var i : integer;
Begin
  For i := 1 to 100 do begin
    Write(a[i]:3,' ');
  End;
End;

Begin
  Write(chr(147));
  Generatedata;
  Bubblesort;
  Showdata;
End.

补充说明:

  • 随机数生成时增加+1,确保索引落在数组1-100的有效范围内;
  • 统一变量命名风格,彻底避免大小写导致的标识符冲突;
  • 修复了冒泡排序中变量大小写错误的问题。

内容的提问来源于stack exchange,提问作者John Guillory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:37:49