-2

好的,所以我还在学习编程的基础知识。还在学习使用伪代码。我已经阅读并练习过编写伪代码操作。我仍然很困惑,当我向老师提问时,我觉得我打扰了她。也许情况并非如此,但每当我有问题时,我总是会有这种感觉,但我正在努力打破这个障碍。所以我将举一个我书中的例子,我会提出一些问题,看看是否有人可以帮助我理解。

该示例是关于将记录插入到顺序文件中。我的教科书说:

“让我们假设成绩文件的内容按照学生姓名的字母顺序列出了记录。假设一个新学生加入了班级。现在我们需要插入一条新记录。我们必须在该记录的每个字段中放置数据。在这个例子中, Grades 有两个字段——一个用于学生的姓名,一个用于学生的分数。所以我们要插入存储在名为 NewName 和 NewScore 的变量中的值。这些值将由用户输入,并将插入到此文件中适当的地方,保持字母顺序。”

然后,它表达了伪代码:

1  Declare NewName As String
2  Declare NewScore As Integer
3  Open “grades” For Input As GivenFile
4  Open “scratch” For Output As TempFile
5  Write “Enter name and score for the new student:” 
6  Input NewName, NewScore
7  Set Inserted == 0
8  While (NOT EOF(GivenFile)) AND (Inserted == 0)
9    Read GivenFile, Student, Score 
10    If NewName < Student Then
11       Write TempFile, NewName, NewScore
12      Set Inserted = 1
13     End If
14   Write TempFile, Student, Score 
15 End While
16 If Inserted == 0 Then
17   Write TempFile, NewName, NewScore 
18 End If
19 While NOT EOF(GivenFile)
20   Read GivenFile, Student, Score 
21   Write TempFile, Student, Score
22 End While
23 Close GivenFile, TempFile 
24 Copy scratch onto grades

我不明白第 3 行和第 4 行,为什么一个是输入,另一个是输出?我认为 Input 是要插入程序的内容,而 output 是插入程序的结果。

另外,我只使用了数字的关系运算符,所以现在我在第 10 行看到它们时感到很困惑。它想告诉我什么?(NewName < Student) 是否告诉我是否有新学生要编写 TempFile、Student 和 Score?

在第一个 While 循环中给出一个 Inserted = 1,然后它结束循环。然后重复 Inserted == 0(第 16 行),这是否意味着万一有另一个新学生重复 while 循环?我真的迷路了。

最后,为什么我们必须从头开始复制到成绩上?

对于所有的问题,我很抱歉,我很困惑,我正在网上上课,我必须自学,我没有人可以讨论这个问题。

注意:这与赋值无关,只是想更好地理解编程的逻辑。

4

1 回答 1

0

您可能会尝试开发一种算法来将新记录写入文件中的正确位置,但我们遇到了问题:

while (more lines to read) {
   if new name comes after name in file {
       this might be the right place but I can't tell - depends what the 
       next name is but I have't read that yet - don't know what to do!
   } else {
       now it's too late, should have written new record earlier!
   }
}

相反,我们使用第二个文件,从中复制记录,在正确的时间插入新记录:

while (more lines to read) {
    if name in file comes after new name, and I have not yet written new name {
        write new name and score to temp file
    }
    copy name and score from input file to temp file
}

之后,临时文件包含与输入文件相同的所有记录,但在正确的位置添加了新记录。

其余的伪代码只是将新文件复制回原始文件。

于 2013-03-13T16:05:56.010 回答