IB001 Úvod do programování - Seminární skupina 25 a 26
Řešení 2. domácího úkolu - zdrojový kód
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> void vypis(int pole[], int m) { for(int i=0; i<m; i++) { if (i < m-1) printf("%d,",pole[i]); else printf("%d",pole[i]); } } void generujJadro(int pole[], int m) { /* prvni mozne reseni */ //for(int i=-m/2; i<=m/2; i++){ // pole[i+m/2] = pow(2,abs(abs(i)-m/2)); //} /* druhe mozne reseni */ //for(int i=0; i<m; i++) // pole[i] = pow(2,abs(abs(i-m/2)-m/2)); /* treti mozne reseni */ for(int i=0; i<=m/2; i++){ pole[i] = pow(2,i); pole[m-i-1] = pow(2,i); } } void generujSignal(int pole[], int m) { for(int i=0; i<m; i++) pole[i] = rand() % 10; } void konvoluce(int signal[], int jadro[], int m, int n) { int vystup[m], suma; for(int i=0; i<m; i++) { suma = 0; for(int j=0; j<n; j++) { if(i+j-n/2 >= 0 && i+j-n/2 < m){ suma += signal[i+j-n/2] * jadro[j]; } } vystup[i] = suma; } vypis(vystup,m); } int main(void) { int n=-1,m=-1; srand(time(NULL)); do{ printf("Zadejte velikost signalu (cele kladne cislo):"); scanf("%d",&m); scanf("%*[^\n]"); scanf("%*c"); if(m < 0) printf("Neplatny vstup\n"); }while(m < 0); do{ printf("Zadejte velikost konvolucniho jadra (liche cislo):"); scanf("%d",&n); scanf("%*[^\n]"); scanf("%*c"); if(n < 0 || n%2 == 0) printf("Neplatny vstup\n"); }while(n < 0 || n%2 == 0); int signal[m]; int jadro[n]; for(int i=0; i<n; i++) jadro[i] = 1; generujSignal(signal,m); printf("Nahodne generovany signal: "); vypis(signal,m); printf("\n"); generujJadro(jadro,n); printf("Konvolucni jadro: "); vypis(jadro,n); printf("\n"); printf("Konvolvovany signal: "); konvoluce(signal,jadro,m,n); printf("\n"); return 0; }