next up previous contents
Next: Algoritmisk komposisjon med CSound Up: C-programmering for musikere Previous: Halloverden!

Variabler, løkker og tester

Heltall og flyttall, uttrykk og tilordninger

Når vi lager programmer, trenger vi "skuffer" som vi kan mellomlagre data i. Slike skuffer kalles variabler, og vi gir hver variabel sitt eget variabelnavn. Det finnes flere forskjellige typer av variabler, avhengig av typen data vi vil lagre i dem. Variablenes navn og type må spesifiseres i såkalte variabeldeklarasjoner. Her er to eksempler på slike deklarasjoner:

  int tall;

deklarerer en variabel som kan lagre heltall (integer). Variabelen får navnet "tall".

  float vinkel, lengde;

deklarerer to variabler som kan lagre flyttall, dvs. tall med komma (f.eks. 3.141592654).

Vi legger verdier i variablene ved hjelp av tilordninger:

  vinkel = 7.5;

Denne kommandoen vil legge tallet 7.5 i variabelen vinkel. I tilordninger kan vi også spesifisere matematiske uttrykk:

  vinkel = 7.5*(lengde+4.3);

Her er et ubrukelig program som illustrerer bruk av variabler og tilordninger:

#include <stdio.h>

int a, b, sum;

void main(void)
{
  a = 1;
  b = a+1;
  sum = a+b;

  printf("Summen er %d\n", sum);
}

Det mest forvirrende her er kanskje "printf"-kommandoen. "%d" er en såkalt formateringskode som angir at her skal det settes inn et heltall. Tallet selv (sum) angis etter kommaet i printf-kommandoen.

Løkker

Med såkalte løkker kan vi la deler av programmet kjøres gjentatte ganger. Den vanligste typen løkke er for-løkken. La oss se på et eksempel igjen, denne gangen et litt mer artig program som skriver ut Fibonacci-sekvensen (der hvert tall er summen av de to forrige):

#include <stdio.h>

int i, sum, siste, nestsiste;

void main(void)
{
  nestsiste = 0; siste = 1;
  for (i=1; i<=20; i++) {
    sum = siste+nestsiste;
    printf("%2d:    %d\n", i, sum);
    nestsiste = siste;
    siste = sum;
  }
}

Det sentrale her er for-kommandoen. Vi spesifiserer en løkke der kommandoene mellom krøllparantesene skal gjentas flere ganger. Første gang skal løkkevariabelen i være 1 (i=1). "i++" betyr at i skal økes med 1 for hver gjennomgang av løkken, dette er bare en kortform for "i = i+1". Løkken skal gjentas så lenge i er mindre eller lik 20.

Formateringskoden "%2d" i printf-kommandoen angir at hvert tall skal ta opp to posisjoner i utskriften.

Legg dessuten merke til at koden er temmelig "smart" programmert. Prøv å skjønne hva som skjer her! Dette eksemplet illustrerer at programmering innebærer en god del tenking i tillegg til det rent syntaktiske.

Oppgave

Lag et program som skriver ut en tabell over kvadratet av alle de tall fra 0 til 1000 som er delelige med 10, slik:

   0:	0
  10:	100
  20:	400
...

Tester

Med if-tester kan programmet gjøre valg, slik at deler av koden bare utføres dersom et logisk utsagn slår til. Programmet under lager en tilfeldig tallsekvens. Vi bruker den innebygde funksjonen rand(), som leverer et tilfeldig tall mellom 0 og 32767. Ved hjelp av en if-test stanser vi alle sprang som er større enn 5000:

#include <stdio.h>

int i, tall, siste;

void main(void)
{
  siste = 0; i = 1;
  while (i<=20) {
    tall = rand();
    if (abs(tall-siste)<5000) {
      printf("%2d:    %d\n", i, tall);
      siste = tall;
      i++;
    }
  }
}

Her har vi også brukt en ny type løkke: while-løkken. Koden inne i while-løkken utføres inntil tellevariabelen i viser at vi har fått skrevet ut 20 tall.

abs er en funksjon som gir oss absoluttverdien (verdien uten fortegn) av et uttrykk.


next up previous contents
Next: Algoritmisk komposisjon med CSound Up: C-programmering for musikere Previous: Halloverden!

\yvind Hammer
Tue Oct 1 17:56:30 MDT 1996