home *** CD-ROM | disk | FTP | other *** search
- {***********************************************************************
- Programm Widerstands-Service
- (c) 5/89 by Kurt Winolf 2280 Westerland
- Widerstandsbereich 1 Ohm - 100 MOhm.
- **********************************************************************}
- Program widerstand;
- Type
- st = string[76];
- str1= string[8];
- str2= string[4];
- Farbtype = Array[0..16] of str1;
- Farbnum = Array[0..16] of Byte;
- JJ = Array[1..193] of REAL;
- ee = Array[1..25] of REAL;
- tt = Array[1..7] of REAL;
- bb = Array[1..7] of str2;
- cc = Array[1..7] of str1;
-
-
- const
- Farbring : Farbtype = (
- 'schwarz','braun ','rot ','orange ',
- 'gelb ','grün ','blau ','violett',
- 'grau ','weiß ','silber ','gold ',
- 'rot ','ohne ','braun ','rot ',
- 'grün ');
-
- Farbzahl : Farbnum = (0, 6, 4, 12, 14, 2, 1, 5, 8,
- 15, 15, 14, 4, 7, 6, 4, 2 );
-
- e192:JJ =(1.00,1.01,1.02,1.04,1.05,1.06,1.07,1.09,1.10,1.11,
- 1.13,1.14,1.15,1.17,1.18,1.20,1.21,1.23,1.24,1.26,
- 1.27,1.29,1.30,1.32,1.33,1.35,1.37,1.38,1.40,1.42,
- 1.43,1.45,1.47,1.49,1.50,1.52,1.54,1.56,1.58,1.60,
- 1.62,1.64,1.65,1.67,1.69,1.72,1.74,1.76,1.78,1.80,
- 1.82,1.84,1.87,1.89,1.91,1.93,1.96,1.98,2.00,2.03,
- 2.05,2.08,2.10,2.13,2.15,2.18,2.21,2.23,2.26,2.29,
- 2.32,2.34,2.37,2.40,2.43,2.46,2.49,2.52,2.55,2.50,
- 2.61,2.64,2.67,2.71,2.74,2.77,2.80,2.84,2.87,2.91,
- 2.94,2.98,3.01,3.05,3.09,3.12,3.16,3.20,3.24,3.28,
- 3.32,3.36,3.40,3.44,3.48,3.52,3.57,3.61,3.65,3.70,
- 3.74,3.79,3.83,3.88,3.92,3.97,4.02,4.07,4.12,4.17,
- 4.22,4.27,4.32,4.37,4.42,4.48,4.53,4.59,4.64,4.70,
- 4.75,4.81,4.87,4.93,4.99,5.05,5.11,5.17,5.23,5.30,
- 5.36,5.42,5.49,5.56,5.62,5.69,5.76,5.83,5.90,5.97,
- 6.04,6.12,6.19,6.26,6.34,6.42,6.49,6.57,6.65,6.73,
- 6.81,6.90,6.98,7.06,7.15,7.23,7.32,7.41,7.50,7.59,
- 7.68,7.77,7.87,7.96,8.06,8.16,8.25,8.35,8.45,8.56,
- 8.66,8.76,8.87,8.98,9.09,9.20,9.31,9.42,9.53,9.65,
- 9.76,9.88,10.00);
-
- e24:ee=( 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4,
- 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2,
- 6.8, 7.5, 8.2, 9.1, 10.0 );
-
- toler:tt=( 40.0, 20.0, 10.0, 5.0, 2.0, 1.0, 0.5 );
-
- bezeichnung : bb = ('E3','E6','E12','E24','E48','E96','E192');
-
- bezeichnung1: cc = ('E3 = 1','E6 = 2','E12 = 3',
- 'E24 = 4','E48 = 5','E96 = 6',
- 'E192 = 7' );
-
-
-
- VAR
- auswahl : Char;
- a, b, c, d, tol, dummy : Integer;
- tol1 : String[10];
-
- procedure Fensterrahmen(X1,Y1,X2,Y2,HFarbe,FFarbe,HFarbe1,
- FFarbe1 : Integer; ueberschrift : st);
- { zeichnet ein Fenster mit Rahmen. HFarbe & FFarbe ind die
- Rahmenfarben. HFarbe1 & FFarbe1 ind die Fensterfarben.
- Im Rahmen wird in der Mitte die Überschrift ausgageben.}
- const
- EckeobenLinks = #201;
- LineHor = #205;
- EckeobenRechts = #187;
- LineVert = #186;
- EckeuntenLinks = #200;
- EckeuntenRechts = #188;
- var
- I,x,y : integer;
-
- begin
- x:= x1+((x2-x1) DIV 2)-((length(ueberschrift) div 2))-1;
- y:= y1-1;
- TextBackground(HFarbe);
- TextColor(FFarbe);
- Window(X1-1,Y1-1,X2+1,Y2+1);
- ClrScr;
- Window(1,1,80,25);
- GotoXY(X1-1,Y1-1);
- Write(EckeobenLinks);
- for I := X1 to X2 do Write(LineHor);
- Write(EckeobenRechts);
- for I := Y1 to Y2 do begin
- GotoXY(X1-1,I); Write(LineVert);
- GotoXY(X2+1,I); Write(LineVert);
- end;
- GotoXY(X1-1,Y2+1);
- Write(EckeuntenLinks);
- for I := X1 to X2 do Write(LineHor);
- Write(EckeuntenRechts);
- GotoXY(x,y);
- writeln(ueberschrift);
- TextBackground(HFarbe1);
- TextColor(FFarbe1);
- Window(X1,Y1,X2,Y2);
- ClrScr;
- end;
-
- procedure widerstand;
- { Zeichnet den Widerstand im Textmodus, um unabhänig
- von einer Grafikkarte zu sein. }
- const
- EckeobenLinks = #218;
- LineHor = #196;
- EckeobenRechts = #191;
- LineVert = #179;
- EckeuntenLinks = #192;
- EckeuntenRechts = #217;
- var
- I : integer;
-
- begin
- TextBackground(7);
- TextColor(0);
- Window(6,3,70,9);
- ClrScr;
- GotoXY(1,1);
- Write(EckeobenLinks);
- for I := 2 to 63 do Write(LineHor);
- Write(EckeobenRechts);
- for I := 2 to 7 do begin
- GotoXY(1,I); Write(LineVert);
- GotoXY(64,I); Write(LineVert);
- end;
- GotoXY(1,7);
- Write(EckeuntenLinks);
- for I := 2 to 63 do Write(LineHor);
- Write(EckeuntenRechts);
- Window(2,2,78,10);
- GotoXY(2,5); WRITE('───┤');
- GotoXY(68,5); WRITE('├───');
- end;
-
- Procedure Zeichnering(farbe, x : Integer);
- { Zeichnet die Farbringe des Widerstandes.
- mit Farbkarte sind die Ringe farbig.
- Die Farbe wird als Text unter dem Ring ausgegeben }
- VAR I : integer;
- Begin
- Textbackground(7);
- Window(x+9,3,x+18,12);
- GotoXY(1,1); Write(#194);
- GotoXY(9,1); Write(#194);
- for I := 2 to 6 do begin
- GotoXY(1,I); Write(#179);
- GotoXY(9,I); Write(#179); End;
- GotoXY(1,7); Write(#193);
- GotoXY(9,7); Write(#193);
- GotoXY(3,8);
- Write(farbring[farbe]);
- TextColor(farbzahl[farbe]);
- Window(x+10,4,x+16,9);
- GotoXY(1,1);
- for I :=1 to 5 Do
- WriteLn('██████');
- GotoXY(1,1);
- TextColor(0);
- Textbackground(7);
- window(2,2,78,10);
- end;
-
- procedure ring(nr, farbe : integer);
- { legt fest, welcher Ring gezeichnet wird. }
- Var i : Integer;
- begin
- Window(10,4,65,8);
- case nr of
- 1 : Zeichnering(farbe, 0);
- 2 : Zeichnering(farbe, 9);
- 3 : Zeichnering(farbe, 18);
- 4 : Zeichnering(farbe, 27);
- 5 : Zeichnering(farbe, 45);
- end;
- end;
-
- Function Eingabe1:Char;
- { Auswahl für Menü }
- VAR ch : Char;
- BEGIN
- Write('Ihre Auswahl bitte ?');
- REPEAT
- Read(kbd,ch);
- IF ch IN ['1'..'6'] Then
- Eingabe1:=ch;
- Until ch IN ['1'..'6'];
- End;
-
- Function Eingabe2:Char;
- { Auswahl für Farben }
- VAR ch : Char;
- BEGIN
- Write('Ihre Auswahl bitte ?');
- REPEAT
- Read(kbd,ch);
- IF ch IN ['0'..'9'] Then
- Eingabe2:=ch;
- Until ch IN ['0'..'9'];
- End;
-
- Function Eingabe3:Char;
- { Auswahl für Toleranzen Kohle}
- VAR ch : Char;
- BEGIN
- Write('Ihre Auswahl bitte ?');
- REPEAT
- Read(kbd,ch);
- IF ch IN ['0'..'3'] Then
- Eingabe3:=ch;
- Until ch IN ['0'..'3'];
- End;
-
- Function Eingabe4:Char;
- { Auswahl für Toleranzen Metall }
- VAR ch : Char;
- BEGIN
- Write('Ihre Auswahl bitte ?');
- REPEAT
- Read(kbd,ch);
- IF ch IN ['0'..'2'] Then
- Eingabe4:=ch;
- Until ch IN ['0'..'2'];
- End;
-
- Function Eingabe5:Char;
- { Auswahl für Baureihe Normwert }
- VAR ch : Char;
- BEGIN
- Write('Ihre Auswahl bitte ?');
- REPEAT
- Read(kbd,ch);
- IF ch IN ['0'..'7'] Then
- Eingabe5:=ch;
- Until ch IN ['0'..'7'];
- End;
-
- Procedure MenueEingabe;
- BEGIN
- Window(24,10,56,22);
- WriteLn;
- WriteLn(' für Kohleschichtwiderstand');
- WriteLn('1 = Farbcode -> Widerstandswert');
- WriteLn('2 = Widerstandswert -> Farbcode');
- WriteLn;
- WriteLn(' für Metallschichtwiderstand');
- WriteLn('3 = Farbcode -> Widerstandswert');
- WriteLn('4 = Widerstandswert -> Farbcode');
- WriteLn;
- WriteLn('5 = Normwerte Servic');
- WriteLn;
- WriteLn('6 = Programm beenden');
- WriteLn;
- auswahl:=eingabe1;
- End;
-
- Procedure MenueEingabe1;
- { Eingabemenü für Normwert }
- VAR I : Integer;
- BEGIN
- Window(18,8,60,22);
- ClrScr;
- For I:= 1 to 7 DO
- WriteLn(bezeichnung1[I]);
- WriteLn;
- WriteLn('wählen Sie die Normreihe');
- auswahl:=eingabe5;
- End;
-
- Procedure Eingabe_Farbringe(Metall:Boolean);
- { Menü für Farbringe }
- VAR
- I : Integer;
- BEGIN
- Fensterrahmen(20,5,60,20,3,0,7,0,
- 'Farbcode -> Widerstandswert');
- Window(24,6,56,19);
- WriteLn;
- WriteLn('1. Farbring !!');
- WriteLn;
- for I:=0 to 9 Do
- WriteLn(farbring[I]:8,' = ',I);
- VAL(eingabe2,a,dummy);
- clrScr;
- WriteLn('2. Farbring !!');
- WriteLn;
- for I:=0 to 9 Do
- WriteLn(farbring[I]:8,' = ',I);
- VAL(eingabe2,b,dummy);
- clrScr;
- WriteLn('3. Farbring !!');
- WriteLn;
- for I:=0 to 9 Do
- WriteLn(farbring[I]:8,' = ',I);
- VAL(eingabe2,c,dummy);
- clrScr;
- IF Metall Then BEGIN
- WriteLn('4. Farbring !!');
- WriteLn;
- for I:=0 to 9 Do
- WriteLn(farbring[I]:8,' = ',I);
- VAL(eingabe2,d,dummy);
- clrScr;
- End;
- IF NOT Metall Then BEGIN
- WriteLn(' Toleranzring');
- for I:=0 to 3 Do
- WriteLn(farbring[I+10]:8,' = ',I);
- VAL(eingabe3,Tol,dummy);
- clrScr;
- End
- Else BEGIN
- WriteLn(' Toleranzring');
- for I:=0 to 2 Do
- WriteLn(farbring[I+14]:8,' = ',I);
- VAL(eingabe4,Tol,dummy);
- clrScr;
- End;
- Window(1,1,80,25);
- clrScr;
- Fensterrahmen(2,2,78,10,1,2,7,0,'╡ Widerstand ╞');
- widerstand;
- ring(1,a);
- ring(2,b);
- ring(3,c);
- IF Metall Then ring(4,d);
- IF Metall Then ring(5,tol+14)
- Else ring(5,tol+10);
- End;
-
- Procedure taste;
- { wartet auf Tastendruck }
- VAR
- ch : Char;
- BEGIN
- REPEAT
- Read(kbd,ch);
- Until ch <>'';
- End;
-
- Procedure berechne_wert_kohle1;
- { wandelt die Farbringeingabe in
- Widerstandswert um }
- VAR
- I : Integer;
- aa, bb, cc : String[10];
- wert : Real;
- BEGIN
- cc := '';
- Fensterrahmen(2,14,78,22,1,2,7,0,
- '╡ Wert des Kohleschichtwiderstandes ╞');
- Window(20,16,70,21);
- Str(a,aa); Str(b,bb);
- for i:=0 to c-1 do
- cc:= Concat(cc,'0');
- cc:= Concat(aa,bb,cc);
- VAL(cc,wert,dummy);
- WriteLn;
- Write(wert:10:1,' Ohm mit ');
- IF tol = 0 Then tol1 := '+- 10%'
- Else IF tol = 1 Then tol1 := '+- 5%'
- Else IF tol = 2 Then tol1 := '+- 2%'
- Else tol1 := '+- 20%';
- WriteLn(tol1,' Tolleranz');
- WriteLn('oder');
- If wert > 1E6 Then BEGIN
- wert := wert / 1E6;
- WriteLn(wert:10:1,' MOhm mit ',tol1,' Tolleranz');
- End
- Else
- If wert > 1E3 Then BEGIN
- wert := wert / 1E3;
- WriteLn(wert:10:1,' KOhm mit ',tol1,' Tolleranz');
- End;
- WriteLn;
- WriteLn('weiter Taste drücken !!');
- taste;
- End;
-
- Procedure berechne_wert_Metall1;
- { wandelt die Farbringeingabe in
- Widerstandswert um }
- VAR
- I : Integer;
- aa, bb, cc, dd : String[10];
- wert : Real;
- BEGIN
- dd := '';
- Fensterrahmen(2,14,78,22,1,2,7,0,
- '╡ Wert des Metallschichtwiderstandes ╞');
- Window(20,16,70,21);
- Str(a,aa); Str(b,bb); Str(c,cc);
- for i:=0 to d-1 do
- dd:= Concat(dd,'0');
- dd:= Concat(aa,bb,cc,dd);
- VAL(dd,wert,dummy);
- WriteLn;
- Write(wert:10:1,' Ohm mit ');
- IF tol = 0 Then tol1 := '+- 1%'
- Else IF tol = 1 Then tol1 := '+- 2%'
- Else IF tol = 2 Then tol1 := '+- 0.5%'
- Else tol1 := 'keine Angabe';
- WriteLn(tol1,' Tolleranz');
- WriteLn('oder');
- If wert > 1E6 Then BEGIN
- wert := wert / 1E6;
- WriteLn(wert:10:1,' MOhm mit ',tol1,' Tolleranz');
- End
- Else
- If wert > 1E3 Then BEGIN
- wert := wert / 1E3;
- WriteLn(wert:10:1,' KOhm mit ',tol1,' Tolleranz');
- End;
- WriteLn;
- WriteLn('weiter Taste drücken !!');
- taste;
- End;
-
- Procedure Eingabe_Wert_Kohle;
- { Eingabe des Widerstandwertes
- sowie das Anpassen des Wertes
- an 3 Farbringe }
- VAR
- I : Integer;
- aa,bb,cc : String[10];
- BEGIN
- Window(1,1,80,25);
- ClrScr;
- aa := '';
- Fensterrahmen(2,14,78,22,1,2,7,0,
- '╡ Wert des Kohleschichtwiderstandes ╞');
- Window(20,16,70,21);
- WriteLn('Bitte den Wert des Widerstandes in Ohm eingeben !! ');
- WriteLn;
- Write('Wert ? : ');
- ReadLN(aa);
- VAL(aa,I,dummy);
- IF I < 10 Then aa:=Concat('0',aa);
- WriteLn;
- WriteLn('Bitte den Wert der Tolleranz in % eingeben !!');
- WriteLn('10 oder 5 oder 2 oder 20 eingeben !!');
- WriteLn;
- Write('Wert ? : ');
- ReadLN(bb);
- cc:=copy(aa,1,1);
- VAL(cc,I,dummy);
- Fensterrahmen(2,2,78,10,1,2,7,0,'╡ Widerstand ╞');
- widerstand;
- ring(1,I);
- cc:=copy(aa,2,1);
- VAL(cc,I,dummy);
- ring(2,I);
- I:=length(aa)-2;
- ring(3,I);
- IF bb = '10' THEN I := 0
- Else IF bb = '5' THEN I := 1
- Else IF bb = '2' THEN I := 2
- Else I := 3;
- ring(5,I+10);
- Fensterrahmen(2,14,78,22,1,2,7,0,
- '╡ Wert des Kohleschichtwiderstandes ╞');
- Window(20,16,70,21);
- WriteLn;
- WriteLn(' ',aa,' Ohm ',bb,'% Tolleranz');
- WriteLn;
- WriteLn(' weiter Taste drücken !!!');
- taste;
- End;
-
- Procedure Eingabe_Wert_Metall;
- { Eingabe des Widerstandwertes
- sowie das Anpassen des Wertes
- an 4 Farbringe }
- VAR
- I : Integer;
- aa,bb,cc : String[10];
- BEGIN
- Window(1,1,80,25);
- ClrScr;
- aa := '';
- Fensterrahmen(2,14,78,22,1,2,7,0,
- '╡ Wert des Metallschichtwiderstandes ╞');
- Window(20,16,70,21);
- WriteLn('Bitte den Wert des Widerstandes in Ohm eingeben !! ');
- WriteLn;
- Write('Wert ? : ');
- ReadLN(aa);
- VAL(aa,I,dummy);
- IF (I < 100) AND ( I >= 10) Then aa:=Concat('0',aa)
- Else IF I < 10 Then aa:=Concat('00',aa);
- WriteLn;
- WriteLn('Bitte den Wert der Tolleranz in % eingeben !!');
- WriteLn('1 oder 2 oder 0.5 eingeben !!');
- WriteLn;
- Write('Wert ? : ');
- ReadLN(bb);
- cc:=copy(aa,1,1);
- VAL(cc,I,dummy);
- Fensterrahmen(2,2,78,10,1,2,7,0,'╡ Widerstand ╞');
- widerstand;
- ring(1,I);
- cc:=copy(aa,2,1);
- VAL(cc,I,dummy);
- ring(2,I);
- cc:=copy(aa,3,1);
- VAL(cc,I,dummy);
- ring(3,I);
- I:=length(aa)-3;
- ring(4,I);
- IF bb = '1' THEN I := 0
- Else IF bb = '2' THEN I := 1
- Else IF bb = '0.5' THEN I := 2;
- ring(5,I+14);
- Fensterrahmen(2,14,78,22,1,2,7,0,
- '╡ Wert des Kohleschichtwiderstandes ╞');
- Window(20,16,70,21);
- WriteLn;
- WriteLn(' ',aa,' Ohm ',bb,'% Tolleranz');
- WriteLn;
- WriteLn(' weiter Taste drücken !!!');
- taste;
- End;
-
- Procedure kohle1;
- {Farbring --> Wert Kohle }
- VAR
- I : Integer;
- Metall : Boolean;
- BEGIN
- Metall := FALSE;
- Eingabe_Farbringe(Metall);
- berechne_wert_kohle1;
- End;
-
- Procedure Metall1;
- {Farbring --> Wert Metall }
- VAR
- I : Integer;
- Metall : Boolean;
- BEGIN
- Metall := TRUE;
- Eingabe_Farbringe(Metall);
- berechne_wert_Metall1;
- End;
-
- Procedure Normwert_Servic;
- { Procedure sucht in einer gewählten Normreihe (E3 - E192)
- nach einem Widerstand, der dem gewüschten Wert am
- nächsten liegt.
- Widerstandsbereich 0.1 Ohm - 100 MOhm. }
- VAR
- nr, s, a : Integer;
- wert, xwert, Ralt, Rneu, RG,
- mi, ma, d1, d2, xs : Real;
- BEGIN
- Fensterrahmen(15,6,65,22,1,14,7,0,'╡ Normwert Service ╞');
- MenueEingabe1;
- VAL(auswahl,nr,dummy);
- auswahl:=' ';
- REPEAT
- ClrScr;
- WriteLn('Geben Sie den Widerstand ');
- Write('in Ohm ein: ');
- ReadLn(wert);
- Until (wert>=0.1) AND (wert<=1E8);
- ClrScr;
- xwert := 0.1;
- REPEAT
- If xwert <= wert Then xwert := xwert * 10;
- Until xwert > wert;
- xwert := xwert / 10;
- s := 1;
- IF (nr=6) OR (nr=3) Then s := 2;
- IF (nr=5) OR (nr=2) Then s := 4;
- IF nr=1 Then s := 8;
- IF nr>4 Then BEGIN
- a:= -1*S+1;
- Rneu:=xwert;
- REPEAT
- Ralt:=Rneu;
- a:=a+s;
- Rneu:=e192[a]*xwert;
- Until Rneu>wert;
- RG:=Ralt;
- IF (Rneu+Ralt)/2 < wert Then RG:=Rneu;
- End
- Else BEGIN
- a:= -1*S+1;
- Rneu:=xwert;
- REPEAT
- a:=a+s;
- Ralt:=Rneu;
- Rneu:=xwert*e24[a];
- Until Rneu>wert;
- RG:=Ralt;
- IF (Rneu+Ralt)/2 < wert Then RG:=Rneu;
- End;
- WriteLn('A u s g a b e :');
- WriteLn;
- mi := rg - rg*toler[nr]/100;
- ma := rg + rg*toler[nr]/100;
- d1 := (mi-wert)*100/wert;
- d2 := (ma-wert)*100/wert;
- IF (ABS(d2) < ABS(d1)) Then BEGIN
- xs:=d1;
- d1:=d2 ;
- d2:=xs;
- End;
- WriteLn('gewählte Normreihe = ',bezeichnung[nr]);
- WriteLn('gesuchter R-Wert = ',wert:9:0,' Ohm');
- WriteLn('nächster R-Wert = ',RG:9:0,' Ohm +- ',toler[nr]:2:1,'%');
- WriteLn('--> min. R-Wert = ',mi:9:0,' Ohm ');
- WriteLn('--> max. R-Wert = ',ma:9:0,' Ohm ');
- WriteLn('Abweichung vom Vorgegebenen R-Wert :');
- WriteLn('kleinste Abweichung = ',d1:3:0,'%');
- WriteLn('größte Abweichung = ',d2:3:0,'%');
- WriteLn;
- WriteLn('weiter Taste drücken !!');
- Taste;
- End;
-
- Begin { Hauptprogramm }
- REPEAT
- Fensterrahmen(2,2,78,24,1,2,7,0,
- '╡ Widerstands-Service (c) by Kurt Windolf, Westerland ╞');
- Fensterrahmen(20,7,60,22,3,0,7,0,'╡ Menü ╞');
- MenueEingabe;
- CASE auswahl of
- '1' : kohle1;
- '2' : Eingabe_Wert_Kohle;
- '3' : Metall1;
- '4' : Eingabe_Wert_Metall;
- '5' : Normwert_Servic;
- '6' : EXIT;
- End;
- Until auswahl = '6';
- end.