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