· 6 years ago · Nov 27, 2019, 05:10 AM
1Dikjstras:
2#include<stdio.h>
3#include<conio.h>
4#define INFINITY 9999
5#define MAX 10
6
7void dijkstra(int G[MAX][MAX],int n,int startnode);
8
9int main()
10{
11 int G[MAX][MAX],i,j,n,u;
12 printf("Enter no. of vertices:");
13 scanf("%d",&n);
14 printf("\nEnter the adjacency matrix:\n");
15
16 for(i=0;i<n;i++)
17 for(j=0;j<n;j++)
18 scanf("%d",&G[i][j]);
19
20 printf("\nEnter the starting node:");
21 scanf("%d",&u);
22 dijkstra(G,n,u);
23
24 return 0;
25}
26
27void dijkstra(int G[MAX][MAX],int n,int startnode)
28{
29
30 int cost[MAX][MAX],distance[MAX],pred[MAX];
31 int visited[MAX],count,mindistance,nextnode,i,j;
32
33 //pred[] stores the predecessor of each node
34 //count gives the number of nodes seen so far
35 //create the cost matrix
36 for(i=0;i<n;i++)
37 for(j=0;j<n;j++)
38 if(G[i][j]==0)
39 cost[i][j]=INFINITY;
40 else
41 cost[i][j]=G[i][j];
42
43 //initialize pred[],distance[] and visited[]
44 for(i=0;i<n;i++)
45 {
46 distance[i]=cost[startnode][i];
47 pred[i]=startnode;
48 visited[i]=0;
49 }
50
51 distance[startnode]=0;
52 visited[startnode]=1;
53 count=1;
54
55 while(count<n-1)
56 {
57 mindistance=INFINITY;
58
59 //nextnode gives the node at minimum distance
60 for(i=0;i<n;i++)
61 if(distance[i]<mindistance&&!visited[i])
62 {
63 mindistance=distance[i];
64 nextnode=i;
65 }
66
67
68
69
70 //check if a better path exists through nextnode
71 visited[nextnode]=1;
72 for(i=0;i<n;i++)
73 if(!visited[i])
74 if(mindistance+cost[nextnode][i]<distance[i])
75 {
76 distance[i]=mindistance+cost[nextnode][i];
77 pred[i]=nextnode;
78 }
79 count++;
80 }
81 //print the path and distance of each node
82 for(i=0;i<n;i++)
83 if(i!=startnode)
84 {
85 printf("\nDistance of node%d=%d",i,distance[i]);
86 printf("\nPath=%d",i);
87
88 j=i;
89 do
90 {
91 j=pred[j];
92 printf("<-%d",j);
93 }while(j!=startnode);
94 }
95}
96DES:
97include<stdio.h>
98#include<conio.h>
99#include<string.h>
100int p10[]={3,5,2,7,4,10,1,9,8,6},
101p8[]={6,3,7,4,8,5,10,9},
102p4[]={2,4,3,1};
103int ip[]={2,6,3,1,4,8,5,7},
104ipinv[]={4,1,3,5,7,2,8,6},
105ep[]={4,1,2,3,2,3,4,1};
106int s0[][4]={{1,0,3,2,},{3,2,1,0},{0,2,1,3,},{3,1,3,2}};
107int s1[][4]={{0,1,2,3},{2,0,1,3},{3,0,1,0},{2,1,0,3}};
108void permute(char op[],char ip[],int p[], int n){
109int i;
110for(i=0;i<n;i++)
111op[i]=ip[p[i]-1];
112op[i]='\0';
113}
114void circularls(char pr[],int n){
115int i;
116char ch=pr[0];
117for(i=0;i<n-1;i++)
118pr[i]=pr[i+1];
119pr[i]=ch;
120}
121void keygen(char k1[],char k2[],char key[]){
122char keytemp[11];
123permute(keytemp,key,p10,10);
124circularls(keytemp,5);
125circularls(keytemp+5,5);
126permute(k1,keytemp,p8,8);
127circularls(keytemp,5);
128circularls(keytemp,5);
129circularls(keytemp+5,5);
130circularls(keytemp+5,5);
131permute(k2,keytemp,p8,8);
132}
133void xor(char op[],char ip[]){
134int i;
135for(i=0;i<strlen(op)&&i<strlen(ip);i++)
136op[i]=(op[i]-'0')^(ip[i]-'0')+'0';
137}
138void sbox(char op[],char ip[],int s[][4]) {
139int value;
140value=s[(ip[0]-'0')*2+(ip[3]-'0')][(ip[1]-'0')*2+(ip[2]-'0')];
141op[0]=value/2+'0';
142op[1]=value%2+'0';
143op[2]='\0';
144}
145void fk(char op[],char ip[],char k[])
146{
147char l[5],r[5],tmp[9],tmp1[9],tmp2[9];
148strncpy(l,ip,4);
149l[4]='\0';
150strncpy(r,ip+4,4);
151r[4]='\0';
152permute(tmp,r,ep,8);
153xor(tmp,k);
154sbox(tmp1,tmp,s0);
155sbox(tmp2,tmp+4,s1);
156strcat(tmp1,tmp2);
157permute(tmp,tmp1,p4,4);
158xor(tmp,l);
159strcat(tmp,r);
160strcpy(op,tmp);
161}
162void sw(char pr[]) {
163char tmp[9];
164strncpy(tmp,pr+4,4);
165strncpy(tmp+4,pr,4);
166tmp[8]='\0';
167strcpy(pr,tmp);
168}
169void main()
170{
171char key[11],k1[9],k2[9],plain[9],cipher[9],tmp[9];
172clrscr();
173printf("enter 10 bit key:");
174gets(key);
175if(strlen(key)!=10) printf("invalid key length !!");
176else
177{
178keygen(k1,k2,key);
179printf("sub key k1::");
180puts(k1);
181printf("subkey k2::");
182puts(k2);
183printf("enter 8 bit plain text:");
184gets(plain);
185if(strlen(plain)!=8) printf("invalid length plain text !!");
186permute(tmp,plain,ip,8);
187fk(cipher,tmp,k1);
188sw(cipher);
189fk(tmp,cipher,k2);
190permute(cipher,tmp,ipinv,8);
191printf("cipher teaxt is::");
192puts(cipher);
193/* decryption process*/
194permute(tmp,cipher,ip,8);
195fk(plain,tmp,k2);
196sw(plain);
197fk(tmp,plain,k1);
198permute(plain,tmp,ipinv,8);
199printf("decrypted text is::");
200puts(plain);
201}
202getch();
203}
204OUTPUT:
205enter 10 bit key:2345167893
206sub key k1::27958436
207subkey k2::84613392
208enter 8 bit plain text:stmartin
209cipher teaxt is::iaσtmn≤t
210decrypted text is::stmartins
211enter 10 bit key:1456987203
212sub key k1::17062538
213subkey k2::25893401
214enter 8 bit plain text:computer
215cipher teaxt is::dpuncìcu
216decrypted text is::computer
217
218SUBNET Of BROADCASTING::
219#include<stdio.h>
220int a[10][10],n;
221main()
222{
223int i,j,root;
224printf("Enter no.of nodes:");
225scanf("%d",&n);
226printf("Enter adjacent matrix\n");
227for(i=1;i<=n;i++)
228for(j=1;j<=n;j++)
229{
230printf("Enter connecting of %d-->%d::",i,j);
231scanf("%d",&a[i][j]);
232}
233printf("Enter root node:");
234scanf("%d",&root);
235adj(root);
236}
237adj(int k){ int i,j;
238printf("Adjacent node of root node::\n"); printf("%d\n\n",k);
239for(j=1;j<=n;j++)
240{
241if(a[k][j]==1 || a[j][k]==1)
242printf("%d\t",j);
243}
244printf("\n");
245for(i=1;i<=n;i++)
246{
247if((a[k][j]==0) && (a[i][k]==0) && (i!=k)) printf("%d",i);
248}
249}
250OUTPUT:
251Enter no.of nodes:4
252Enter adjacent matrix:
253Enter connecting of 1-->1::0
254Enter connecting of 1-->2::1 Enter connecting of 1-->3::1
255Enter connecting of 1-->4::1
256Enter connecting of 2-->1::1
257Enter connecting of 2-->2::0
258Enter connecting of 2-->3::0
259Enter connecting of 2-->4::1
260Enter connecting of 3-->1::1
261Enter connecting of 3-->2::0
262Enter connecting of 3-->3::0
263Enter connecting of 3-->4::1
264Enter connecting of 4-->1::1
265Enter connecting of 4-->2::3
266Enter connecting of 4-->3::1
267Enter connecting of 4-->4::0
268
269
270
271Enter root node:2
272Adjacent node of root node:: 2
2731 4
274
2753
276
2771&2exp
278
279
280
281Bit Stuffing
282#include <stdio.h>
283#include<string.h>
284#include<stdlib.h>
285int main()
286{
287 char data[50],stuff[80],destuff[80];
288 int i,j=0,len,count=0,ch;
289 do
290 {
291 printf("Enter the Choice 1.Stuff 2.Destuff 3.Exit :--");
292 scanf("%d",&ch);
293 switch(ch)
294 {
295 case 1:
296 printf("Enter the Frame");
297 scanf("%s",data);
298 len=strlen(data);
299 for(int i=0;i<len;i++)
300 {
301 if(data[i]=='1')
302 {
303 count++;
304 }
305 else
306 {
307 count=0;
308 }
309 stuff[j]=data[i];
310 j++;
311 if(count==5)
312 {
313 stuff[j]='0';
314 j++;
315 count=0;
316 }
317 }
318 stuff[j]='\0';
319 printf("After Stuffing \n %s",stuff);
320 break;
321case 2:
322len=strlen(stuff);
323count=0;j=0;
324for(int i=0;i<len;i++)
325 {
326 if(stuff[i]=='1')
327 {
328 count++;
329 }
330 else
331 {
332 count=0;
333 }
334destuff[j]=stuff[i];
335j++;
336if(count==5)
337 {
338 count=0;
339 i++;
340 }
341destuff[j]='\0';
342 }
343printf("After Destuffing \n %s",destuff);
344break;
345case 3:
346exit(0);
347break;
348}
349}
350while(ch<4);
351return 0;
352}
353
354
355
356
357
358
359
360
361
362
363
364Character Stuffing or Byte Stuffing
365#include<stdio.h>
366#include<stdlib.h>
367int main()
368{
369char c[50],d[50],t[50];
370int i,m,j,ch;
371do
372{
373 printf("\n Enter the Choice 1.Stuff 2.Destuff 3.Exit :--");
374 scanf("%d",&ch);
375 switch(ch)
376 {
377 case 1:
378 printf("Enter the Number of Characters\n");
379scanf("%d",&m);
380printf("\n Enter the Original Data \n");
381for(i=0;i<m+1;i++)
382{
383scanf("%c",&c[i]);
384}
385d[0]='D';
386d[1]='L';
387d[2]='E';
388d[3]='S';
389d[4]='T';
390d[5]='X';
391for(i=0,j=6;i<m+1;i++,j++)
392{
393if((c[i]=='d'&&c[i+1]=='l'&& c[i+2]=='e'))
394{
395d[j]='D';
396j++;
397d[j]='L';
398j++;
399d[j]='E';
400j++;
401m=m+3;
402}
403
404d[j]=c[i];
405}
406m=m+6;
407m++;
408d[m]='D';
409m++;
410d[m]='L';
411m++;
412d[m]='E';
413m++;
414d[m]='E';
415m++;
416d[m]='T';
417m++;
418d[m]='X';
419m++;
420printf("\n Transmitted Data: \n");
421for(i=0;i<m;i++)
422{
423printf("%c",d[i]);
424}
425break;
426case 2:
427for(i=6,j=0;i<m-6;i++,j++)
428{
429if(d[i]=='D'&&d[i+1]=='L'&&d[i+2]=='E'&&d[i+3]=='d'&&d[i+4]=='l'&&d[i+5]=='e')
430i=i+3;
431t[j]=d[i];
432}
433printf("\n\n Received data:");
434for(i=0;i<j;i++)
435{printf("%c",t[i]);
436}
437break;
438case 3:
439exit(0);
440break;
441}
442}
443while(ch<4);
444return 0;
445}
446
447
448DVR:;
449#include<stdio.h>
450#include<stdlib.h>
451void rout_table();
452int d[10][10],via[10][10];
453int i,j,k,l,m,n,g[10][10],temp[10][10],ch,cost;
454int main()
455{
456 printf("enter the value of no. of nodes\n");
457scanf("%d",&n);
458rout_table();
459for(i=0;i<n;i++)
460for(j=0;j<n;j++)
461temp[i][j]=g[i][j];
462for(i=0;i<n;i++)
463for(j=0;j<n;j++)
464via[i][j]=i;
465while(1)
466{
467for(i=0;i<n;i++)
468for(j=0;j<n;j++)
469if(d[i][j])
470for(k=0;k<n;k++)
471if(g[i][j]+g[j][k]<g[i][k])
472{
473g[i][k]=g[i][j]+g[j][k];
474via[i][k]=j;
475}
476for(i=0;i<n;i++)
477{
478printf("table for router %c\n" ,i+97);
479for(j=0;j<n;j++)
480printf("%c:: %d via %c\n" ,j+97,
481g[i][j],via[i][j]+97);
482}
483break;
484}
485}
486
487void rout_table()
488{
489printf("\nEnter the routing table : \n");
490printf("\t|");
491for(i=1;i<=n;i++)
492printf("%c\t",i+96);
493printf("\n");
494for(i=0;i<=n;i++)
495printf("-------");
496printf("\n");
497for(i=0;i<n;i++)
498{
499printf("%c |",i+97);
500for(j=0;j<n;j++)
501{
502scanf("%d",&g[i][j]);
503if(g[i][j]!=999)
504d[i][j]=1;
505}
506}
507}
508
509
510CRC:
511#include<stdio.h>
512void main()
513{
514 int i,j,k,l;
515
516 //Get Frame
517 int fs;
518 printf("\n Enter Frame size: ");
519 scanf("%d",&fs);
520
521 int f[20];
522
523 printf("\n Enter Frame:");
524 for(i=0;i<fs;i++)
525 {
526 scanf("%d",&f[i]);
527 }
528
529 //Get Generator
530 int gs;
531 printf("\n Enter Generator size: ");
532 scanf("%d",&gs);
533
534 int g[20];
535
536 printf("\n Enter Generator:");
537 for(i=0;i<gs;i++)
538 {
539 scanf("%d",&g[i]);
540 }
541
542 printf("\n Sender Side:");
543 printf("\n Frame: ");
544 for(i=0;i<fs;i++)
545 {
546 printf("%d",f[i]);
547 }
548 printf("\n Generator :");
549 for(i=0;i<gs;i++)
550 {
551 printf("%d",g[i]);
552 }
553
554 //Append 0's
555 int rs=gs-1;
556 printf("\n Number of 0's to be appended:%d",rs);
557
558
559for (i=fs;i<fs+rs;i++)
560 {
561 f[i]=0;
562 }
563
564 int temp[20];
565 for(i=0;i<20;i++)
566 {
567 temp[i]=f[i];
568 }
569
570 printf("\n Message after appending 0's :");
571 for(i=0; i<fs+rs;i++)
572 {
573 printf("%d",temp[i]);
574 }
575
576 //Division
577 for(i=0;i<fs;i++)
578 {
579 j=0;
580 k=i;
581 //check whether it is divisible or not
582 if (temp[k]>=g[j])
583 {
584 for(j=0,k=i;j<gs;j++,k++)
585 {
586 if((temp[k]==1 && g[j]==1) || (temp[k]==0 && g[j]==0))
587 {
588 temp[k]=0;
589 }
590 else
591 {
592 temp[k]=1;
593 }
594 }
595 }
596 }
597
598 //CRC
599 int crc[15];
600 for(i=0,j=fs;i<rs;i++,j++)
601 {
602 crc[i]=temp[j];
603 }
604
605 printf("\n CRC bits: ");
606 for(i=0;i<rs;i++)
607
608
609{
610 printf("%d",crc[i]);
611 }
612
613 printf("\n Transmitted Frame: ");
614 int tf[15];
615 for(i=0;i<fs;i++)
616 {
617 tf[i]=f[i];
618 }
619 for(i=fs,j=0;i<fs+rs;i++,j++)
620 {
621 tf[i]=crc[j];
622 }
623 for(i=0;i<fs+rs;i++)
624 {
625 printf("%d",tf[i]);
626 }
627
628 printf("\n Receiver side : ");
629 printf("\n Received Frame: ");
630 for(i=0;i<fs+rs;i++)
631 {
632 printf("%d",tf[i]);
633 }
634
635 for(i=0;i<fs+rs;i++)
636 {
637 temp[i]=tf[i];
638 }
639
640 //Division
641 for(i=0;i<fs+rs;i++)
642 {
643 j=0;
644 k=i;
645 if (temp[k]>=g[j])
646 {
647 for(j=0,k=i;j<gs;j++,k++)
648 {
649 if((temp[k]==1 && g[j]==1) || (temp[k]==0 && g[j]==0))
650 {
651 temp[k]=0;
652 }
653 else
654 {
655 temp[k]=1;
656 }
657 }
658
659 }
660 }
661
662 printf("\n Reaminder: ");
663 int rrem[15];
664 for (i=fs,j=0;i<fs+rs;i++,j++)
665 {
666 rrem[j]= temp[i];
667 }
668 for(i=0;i<rs;i++)
669 {
670 printf("%d",rrem[i]);
671 }
672
673 int flag=0;
674 for(i=0;i<rs;i++)
675 {
676 if(rrem[i]!=0)
677 {
678 flag=1;
679 }
680 }
681
682 if(flag==0)
683 {
684printf("\n Since Remainder Is 0 Hence Message Transmitted From Sender To Receriver Is Correct");
685 }
686 else
687 {
688 printf("\n Since Remainder Is Not 0 Hence Message Transmitted From Sender To Receriver Contains Error");
689 }
690
691
692
693Hamming code:
694
695
696
697
698
699
700
701WriteaprogramtoimplementHammingcode
702
703#include<stdio.h> #include<math.h> intinput[32]; intcode[32]; intham_calc(int,int);
704
705voidmain()
706
707{
708
709intn,i,p_n=0,c_l,j,k;
710
711printf("PleaseenterthelengthoftheDataWord:"); scanf("%d",&n); printf("PleaseentertheDataWord:\n"); for(i=0;i<n;i++)
712
713{
714
715scanf("%d",&input[i]);
716
717}
718
719i=0;
720
721while(n>(int)pow(2,i)-(i+1))
722
723{
724
725p_n++;
726
727i++;
728
729}
730
731c_l=p_n+n;
732
733j=k=0;
734
735for(i=0;i<c_l;i++)
736
737{
738
739if(i==((int)pow(2,k)-1))
740
741{
742
743code[i]=0; k++;
744
745}
746
747else
748
749{
750
751code[i]=input[j]; j++;
752
753}
754
755}
756
757for(i=0;i<p_n;i++)
758
759{
760
761intposition=(int)pow(2,i); intvalue=ham_calc(position,c_l);
762
763code[position-1]=value;
764
765}
766
767printf("\nThecalculatedCodeWordis:");
768
769for(i=0;i<c_l;i++) printf("%d",code[i]);
770
771printf("\n");
772
773printf("PleaseenterthereceivedCodeWord:\n");
774
775for(i=0;i<c_l;i++) scanf("%d",&code[i]); interror_pos=0; for(i=0;i<p_n;i++)
776
777{
778
779intposition=(int)pow(2,i); intvalue=ham_calc(position,c_l); if(value!=0) error_pos+=position;
780
781}
782
783if(error_pos==1) printf("ThereceivedCodeWordiscorrect.\n");
784
785else
786
787printf("Erroratbitposition:%d\n",error_pos);
788
789}
790
791intham_calc(intposition,intc_l)
792
793{
794
795intcount=0,i,j; i=position-1;
796
797while(i<c_l)
798
799{
800
801for(j=i;j<i+position;j++)
802
803{
804
805if(code[j]==1) count++;
806
807}
808
809i=i+2*position;
810
811}
812
813if(count%2==0) return0;
814
815else return1;
816
817}
818
819output:-
820
821PleaseenterthelengthoftheDataWord:8 PleaseentertheDataWord:
822
8231
824
8251
826
8270
828
8291
830
8310
832
8330
834
8351
836
8371
838
839ThecalculatedCodeWordis:011110100011 PleaseenterthereceivedCodeWord:
840
8410
842
8431
844
8451
846
8471
848
8491
850
8511
852
8531
854
8550
856
8570
858
8590
860
8611
862
8631
864
865Erroratbitposition:6