Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

СГВМ, контрольная работа задание 1 (вариант 3)

.c
Скачиваний:
16
Добавлен:
01.04.2014
Размер:
1.65 Кб
Скачать
//Декодирование линейныйх двоичных кодов, задание 1 (вариант 3) 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<io.h>
#include <conio.h>

int sum (int,int);
void main(void)
{
int mass[20];
int **code;
int k,i,count,choice,m,n,j,num;
char line[50], *ch,letter[1];
printf("Please enter the line for coding:\n");
scanf("%s",&line);
k=strlen(line);
count=0;
for (i=1; i<=k; i++)
{
	if (((k%i)==0))
	{
		if (count==21) {printf("Not enough array:\n");exit(1);}
		mass[count]=i;
		count++;
	}
}
printf("The size of transmitted array should be. You see (m-1,n-1) variants:\n");
for (i=0; i<count; i++)
{
	printf("%d. size %d X %d\n",(i+1),mass[i],k/mass[i]);
}
printf("Enter your choice:\n");
scanf("%d",&choice);
m=mass[choice-1]+1;
n=(k/mass[choice-1])+1;
code=(int **) calloc (n,sizeof(int *));
for (i=0; i<n; i++) 
	code[i]= (int *)calloc (m, sizeof (int)); 
count=0;
printf("m=%d n=%d\n",m,n);
for (i=0; i<(n-1); i++) 
	{
	for (j=0; j<(m-1); j++)
		{	
			letter[1]=line[count];
			ch=&letter[1];
			code[i][j]=atoi(ch);
			count++;
		}
	}

for (i=0; i<(n-1); i++) 
	{
	num=0;
	for (j=0; j<m; j++)
		{	
			num=sum(num,code[i][j]);
			if (j==(m-1)) code[i][j]=num;
		}
	}

for (j=0; j<m; j++) 
	{
	num=0;
	for (i=0; i<n; i++)
		{	
			num=sum(num,code[i][j]);
			if (i==(n-1)) code[i][j]=num;
		}
	}

printf("massiv:");
		for (i=0;i<n;i++)
		{printf("\n ");
		 for (j=0;j<m;j++)
			{
			 printf("%d ",code[i][j]);
			}
		}

printf("\nkodovoe slovo:\n");
for (i=0;i<n;i++)
		{
		 for (j=0;j<m;j++)
			{
			 printf("%d",code[i][j]);
			}
		}
free(code);	
getch();
	
}

int sum (int a, int b)
{
int c;
c=a+b;
if (c==2) c=0;
return (c);
}