DICHIARAZIONE PROBLEMA : stampa gli elementi che differiscono tra i seguenti due gruppi di dati ordinati a sinistra e a destra:
A A
B C
C D
D E
G F
H EOF
EOF
La soluzione proposta dovrebbe essere stampata:
B E F G H
Ecco la mia implementazione basata sui dati di questo algoritmo in pseudo-codice. Sembra che produca i risultati desiderati, quindi le mie domande sono:
- Ci sono dei difetti in termini di logica, efficienza o qualsiasi altra cosa che usi questo approccio?
- Questo approccio si chiamerebbe progettazione basata sui dati o sarebbe classificato con un nome diverso?
Ecco lo pseudo-codice:
METHOD PRINT_DIFFERENCES
LEFT_DATA_NOT_EOF = CALL READ_LEFT_RECORD()
RIGHT_DATA_NOT_EOF = CALL READ_RIGHT_RECORD()
WHILE LEFT_DATA_NOT_EOF AND RIGHT_DATA_NOT_EOF
WHILE LEFT_DATA_NOT_EOF AND RIGHT_DATA_NOT_EOF AND LEFT_KEY IS LESS THAN RIGHT_KEY
PRINT LEFT_KEY
LEFT_DATA_NOT_EOF = CALL READ_LEFT_RECORD()
LOOP
WHILE LEFT_DATA_NOT_EOF AND RIGHT_DATA_NOT_EOF AND RIGHT_KEY IS LESS THAN LEFT_KEY
PRINT RIGHT_KEY
RIGHT_DATA_NOT_EOF = CALL READ_RIGHT_RECORD()
LOOP
WHILE LEFT_DATA_NOT_EOF AND RIGHT_DATA_NOT_EOF AND LEFT_KEY IS EQUAL TO RIGHT_KEY
LEFT_DATA_NOT_EOF = CALL READ_LEFT_RECORD()
RIGHT_DATA_NOT_EOF = CALL READ_RIGHT_RECORD()
LOOP
LOOP
WHILE LEFT_DATA_NOT_EOF
PRINT LEFT_KEY
LEFT_DATA_NOT_EOF = CALL READ_LEFT_RECORD()
LOOP
WHILE RIGHT_DATA_NOT_EOF
PRINT RIGHT_KEY
RIGHT_DATA_NOT_EOF = CALL READ_RIGHT_RECORD()
LOOP
METHOD END
METHOD READ_LEFT_RECORD
RESULT = MOVE TO NEXT LEFT RECORD
IF RESULT IS EQUAL TO TRUE THEN
SET LEFT_KEY FROM CURRENT LEFT CURSOR
END IF
RETURN RESULT
METHOD END
METHOD READ_RIGHT_RECORD
RESULT = MOVE TO NEXT RIGHT RECORD
IF RESULT IS EQUAL TO TRUE THEN
SET RIGHT_KEY FROM CURRENT RIGHT CURSOR
END IF
RETURN RESULT
METHOD END