## Assignment 4 : Solution

### Exercise 1

```#include <stdio.h>

#define MAXLEN 100

int issubstr ( char a[], char b[] )
{
int alen, blen, i, j, match;

alen = strlen(a);
blen = strlen(b);
for (i=0; i<=(alen-blen); ++i) {
match = 1;
for (j=0; (j<blen)&&(match); ++j) {
if (a[i+j]!=b[j]) match = 0;
}
if (match) return(i);
}
return(-1);
}

int main ()
{
char a[MAXLEN], b[MAXLEN];
int l;

printf("Enter the 1st string : "); fgets(a,MAXLEN,stdin);
l = strlen(a) - 1; a[l] = 0;
printf("Enter the 2nd string : "); fgets(b,MAXLEN,stdin);
l = strlen(b) - 1; b[l] = 0;
l = issubstr(a,b);
if (l < 0)
printf("The 2nd string is not a substring of the 1st.\n");
else
printf("The 2nd string is a substring of the 1st, starting at position %d.\n",l);
}
```

### Output

```Enter the 1st string : abb acabcbabca abbacb bbca cbba
Enter the 2nd string : bba
The 2nd string is a substring of the 1st, starting at position 16.

Enter the 1st string : abb acabcbabca abbacb bbca cbba
Enter the 2nd string : acb
The 2nd string is a substring of the 1st, starting at position 18.

Enter the 1st string : abb acabcbabca abbacb bbca cbba
Enter the 2nd string : a c b
The 2nd string is not a substring of the 1st.

Enter the 1st string : abb acabcbabca abbacb bbca cbba
Enter the 2nd string : a cb
The 2nd string is a substring of the 1st, starting at position 25.

Enter the 1st string : String!
Enter the 2nd string : String!
The 2nd string is a substring of the 1st, starting at position 0.

Enter the 1st string : String!!
Enter the 2nd string : string!
The 2nd string is not a substring of the 1st.

Enter the 1st string : A small string.
Enter the 2nd string :
The 2nd string is a substring of the 1st, starting at position 0.

Enter the 1st string : A small string.
Enter the 2nd string :
The 2nd string is a substring of the 1st, starting at position 1.

Enter the 1st string : This is undoubtedly a bigger string!
Enter the 2nd string : This is undoubtedly a big string!
The 2nd string is not a substring of the 1st.

Enter the 1st string : This is undoubtedly a big string!
Enter the 2nd string : This is undoubtedly a bigger string!
The 2nd string is not a substring of the 1st.
```

### Exercise 2

```#include <stdio.h>

#define MATDIM 10

int mat[MATDIM][MATDIM];

void printMatrix ( int mat[MATDIM][MATDIM] )
{
int i, j;

for (i=0; i<MATDIM; ++i) {
for (j=0; j<MATDIM; ++j) {
printf("%5d",mat[i][j]);
}
printf("\n");
}
printf("\n");
}

void transposeMatrix ( int mat[MATDIM][MATDIM] )
{
int i, j, t;

for (i=0; i<MATDIM; ++i) {
for (j=i+1; j<MATDIM; ++j) {
t = mat[i][j];
mat[i][j] = mat[j][i];
mat[j][i] = t;
}
}
}

int main ()
{
int i, j;

srand((unsigned int)time(NULL));
for (i=0; i<MATDIM; ++i) for (j=0; j<MATDIM; ++j)
mat[i][j] = rand() % 1999 - 999;
printf("Matrix before transposition :\n");
printMatrix(mat);
transposeMatrix(mat);
printf("Matrix after transposition :\n");
printMatrix(mat);
}
```

### Output

```Matrix before transposition :
-887 -648  798 -922  923  349 -819 -848  342 -495
-925   38  286 -453  418  190 -517  -70  745  635
694 -705 -153 -408  708 -865  563  647  508 -878
-154  620 -454 -356  770 -531 -934 -976 -307  407
-398 -233 -482  887  313  936  151  795 -134 -104
504 -367  263 -649  225  -29 -442 -212 -382 -861
-18  536  758  601 -820  601 -930 -682  698 -164
798 -700  602 -684 -813  -11 -748  337 -143  190
-694 -639  896  568 -216  121 -461  414  981  229
552   36 -235  383 -363   17   58 -293  335 -244

Matrix after transposition :
-887 -925  694 -154 -398  504  -18  798 -694  552
-648   38 -705  620 -233 -367  536 -700 -639   36
798  286 -153 -454 -482  263  758  602  896 -235
-922 -453 -408 -356  887 -649  601 -684  568  383
923  418  708  770  313  225 -820 -813 -216 -363
349  190 -865 -531  936  -29  601  -11  121   17
-819 -517  563 -934  151 -442 -930 -748 -461   58
-848  -70  647 -976  795 -212 -682  337  414 -293
342  745  508 -307 -134 -382  698 -143  981  335
-495  635 -878  407 -104 -861 -164  190  229 -244

Matrix before transposition :
-773  338 -652  429  522  867 -629  143  464 -998
-400 -465 -756 -886 -796  629  818   14 -270  132
-825  341 -670 -730 -127  704 -148  179   57  813
-844  283  151 -497 -288 -254 -557  155  962  907
156 -438 -485  400 -252 -281   29 -361  732  759
771  980  173 -826 -750 -881  877  102  371  -65
-12  526 -709 -861 -898   76  -43 -456 -769  -81
-476  387  554   39 -140 -625  830  888   14  635
720 -142  615 -106  104  938   85   54  113 -544
-938 -899 -945 -647 -688 -844  428  268 -300  731

Matrix after transposition :
-773 -400 -825 -844  156  771  -12 -476  720 -938
338 -465  341  283 -438  980  526  387 -142 -899
-652 -756 -670  151 -485  173 -709  554  615 -945
429 -886 -730 -497  400 -826 -861   39 -106 -647
522 -796 -127 -288 -252 -750 -898 -140  104 -688
867  629  704 -254 -281 -881   76 -625  938 -844
-629  818 -148 -557   29  877  -43  830   85  428
143   14  179  155 -361  102 -456  888   54  268
464 -270   57  962  732  371 -769   14  113 -300
-998  132  813  907  759  -65  -81  635 -544  731
```