顺序文件

时间:2013-03-12 20:59:42

标签: insert logic pseudocode saving-data

好的,所以我还在学习编程的基础知识。还在学习使用伪代码。我已阅读并练习编写伪代码操作。我仍然很困惑,当我向教练提问时,我觉得我很烦。也许事实并非如此,但每当我有疑问时,这就是我总能感受到的,但我正试图打破这个障碍。所以我要从我的书中给出一个例子,我会问一些问题,看看是否有人可以帮助我理解。

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

“我们假设成绩档案的内容根据学生姓名按字母顺序列出记录。假设一个新学生加入班级。现在我们需要插入一个新记录。我们必须将数据放在该记录的每个字段中。这个例子中,成绩有两个字段 - 一个用于学生的名字,一个用于学生的分数。所以我们要插入存储在名为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是将在程序中插入的内容,输出是它在程序中插入的结果。

另外,我已经将关系运算符与数字一起使用了,所以我现在感到困惑,因为我看到它们在第10行。它试图告诉我什么?是(NewName&lt; Student)告诉我是否有新学生要写TempFile,学生和分数?

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

最后,为什么我们要将划痕复制到成绩?

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

注意:这与作业无关,只是试图更好地理解编程逻辑。

1 个答案:

答案 0 :(得分: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
}

执行此操作后,临时文件包含与输入文件相同的所有记录,但是 将新记录添加到正确的位置。

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