Introduktion till bc-kalkylatorn

bc är en interaktiv kalkylator som arbetar med godtycklig precision (begränsas enbart av tillgängligt minne).

Inmatning kan hämtas från standard input (vanligen tangentbordet) eller läsas från filer.
Förutom de fyra vanliga räknesätten kan bc även beräkna potenser och kvadratrötter. In- och utmatning kan göras i olika talbaser.

bc är även ett programmeringsspråk med C-liknande syntax: Variabler (även indexerade), villkors- och upprepningssatser, egendefinierade funktioner m m kan utnyttjas.
bc-program, liksom egendefinierade funktioner, kan sparas på filer och läsas in vid behov. Dessa möjligheter är speciellt användbara när mer omfattande beräkningar ska göras. För att t ex läsa in en fil som heter matte.bc, ger vi kommandot:

bc matte.bc

Om bc startas med alternativet -l (står för library):

bc -l

inläses ett fördefinierat matematiskt funktionsbibliotek (-l står för library) med sinus (s), cosinus (c), arcustangens (a), exponentialfunktionen (e), naturliga logaritmen (l) och Bessel-funktioner (j(n, x)).

bc avslutas med kommandot quit eller med filslutstecken (Ctrl-D)

Anmärkning: Med GNU:s bc-version (som brukar levereras med Linux) kan variabel- och funktionsnamn bestå av flera tecken (små bokstäver, understrykningstecken och siffror).

Interaktiv användning av bc

Användarinmatningen i exemplen visas i fetstil.

De fyra räknesätten

84+16-9
91
.*5     /* . betyder senaste resultat */
455
./9
50      /* OBS heltalsdivision har utförts */

Modulusoperator (heltalsrest vid division)

17%9
8  
scale=2  /* Begär två decimaler */
2/3
.66

Potenser

2^64-1
18446744073709551615  

Kvadratrot

scale=4
sqrt(3)
1.7320  
scale=8
t=sqrt(500)  /* Variabel och kvadradrot */
t                  
22.36067977   
length(.)    /* Antal siffror i sista resultat */
10        

Talbasbyte (ibase inmatning, obase utmatning)

ibase=2 
1001
9
obase=1000    /* Oktal bas, här fungerar även obase=8 */
1001
11
obase=10000   /* Hexadecimal bas (16) */
1110
E
ibase=1010    /* Decimal bas (10), här fungerar även ibase=A */
65535
FFFF 

Programmering

En sats behöver enbart avslutas med semikolon (;) om det finns någon efterföljande sats på samma rad.

Observera att när en variabel, ett uttryck eller ett funktionsanrop står för sig självt utmatas dess aktuella värde. Med GNU-bc kan utmatning även göras med en print-sats, där det som ska skrivas ut anges som en lista med kommaseparerade uttryck och strängar.

if-satsen

a=6
if (a%2==0) "a är jämnt" else "a är udda"
a är jämnt   

while-loopen

i=10
while (i>=0) {
  i
  i-=2
}
10
8
6
4
2 
0

for-loopen

5:ans multiplikationstabell

for (i=1; i<10; i++) {
  print i , "*5=", i*5, "\n"
}

1*5=5
2*5=10
3*5=15
4*5=20   

Funktioner

Bestämma heltalsdel av flyttal:

define heltalsdel(x)   {
  auto os
  os = scale ; scale=0
  x /= 1
  scale = os   /* Återställ gammal scale */
  return (x)
}
heltalsdel(99.95)
99                  

Funktion för att beräkna största gemensamma delare

define gcd(m,n) {
  auto r
  while (n != 0) {
    r=m%n
    m=n
    n=r
  }
  return (m)
}
    
gcd(3388,462)
154   

Beräkna n-fakultet (n!)
auto anger att de följande variablerna är lokala

define fact(n) {
  auto val, i
  val=1
  for (i=1; i <=n; ++i) val*=i
  return (val)
}  
fact(40)
30414093201713378043612608166064768844377641568960512000000000000

Om de matematiska standardfunktionerna laddats fungerar följande:

scale=30
e(10)
22026.465794806716516957900645284244 

quit    /* Avsluta bc */

Copyright © 2003 Martin Fahlgren

martin@1-1-7-46a.ghn.gbg.bostream.se

[Till början av dokumentet] [Till artikelförteckningen]