#include<stdio.h>// Version itérativeintpgcd_iter(inta,intb){while(b){intt=a;a=b;b=t%b;}returna;}// Alternative recursiveintpgcd_rec(inta,intb){if(b)returnpgcd_rec(b,a%b);elsereturna;}voidprint_array(intl,constintt[])// le tableau t ne sera pas modifié{inti=0;while(i<l){printf("%3d ",t[i]);// %d suffit, mais pour pascal c'est plus joli aveci=i+1;}printf("\n");}voidfill_even(intn,intt[]){inti=0;while(i<n){t[i]=2*i;i=i+1;}}intsum(intlen,constintarray[]){inti=0,sum=0;while(i<len){sum=sum+array[i];i=i+1;}returnsum;}intdot_product(intlen,constintv1[],constintv2[]){inti=0,sum=0;while(i<len){sum=sum+v1[i]*v2[i];i=i+1;}returnsum;}voidarray_sum(intlen,constintv1[],constintv2[],intres[]){inti=0;while(i<len){res[i]=v1[i]+v2[i];i=i+1;}}voidpascal_line(intn,inttab[]){inti=n-1;tab[i]=1;while(i>1){i=i-1;tab[i]=tab[i-1]+tab[i];}}voidpascal(intn){inti=0;inttab[n];while(i<n){i=i+1;pascal_line(i,tab);print_array(i,tab);}}intis_sorted(intl,constinttab[]){inti=1;while(i<l){if(tab[i]<tab[i-1])return0;i=i+1;}return1;}intin_array(intk,intl,constinttab[]){inti=0;while(i<l){if(tab[i]==k)return1;i=i+1;}return0;}intin_sorted_array(intk,intl,constinttab[]){intstart=0;intstop=l-1;while(start<=stop){intmid=(stop+start)/2;if(tab[mid]>k)stop=mid-1;elseif(tab[mid]<k)start=mid+1;elsereturn1;}return0;}voidtest_member(intlen,constinttab[],constinttab2[]){// Ce test est un peu pourri (d'un point de vue test)inti=0;while(i<len){printf("%d => %d (est il pair ?)\n",tab[i],in_array(tab[i],len,tab2));printf("%d => %d (est il pair ?)\n\n",tab[i],in_sorted_array(tab[i],len,tab2));printf("%d => %d (est il dans ?)\n",tab[i],in_array(tab[i],len,tab));printf("%d => %d (est il dans ?)\n\n",tab[i],in_sorted_array(tab[i],len,tab));i=i+1;}}intmain(intargc,char*argv[]){inttab[]={1,2,3,4,5,6,7,8,9};inttab2[9];inttab3[9];print_array(9,tab);printf("Somme: %d\n",sum(9,tab));fill_even(9,tab2);print_array(9,tab2);printf("Somme: %d\n",sum(9,tab2));printf("Produit scalaire: %d\n",dot_product(9,tab,tab2));array_sum(9,tab,tab2,tab3);printf("Somme membre a membre: ");print_array(9,tab3);test_member(9,tab,tab2);pascal(10);return0;}// Les bonusintmember_sorted_r_int(intk,intstart,intstop,constinttab[]){if(start>stop)// Les curseurs se sont croisésreturn0;intmid=(stop+start)/2;if(tab[mid]>k)returnmember_sorted_r_int(k,start,mid-1,tab);elseif(tab[mid]<k)returnmember_sorted_r_int(k,mid+1,stop,tab);return1;}intmember_sorted_r(intk,intl,constinttab[]){returnmember_sorted_r_int(k,0,l-1,tab);}voidbubble_sort(intl,inttab[]){intdone;do{done=1;for(inti=0;i<l-1;i=i+1)if(tab[i]>tab[i+1]){inttmp=tab[i];// echanger tab[i] <=> tab[i + 1]tab[i]=tab[i+1];tab[i+1]=tmp;done=0;// on a fait une permutation, on a donc pas fini}}while(!done);}voideratostene(intlen,inttab[]){inti=0;intaccess=0;while(i<len){while(!tab[i]){// On cherche le premier non nuli=i+1;access=access+1;}intj=1;while(j*i<len){tab[j*i]=0;j=j+1;access=access+1;}}printf("%d\t%d\n",len,access);}