10 CLS:PRINT TAB(30)"-- METRO --":PRINT:PRINT:CLEAR 2000:DEFINT A-Z 20 RESTORE:READ NL,NS 30 TAILLE=NL+NS 40 DIM NOM$(TAILLE+1),COR$(TAILLE),VISITE(TAILLE), CO(TAILLE) 50 I=1:L=1:NC0=0 60 READ A$:1F A$="FIN" THEN 90 70 I=1+1:IF ASC(A$)=42 THEN NCO=NC0+1:CO(NCO)=I:A$ =MID$(A$,2) 80 NOM$(I)=A$:GOTO 60 90 I=I+1:L=L+1:IF L<=NL THEN 60 100 FOR S1=2 TO NCO:C1=CO(S1):FOR S2=1 TO S1-1 110 C2=CMS2):IF NOM$(C1)=NOM$(C2) THEN COR$(C1)=CO12$(C1)+CHRS(INT(C2/256))+CHRS(C2 MOD 256):COR$(C2 )=CORS(C2)+CHRS(INT(C1/256))+CHR$(C1 MOD 256) 120 NEXT S2,S1 130 MAXPT=2*NCO:QIM PTR(MAXPT),PARS(MAXPT),ATT(MAXPT) 140 INPUT"Station de depart ";S$ 150 GOSUB 490:IF S=0 THEN 140 160 DEP=S:PRINT 170 INPUT"Station d'arrivee ";S$ 180 GOSUB 490:IF S=0 THEN 170 190 ARI=S:IF DEP=ARI THEN PRINT"Allez faire un tour ... Et revenez":PRINT"quand vous aurez les idees claires.":GOTO 140 200 PRINT 210 INPUT"Valeur d'un changement ";VCH:IF VCH<0 THEN 210 220 PRINT:FOR I=1 TO NCO:VISITE(CO(I))=0:NEXT I:FOR I=1 TO MAXPT:ATT(I)=0:NEXT I: 230 NPTR=2:PTR(1)=DEP:PTR(2)=-DEP:NST=0 240 DS=CHR$(INT(DEP/256))+CHR$(DEP MOD 256):PAR$(1)=D$+CHR$(0):PAR$(2)=D$+CHR$(2) 250 REM boucle de recherche 260 FOR P=1 TO NPTR:IF ATT(P)<>0 THEN ATT(P)=ATT(P)-1:GOTO 350 270 S=ABS(PTR(P)):IF LEN(NOM$(S))=0 THEN ATT(P)=1000:GOTO 350 280 IF S=ARI THEN 370 290 IF LEN(COR$(S))=0 THEN 340 300 C$=CORS(S):FOR I=1 TO LEN(C$) STEP 2:T=ASC(MID $(C$,I,1)).256+ASC(MID$(C$,I+1,1)):IF VISITE(T)=1 THEN 330 310 NPTR=NPTR+1:PTR(NPTR)=T+1:PAR$(NPTR)=PAR$(P)+CHR$(INT(T/256))+CHR$(T MOD 256)+CHR$(0):ATT(NPTR)= VCH 320 NPTR=NPTR+1:PTR(NPTR)=-T+1:PAR$(NPTR)=PAR$(P)+ CHR$(INT(T/256))+CHR$(T MOD 256)+CHR$(2):ATT(NPTR) =VCH:VISITE(T)=1 330 NEXT I 340 PTR(P)=PTR(P)+1 350 NEXT P 360 NST=NST+1:GOTO 260 370 REM affichage du trajet trouve 380 I=1:A$="Prendre le metro A ":1.4=PAR$(P)+CHR$(1 NT(ARI/256))+CHR$(ARI MOD 256)+CHRS(255) 390 IF NOM$(DEP)=NOM$(ASC(MID$(PS,4,1)).256+ASC(MI D$(P$,5,1))) THEN P$=MID$(P$,4) 400 ST=ASC(MID$(P$,I,1)).256+ASC(MID$(P$,I+1,1)):D =1-ASC(MID$(P$,I+2,1)):J=ST 410 PRINT A$;NOM$(ST):IF D=-254 THEN 450 420 IF NOM$(J+D)<>"" THEN J=J+D:GOTO 420 430 PRINT " Direction ";NOM$(J):A$="Descendre" 440 I=I+3:IF I0 THEN RETURN 530 FOR I=1 TO TAILLE 540 IF INSTR(NOM$(I),S$)<>0 THEN PRINT"Est-ce ";NO M$(1);:INPUT R$:IF LEFT$(R$0)="O" THEN S=I:I=TAIL LE 550 NEXT I:IF S=0 THEN PRINT"Station inconnue" 560 RETURN 570 REM liste des lignes de metro 580 DATA 4,97 590 DATA MAIRIE DE MONTREUIL,CROIX DE CHAVAUX,ROBE SPIERRE,PORTE DE MONTREUIL,MARAICHERS,BUZENVAL,.+e TION,RUE DES BOULETS,CHARONNE,VOLTAIRE,ST AMBROISE 600 DATA .0BERKAMPF,*REPUBLIQUE,.STRABOURG ST DENIS,BONNE NOUVELLE,RUE MONTMARTRE,*RICHELIEU DROUOT,*CHAUSSEE D'ANTI,*HAVRE CAUMARTIN,ST AUGUSTINONIR OMESNIL,.FRANKLIN ROOSEVELT,*ALMA MARCEAU,IENA,.TR OCADERO,RUE DE LA POMPE,LA MUETTE,RANELAGH,JASMIN 610 DATA *MICHEL-ANGE MOLITOR,*MICHEL-ANGE AUTEUIL,EXELMANS,PORTE DE ST CLOUD,MARCEL SEMBAT,BILLANCOURT,PONT DE SEVRES,FIN 620 DATA CHATEAU DE VINCENNES,BERAULT,ST MANDE IOURELLE,PORTE DE VINCENNES,*NATION,REUILLY DIDEROT,GARE DE LYON,*BASTILLE,ST PAUL,*HOTEL DE VILLE,*CHATELET,LOUVRE,*PALAIS ROYAL,TUILERIES 630 DATA *CONCORDE,*CHAMPS-ELYSEES CLEMENCEAU,*FRANKLIN ROOSEVELT,GEORGES V,*CHARLES DE GAULLE ETOILE,ARGENTINE,PORTE MAILLOT,LES SABLONS,PONT DE NEUILLY,FIN 640 DATA *CHATELET,*HOTEL DE VILLE,RAMBUTEAU,*ARTS ET METIERS,*REPUBLIQUE,GONCOURT,*BELLEVILLE,PYRENEES,JOURDAIN,*PLACE DES FETES,TELEGRAPHE,*PORTE DES LILAS,MAIRIE DES LILAS,FIN 650 DATA GALLIENI,PORTE DE BAGNOLET,*GAMBETTA,*PERE LACHAISE,ST MAUR,PARMENTIER,*REPUBLIQUE,TEMPLE,*ARTS ET METIERS,*REAUMUR SEBASTOPOL,SENTIER,BOURSE,QUATRE SEPTEMBRE 660 DATA *OPERA,*HAVRE CAUMARTIN,*ST LAZARE,EUROPE,*VILLIERS,MALESHERBES,NAGRAM,PEREIRE,PORTE DE CHAMPERET,LOUISE MICHELE,ANATOLE FRANCE,PONT DE,LEVALLOIS BECON,FIN 670 REM 680 REM Extensions du programme 690 REM 700 REM Pour rajouter des lignes : 710 REM ligne 580 : nombre de lignes,nombres de st at ions 720 REM entrer les lignes dans l'ordre des station 730 REM preceder les correspondances par une etoil e (*) 740 REM une ligne se termine par FIN