2013-03-12 3 views
-2

그래, 아직 프로그래밍의 기초를 배우고 있습니다. 아직도 의사 코드를 사용하는 법을 배웁니다. 나는 의사 코드 연산을 읽고, 연습했다. 나는 아직도 혼란스러워하고 강사에게 질문 할 때 나는 그녀를 괴롭히는 것처럼 느껴진다. 어쩌면 이럴 수는 없겠지만, 질문이있을 때마다 항상 느끼는 방식이지만 그 장벽을 깨기 위해 노력하고 있습니다. 그래서 저는 저의 책에서 모범을 보게 될 것이며 누군가가 저를 이해하도록 도울 수 있는지 몇 가지 질문을 할 것입니다.순차 파일

이 예제는 레코드를 순차 파일에 삽입하는 것에 대한 것입니다. 내 교과서는 다음과 같습니다 :

"성적 파일의 내용에 학생 이름에 따라 알파벳순으로 레코드가 있다고 가정합니다. 새 학생이 수업에 참여한다고 가정 해 봅시다. 이제 새 레코드를 삽입해야합니다. 각 필드에 데이터를 입력해야합니다 이 예에서는 학생의 이름과 학생의 점수에 대한 두 개의 필드가 있으므로 학생은 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 

I 라인 3과 4를 이해하지 않습니다

그런 다음, 의사 코드를 표현? Input이 프로그램에 삽입 될 것이라고 생각했고, 결과는 프로그램에 삽입 된 결과입니다.

또한 관계 연산자를 숫자와 함께 사용 했으므로 이제는 줄에 나와있는 것처럼 볼 때 혼란스러워집니다. 무엇을 말하려고합니까? 새로운 학생이 TempFile, Student 및 Score를 쓸 수 있는지 알려주는 (NewName < Student)가 있습니까?

첫 번째 While 루프에서 Inserted = 1을 지정하면 루프가 종료됩니다. 그런 다음 Inserted == 0 (16 행)을 반복합니다. while 루프를 반복 할 다른 새로운 학생이있는 경우에 대비됩니까? 나는 이것에 정말로 길을 잃었다.

결국, 우리는 왜 성적에 흠집을 복사해야합니까?

모든 질문에 유감스럽게 생각합니다. 혼란 스럽습니다. 수업을 온라인으로 진행하고 있습니다. 나는 스스로 가르쳐야하며, 아무도이 문제를 논의 할 사람이 없습니다.

참고 : 이것은 프로그래밍 논리를 더 잘 이해하려고 할 때 할당과는 아무런 관련이 없습니다.

+0

Dukeling, 편집 해 주셔서 감사합니다. – Mandygir

답변

0

당신은 시도하고 파일의 올바른 위치에 새 레코드를 작성하는 알고리즘을 개발,하지만 우리는 문제가 실행될 수 있습니다 대신, 우리는 제 2의 파일을 사용

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 
} 

그 일을 한 후, 임시 파일은 모두 같은 입력 파일로 기록하지만, 올바른 장소에 추가 된 새 레코드와 가 포함되어 있습니다.

나머지 의사 코드는 새 파일을 원래 파일로 다시 복사합니다.