Grundläggande programmeringsteknik
Arrayer
Kapitel 6
Grundläggande programmeringsteknik
Ett problem
• Hur sparas data …
• T.ex. när man vill spara resultaten i en tävling
• med 3 deltagare:
int resultat1;
int resultat2;
int resultat3;
• Håller detta för 10, 100 eller ett okänt antal?
HT2012
thomasj, marie, [email protected]
F4-2
Grundläggande programmeringsteknik
Lösningen
• Deklarera utrymme för många variabler
i en enda deklaration
• En array är en sekvens av värden
• N element indexeras med 0 till N-1
• Exempel: 10 element
0
resultat
HT2012
1
2
3
4
5
6
7
8
9
79 87 94 82 67 98 87 81 74 91
thomasj, marie, [email protected]
F4-3
Grundläggande programmeringsteknik
Fält och hakparanteser
• Deklaration
typ variabelNamn[storlek];
• Alla värden har samma typ
• Storleken måste vara ett positivt heltal
• Åtkomst av element
variabelNamn[index]
// index >= 0
HT2012
&&
index < storlek
thomasj, marie, [email protected]
F4-4
Grundläggande programmeringsteknik
Indexerade variabler
• Enklare hantering av många värden
float sum[15];
• Numreras från 0 till storlek - 1
• Enskilda element nås med index
sum[0] = 14.2;
• Kan användas som vilket värde som helst.
sum[0] = sum[1] + 10;
HT2012
thomasj, marie, [email protected]
F4-5
Grundläggande programmeringsteknik
Arrayer i minnet
int resultat[10];
resultat[0] = 17;
resultat[1] = 12;
resultat[9] = 25;
Resultat[0]
17
Resultat[1]
12
Resultat[2]
Resultat[3]
Resultat[4]
Resultat[5]
resultat[10] = 50;
Fel ! utanför arrayen
Resultat[6]
Resultat[7]
Resultat[8]
Resultat[9]
HT2012
thomasj, marie, [email protected]
25
F4-6
Grundläggande programmeringsteknik
Initialisera fält med listor
• Hela fältet kan initialiseras vid deklarationen
• Endast vid deklarationen
• Antalet element i listan anger storleken
int enheter[] = {147, 323, 89, 933, 540, 269, 97};
char kursNiva[] = {'A', 'B', 'C', 'D'};
HT2012
thomasj, marie, [email protected]
F4-7
Grundläggande programmeringsteknik
Initialisera fält med listor
• Om listan har färre element än deklarerad
storlek:
…fylls resten ut med nollor
int udda[10] = {1, 3, 5, 7};
udda
HT2012
0
1
2
3
4
5
6
7
8
9
1
3
5
7
0
0
0
0
0
0
thomasj, marie, [email protected]
F4-8
Grundläggande programmeringsteknik
Exempel
#include <stdio.h>
#include <stdlib.h>
printf("Talen i omvänd ordning\n");
printf("Tal 10: %d\n",s10);
printf("Tal 9: %d\n",s9);
printf("Tal 8: %d\n",s8);
printf("Tal 7: %d\n",s7);
printf("Tal 6: %d\n",s6);
printf("Tal 5: %d\n",s5);
printf("Tal 4: %d\n",s4);
printf("Tal 3: %d\n",s3);
printf("Tal 2: %d\n",s2);
printf("Tal 1: %d\n",s1);
int main(void){
int s1,s2,s3,s4,s5;
int s6,s7,s8,s9,s10;
s1=s2=s3=s4=s5=0;
s6=s7=s8=s9=s10=0;
printf("Mata in 10 tal\n");
scanf("%d", &s1);
scanf("%d", &s2);
scanf("%d", &s3);
scanf("%d", &s4);
scanf("%d", &s5);
scanf("%d", &s6);
scanf("%d", &s7);
scanf("%d", &s8);
scanf("%d", &s9);
scanf("%d", &s10);
HT2012
return 0;
}
thomasj, marie, [email protected]
F4-9
Grundläggande programmeringsteknik
Enklare lösning
#include <stdio.h>
#include <stdlib.h>
printf("Talen i omvänd ordning\n");
int main(void)
{
int s[10] = {0};
int i;
for (i = 9; i >= 0; i--)
{
printf("Tal %2d: %d\n",
i + 1, s[i]);
}
printf("Mata in 10 tal\n");
return 0;
for (i = 0; i < 10; i++)
{
scanf("%d", &s[i]);
}
HT2012
}
thomasj, marie, [email protected]
F4-10
Grundläggande programmeringsteknik
Testkörning
HT2012
thomasj, marie, [email protected]
F4-11
Grundläggande programmeringsteknik
Tillämpningar
• Listor av alla slag
• Spelplaner
• Sortering (se Bubblesort Ex.6.8!)
• Sökning
HT2012
thomasj, marie, [email protected]
F4-12
Grundläggande programmeringsteknik
Indexkontroll
• Väl skapat är fältets storlek fixt
• Programmerarens ansvar att index
refererar till existerande element
– Index måste vara i intervallet 0…storlek-1
• Index kontrolleras inte under körning!
– Man kan nå minnesadresser utanför
arrayen 
HT2012
thomasj, marie, [email protected]
F4-13
Grundläggande programmeringsteknik
Exempel
#include <stdio.h>
#include <stdlib.h>
max = tal[0]; // Varför ?
min = tal[0];
int main(void)
{
int tal[10];
int i, max, min;
for(i = 0; i < 1000; i++) // Obs !
{
if(tal[i] > max) max = tal[i];
if(tal[i] < min) min = tal[i];
}
printf("Mata in 10 tal\n");
for (i = 0; i < 10; i++)
{
scanf("%d", &tal[i]);
}
HT2012
printf("Största talet: %d\n",max);
printf("Minsta talet : %d\n",min);
return 0;
}
thomasj, marie, [email protected]
F4-14