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