2017-05-03 8 views
2

QB64に慣れていないので、ドキュメントが疎であるため問題があります。サブではないこと、不正な配列型がサブルーチンに渡されました

CALL sortArray(chars(), LENGTH) 

私は上記のREDIMを使用するのでと仮定しています:次の行に「サブに渡された不正な配列型」 -

TYPE character 
FName AS STRING * 12 
LName AS STRING * 12 
ID_Num AS INTEGER 
Year AS STRING * 2 
GPA AS DOUBLE 
END TYPE 
DIM LENGTH AS INTEGER 

LENGTH = 11 

REDIM chars(0) AS character 

CLS 

n$ = "names1.txt" 

OPEN n$ FOR INPUT AS #1 

k = -1 

WHILE (NOT (EOF(1))) 
k = k + 1 

REDIM _PRESERVE chars(k) AS character 
INPUT #1, chars(k).FName, chars(k).LName, chars(k).ID_Num, chars(k).Year, 
chars(k).GPA 

WEND 
CLOSE #1 


CALL sortArray(chars(), LENGTH) 

SUB sortArray (score() AS INTEGER, SIZE AS INTEGER) 

DIM x AS INTEGER 
DIM y AS INTEGER 
DIM COMPS AS INTEGER 

x = 0 
y = 0 
COMPS = SIZE - 1 

WHILE y < COMPS 
    x = 0 
    WHILE x < COMPS 
     IF score(x) > score(x + 1) THEN 
      CALL swap2(score(), x) 
     END IF 
     x = x + 1 
    WEND 
    y = y + 1 
    WEND 

    END SUB 



    SUB swap2 (score() AS INTEGER, x AS INTEGER) 
DIM temp AS INTEGER 
temp = score(x + 1) 
score(x + 1) = score(x) 
score(x) = temp 
END SUB 

私は、エラーを受信して​​いますそれを適切に処理していますが、私はそれをどのように修正するのか本当に分かりません。最終的には、ファイルを配列に読み込み、その配列をソートしてユーザに出力しようとしています。現在、私は実際に配列をソートする方法について固執しています。

ご協力いただければ幸いです。ありがとうございました!

+0

どのようなスコアを並べ替えようとしていますか? 'character'型にスコアプロパティはありません。あなたはGPAプロパティを並べ替えることを意味しますか? –

答えて

2

character型の要素を含む配列chars()を渡していますが、サブルーチンはタイプがINTEGERの配列を受け入れます。

必要なのはscore() AS character(より良い名前はchars() AS character)、任意の基準(たとえばIF score(x).GPA > score(x+1).GPA THEN ...)に基づいて並べ替えることができます。また、あなたのために物事を交換するbuilt-in SWAP statementがあります。そうする必要はありません。

1)のUDTが正しく宣言されています

0

は、ここで(大きく変更された)あなたのコードです。 2)リダイムは、$ dynamicが宣言されている場合にのみ機能します。 3)「バブルソート」が短い。

REM $DYNAMIC 
TYPE character 
    FName AS STRING * 12 
    LName AS STRING * 12 
    ID_Num AS INTEGER 
    Year AS STRING * 2 
    GPA AS DOUBLE 
END TYPE 
DIM chars(0) AS character 
n$ = "names1.txt" 
OPEN n$ FOR INPUT AS #1 
WHILE NOT EOF(1) 
    k = k + 1 
    REDIM _PRESERVE chars(k) AS character 
    INPUT #1, chars(k).FName, chars(k).LName, chars(k).ID_Num, chars(k).Year, chars(k).GPA 
WEND 
CLOSE #1 
CALL SortArray(chars(), k) 
END 
SUB SortArray (score() AS character, SIZE AS INTEGER) 
' bubble sort 
FOR x = 1 TO SIZE 
    FOR y = x + 1 TO SIZE 
     IF score(x).GPA > score(y).GPA THEN 
      SWAP score(x), score(y) 
     END IF 
    NEXT 
NEXT 
END SUB 
関連する問題