有人可以帮我解决这个问题。所以,我需要构造一个矩阵,列数和行数也在矩阵的第一行,我做了例子,所以它更清晰。
4 3
1 2 3
5 6 7
9 10 8
1 11 13
其中m = 4(行数)且n = 3(列数) 这是文本文件的示例。这样的事情甚至可能吗?
编辑:
Program Feb;
const
max=100;
type
Matrix=array[1..max,1..max] of integer;
var datoteka:text;
m,n:integer;
counter:integer;
begin
assign(datoteka,'datoteka.txt');
reset(datoteka);
while not eoln(datoteka) do
begin
read(datoteka, m);
read(datoteka, n);
end;
repeat
read eoln(n)
until eof(datoteka)
write (m,n);
end.
我的代码不是很大的帮助,因为我不知道怎么写它。我了解所有基本知识,但只是没有想法如何将它们全部组合在一起。
答案 0 :(得分:1)
<强>更新强>
现在你已经更新了你的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
,其中。{1}}
您可以在运行时设置的尺寸。所以,要使用它,你需要知道
如何在FPC中声明dynamic array
如何在运行时设置数组的尺寸,一旦拾取它们
来自你的矩阵定义文件(提示:SetLength
是这样做的方法,但是
问题是,你如何将它用于多维数组?)
FPC dynamic array
从零开始的事实
1&amp;的答案2可以通过谷歌搜索找到,并有一个SO答案谷歌 应该找到哪个显示如何做到这两点。
最简单的应对方式
第3点是编写代码(根据Row
和Column
变量),就好像
矩阵被声明为array[1..NoOfRows, 1..NoOfColumns]
并减去
实际访问数组时,数组中的一个索引仅,如
Row := 3;
Column := 4;
Value := Matrix[Row - 1, Column - 1];
因此,尝试自己编写代码,看看你是如何进行的。如果您遇到困难,请务必发布一个新问题,其中显示您到目前为止所编写的代码,并准确解释它的错误。