1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
#include <stdio.h>
#include <stdlib.h>
/*
Il faut convoluer seq1 de longueur l1 avec seq2 de longueur l2.
Il faut liberer le pointeur retourné.
*/
int *convoluer(int *seq1, int l1, int *seq2, int l2){
int i,j;
//on alloue un tableau qui va recevoir la convo :
int *res=malloc( (l1+l2-1)*sizeof(int) );
if (res==NULL) exit(EXIT_FAILURE);
//initialisation du tableau avec des 0 :
for (i=0; i<l1+l2-1; i++) res[i]=0;
//c'est parti :
for (i=0; i<l1; i++)
for (j=0; j<l2; j++) res[i+j]+=seq1[i]*seq2[j];
return res;
}
int main(void){
int i;
int tab1[]={1,1,1,1};
int tab2[]={0,1,2,3,4,5,4,3,2,1,0,0,0,0};
int *res=convoluer(tab1, 4, tab2, 14);
for (i=0; i<4+14-1; i++) printf("%i ",res[i]);
printf("\n");
free(res);
return EXIT_SUCCESS;
} |