DonJas
Married and Happy
- Член од
- 22 јуни 2008
- Мислења
- 2.651
- Поени од реакции
- 586
У принцип хејтам да замарам али овој пут морам. Иам мука, неам време. До вечер у 9 ми треба готов програм за множење со бутов алгоритам, арно ама треба да биде сместен во еден темплејт даден од професорите. Си најдов ја на нет програм у C за множење со бутов алгоритам, и дадениот темплејт е во C, али Не сум доволно способен да ги сместам двете у едно. Ако се најде некој шо има троа вишак време и feels like it, би било фино да ми ги склопи некој овие 2 у едно. Частам пиво
Темплејт
множење со бутов алгоритам
По можност да нема библиотеки што ги прават стварите место нас (конверзија во бинарно енд шит)
Фала
Темплејт
Код:
#include<stdio.h>
// funkcija za mnozenje na dva 8-bitni broja (vo RC format) so Butov algoritam
// vlez: a[] - mnozenik, b[] - mnozitel
// izlez: proizvod[] - proizvodot (mnozenik * mnozitel)
void mnozenjeButov(char a[], char b[], char proizvod[]) {
// izbrisete go dolniot red i vnesete go vasiot kod ovde
strcpy(proizvod, "00000000");
}
int main() {
int success = 1;
char a[100];
char b[100];
char proizvod[100];
char w_proizvod[100];
// TEST 1
strcpy(a, "00010011");
strcpy(b, "00000101");
strcpy(w_proizvod, "01011111");
mnozenjeButov(a, b, proizvod);
printf("TEST 1: %s, %s\n", a, b);
printf(" Tocen odgovor: %s\n", w_proizvod);
printf(" Vas odgovor: %s\n", proizvod);
if (strcmp(proizvod, w_proizvod) == 0) {
printf("Vasata programa dava tocen rezultat :-)\n\n");
} else {
printf("Vasata programa dava netocen rezultat!\n\n");
success = 0;
}
// TEST 2
strcpy(a, "00010000");
strcpy(b, "11111001");
strcpy(w_proizvod, "10010000");
mnozenjeButov(a, b, proizvod);
printf("TEST 2: %s, %s\n", a, b);
printf(" Tocen odgovor: %s\n", w_proizvod);
printf(" Vas odgovor: %s\n", proizvod);
if (strcmp(proizvod, w_proizvod) == 0) {
printf("Vasata programa dava tocen rezultat :-)\n\n");
} else {
printf("Vasata programa dava netocen rezultat!\n\n");
success = 0;
}
// TEST 3
strcpy(a, "11110000");
strcpy(b, "11111001");
strcpy(w_proizvod, "01110000");
mnozenjeButov(a, b, proizvod);
printf("TEST 3: %s, %s\n", a, b);
printf(" Tocen odgovor: %s\n", w_proizvod);
printf(" Vas odgovor: %s\n", proizvod);
if (strcmp(proizvod, w_proizvod) == 0) {
printf("Vasata programa dava tocen rezultat :-)\n\n");
} else {
printf("Vasata programa dava netocen rezultat!\n\n");
success = 0;
}
// TEST 4
strcpy(a, "00000100");
strcpy(b, "00001000");
strcpy(w_proizvod, "00100000");
mnozenjeButov(a, b, proizvod);
printf("TEST 4: %s, %s\n", a, b);
printf(" Tocen odgovor: %s\n", w_proizvod);
printf(" Vas odgovor: %s\n", proizvod);
if (strcmp(proizvod, w_proizvod) == 0) {
printf("Vasata programa dava tocen rezultat :-)\n\n");
} else {
printf("Vasata programa dava netocen rezultat!\n\n");
success = 0;
}
if (success == 1) {
printf("Vasata programa gi pomina testovite uspesno!\n");
} else {
printf("Nekoi od testovite bea neuspesni.\n");
}
return 0;
}
множење со бутов алгоритам
Код:
/* C Program For Implementation Of Signed Multiplication
OR
C Program for the Implementation Of Booths Algorithm */
#include< stdio.h>
#include< conio.h>
#include< process.h>
#include< math.h>
int get(int a)
{
char ch='B';
int flag=0;
if(a==1)
ch='A';
do
{
printf("│ ENTER VALUE OF %c: ",ch);
scanf("%d",&a);
if(a< 0)
{
a = a * -1;
flag = 1;
}
if(9< =a)
printf("│\n\t!INVALID NUMBER.ENTER VALUE (-9 < A < 9)!");
}while(9< =a);
if(flag)
a = a *-1;
return(a);
}
void add(int *a,int *b)
{
int x,i,c=0;
for(i=3;i>=0;i--)
{
x=a[i];
a[i]=c^x^b[i];
if(((c==1)&&(x==1))||((x==1)&&(b[i]==1))||((b[i]==1)&&(c==1)))
c = 1;
else
c = 0;
}
}
void binary(int x,int*arr)
{
int i,p=x,c[4]={0,0,0,1};
for(i=0;i< 4;i++)
arr[i] = 0;
if(x < 0)
x = x *-1;
i = 3;
do
{
arr[i]=x%2;
x = x/2;
i--;
}while(x!=0);
if(p< 0)
{
for(i=0;i< 4;i++)
arr[i]=1-arr[i];
add(arr,c);
}
printf("\n\nTHE BINARY EQUIVALENT OF %d IS : ",p);
for(i=0;i< 4;i++)
printf("%d",arr[i]);
}
void rshift(int x,int *y)
{
int i;
for(i=3;i>0;i--)
y[i] = y[i-1];
y[0] = x;
}
void main()
{
int q=0,i,j,a,b,A[4]={0,0,0,0},C[4]={0,0,0,1},C1[8]={0,0,0,0,0,0,0,1};
int s=0,z=0,Q[4],M[4],temp,temp1[4],ans[8],y,x=0,c=0;
clrscr();
printf("\n│----------------------------------------------------\n");
a = get(1);
b=get(0);
printf("\n│---------------------------------------------------\n");
binary(a,M);
binary(b,Q);
printf("\n\n---------------------------------------------------\n");
printf(" OPERATION\t\t A\t Q\tQ'\t M");
printf("\n\n INITIAL\t\t");
for(i=0;i< 4;i++)
printf("%d",A[i]);
printf("\t");
for(i=0;i< 4;i++)
printf("%d",Q[i]);
printf("\t");
printf("%d\t",q);
for(i=0;i< 4;i++)
printf("%d",M[i]);
for(j=0;j< 4;j++)
{
if((Q[3]==0)&&(q==1))
{
printf("\n A:=A+M \t\t");
add(A,M);
for(i=0;i< 4;i++)
printf("%d",A[i]);
printf("\t");
for(i=0;i< 4;i++)
printf("%d",Q[i]);
printf("\t%d\t",q);
for(i=0;i< 4;i++)
printf("%d",M[i]);
}
if((Q[3]==1)&&(q==0))
{
printf("\n A:=A-M \t\t");
for(i=0;i< 4;i++)
temp1[i] = 1-M[i];
add(temp1,C);
add(A,temp1);
for(i=0;i< 4;i++)
printf("%d",A[i]);
printf("\t");
for(i=0;i< 4;i++)
printf("%d",Q[i]);
printf("\t%d\t",q);
for(i=0;i< 4;i++)
printf("%d",M[i]);
}
printf("\n Shift \t\t\t");
y = A[3];
q = Q[3];
rshift(A[0],A);
rshift(y,Q);
for(i=0;i< 4;i++)
printf("%d",A[i]);
printf("\t");
for(i=0;i< 4;i++)
printf("%d",Q[i]);
printf("\t");
printf("%d\t",q);
for(i=0;i< 4;i++)
printf("%d",M[i]);
}
printf("\n\n---------------------------------------------------\n");
printf("\nTHE ANSWER IN BINARY IS : ");
for(i=0;i< 4;i++)
ans[i]=A[i];
for(i=0;i< 4;i++)
ans[i+4]=Q[i];
if(((a< 0)&&(b>0))||((a>0)&&(b< 0)))
{
for(i=0;i< 8;i++)
ans[i]=1-ans[i];
for(i=7;i>=0;i--)
{
x = ans[i];
ans[i]=c^x^C1[i];
if(((c==1)&&(x==1))||((x==1)&&(C1[i]==1))||((C1[i]==1)&&(c==1)))
c=1;
else
c=0;
}
}
for(i=0;i< 8;i++)
printf("%d",ans[i]);
for(i=7;i>=0;i--)
{
s = s + (pow(2,z) * ans[i]);
z = z+1;
}
if(((a< 0)&&(b>0))||((a>0)&&(b< 0)))
printf("\nTHE ANSWER IN DECIMAL IS : -%d\n",s);
else
printf("\nTHE ANSWER IN DECIMAL IS : %d\n",s);
getch();
}
Фала