使现代化
现在你已经更新了你的q,很明显你并没有以正确的方式进行,imo。
请看一下我为完成此任务而编写的代码,然后再看一下下面我的原始答案。
program Matrixtest;
uses
sysutils;
var
NoOfCols,
NoOfRows : Integer;
Source : TextFile;
Matrix : array of array of integer;
FileName : String;
Row,
Col : Integer; // for-loop iterators to access a single cell of the matrix
Value : Integer;
begin
// First, construct the name of the file defining the matrix
// This assumes that the file is in the same folder as this app
FileName := ExtractFilePath(ParamStr(0)) + 'MatrixDef.Txt';
writeln(FileName); // echo it back to the screen so we can see it
// Next, open the file
Assign(Source, FileName);
Reset(Source);
read(Source, NoOfRows, NoOfCols);
writeln('Cols: ', NoOfCols, 'Rows: ', NoOfRows);
SetLength(Matrix, NoOfCols, NoOfRows);
readln(source); // move to next line in file
// Next, read the array data
for Row := 1 to NoOfRows do begin
for Col := 1 to NoOfCols do begin
read(Source, Value);
Matrix[Col - 1, Row - 1] := Value;
end;
end;
// Display the array contents
for Row := 1 to NoOfRows do begin
for Col := 1 to NoOfCols do begin
writeln('Row: ', Row, ' contents', Matrix[Col - 1, Row - 1]);
end;
end;
Close(Source); // We're done with the file, so close it to release OS resources
readln; // this waits until you press a key, so you can read what's been displayed
end.
原始答案
这样的事情可能吗?
当然有可能,否则不管是谁设计了这项任务,我想这都是课程作业
某种程度上-不会有麻烦的。
正如@Ken White所指出的,SO不是一个代码编写服务,所以我不会向您展示执行您指定的操作的代码(我花了大约10分钟来编写和测试它),但下面应该告诉您自己编写它需要知道什么。
在程序中,可以使用二维
array
表示矩阵。快速
谷歌将确认FPC支持多维阵列,请参见
http://wiki.lazarus.freepascal.org/Multidimensional_arrays
如果你还不知道的话。
即便如此,正如你所描述的,作为“我的第一个程序”,这项任务确实非常困难,所以
我假设程序员对FPC了解得足够多,能够
执行更简单的任务,读取大小为
编译时已知
来自文本文件。
任务中的难点在于你应该阅读维度(数量
矩阵的行和列)
运行时
,来自包含矩阵内容的文件。
当然,一种(极其浪费的)方法是宣布
尺寸巨大的矩阵阵列,比实际中你所期望的任何东西都大,
使用上面链接的文章中的数组声明类型。
我想这项任务的答案是零分。
一个有用的解决方案的关键是FPC支持
dynamic arrays
谁的
可以在运行时设置的尺寸。所以,要利用这个,你需要知道
-
如何声明
dynamic array
在FPC中
-
如何在运行时设置阵列的维度,一旦您选择了它们
从矩阵定义文件(提示:
SetLength
是这样做的,但是
问题是,如何将其用于多维数组?)
-
FPC
动态数组
是基于零的
1的答案(&A);2可以通过google找到,有一个答案是SO answer google
应该找到显示如何同时执行这两项操作的方法。
最简单的应对方式
第3点是编写代码(根据
Row
和
Column
变量)就好像
矩阵声明为
array[1..NoOfRows, 1..NoOfColumns]
并减去
数组索引中的一个
只有
当您实际访问阵列时,如
Row := 3;
Column := 4;
Value := Matrix[Row - 1, Column - 1];
所以,试着自己写代码,看看你是怎么做的。如果你被卡住了,一定要贴一张
新
问题显示您迄今为止所编写的代码,并准确解释其错误。