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; 
}