读取文本文件并从中构造矩阵,Pascal

读取文本文件并从中构造矩阵,Pascal,pascal,freepascal,Pascal,Freepascal,有人能帮我解决这个问题吗。所以,我需要构造一个矩阵,列和行的数量也在矩阵的第一行,我将做一个示例,这样它就更清晰了 4 3 1 2 3 5 6 7 9 10 8 1 11 13 其中m=4(行数)和n=3(列数) 这是一个文本文件的示例。这样的事情可能吗 编辑: 我的代码帮不了什么忙,因为我不知道怎么写。我知道所有的基本知识,但只是不知道如何把它们结合起来。更新 现在,你已经更新了你的q,很明显,你没有用正确的方式去做,imo 请看一看我为完成任务而编写的代码,然后再看下面我的原始答

有人能帮我解决这个问题吗。所以,我需要构造一个矩阵,列和行的数量也在矩阵的第一行,我将做一个示例,这样它就更清晰了

4 3  
1 2 3 
5 6 7 
9 10 8 
1 11 13
其中m=4(行数)和n=3(列数) 这是一个文本文件的示例。这样的事情可能吗

编辑:


我的代码帮不了什么忙,因为我不知道怎么写。我知道所有的基本知识,但只是不知道如何把它们结合起来。

更新

现在,你已经更新了你的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分钟来编写和测试它),但是下面应该告诉您自己编写它需要知道什么

在程序中,可以使用二维
数组
来表示矩阵。快速
谷歌将确认FPC支持多维阵列,看看你是否还不知道

即便如此,正如你所描述的,作为“我的第一个计划”,这项任务确实非常困难,所以 我将假设程序员对FPC有足够的了解,能够 执行更简单的任务,读取编译时已知大小的数组 从一个文本文件

任务中的难点在于你应该阅读维度(数量) 在运行时,从包含矩阵内容的文件中删除矩阵的行和列)

当然,这样做的一个(极其浪费)方法是宣布 矩阵阵列具有巨大的尺寸,比实际中所期望的任何尺寸都大, 使用上面链接的文章中的数组声明类型。 我想这项任务的答案是零分

一个有用的解决方案的关键是FPC支持
动态数组
,其 可以在运行时设置的尺寸。所以,要利用这个,你需要知道

  • 如何在FPC中声明
    动态数组

  • 如何在运行时设置数组的维度,一旦您选择了它们 从矩阵定义文件(提示:
    SetLength
    是执行此操作的方法,但是 问题是,如何将其用于多维数组?)

  • FPC
    动态数组
    是基于零的

  • 1和2的答案可以通过谷歌搜索找到,谷歌有一个答案 应该找到显示如何同时做到这两个方面的内容

    最简单的应对方式 第3点是编写代码(根据
    变量),就像 矩阵被声明为
    数组[1..NoOfRows,1..NoOfColumns]
    并减去 只有在实际访问数组时,才能从数组索引中选择一个,如中所示

    Row := 3;
    Column := 4;
    Value := Matrix[Row - 1, Column - 1];
    

    所以,试着自己写代码,看看你进展如何。如果您遇到了问题,请务必发布一个新的问题,显示您迄今为止编写的代码,并准确解释错误所在。

    欢迎使用Stack Overflow。这不是一个code/SQL/regex编写服务,在这里,您发布了一个需求列表和选择的语言,然后一个代码猴子为您编写代码。我们非常乐意提供帮助,但我们希望您首先自己努力解决问题。一旦你这样做了,你可以解释你的问题,包括你工作的相关部分,并提出一个具体的问题,我们会尽力帮助你。祝你好运。我把代码的所有部分都放进去了,我知道关于Pascal的所有基础知识。但我似乎不知道如何让所有的工作一起进行。首先,你真的应该在你的q中包含这些代码,这样可以避免读者猜测你知道什么和不知道什么。不管怎样,既然你已经展示了你的代码,我已经更新了我的答案来展示我将如何编写任务。我确实写了一个程序,我知道如何定义数组。我知道如何从文件中读取文本。从逻辑上讲,我想不出一个办法来解决这个问题。所有我需要的是帮助如何写一个while循环或直到重复循环。。。或任何其他使其工作的方法。我知道所有的基础知识,但我不是专业人士,我仍然是学习Pascal的学生。恕我直言,您更新的q表明您不知道为该任务声明数组的正确方法(请参阅我所说的零分)。无论如何,数组(矩阵)可以由两个
    填充,用于。。。do'循环,一个嵌套在另一个内。您也可以在。。。执行“循环”或a
    重复。。。在
    one.Btw之前,
    while
    repeat
    循环通常用于您事先不知道需要多少次迭代的情况,但在您的情况下,您可以这样做,因为必要的信息在文件中,所以您可以使用
    来代替
    循环。非常感谢,看起来很复杂:(.我不是很准确,我只是举了一个m和n的例子,行数和列数可能在1到100之间,所以我不知道提前迭代的次数。我只是想澄清一下:也许你误解了@MartynA的最后一句话。他说的“提前知道”是指“在进入循环时”。他不是指“在设计时”。所以,在进入循环时对于
    for循环
    ,在读取文件第一行中的值后,您的程序确切地知道要运行循环多少次,并且实际上无法更改循环内的循环控制变量(尽管您可以中断循环)
    Row := 3;
    Column := 4;
    Value := Matrix[Row - 1, Column - 1];