Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Lektion C4 Fält
Fält = Lista = Array (engelska)
Ofta har man behov av att arbeta med långa listor med tal. Istället för att skapa en variabel för varje tal så
är det möjligt att arbeta med en variabel som istället innehåller möjligheten att lagra flera tal. Man kallar
sådana här variabler med ”flera fack” för fält, lista eller det engelska uttrycket array. Man kan jämföra dem
med en hylla som har flera, numrerade fack, eller rent av med en gatuadress (gatunamn och husnummer).
För att få tag i ett av de värden man lagrat i listan anger du namnet på variabeln (hyllan, gatunamnet) och
fackets nummer eller index (hyllnummer, husnummer).
Ex.
Tidigare:
int tal1, tal2, tal3, tal4, tal5;
Nu:
int talserie[5];
// Här i deklarationen anger siffran inom hakparenteserna antal element i fältet.
0
1
2
3
4
talserie
Den senare deklarationen skapar fem "fack" direkt. För att komma åt innehållet i ett "fack" skulle du ju
ange fackets nummer (index), men observera att numreringen börjar på 0, vilket gör att i ett fält med fem
element får du indexnumren 0-4. Säg t.ex. att du vill tilldela det tredje facket värdet 31, vilket du gör med
följande kod:
talserie[2]=31;
OBS! Ingen kontroll sker av ditt värde inom hakparenteserna, så det hänger på dig som programmerare att
vara vaksam. När du kompilerar ditt program säger kompilatorn inget om du skrivit ett för stort index,
t.ex.
talserie[55]=1;
men när du kör programmet är det stor risk att det kraschar. Datorn tar det ställe i minnet där "fack" 55
skulle ha legat om det hade funnits, och då finns det stora chanser till att någonting viktigt för systemet
skrivs över.
Det är inte bara int som kan användas för att skapa fält, utan du kan skapa fält av godtyckliga typer, t.ex.
double temperaturer[10];
float medelvärden[3];
int dagar[7];
Du kan också initiera ett fält direkt i deklarationen, t ex
tal[4]={4,3,2,1};
Här skulle du kunna utelämna antalet fack i deklarationen och skriva tomma hakparenteser. För här ser
den ju hur många element som fältet består av.
Sida 1 (3)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Ex 1 :
#include <iostream>
#include <stdlib.h>
using namespace std;
int main( )
{
int lista[5], i, summa=0;
//***** läs in 5 heltal *****
for (i=0; i<5; i++)
{
cout<<” Ange ett heltal: ”;
cin>>lista[ i ];
}
//***** summera de 5 talen och skriv ut summan *****
for ( i=0; i<5; i++) summa=summa+lista[ i ];
cout<<” Summan av de 5 talen = ”<<summa<<endl;
//***** öka på de 5 talen med värdet 2 och skriv ut de nya talen *****
for ( i=0; i<5; i++)
{
lista[ i ]+=2;
cout<<” Element ”<<i<<” = ”<<lista[ i ]<<endl;
}
system(“PAUSE”);
return 0;
}
Feltyper
Det viktigt att du lär dig både att hitta och rätta fel. Som programmerare kan du råka ut för olika typer av
fel:
Kompileringsfel
Syntax(språkregler)-fel som kompilatorn upptäcker. T ex semikolon, en klammer saknas eller stavfel på en
variabel.
Exekveringsfel
Fel som uppstår först när du kör programmet. T ex när du indexerar utanför ett fält (se ex ovan) och det
området är "förbjudet område" i minnet.
Logiska fel
Fel som hittas genom att kontrollera resultatet vid en körning och genom extra kör tester där man matar
in viss indata och kontrollerar utdata. Dessa fel är ofta felaktiga algoritmer, feltankar av programmeraren.
Anta t.ex. att du skrivit följande program:
float area, x, y;
cout<<"Ge sidorna.";
cin>>x>>y;
area = x+y;
cout<<"Arean är: "<<area;
När du kör programmet matar du in: 2 2
Programmet skriver: Arean är: 4
vilket du kanske skulle ta som ett bevis på att programmet är ok, men med andra indata, t.ex. 2 3, skulle du
få arean 5, vilket inte är helt rätt… Du måste alltid testa olika möjliga indata.
Sida 2 (3)
Värmdö Gymnasium
Datainstitutionen
Programmering A
040108
Öva
Använd fält när du löser nedanstående övningar.
Övning C4.1
Läs in 7 tal och skriv ut dem i omvänd ordning, d.v.s. med det sjunde talet först och det första sist.
Övning C4.2
Läs in 10 st tal. Lagra dessa i en array. Läs in ytterligare ett tal, kontrollera och skriv ut hur många av de
tidigare talen som är större än detta tal.
Övning C4.3
Läs in 10 domarsiffror i backhoppning, alla givna med en decimal. Beräkna och skriv ut slutpoängen, som
är lika med medelvärdet av de 8 som är kvar då det största och det minsta värdet tagits bort.
Övning C4.4
Ofta har man behov av att ordna stora fält, och att kunna sortera fält är mycket användbart. Det finns
olika sorteringsalgoritmer som har olika för- och nackdelar vad det gäller t.ex. läsbarhet, snabbhet etc.
T ex finns metoderna sök minsta och byt, en annan är bubbelsortering.
Försök lösa denna uppgift genom att fundera själv.
Läs in sju heltal. Skriv ut dessa i stigande ordning.
Minitest
G-nivå:
1.
2.
3.
4.
Om man skriver följande deklarationsats. Hur många "lådor" deklarerar man?
Om du vill lägga in talet 55 i den första lådan hur skriver du?
Om du vill lägga in talet 33 i den sista lådan hur skriver du?
Nämn 3 olika feltyper som kan inträffa när du "proggar".
int talserie[7];
VG-nivå:
1.
2.
Skriv ett program som läser in 10 domarsiffror, alla givna med en decimal. Beräkna medelvärdet och skriv ut hur
många domarsiffror som är större än medelvärdet.
3 olika feltyper som kan inträffa när du "proggar". Förklara vad dessa tre feltyper betyder och ge ett exempel på
fel som kan inträffa för varje feltyp.
MVG-nivå:
1.
Skriv ett program som läser in 10 domarsiffror, alla givna med en decimal. Sortera sen listan och skriv ut den.
Läxa:
Läs detta häfte och gör minitestet.
Sida 3 (3)