8d. Simpele vector
2021-02-28
slides.com/jod/pt_8d
Docent: Jo Devriendt
Assistent: Ann Philips
Coördinator: Joost Vennekens
voornaam.achternaam@kuleuven.be
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Vector datastructuur
Vector == array van veranderlijke grootte
// aanmaken
Vector create();
// vrijgeven
void destroy(Vector* v);
// waarde toekennen op index i
void set(Vector* v, int i, double x);
// waarde opvragen van index i
double get(Vector* v, int i);
- Simpel geval: vector van double
- 4 procedures:
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Vector struct
typedef struct {
int lengte;
double* waardes;
} Vector;
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Vector create & destroy
Vector create() {
Vector v = {0, NULL};
return v;
}
void destroy(Vector* v){
if(v->waardes!=NULL){
free(v->waardes);
v->waardes = NULL;
v->lengte = 0;
}
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Vector set
void set(Vector* v, int i, double x){
if(i>=v->lengte){
v->waardes = realloc(v->waardes,
sizeof(double)*(i+1));
for(int j=v->lengte; j<i; ++j){
v->waardes[j]=0; // default
}
v->lengte=i+1;
}
v->waardes[i]=x;
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Vector get
double get(Vector* v, int i){
if(i>=v->lengte){
return 0; // default
}else{
return v->waardes[i];
}
}
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
main
void main() {
Vector v = create();
set(&v,7,3.14);
set(&v,0,1.62);
printf("lengte: %d\n", v.lengte);
for(int i=0; i<10; ++i){
printf("element %2d: %lf\n", i,
get(&v,i));
}
destroy(&v);
printf("lengte: %d\n", v.lengte);
}
$ ./a.out
lengte: 8
element 0: 1.620000
element 1: 0.000000
element 2: 0.000000
element 3: 0.000000
element 4: 0.000000
element 5: 0.000000
element 6: 0.000000
element 7: 3.140000
element 8: 0.000000
element 9: 0.000000
lengte: 0
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Oefening
- Voeg een resize procedure toe die de vector verkleint/vergroot tot grootte k
- Refactor de set-procedure om resize te gebruiken
// grootte aanpassen
void resize(Vector* v, int k);
Uitdaging: maak een tweedimensionele versie
Programmeertechnieken [B-KUL-YI0855]
De Nayer, IIW, E-ICT, 2Ba + schakel, 2020-2021
Samenvatting
- Een vector is een dynamische array
- Makkelijk om mee te werken
- Minder efficient, want gebruikt heap-geheugen ipv stack-geheugen
8d. Simpele vector
By Jo Devriendt
8d. Simpele vector
- 561