Probleme convertion Basic Apple II en Qbasic

Fermé
Darko59 - 29 août 2015 à 15:34
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 1 sept. 2015 à 12:11
Bonjour,

Je suis nouveau sur le forum. Je pense que je publie dans la bonne categorie.

Je suis programmeur amateur.

J'essaie de transcrire un programme du basic apple ii en qbasic mais j'ai un souci avec l'instruction next qui se trouve juste derriere un then.

Ce programme je l'ai recuperer dans la revue micro systeme No 44 ; il a ete creer par Philippe Larvet.

Je vous joint le listing

Question : quelqu'un pourrait il m'aider a transcrire le programme en qbasic.

Merci de votre aide.


10 REM'===========================
20 REM' Base de connaissances relationnelle
40 REM' Interrogeable en langage naturel
50 REM'
54 REM' Auteur
60 REM' Philippe Larvet
70 REM' Copyright 1984
80 REM'
90 CLS
100 np = 4
105 nm = 50
110 DIM b$(nm, np + 1)
120 DIM c$(np)
130 DIM e$(50)
140 DIM s(nm, 2)
150 nt = 0
270 REM'
280 REM' mots non-signifiants
290 REM'
300 ne = 0
310 READ a$
320 IF a$ = "FF" THEN GOTO 1000
330 ne = ne + 1: e$(ne) = a$
340 GOTO 310
400 DATA EST,LE,LA,DE,UN,UNE
410 DATA L,DU,D,LES,DES
412 DATA QU,QUE,QUI,SONT
414 DATA EN,OU,COMMENT,AU
420 DATA QUOI,C,CE,QUEL,QUELLE
430 DATA IL,ELLE,A,T,Y,FF
970 REM'
980 REM' entree
990 REM'
1000 PRINT : ni = 0
1010 INPUT "A vous : "; a$
1020 l = LEN(a$)
1470 REM'
1480 REM' examen de l'entree
1490 REM'
1500 IF LEFT$(a$, 1) = "-" THEN GOTO 11000
1510 IF a$ = "???" THEN GOTO 10000
1520 IF RIGHT$(a$, 1) <> "?" THEN GOTO 1990
1530 a$ = LEFT$(a$, l - 1)
1540 ni = 1
1970 REM'
1980 REM' extraction des mots
1990 REM'
2000 FOR k = 2 TO np
2010 c$(k) = ""
2020 NEXT k
2030 l = LEN(a$): h$ = ""
2040 n = 1: nd = 0: j = 1
2100 i = j
2120 j = j + 1
2122 g$ = MID$(a$, j, 1)
2130 IF g$ <> " " AND g$ <> "'" AND g$ <> "-" AND j <= l THEN GOTO 2120
2132 f$ = MID$(a$, i, j - i)
2133 IF i = 1 AND LEFT$(f$, 2) = "QU" THEN n = 0
2135 FOR k = 1 TO ne
2136 IF e$(k) <> f$ THEN GOTO 2139 'NEXT k
2138 IF k <= ne THEN GOTO 2160
2139 NEXT k 'bon
2140 nd = nd + 1
2142 IF nd > np THEN GOTO 3500
2150 h$ = h$ + f$: c$(nd) = f$
2152 IF nd = 1 THEN j1 = j
2160 IF j > l THEN GOTO 2990
2170 j = j + 1
2180 IF MID$(a$, j, 1) = " " AND j <= l THEN GOTO 2170
2200 IF j <= l THEN GOTO 2100
2970 REM'
2980 REM' Fin extraction
2990 REM'
3010 IF ni > 0 THEN GOTO 6000
3020 IF nd > 1 THEN GOTO 4000
3470 REM'
3480 REM' Erreur
3490 REM'
3500 PRINT "** Je ne comprends pas **"
3510 GOTO 1000
3900 REM'
3910 REM' Assertion
3920 REM'
3980 REM' Controle existance assertion dans la base
3990 REM'
4000 IF nt = 0 THEN GOTO 5000
4100 FOR i = 1 TO nt
4110 z$ = ""
4120 FOR j = 1 TO np
4130 z$ = z$ + b$(i, j)
4140 NEXT j
4150 IF z$ <> h$ THEN GOTO 4155 'NEXT i
4155 NEXT i 'bon
4160 IF i > nt THEN GOTO 5000
4170 REM'
4180 REM' Assertion deja connue
4190 REM'
4200 PRINT "** Assertion deja connue ! **"
4210 GOTO 1000
4970 REM'
4980 REM' Enrichissement base
4990 REM'
5000 FOR i = 1 TO nm
5010 IF b$(i, 1) <> "" THEN GOTO 5025 'NEXT i
5020 IF i <= nm THEN GOTO 5050
5025 NEXT i  'Bon
5030 PRINT "** STOP ! la base est pleine ! **"
5040 STOP
5050 FOR j = 1 TO np
5052 b$(i, j) = c$(j)
5054 NEXT j
5056 b$(i, np + 1) = a$
5058 s(i, 1) = nd: s(i, 2) = j1
5060 PRINT "** Compris **"
5070 IF i > nt THEN nt = i
5080 GOTO 1000
5970 REM'
5980 REM' Interrogation
5990 REM'
5992 REM' Controle existence de chacun des mots
5996 REM'
6000 k = 0: m = nt
6010 t = 0: k = k + 1
6100 FOR i = 1 TO nt
6110 FOR j = 1 TO s(i, 1)
6120 IF b$(i, j) <> c$(k) THEN GOTO 6131 'NEXT j
'6125 NEXT j
6130 IF j > s(i, 1) THEN GOTO 6180
6131 NEXT j
6132 t = 1
6140 IF nd > 1 THEN GOTO 6170
6142 IF j = 2 AND l > LEN(c$(k)) + 1 THEN GOTO 6162
'6144 NEXT j
6150 PRINT b$(i, np + 1)
6160 GOTO 6180
6162 PRINT LEFT$(b$(i, np + 1), s(i, 2))
6164 GOTO 6180
6170 a = i: i = nt
6180 REM' Mot suivant
6190 NEXT i
6200 IF t = 0 THEN GOTO 9000
6210 IF nd = 1 THEN GOTO 1000
6220 IF a < m THEN m = a
6230 IF k < nd THEN GOTO 6010
6970 REM'
6980 REM' Relation horizontale
6990 REM'
7000 v = 0
7010 FOR i = m TO nt
7020 t = 0: k = 0: j = 0
7030 k = k + 1
7040 IF k > nd THEN GOTO 7300
7050 j = j + 1
7060 IF j > s(i, 1) THEN GOTO 7200
7070 IF b$(i, j) <> c$(k) THEN GOTO 7050
7080 t = t + 1
7090 IF t = 1 THEN GOTO 7030
7100 GOTO 7030
7200 IF t = 0 THEN GOTO 7400
7300 IF t <> nd OR t <> s(i, 1) THEN GOTO 7330
7310 PRINT " Oui ": v = 1: i = nt
7320 GOTO 7400
7330 IF t <> nd THEN GOTO 7400
7340 v = 1
7350 IF p = 2 THEN GOTO 7380
7360 PRINT b$(i, np + 1)
7370 GOTO 7400
7380 PRINT LEFT$(b$(i, np + 1), s(i, 2))
7400 NEXT i
7410 IF v = 1 THEN GOTO 1000
7970 REM'
7980 REM' liaison inexistante ou inversee
7990 REM'
8000 REM' Composition de fonctions
8001 IF n = 0 THEN GOTO 8010
8002 PRINT " Non "
8004 GOTO 1000
8010 PRINT " Je l'ignore "
8070 GOTO 1000
8970 REM'
8980 REM' Mot inconnu
8990 REM'
9000 PRINT "** Je ne connais pas "; "--> "; c$(k); " <-- **"
9020 GOTO 1000
9900 REM'
9910 REM' Commandes de service
9920 REM'
9980 REM' Listage de la base
9990 REM'
10000 FOR i = 1 TO nt
10010 PRINT i; " "; b$(i, np + 1)
10020 NEXT i
10030 GOTO 1000
10970 REM'
10980 REM' Suppression
10990 REM'
11000 REM'
11004 REM'
11008 i = VAL(RIGHT$(a$, l - 1))
11010 FOR j = 1 TO np + 1
11020 b$(i, j) = ""
11030 NEXT j
11040 PRINT "** Assertion "; i; " supprimee **"
11050 GOTO 1000

 


A voir également:

2 réponses

NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
29 août 2015 à 15:49
Quel "Next" ?
Quel problème ?
0
Darko59000 Messages postés 4 Date d'inscription samedi 29 août 2015 Statut Membre Dernière intervention 30 août 2015
29 août 2015 à 16:05
bonjour,
les next qui se trouve ligne 2136, 4150, 5010 et 6120.
j'ai essayais plusieurs solutions mais je bloque, le programme ne me donne pas le resultat voulu. ce programme a ete fait a l'origine pour apple II.
merci de m'aider.
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
29 août 2015 à 16:06
Par exemple :
5010 IF b$(i, 1) <> "" THEN GOTO 5025 'NEXT i
Le NEXT est en commentaire.
Cela indique vraisemblablement que le GOTO renvoi au NEXT;
0
Darko59000 Messages postés 4 Date d'inscription samedi 29 août 2015 Statut Membre Dernière intervention 30 août 2015
29 août 2015 à 16:09
oui mais le next renvoi a quelle ligne ?
moi j'ai mit 5025 mais quand je lance le prog je n'ai pas le resultat voulu.
je pense que cela vient de tous les next cité precedement
0
Darko59000 Messages postés 4 Date d'inscription samedi 29 août 2015 Statut Membre Dernière intervention 30 août 2015 > NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024
29 août 2015 à 16:20
Normalement la ligne origine est celle ci :
5010 IF b$(i,1)<>"" then next i

le goto 5025 n'existe pas, c'est moi qui l'est inscrit pour mes essais.
c'est pour cela que je bloque dans la transcription.
sous emulateur apple II le prog fonctionne sans probleme mais je n'arrive pas a le transcrire en qbasic.
0
NHenry Messages postés 15163 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 1 novembre 2024 345
30 août 2015 à 00:28
Un Next est toujours lié à un For.
Next i est lié au For i=... qui le précède.

En gros, les IF ... THEN NEXT ...
Sert à à continuer la boucle sans faire le reste des instructions.

Tu dis que tu montres le résultat adapté, mais du coup, on ne vois pas forcément toutes les modifications.

Tu dis que tu n'a pas le résultat attendu, mais tu ne dis pas ce que tu as et ce que tu devrais avoir. De plus, tu ne précises pas ce qu'est sensé faire le programme au global.
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 1/09/2015 à 12:16
Salut Darko,

Plutôt que de faire le GOTO sur la ligne du NEXT, ce qui ne semble pas fonctionner en QBasic selon ce que tu dis, essaye d'insèrer une nouvelle ligne juste avant la ligne du NEXT (et mets-y un REM, ou une instruction qui ne fait rien) et fait le GOTO dessus.

(non testé, je n'ai pas ces langages sur ma machine)

Dal
0