Надо реализовать умножение двоичных чисел (как положительных, так и отрицательных) в зависимости от введенной пользователям разрядной сетки. Вот пример (сложение двоичных чисел) | Код | //Условие задачи: //Сложение в двоичной системе счисления //Входные параметры: длина разрядной сетки dlina_setki(4-16) // двоичная строка длины dlina_setki - операнд 1 // двоичная строка длины dlina_setki - операнд 2 // двоичная строка длины dlina_setki - результат
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <math.h>
int bintodec (char bin[],int dlina_bin) //перевод из 2СС в 10СС { unsigned int ves=0; //вес очередного разряда int i=0; int dec_chislo=0; //десятичное число
if (bin[0]=='0') { ves=1; for (i=dlina_bin;i>=0;i--) { if (bin[i]=='1') dec_chislo+=ves; ves*=2; } } else { //инвертирование цифр в двоичном числе for(i=0;i<=dlina_bin;i++) { if (bin[i]=='1') bin[i]='0'; else bin[i]='1'; } //к двоичному числу прибавляем единицу if (bin[dlina_bin]=='0') //если последняя цифра в массиве нуль - просто меняем нуль на единицу bin[dlina_bin]='1'; else { i=dlina_bin-1; for(;i>=0;i--) if(bin[i]=='0') //если нашли первый нуль { bin[i]='1'; //нуль превращаем в единицу i++; //и со следующей позиции в массиве for(;i<=dlina_bin;i++) bin[i]='0'; //обнуляем элементы break; } } //переводим двоичное число в десятичное ves=1; for (i=dlina_bin;i>=0;i--) { if (bin[i]=='1') dec_chislo+=ves; ves*=2; } dec_chislo=-dec_chislo; } return(dec_chislo); } void main() { int dlina_setki=0; //длина разрядной сетки char bin1[17]; //операнд 1 char copy_bin1[17]; //копия 1 операнда char bin2[17]; //операнд 2 char copy_bin2[17]; //копия 2 операнда char rezult[17]; //результат
int i=0;
int dlina_bin1=0; //длина введенного 1 двоичного числа int dlina_bin2=0; //длина введенного 2 двоичного числа int dec1=0; //1 операнд в 10СС int dec2=0; //2 операнд в 10СС int symm=0; //сумма 1 и 2 операндов (dec1+dec2)
clrscr();
printf("Введите длину разрядной сетки (от 4 до 16): "); scanf("%d",&dlina_setki); if((dlina_setki<4)||(dlina_setki>16)) { printf("Введена некорректная длина разрядной сетки.\n"); printf("Калькулятор завершает свою работу...\n"); getch(); exit(0); } printf("Введите первое двоичное число: "); scanf("%s",bin1); dlina_bin1=strlen(bin1); //длина 1 двоичного числа if((dlina_bin1-1)>=dlina_setki) { printf("Введенное число не поместится в разрядную сетку!"); getch(); exit(0); } if ((dlina_bin1-1)<(dlina_setki-1)) { printf("Не все разряды заполнены!"); getch(); exit(0); } for (i=0;i<dlina_bin1;i++) //запоминаем 1 операнд в переменную copy_bin1 copy_bin1[i]=bin1[i]; copy_bin1[i]='\0'; dec1=bintodec(copy_bin1,dlina_bin1-1); //значение 1 операнда в 10СС //printf("Первое двоичное число в десятичной системе: %d",dec1);
printf("Введите второе двоичное число: "); scanf("%s",bin2); dlina_bin2=strlen(bin2); //длина 2 двоичного числа if((dlina_bin2-1)>=dlina_setki) { printf("Введенное число не поместится в разрядную сетку!"); getch(); exit(0); } if ((dlina_bin2-1)<dlina_setki-1) { printf("Не все разряды заполнены!"); getch(); exit(0); } for (i=0;i<dlina_bin2;i++) //запоминаем 2 операнд в переменную copy_bin2 copy_bin2[i]=bin2[i]; copy_bin2[i]='\0'; dec2=bintodec(copy_bin2,dlina_bin2-1); //значение 2 операнда в 10СС //printf("Второе двоичное число в десятичной системе: %d",dec2);
symm=dec1+dec2; //сумма в 10СС двух операндов //printf("Сумма чисел: %d",symm); if( (symm<(-pow(2,dlina_setki-1))) || (symm>(pow(2,dlina_setki-1)-1)) ) { printf("Сумма чисел не поместится в разрядную сетку!"); getch(); exit(0); }
//printf("%16s",bin1); //printf("%16s",bin2); //printf("----------------");
char temp='0'; //память - сначало в памяти ноль rezult[dlina_bin1]='\0'; for(i=dlina_bin1-1;i>=0;) { if(bin1[i]=='0'&&bin2[i]=='0') { if (temp=='0') rezult[i]='0'; else { rezult[i]='1'; temp='0'; } i--; } else if (bin1[i]=='1'&&bin2[i]=='0') { if (temp=='0') rezult[i]='1'; else { rezult[i]='0'; temp='1'; } i--; } else if (bin1[i]=='0'&&bin2[i]=='1') { if (temp=='0') rezult[i]='1'; else { rezult[i]='0'; temp='1'; } i--; } else if (bin1[i]=='1'&&bin2[i]=='1') { if (temp=='0') { rezult[i]='0'; temp='1'; } else { rezult[i]='1'; temp='1'; } i--; } } printf("Сумма чисел: %s",rezult); getch(); }
|
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер
|