Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'Datastrukturer og Dataabstraktion
40.  Arrays af structures

Vi så i afsnit 39.8 at structures kan indeholde felter som er andre structures. Temaet i dette kapitel er structures som elementer i arrays. Generelt er der fri datastruktur kombinationsmulighed i C.

40.1 Array af bøger40.2 Arrays af datoer: Kalender
 

40.1.  Array af bøger
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

Array-begrebet blev introduceret i kapitel 21. Et array kan opfattes som en tabel af elementer, hvor alle elementer er af samme type.

Vi vil nu se på situationen, hvor elementerne i et array er stuctures. Vores første eksempel er et array af bøger, som intuitiv svarer til en bogreol. Vi erindrer om, at en bog repræsenteres som en structure, jf. vores diskussion i afsnit 39.6.

I program 40.1 ser vi på det røde sted erklæringen af 'bogreolen' kaldet shelf. shelf er netop et array af book, hvor book ligesom i program 39.6 er et alias for struct book.

På de brune, blå og lilla steder i main initialiseres shelf[1], shelf[2] og shelf[3] på lidt forskellig vis (med det formål at illustrere forskellige muligheder). shelf[2] er i udgangspunktet en kopi af shelf[1], som dernæst modificeres fra 'Pelle Erobreren' til 'Ditte Menneskebarn'.

Til sidst i main udskrives bøgerne i shelf med prnt_book, som vi allerede mødte i program 39.6.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main(void) {
  book shelf[MAX_BOOKS];
  int i;

  shelf[0] =
     make_book("C by Disssection", "Kelley & Pohl", 
               "Addison Wesley", 2001, 1);   

  shelf[1] =
    make_book("Pelle Erobreren", "Martin Andersen Nexoe",
              "Gyldendal", 1910, 0);

  shelf[2] = shelf[1];
  shelf[2].title = "Ditte Menneskebarn"; 
  shelf[2].publishing_year = 1917;

  for(i = 0; i <=2; i++)
    prnt_book(shelf[i]);
  
  return 0;
}
Program 40.1    Et array af bøger i funktionen main.

Via den tilknyttede slide kan man få adgang til et komplet C program, som dækker program 40.1. Alternativt kan du bruge dette direkte link.

 

40.2.  Arrays af datoer: Kalender
Indhold   Op Forrige Næste   Slide Aggregerede slides    Stikord Programindeks Opgaveindeks 

I forlængelse af dato strukturen fra afsnit 39.5 ser vi nu på en tabel af datoer. En sådan tabel kan fortolkes som en kalender.

På det røde sted i program 40.2 erklæres calender variablen som et array med plads til 1000 datoer. Der er ligesom for shelf i program 40.1 tale om statisk allokering (jf. afsnit 26.1) hvilket indebærer at lageret til tabellerne allokeres når funktionen main kaldes.

I while-løkken gennemløbes et helt år, med start i first_date. Hver dato i året puttes i kalenderen. Bemærk at der er god plads. Fremdriften i kalenderen, som er en lidt tricket detalje, bestyres af funktionen tomorrow. Det er en god programmeringsøvelse at lave denne funktion.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main(void) {
  date calendar[1000];

  date first_date = {thursday, 14, 4, 2005},
       last_date  = {thursday, 13, 4, 2006},
       current_date;
  int i = 0, j = 0;

  current_date = first_date;
  while (date_before(current_date, last_date)){
    calendar[i] = current_date;
    current_date = tomorrow(current_date);
    i++;
  }

  for (j = 0; j < i; j++)
    prnt_date(calendar[j]);
}
Program 40.2    Et program der laver en kalender - kun main funktionen.

Hele programmet (dog uden tomorrow) kan tilgås via den tilknyttede slide. Alternativt kan du bruge dette direkte link. Hele programmet inklusive tomorrow er tilgængelig som en løsning på opgave 9.1.


Opgave 9.1. Funktionen tomorrow

Implementer funktionen tomorrow, som er illustreret på den omkringliggende side.

Funktionen tager en dato som parameter, og den returnerer datoen på den efterfølgende dag.

Hint: Lad i udgangspunktet resultatet være den overførte parameter, og gennemfør (pr. assignment til enkelte felter) de nødvendige ændringer.Løsning

Genereret: Onsdag 7. Juli 2010, 15:13:02
Thema indholdsfortegnelse -- Tastaturgenvej: 'u'  Forrige tema i denne lektion -- Tastaturgenvej: 'p'  Næste slide i denne lektion -- Tastaturgenvej: 'n'