matek
VFX
info at vfx.hu
Tue Dec 3 16:57:16 CET 2002
Hali!
> Igy van. A merendo mennyiseggel aranyosan merek egy frekvenciat, ami
> meg nem is linearis fuggvenye a mennyisegnek. Es hogy meg szebb legyen a
> dolog, ez fugg a homerseklettol, amit kulon merek. Nehany hiteles
> mennyiseget referenciakent meg tudok merni, azaz azt latom, hogy ilyenkor
> x volt a mert frekvencia y homersekleten.
Ha van QBASIC a gepeden akkor itt a csatolmanyban van ami kell...
Mar jo par eve akarom atirni valami normalis feluletre, de meg nem
erkeztem megtenni...
Amugy tobb mint 10 eve hasznalom (meg a Spectrumos idokbol valo).
UDV. VFX.
http://www.vfx.hu
-------------- next part --------------
COMMON SZAM AS DOUBLE, MANT AS DOUBLE
COMMON SY AS DOUBLE, SX AS DOUBLE, SX2 AS DOUBLE, SXY AS DOUBLE
COMMON NEV AS DOUBLE, C0 AS DOUBLE, C1 AS DOUBLE, Y AS DOUBLE
COMMON A AS DOUBLE, B AS DOUBLE, XI AS DOUBLE, YI AS DOUBLE
COMMON isc AS DOUBLE, m AS DOUBLE, kicsi AS DOUBLE
DIM SM(5) AS DOUBLE
kicsi = 1E-39
SCREEN 12
DIM G(80, 100) AS DOUBLE
CLS
LET NYOMTAT = 0
COLOR 1
LET EM = 0
PRINT "F?ggv?nyk?zel?t?s", "M?r?si pontokhoz", "Pr?baf?ggv?nyekkel"
DIM u(100) AS DOUBLE
DIM v(100) AS DOUBLE
LET m = 0
155 LET isc = 0
160 LET SY = 0
170 LET SX = 0
180 LET SX2 = 0
190 LET SXY = 0
200 GOSUB 400
LET diskm = 0
IF m <> 0 THEN GOTO 210
SELECT CASE kod
CASE 21
GOSUB 7500
CASE 23
GOSUB 45
CASE 30
GOTO 380
END SELECT
GOTO 160
210 SELECT CASE kod
CASE 1
GOSUB 2000
CASE 2
GOSUB 2500
CASE 3
GOSUB 3000
CASE 4
GOSUB 3500
CASE 5
GOSUB 4000
CASE 6
GOSUB 4500
CASE 7
GOSUB 5000
CASE 15
GOSUB 9000
CASE 16
GOSUB 9500
CASE 20
GOSUB 7000
CASE 21
GOSUB 7500
CASE 22
GOSUB 7600
CASE 23
GOSUB 45
CASE 24
GOSUB 1600
CASE 25
GOSUB 1900
CASE 30
GOTO 380
END SELECT
219 IF diskm = 1 THEN GOTO 160
220 PRINT
COLOR 7
225 PRINT "KER HIBASZAMITAST ";
230 INPUT BS$
240 IF BS$ = "I" OR BS$ = "i" THEN GOTO 290
280 GOTO 160
290 GOSUB 550
350 GOTO 160
380 STOP
GOTO 160
400 REM VALASZTEK
CLS
COLOR 1
PRINT " A KOZELITO FUGGVENY TIPUSA:"
LOCATE 5, 1
COLOR 3
PRINT "1. Y=A*X+B 23. ?j sorzat bevitele "
PRINT
PRINT "2. Y=A*X^B 24. Pont elhagyasa "
PRINT
PRINT "3. Y=A*EXP(B*X) 25. Uj pont folvetele"
PRINT
PRINT "4. Y=X/(A+B*X) "
PRINT
PRINT "5. Y=+B*X^2"
PRINT
PRINT "6. Y=1/A+B*X^2"
PRINT
PRINT "7. Y=X/A+B*X^2"
PRINT
PRINT "15. Y=POLINOM"
PRINT
PRINT "16. Y=1/POLINOM 30. STOP "
PRINT
PRINT "20. Save Data"
PRINT
PRINT "21. Load data"
PRINT
PRINT "22. Reset Screen Data"
INPUT kod
RETURN
45 LOCATE 30, 1
COLOR 3
50 INPUT "M?r?si pontok sz?ma:"; m
IF m < 1 OR m > 99 THEN GOTO 45
70 FOR TIME = 0 TO 700: NEXT TIME
80 CLS
120 FOR I = 1 TO m
130 COLOR 3
LOCATE 30, 1
PRINT " "
LOCATE 30, 1
PRINT "X("; I; ")=";
INPUT u(I)
LOCATE 30, 40
PRINT "Y("; I; ")=";
INPUT v(I)
COLOR 6
141 PRINT "X("; I; ")="; u(I); TAB(40); "Y("; I; ")="; v(I)
150 NEXT I
RETURN
450 REM OSSZEGZES
460 LET SY = SY + YI
470 LET SX = SX + XI
475 LET SX2 = SX2 + XI * XI
480 LET SXY = SXY + XI * YI
485 RETURN
500 REM EGYENES
505 LET NEV = m * SX2 - SX * SX
510 IF ABS(NEV) > kicsi THEN GOTO 535
515 CLS
520 PRINT "NINCS MEGOLDAS,KEREK UJABB PONTOKAT (CONTINUE )"
525 STOP
530 GOTO 1900
535 LET C0 = (SY * SX2 - SX * SXY) / NEV
540 LET C1 = (m * SXY - SX * SY) / NEV
545 RETURN
550 REM HIBASZAMITAS
555 CLS
COLOR 1
560 PRINT "A HIBASZAMITAS MODJA?"
LOCATE 7, 1
COLOR 7
PRINT "(1) SZAMSZERUEN"
LOCATE 9, 1
PRINT "(2) KEPERNYO GRAFIKAN"
PRINT
PRINT
570 INPUT HM
580 CLS
600 IF HM = 2 THEN GOTO 720
610 LOCATE 1, 9
COLOR 1
PRINT "HIBASZAMITAS:"
LOCATE 4, 1
COLOR 8
PRINT " I"; TAB(7); "X(I)-ADOTT"; TAB(23); "Y(I)-ADOTT"; TAB(43); "H(I)-%"; TAB(57); "Y(I)-SZAMITOTT"
COLOR 7
615 PRINT
620 FOR I = 1 TO m
630 GOSUB 1400
640 IF ABS(v(I)) < kicsi THEN GOTO 670
650 LET H = 100 * (Y - v(I)) / v(I)
655 PRINT
660 PRINT I; TAB(6); u(I); TAB(23); v(I); TAB(40); H; TAB(57); Y
IF I / 10 = INT(I / 10) THEN
PRINT "Nyomj egy gombot..."
WHILE INKEY$ = ""
WEND
CLS
COLOR 8
PRINT " I"; TAB(7); "X(I)-ADOTT"; TAB(23); "Y(I)-ADOTT"; TAB(43); "H(I)-%"; TAB(57); "Y(I)-SZAMITOTT"
END IF
COLOR 7
670 NEXT I
PRINT
680 PRINT "RENDBEN ? (I/N)"
690 INPUT BS$
700 IF BS$ = "I" THEN GOTO 160
710 RETURN
720 GOSUB 1250
725 LET TU = 639 / DU
726 LET TV = 479 / DV
COLOR 6
730 FOR I = 0 TO 639
740 PSET (I, 479)
750 NEXT I
760 FOR I = 0 TO 479
770 PSET (0, 479 - I)
780 NEXT I
COLOR 15
790 FOR I = 1 TO m
800 LET X = (u(I) - UMN) * TU
810 LET Y = (v(I) - VMN) * TV
820 CIRCLE (X, 479 - Y), 2
830 NEXT I
840 FOR I = 0 TO 639
850 LET UI = UMN + I / TU
860 GOSUB 1500
870 LET Y = (Y - VMN) * TV
880 IF Y < 0 OR Y > 479 THEN GOTO 900
COLOR 10
890 PSET (I, 479 - Y)
900 NEXT I
LOCATE 1, 60
COLOR 1
PRINT "Nyomj egy gombot"
DO
AS$ = INKEY$
IF AS$ <> "" THEN GOTO 160
LOOP
903 STOP
904 CLS
910 PRINT "RENDBEN ? (I/N)"
920 INPUT BS$
930 IF BS$ = "I" THEN STOP
940 RETURN
1250 REM ELTOLAS
1252 IF isc > 0 THEN GOTO 1360
1253 LET isc = 1
1255 CLS
1260 INPUT "MAX X="; UMX
1280 INPUT "MAX Y="; VMX
1300 INPUT "MIN X="; UMN
1320 INPUT "MIN Y="; VMN
1340 LET DU = UMX - UMN
1350 LET DV = VMX - VMN
1355 CLS
1360 RETURN
1400 REM FUGGVENYERTEK-U(I)
1410 IF kod = 1 THEN LET Y = A * u(I) + B
1415 IF kod = 2 THEN LET Y = A * u(I) ^ B
1420 IF kod = 3 THEN LET Y = A * EXP(B * u(I))
1425 IF kod = 4 THEN LET Y = u(I) / (A + B * u(I) * u(I))
1430 IF kod = 5 THEN LET Y = SQR(A + B * u(I) * u(I))
1435 IF kod = 6 THEN LET Y = 1 / SQR(A + B * u(I) * u(I))
1440 IF kod = 7 THEN LET Y = u(I) / SQR(A + B * u(I) * u(I))
1489 IF kod < 15 THEN GOTO 1495
1490 LET Y = 0
1491 FOR J = 1 TO EM + 1
1492 LET Y = Y + G(J, EM + 2) * u(I) ^ (J - 1)
1493 NEXT J
1494 IF kod = 16 THEN LET Y = 1 / Y
1495 RETURN
1500 REM FVEREK -UI
1510 IF kod = 1 THEN LET Y = A * UI + B
1515 IF kod = 2 THEN LET Y = A * UI ^ B
1520 IF kod = 3 THEN LET Y = A * EXP(B * UI)
1525 IF kod = 4 THEN LET Y = UI / (A + B * UI)
1530 IF kod = 5 THEN LET Y = SQR(A + B * UI * UI)
1535 IF kod = 6 THEN LET Y = 1 / SQR(A + B * UI * UI)
1540 IF kod = 7 THEN LET Y = UI / SQR(A + B * UI * UI)
1589 IF kod < 15 THEN GOTO 1595
1590 LET Y = 0
1591 FOR J = 1 TO EM + 1
1592 LET Y = Y + G(J, EM + 2) * UI ^ (J - 1)
1593 NEXT J
1594 IF kod = 16 THEN LET Y = 1 / Y
1595 RETURN
1600 REM PONTELHAGYAS
1610 CLS
LET diskm = 1
1620 PRINT "AZ ELHAGYANDO PONTOK SZAMA ?"
1630 INPUT JM
1635 LOCATE 1, 28
PRINT "N="; JM
1640 DIM Z(JM)
1645 PRINT
1650 PRINT "AZ ELHAGYANDO PONTOK SORSZAMAI ?"
1660 FOR J = 1 TO JM
1670 INPUT Z(J)
1680 PRINT Z(J)
1690 NEXT J
1700 LET MM = m - JM
1710 DIM P(MM) AS DOUBLE
1720 DIM R(MM) AS DOUBLE
1730 LET K = 0
1740 FOR I = 1 TO m
1750 LET K = K + 1
1760 FOR J = 1 TO JM
1770 IF I = Z(J) THEN GOTO 1820
1780 NEXT J
1790 LET P(K) = u(I)
1800 LET R(K) = v(I)
1810 GOTO 1830
1820 LET K = K - 1
1830 NEXT I
1840 LET m = MM
1870 FOR I = 1 TO m
1880 LET u(I) = P(I)
1885 LET v(I) = R(I)
1890 NEXT I
1891 CLS
1895 RETURN
1900 REM UJ PONTOK
LET diskm = 1
1905 CLS
1910 PRINT "AZ UJ PONTOK SZAMA ?"
1915 INPUT JM
1916 LOCATE 1, 20
PRINT "N="; JM
1917 PRINT
1920 DIM P(m + (JM)) AS DOUBLE
1925 DIM R(m + JM) AS DOUBLE
1930 PRINT "AZ UJ PONTOK KOORDINATAI ?"
1931 PRINT
1935 FOR J = 1 TO JM
1940 INPUT P(m + J)
1945 INPUT R(m + J)
1946 PRINT P(m + J), R(m + J)
1950 NEXT J
1955 FOR I = 1 TO m
1960 LET P(I) = u(I)
1965 LET R(I) = v(I)
1968 NEXT I
1970 LET m = m + JM
1979 FOR I = 1 TO m
1980 LET u(I) = P(I)
1985 LET v(I) = R(I)
1990 NEXT I
1991 CLS
1995 RETURN: REM GOTO 160
2000 REM Y=A*X+B
2010 CLS
COLOR 4
2030 PRINT "Y=A*X+B"
2035 PRINT
2040 FOR I = 1 TO m
2050 LET XI = u(I)
2060 LET YI = v(I)
2070 GOSUB 450
2080 NEXT I
2090 GOSUB 500
2100 LET A = C1
2110 LET B = C0
COLOR 15
2120 PRINT "Y="; A; "*X+"; B
2125 PRINT
PRINT "A="; A; TAB(40);
LET SZAM = A: LET NYOMTAT = 1
GOSUB 7610
PRINT
PRINT "B="; B; TAB(40);
LET SZAM = B: LET NYOMTAT = 1
GOSUB 7610
2130 RETURN
2500 REM Y=A*X^B
2510 CLS
COLOR 1
2520 PRINT "Y=A*X^B"
2525 PRINT
2530 FOR I = 1 TO m
2535 IF u(I) <= 0 OR v(I) <= 0 THEN GOTO 2566
2540 LET XI = LOG(u(I))
2550 LET YI = LOG(v(I))
2560 GOSUB 450
2565 GOTO 2570
2566 PRINT "X("; I; ")<= 0 VAGY Y("; I; ")<= 0"
2567 STOP
2570 NEXT I
2580 GOSUB 500
2590 LET A = EXP(C0)
2600 LET B = C1
2610 LOCATE 3, 1
COLOR 15
PRINT "Y="; A; "*X^"; B
2615 PRINT
2620 RETURN
3000 REM Y=A*EXP(B*X)
3010 CLS
COLOR 1
3020 PRINT "Y=A*EXP(B*X)"
3025 PRINT
3030 FOR I = 1 TO m
3035 IF v(I) <= 0 THEN GOTO 3066
3040 LET XI = u(I)
3050 LET YI = LOG(v(I))
3060 GOSUB 450
3065 GOTO 3070
3066 PRINT "Y("; I; ")<= 0"
3067 STOP
3070 NEXT I
3080 GOSUB 500
3090 LET A = EXP(C0)
3100 LET B = C1
3110 LOCATE 3, 1
COLOR 15
PRINT "Y="; A; "*EXP("; B; "*X)"
3115 PRINT
3120 RETURN
3500 REM Y=X/(A+B*X)
3510 CLS
COLOR 1
3520 PRINT "Y=X/(A+B*X)"
3525 PRINT
3530 FOR I = 1 TO m
3535 IF v(I) = 0 THEN GOTO 3580
3540 LET XI = u(I)
3550 LET YI = XI / v(I)
3560 GOSUB 450
3570 GOTO 3600
3580 PRINT "Y("; I; ")=0"
3590 STOP
3600 NEXT I
3610 GOSUB 500
3620 LET A = C0
3630 LET B = C1
COLOR 15
LOCATE 3, 1
3640 PRINT "Y=X/("; A; "+"; C; "*X)"
3645 PRINT
3650 RETURN
4000 REM Y=SQR(A+B*X^2)
4010 CLS
COLOR 1
4020 PRINT "Y=SQR(A+B*X^2)"
4030 PRINT
4040 FOR I = 1 TO m
4050 LET XI = u(I) * u(I)
4060 LET YI = v(I) * v(I)
4070 GOSUB 450
4080 NEXT I
4090 GOSUB 500
4100 LET A = C0
4110 LET B = C1
COLOR 15
4120 PRINT "Y=SQR("; A; "+"; B; "*X^2)"
4130 PRINT
4140 RETURN
4500 REM Y=1/SQR(A+B*X^2)
4510 CLS
COLOR 1
4520 PRINT "Y=1/SQR(A+B*X^2)"
4530 PRINT
4540 FOR I = 1 TO m
4550 IF ABS(v(I)) < kicsi THEN GOTO 4600
4560 LET XI = u(I) * u(I)
4570 LET YI = 1 / v(I) / v(I)
4580 GOSUB 450
4590 GOTO 4630
4600 PRINT "ABS Y("; I; ")<"; kicsi
4620 STOP
4630 NEXT I
4640 GOSUB 500
4650 LET A = C0
4660 LET B = C1
4670 LOCATE 3, 1
COLOR 15
PRINT "Y=1/SQR("; A; "+"; B; "*X^2"
4680 PRINT
4690 RETURN
5000 REM Y=X/SQR(A+B*X^2)
5010 CLS
COLOR 1
5020 PRINT "Y=X/SQR(A+B*X^2)"
5030 PRINT
5040 FOR I = 1 TO m
5050 IF ABS(v(I)) < kicsi OR ABS(u(I)) < kicsi THEN GOTO 5100
5060 LET XI = 1 / u(I) / u(I)
5070 LET YI = 1 / v(I) / v(I)
5080 GOSUB 450
5090 GOTO 5130
5100 PRINT "ABS Y("; I; ") OR ABS X("; I; ")"; kicsi
5120 STOP
5130 NEXT I
5140 GOSUB 500
5150 LET A = C1
5160 LET B = C0
5170 LOCATE 3, 1
COLOR 15
PRINT "Y=X/SQR("; A; "+"; B; "*X^2"
5180 PRINT
5190 RETURN
REM save data
7000 CLS
PRINT "Adatok elmentese diskre"
PRINT
INPUT "Enter Filename: "; N$
OPEN N$ FOR OUTPUT AS #1
PRINT "Mi legyen az adathalmaz cime";
INPUT cim$
CLS
PRINT cim$
PRINT #1, cim$
PRINT m
PRINT #1, m
FOR kf = 1 TO m
PRINT u(kf), v(kf)
PRINT #1, u(kf), v(kf)
NEXT kf
CLOSE #1
PRINT "Az adatok a disken vannak!"
LET diskm = 1
PRINT "Nyomj egy gombot..."
WHILE INKEY$ = ""
WEND
RETURN
REM load
7500 PRINT "Adatok betoltese diskrol"
PRINT
INPUT "Enter Filename: "; N$
OPEN N$ FOR INPUT AS #1
INPUT #1, cim$
CLS
PRINT cim$
INPUT #1, m
PRINT m
FOR kf = 1 TO m
INPUT #1, u(kf), v(kf)
PRINT u(kf), v(kf)
NEXT kf
PRINT "Az adatok a diskrol betoltve!"
CLOSE #1
LET diskm = 1
PRINT "Nyomj egy gombot..."
WHILE INKEY$ = ""
WEND
RETURN
7600 CLS
PRINT "A keprnyo parameterk torolve!"
LET isc = 0
LET diskm = 1
RETURN
REM KONVERTALAS SPECTRUM FORMATUMRA (40 BITES 2-ES KOMP. SZAM)
REM BE: SZAM - KONVERTALANDO SZAM
REM KI: SM(5) TOMBEN AZ 5 BYTE
7610 KIT = LOG(ABS(SZAM)) / LOG(2)
KITE = INT(KIT) + 1
MANT = SZAM / 2 ^ KITE
SM(1) = 128 + KITE
S$ = ""
MANT = ABS(MANT)
FOR F = 0 TO 3
DIGIT = 0
FOR FG = 0 TO 7
LET BIT = 0
IF MANT - 2 ^ -(FG + F * 8 + 1) >= 0 THEN MANT = MANT - 2 ^ -(FG + F * 8 + 1): LET BIT = 1
IF (F * 8 + FG = 0) AND (SGN(SZAM) <> -1) THEN BIT = 0
DIGIT = DIGIT + 2 ^ (7 - FG) * BIT
IF BIT = 0 THEN S$ = S$ + "0" ELSE S$ = S$ + "1"
NEXT FG
SM(F + 2) = DIGIT
NEXT F
IF NYOMTAT = 1 THEN FOR F = 1 TO 5: PRINT SM(F); ","; : NEXT F
RETURN
9000 REM POLINOM
9010 CLS
COLOR 1
9020 PRINT "POLINOM, Y=A0+A1*X+A2*X^2+...+AN*X^N"
9030 LOCATE 5, 1
COLOR 3
PRINT "FOKSZAM N=";
9040 INPUT EM
9050 LOCATE 5, 11
PRINT EM;
9060 LET N1 = m
9065 FOR TIME = 0 TO 500: NEXT TIME
9090 FOR J = 1 TO EM + 2
9100 FOR K = 1 TO EM + 1
9110 LET G(K, J) = 0
9120 NEXT K
9130 NEXT J
9140 FOR J = 1 TO EM + 1
9150 FOR K = J TO (EM + 1)
9160 FOR I = 1 TO N1
9170 LET G(J, K) = G(J, K) + u(I) ^ (J + K - 2)
9180 NEXT I
9190 LET G(K, J) = G(J, K)
9200 NEXT K
9210 NEXT J
9220 FOR J = 1 TO EM + 1
9230 FOR I = 1 TO N1
9240 LET G(J, EM + 2) = G(J, EM + 2) + v(I) * u(I) ^ (J - 1)
9250 NEXT I
9260 NEXT J
9270 LET N = EM + 1
9280 GOSUB 9400
PRINT TAB(18); "EGYUTTHATOK:"
9310 FOR J = 1 TO EM + 1
Q = J - INT(J / 2) * 2
Q = 1 - Q
COLOR (Q + 6)
PRINT J - 1; TAB(18); G(J, EM + 2); TAB(50);
LET SZAM = G(J, EM + 2)
LET NYOMTAT = 1
GOSUB 7610: PRINT
NEXT J
COLOR 8
PRINT
9340 RETURN
9400 REM SUBLINEGY
9405 FOR I = 1 TO N
9407 IF ABS(G(I, I)) < kicsi THEN LET G(I, I) = kicsi
9410 FOR K = I + 1 TO N + 1
9415 LET G(I, K) = G(I, K) / G(I, I)
9420 NEXT K
9425 FOR J = I + 1 TO N
9430 FOR K = I + 1 TO N + 1
9435 LET G(J, K) = G(J, K) - G(J, I) * G(I, K)
9440 NEXT K
9445 NEXT J
9450 NEXT I
9455 FOR I = N - 1 TO 1 STEP -1
9460 FOR K = I + 1 TO N
9465 LET G(I, N + 1) = G(I, N + 1) - G(I, K) * G(K, N + 1)
9470 NEXT K
9475 NEXT I
9480 RETURN
9500 REM Y=1/(POLINOM)
9510 CLS
COLOR 1
9520 PRINT "Y=1/(POLINOM)"
9530 FOR I = 1 TO m
9540 IF v(I) = 0 THEN GOTO 9565
9559 LET v(I) = 1 / v(I)
9560 GOTO 9570
9565 LET v(I) = 1E+30
9570 NEXT I
9580 GOSUB 9030
9590 FOR I = 1 TO m
9600 LET v(I) = 1 / v(I)
9610 NEXT I
9620 RETURN
More information about the Elektro
mailing list