leonidas1979 Δημοσ. 22 Μαΐου 2020 Δημοσ. 22 Μαΐου 2020 (επεξεργασμένο) Προσπαθώ να κανω compile ένα αρχείο με κώδικα BASIC. (τον κώδικα τον έχω μεταφέρει από αρχείο pdf οπότε δεν αποκλείονται και λάθη). Χρησιμοποιώ τον https://www.freebasic.net/ compiler Δοκιμάζω να κάνω compile με τις παρακάτω επιλογές αλλά όλες αποτυγχάνουν. Ίσως δεν ειναι σωστός ο compiler για τον κώδικα του αρχείου. fbc -lang qb lunar.bas fbc -lang fblite lunar.bas fbc -lang deprecated lunar.bas Ο κώδικας είναι διαθέσιμος στο επισυναπτόμενο αρχείο. Όποιος έχει εμπειρία θα εκτιμούσα την βοηθειά του. Ευχαριστώ! lunar.bas Επεξ/σία 22 Μαΐου 2020 από leonidas1979
marios28 Δημοσ. 22 Μαΐου 2020 Δημοσ. 22 Μαΐου 2020 Καμία εμπειρία με basic (αν εξαιρέσεις τη αντιγραφή προγραμμάτων basic από Pixel σε Amstrad 6128) Μέχρι να σου απαντήσει κάποιος που κατέχει, εδώ: https://groups.google.com/forum/#!topic/mailing.freebsd.questions/137LO0YaMTc βλέπω ότι τρέχει με Bywater BASIC interpreter (μάλλον διαθέσιμος μόνο για unix -family- λειτουργικό)
leonidas1979 Δημοσ. 22 Μαΐου 2020 Μέλος Δημοσ. 22 Μαΐου 2020 Ευχαριστώ προσπάθησα στα Debian με bwbasic lunar.bas αλλά δεν τα κατάφερα να τρέξει. Ισως κάνω κάτι λάθος γιατι με ρωτάει για user input που δεν περνάω. Δοκίμασα και με brandy αλλά επιστρέφει σφάλμα. Είτε έχει λάθος στον κώδικα (από τα copy paste που έκανα από το pdf). Είτε δεν περνάω σωστά τα user inputs που με ρωτάει.
marios28 Δημοσ. 22 Μαΐου 2020 Δημοσ. 22 Μαΐου 2020 (επεξεργασμένο) 58 λεπτά πριν, leonidas1979 είπε Είτε έχει λάθος στον κώδικα (από τα copy paste που έκανα από το pdf) Αυτό είναι. Άφησε ένα κενό μετά από κάθε εντολή INPUT και PRINT. Δεν έχει γίνει σωστή αντιγραφή. INPUT"LONGITUDE IN DEG.";LO --> INPUT "LONGITUDE IN DEG.";LO Προφανώς θα κάνεις το ίδιο σε κάθε εντολή (αν έχουν παραληφθεί τα κενά). Επεξ/σία 22 Μαΐου 2020 από marios28
htaccess Δημοσ. 22 Μαΐου 2020 Δημοσ. 22 Μαΐου 2020 (επεξεργασμένο) Εκτός από τα input - print έχει και κάποια ακόμα. Με γύρισες πολλά χρόνια πίσω φίλε μου. Το εκτέλεσα σε bwbasic σε debian. 10 DEF FNARCOS(ARG)=1.570796-ATN(ARG/SQR(1.-ARG*ARG)) 20 DEF FNARCSIN(ARG)=ATN(ARG/SQR(1.-ARG*ARG)) 30 DEF FNDEG(ARG)=INT(ARG)+((ARG-INT(ARG))*10.)/6. 40 DEF FNDMS(ARG)=INT(ARG)+6.*(ARG-INT(ARG))/10. 50 RD=57.29578 60 DR=1./RD 70 DIM A(4) 80 DIM B(2) 90 A(1)=-.01454 100 A(2)=-.10453 110 A(3)=-.20791 120 A(4)=.00233 130 CE=.91775 140 SE=.39715 150 INPUT "LONGITUDE IN DEG.",LO 160 INPUT "LATITUDE IN DEG.";F 170 INPUT "YEAR (4 DIGITS)";IY 180 INPUT "MONTH (NUMERAL)";IM 190 INPUT "DAY (NUMERAL)";ID 200 F=F*DR 210 C=360. 220 LI=ABS(LO) 230 SI=SIN(F) 240 CI=COS(F) 250 J=367*IY-INT(7*(IY+INT((IM+9)/12))/4)+INT(275*IM/9)+ID-730531. 260 INPUT "UNIVERSAL TIME = 0, ZONE TIME - 1, LOCAL MEAN TIME - 2";Z 270 DT=0. 280 IF Z=0. THEN LET DT=-LO/C 290 IF Z=1. THEN LET DT=-(LI-15*INT((LI+7.5)/15))/C*SGN(LO) 300 INPUT "HOUR (4 DIGIT NUMERAL ON 24 HOUR CLOCK)";H 310 Z0=J-.5 320 IF H>0 THEN GOTO 870 330 PRINT "DATA FOR ";IY;", MONTH ";IM;", DAY ";ID 340 FOR L=1 TO 4 350 ON L GOTO 370,650,650,360 360 C=347.81 370 M=.5+DT 380 K=1 390 M=M-DT 400 E=M-LO/360. 410 GOSUB 430 420 GOTO 530 430 D=Z0+E 440 IF ABS(E)>-1 THEN LET E=E-SGN(E) 450 GOSUB 1220 460 IF L=4 THEN GOSUB 1720 470 T=T+LO+360.*E 480 T=T-INT(T/360.)*360. 490 U=T-AS 500 IF ABS(U)>180. THEN LET U=U-360.*SGN(U) 510 U=U/C 520 RETURN 530 M=M-U+DT 540 IF L<4 THEN LET K=K+1 550 ON K GOTO 600,560,600,580,600,620 560 IF M>=0. AND M<1. THEN GOTO 620 570 GOTO 590 580 IF M>=0. THEN GOTO 620 590 M=M-SGN(M) 600 K=K+1 610 GOTO 390 620 H=FNARCSIN(COS(F-DS))*RD 630 IF L-4 THEN LET H=H-.95*COS(H) 640 GOSUB 2160 650 GOSUB 2000 660 B(1)=M-H 670 B(2)=M+H 680 FOR I=1 TO 2 690 K=2*I-3 700 FOR N=1 TO 6 710 B(I)=B(I)-DT 720 E=B(I)-LO/360. 730 GOSUB 430 740 GOSUB 2000 750 B(I)=B(I)+K*H-U+DT 760 IF L<4 THEN LET N=N+1 770 ON N GOTO 820,780,820,800,820,830 780 IF B(I)>=0. AND B(I)<1. THEN GOTO 830 790 GOTO 810 800 IF B(I)>=0. THEN GOTO 830 810 B(I)=B(I)-SGN(B(D)) 820 NEXT N 830 NEXT I 840 ON L GOSUB 1350,1400,1400,1610 850 NEXT L 860 GOTO 150 870 INPUT "SKY CONDITION = 1,2,3,10,";SK 880 PRINT "DATA FOR ";IY;", MONTH ";IM;", DAY ";ID;", AT ";H;" HOURS" 890 E=FNDEG(H/100.)/24.-DT-LO/360. 900 D=Z0+E 910 N=1 920 GOSUB 1220 930 T=T+360.*E+LO 940 IF N=2 THEN GOSUB 1720 950 H=T-AS 960 GOSUB 2060 970 Z=H*DR 980 H=H-.95*(N-1)*COS(H*DR) 990 GOSUB 2160 1000 GOSUB 2200 1010 HA=INT(ABS(HA)+.5)*SGN(HA) 1020 ON N GOTO 1030,1090 1030 IS=133775.*M/SK 1040 PRINT "SUN AZIMUTH (DBG.) ";AZ 1050 PRINT "SUN ALTITUDE (DEG.) ";HA 1060 PRINT "SUN ILLUMINANCE (LUX) ";IS 1070 N=2 1080 GOTO 940 1090 E=FNARCOS(COS(V-LS)*CB) 1100 P=.892*EXP(-3.343/((TAN(E/2.) )^.632))+.0344*(SIN(E)-E*COS(E)) 1110 P=.418*P/(1.-.005*COS(E)-.03*SIN(Z)) 1120 IL=P*M/SK 1130 IS=IS+IL+.0005/SK 1140 PRINT "MOON AZIMUTH (DEG.) ";AZ 1150 PRINT "MOON ALTITUDE (DEG.) ";HA 1160 PRINT "MOON ILLUMINANCE (LUX) ";IL 1170 IL=INT(50.*(1.-COS(E))+.5) 1180 PRINT " (";IL;"% OF MOON ILLUMINATED)" 1190 PRINT "TOTAL ILLUMINANCE (LUX) ";IS 1200 GOTO 300 1210 END 1220 TD#=280.46#+.98565#*D# 1230 T=TD#-INT(TD#/360#)*360# 1240 IF T<0. THEN LET T=T+360. 1250 TD#=357.5#+.9856#*D# 1260 G=(TD#-INT(TD#/360#)*360#)*DR 1270 LS=(T+1.91*SIN(G))*DR 1280 AS=ATN(CE*TAN(LS))*RD 1290 Y=COS(LS) 1300 IF Y<0. THEN LET AS=AS+180. 1310 SD=SE*SIN(LS) 1320 DS=FNARCSIN(SD) 1330 T=T-180. 1340 RETURN 1350 R=M 1360 GOSUB 1700 1370 PRINT "SUN MERIDIAN PASSAGE AT ";R 1380 HA=INT(ABS(HA)+.5)*SGN(HA) 1390 PRINT "ALTITUDE AT MER. PASS. ";HA 1400 FOR I=1 TO 2 1410 R=B(I) 1420 GOSUB 1700 1430 IF R>=4800. OR R<0. THEN GOTO 1680 1440 ON 2*(L-1)+I GOTO 1450, 1470, 1530, 1550, 1570, 1590, 1650, 1670 1450 PRINT "TIME OF SUNRISE ";R 1460 GOTO 1680 1470 PRINT "TIME OF SUNSET ";R 1480 R=B(2)-B(1) 1490 IF R<0. THEN LET R=R+1. 1500 GOSUB 1700 1510 PRINT "TOTAL DAYLIGHT ";R 1520 GOTO 1680 1530 PRINT "BEGIN CIVIL TWILIGHT AT ";R 1540 GOTO 1680 1550 PRINT "END CIVIL TWILIGHT AT ";R 1550 GOTO 1680 1570 PRINT "BEGIN NAUTICAL TWILIGHT ";R 1580 GOTO 1680 1590 PRINT "END NAUTICAL TWILIGHT ";R 1600 GOTO 1680 1610 R=M 1620 GOSUB 1700 1630 PRINT "MOON MERIDIAN PASSAGE AT";R 1640 GOTO 1380 1650 PRINT "TIME OF MOONRISE ";R 1660 GOTO 1680 1670 PRINT "TIME OF MOONSET ";R 1680 NEXT I 1690 RETURN 1700 R=INT(100.*FNDMS(R*24.)+.5) 1710 RETURN 1720 TD#=218.32#+13.1764#*D# 1730 V=TD#-INT(TD#/360#)*360# 1740 IF V<0. THEN LET V=V+360. 1750 TD#=134.96#+13.06499#*D# 1760 Y=(TD#-INT(TD#/360#)*360#)*DR 1770 TD#=93.27#+13.22935#*D# 1780 O=(TD#-INT(TD#/360#)*360#)*DR 1790 TD#=235.7#+24.3815#*D# 1800 W=(TD#-INT(TD#/360#)*360#)*DR 1810 SB=SIN(Y) 1820 CB=COS(Y) 1830 X=SIN(O) 1840 S=COS(O) 1850 SD=SIN(W) 1860 CD=COS(W) 1870 V=V+(6.29-1.27*CD+.43*CB)*SB+(.66+1.27*CB)*SD-.19*SIN(G)-.23*X*S 1880 V=V*DR 1890 Y=((5.13-.17*CD)*X+(.56*SB+.17*SD)*S)*DR 1900 SV=SIN(V) 1910 SB=SIN(Y) 1920 CB=COS(Y) 1930 Q=CB*COS(V) 1940 P=CE*SV*CB-SE*SB 1950 SD=SE*SV*CB+CE*SB 1960 AS=ATN(P/Q)*RD 1970 IF Q<0. THEN LET AS=AS+180. 1980 DS=FNARCSIN(SD) 1990 RETURN 2000 H=(A(L)-SI*SD)/(CI*COS(DS)) 2010 IF ABS(H)>1. THEN GOTO 2040 2020 H=FNARCOS(H)*RD/C 2030 RETURN 2040 H=1.5 2050 RETURN 2060 CD=COS(OS) 2070 CS=COS(H*DR) 2080 Q=SD*CI-CD*SI*CS 2090 P=CD*SIN(H*DR) 2100 AZ=ATN(P/Q)*RD 2110 IF Q<0. THEN LET AZ=AZ+180. 2120 IF AZ<0. THEN LET AZ=AZ+360. 2130 AZ=INT(AZ+.5) 2140 H=FNARCSIN(SD*SI+CD*CI*CS)*RD 2150 RETURN 2160 HA=H 2170 IF H<(-5./6.) THEN GOTO 2190 2180 HA=H+1./(TAN((H+8.59/(H+4.42))*DR))/60. 2190 RETURN 2200 U=SIN(HA*DR) 2210 X=753.6616 2220 S=FNARCSIN(X*COS(HA*DR)/(X+1.)) 2230 M=X*(COS(S)-U)+COS(S) 2240 M=EXP(-.21*M)*U+.0289*EXP(-.042*M)*(1.+(HA+90.)*U/57.29578) 2250 RETURN Επεξ/σία 22 Μαΐου 2020 από htaccess
leonidas1979 Δημοσ. 22 Μαΐου 2020 Μέλος Δημοσ. 22 Μαΐου 2020 Είναι εφικτό να το μετατρέψω σε Linux executable file και να του περνάω παραμέτρους από command line όχι σαν (user prompt)
htaccess Δημοσ. 23 Μαΐου 2020 Δημοσ. 23 Μαΐου 2020 (επεξεργασμένο) 50 λεπτά πριν, leonidas1979 είπε Είναι εφικτό να το μετατρέψω σε Linux executable file και να του περνάω παραμέτρους από command line όχι σαν (user prompt) Αν κατάλαβα καλά, θέλεις το .bas να το εκτελείς μέσω τερματικού. Μπορείς να το εκτελέσεις με bwbasic my_program.bas , όπου my_program.bas το όνομα που έχεις δώσει. Όπως μπορείς επίσης, να δημιουργήσεις μία συντόμευση (αρχείο κειμένου με επέκταση .sh) πχ run.sh στην επιφάνεια εργασίας το οποίο θα περιέχει #!/bin/sh cd /home/inet/Desktop bwbasic my_program.bas Όπου inet το username του χρήστη. Το κάνεις εκτελέσιμο είτε από το τερματικό με chmod +x run.sh , είτε από τις ιδιότητες του αρχείου. Και είσαι έτοιμος να το τρέξεις, στο παράθυρο διαλόγου θα επιλέξεις execute in terminal. Επεξ/σία 23 Μαΐου 2020 από htaccess
leonidas1979 Δημοσ. 23 Μαΐου 2020 Μέλος Δημοσ. 23 Μαΐου 2020 7 ώρες πριν, htaccess είπε Αν κατάλαβα καλά, θέλεις το .bas να το εκτελείς μέσω τερματικού. Μπορείς να το εκτελέσεις με bwbasic my_program.bas , όπου my_program.bas το όνομα που έχεις δώσει. Όπως μπορείς επίσης, να δημιουργήσεις μία συντόμευση (αρχείο κειμένου με επέκταση .sh) πχ run.sh στην επιφάνεια εργασίας το οποίο θα περιέχει #!/bin/sh cd /home/inet/Desktop bwbasic my_program.bas Όπου inet το username του χρήστη. Το κάνεις εκτελέσιμο είτε από το τερματικό με chmod +x run.sh , είτε από τις ιδιότητες του αρχείου. Και είσαι έτοιμος να το τρέξεις, στο παράθυρο διαλόγου θα επιλέξεις execute in terminal. Αυτό είναι το ένα σκέλος που περιγράφεις. Το άλλο είναι οι μεταβλητές που ζητάει σαν INPUT να μην χρειάζεται αλληλεπίδραση από τον χρήστη αλλά να τα περνάω σαν script parameters δηλ να εκτελειται ετσι bwbasic my_program.bas <PARAM1> <PARAM2> όπου το κάθε <PARAM> να αντιστοιχεί σε μεταβλητή που περιγράφεται στο script (π.χ. PARAM1=LO)
marios28 Δημοσ. 23 Μαΐου 2020 Δημοσ. 23 Μαΐου 2020 (επεξεργασμένο) 4 ώρες πριν, leonidas1979 είπε Αυτό είναι το ένα σκέλος που περιγράφεις. Το άλλο είναι οι μεταβλητές που ζητάει σαν INPUT να μην χρειάζεται αλληλεπίδραση από τον χρήστη αλλά να τα περνάω σαν script parameters δηλ να εκτελειται ετσι bwbasic my_program.bas <PARAM1> <PARAM2> όπου το κάθε <PARAM> να αντιστοιχεί σε μεταβλητή που περιγράφεται στο script (π.χ. PARAM1=LO) https://groups.google.com/forum/#!topic/comp.os.msdos.programmer/YF6iJhJt3g0 Τσέκαρε αν υποστηρίζεται από τη bwbasic. Αν δεν υποστηρίζει command line parameters, χρησιμοποίησε την εντολή "LINE INPUT". Μάλλον σε βολεύει καλύτερα η συγκεκριμένη εντολή, καθώς θα σε ρωτάει να δώσεις όλες τις τιμές σε μία γραμμή, κάνεις επικόλληση τις τιμές πατάς enter, κατόπιν υπολογισμός, νέα επικόλληση --> enter κ.ο.κ. Φυσικά σ' αυτήν την περίπτωση θα πρέπει να τροποποιήσεις το προγραμματάκι βγάζοντας όλες τις αντίστοιχες INPUT εντολές, και κάνοντας διαχωρισμό των τιμών εισόδου και ανάθεσή τους στις αντίστοιχες μεταβλητές. 13 ώρες πριν, htaccess είπε Με γύρισες πολλά χρόνια πίσω φίλε μου. Ναι, χθες (πριν την ερώτηση του φίλου) έτυχε να διαβάσω αυτό https://devblogs.microsoft.com/commandline/microsoft-open-sources-gw-basic/ και τα σχόλια στο συγκεκριμένο blog. Επεξ/σία 23 Μαΐου 2020 από marios28
leonidas1979 Δημοσ. 23 Μαΐου 2020 Μέλος Δημοσ. 23 Μαΐου 2020 25 λεπτά πριν, marios28 είπε https://groups.google.com/forum/#!topic/comp.os.msdos.programmer/YF6iJhJt3g0 Τσέκαρε αν υποστηρίζεται από τη bwbasic. Αν δεν υποστηρίζει command line parameters, χρησιμοποίησε την εντολή "LINE INPUT". Μάλλον σε βολεύει καλύτερα η συγκεκριμένη εντολή, καθώς θα σε ρωτάει να δώσεις όλες τις τιμές σε μία γραμμή, κάνεις επικόλληση τις τιμές πατάς enter, κατόπιν υπολογισμός, νέα επικόλληση --> enter κ.ο.κ. Φυσικά σ' αυτήν την περίπτωση θα πρέπει να τροποποιήσεις το προγραμματάκι βγάζοντας όλες τις αντίστοιχες INPUT εντολές, και κάνοντας διαχωρισμό των τιμών εισόδου και ανάθεσή τους στις αντίστοιχες μεταβλητές. Ναι, χθες (πριν την ερώτηση του φίλου) έτυχε να διαβάσω αυτό https://devblogs.microsoft.com/commandline/microsoft-open-sources-gw-basic/ και τα σχόλια στο συγκεκριμένο blog. Το θέμα είναι να μην απαιτεί καθόλου interaction από τον user. Ο στόχος είναι να καλώ το BASIC script μεσω της R ή της Python και να του περνάω τις απαραίτητες παραμέτρους.
marios28 Δημοσ. 23 Μαΐου 2020 Δημοσ. 23 Μαΐου 2020 (επεξεργασμένο) 33 λεπτά πριν, leonidas1979 είπε Το θέμα είναι να μην απαιτεί καθόλου interaction από τον user. Ο στόχος είναι να καλώ το BASIC script μεσω της R ή της Python και να του περνάω τις απαραίτητες παραμέτρους. Μας έχεις μπερδέψει. Ξεκίνησες από απλό τρέξιμο του αρχείου, πέρασες στις παραμέτρους, τώρα ζητάς κάτι άλλο. Πες τα από την αρχή έτσι ώστε να καταλάβουμε τι ζητάς. Όσον αφορά το τελευταίο... Κατάλαβα ότι δεν γνωρίζεις προγραμματισμό. Tα παραπάνω θα τα έβρισκες και μόνος σου. Αφού ξέρεις Python καλύτερα να μετατρέψεις το πρόγραμμα basic σε μια συνάρτηση και ξεμπέρδεψες. Δες το manual της bwbasic και κάνε τις αλλαγές. Νομίζω άδικα παιδεύεσαι. Πιθανόν να σε βολεύει και το εξής: Δίνεις τις τιμές (ή αν εξάγονται από κάπου, δε μας ενδιαφέρει) μέσω του προγράμματος Python στο οποίο θα υπάρχει μια ρουτίνα που παράγει το αρχείο .bas. Οι αλλαγές κάθε φορά θα είναι η ανάθεση των τιμών στις αντίστοιχες μεταβλητές στο αρχείο .bas (εννοείται δε χρειάζεσαι καμία INPUT εντολή στην τελευταία περίπτωση). Αφού παραχθεί το αρχείο (.bas) κάνε ό,τι θέλεις μέσω της Python (δεν ξέρω python, αλλά φαντάζομαι έχει αντίστοιχη δυνατότητα αλά C π.χ.) Επεξ/σία 23 Μαΐου 2020 από marios28
leonidas1979 Δημοσ. 23 Μαΐου 2020 Μέλος Δημοσ. 23 Μαΐου 2020 Το πάω βήμα βήμα.Αφού καταφέραμε να το τρέξουμε, το επόμενο βήμα είναι να το ενσωματώσουμε σε ένα Python ή R script .π.χ. να το τρέξω στην R με system("bwbasic lunar.bas PARAM1 PARAM2") Το να το μετατρέψω σε Python θέλει χρόνο που δεν υπάρχει δυστυχώς. Η ιδέα του να κάνω ένα BASIC file generator δεν ειναι και άσχημη...
leonidas1979 Δημοσ. 23 Μαΐου 2020 Μέλος Δημοσ. 23 Μαΐου 2020 Νομίζω ότι δεν χρειάζεται να κάνω μετατροπή στο script για να περάσω παραμέτρους χωρίς user interaction. Κάπως έτσι σε command line: printf '%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n' -77 39 1986 9 13 1 1955 1 -3 | bwbasic lunar.bas Παίζει άψογα και με R με result <- system("printf '%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n' -77 39 1986 9 13 1 1955 1 -3 | bwbasic lunar.bas", intern=T)
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα