Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

08.01.2009, 19:10
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Сообщение от k1113r
возникла небольшая проблема надо побитово перемножить 2 числа (тоесть в двоичной системе) и перевести обратно
язык? формат ввода?
Последний раз редактировалось 4p3; 08.01.2009 в 19:16..
|
|
|

08.01.2009, 19:18
|
|
Участник форума
Регистрация: 07.07.2008
Сообщений: 161
Провел на форуме: 1027635
Репутация:
234
|
|
4p3
Всё правильно он говорит, "И" или конъюнкция или логическое умножение, таблица истинности:
x y x&y
1 1 1
1 0 0
0 1 0
0 0 0
умножением называется потому что результат равен 1 только если оба операнда = 1.
"ИЛИ" или дизъюнкция или логическое сложение, таблица истинности:
x y x|y
1 1 1
1 0 1
0 1 1
0 0 0
я думаю очевидно почему называется сложением =)
Насколько я понял речь идёт о перемножении 2-х чисел в двоичной системе счислений, в этом случае criz не прав потому что перемножать надо так же как и в случае с десятичными числами, только брать результат по модулю 2.
C-шный код для работы с двоичной системой:
PHP код:
Binary arithmatic
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<math.h>
void b_to_d(char result[]); //binary to decimal
void d_to_b(int dec,char binary[]); // decimal to binary
main()
{
int ch,n1,n2,i=0,j,k,l,carry,r,x1,x2,x;
char bn1[30],bn2[30],result[30],binary[30];
char multi[30][30];
clrscr();
do
{
printf("<1> input first operand \n");
printf("<2> input second operand \n");
printf("<3> binary addition \n");
printf("<4> binary subtraction \n");
printf("<5> binary multiplation \n");
printf("<6> result to decimal \n");
printf("<7> Exit \n\n");
do
{
printf("enter your choice ");
scanf("%d",&ch);
}while(ch>7 || ch<1);
switch (ch)
{
case 1:
printf("\n input first operand ");
scanf("%d",&n1);
x1=n1;
d_to_b(n1,binary);
for(i=0;binary[i]!='\0';++i)
bn1[i]=binary[i];
bn1[i]='\0';
break;
case 2:
printf("\n input second operand ");
scanf("%d",&n2);
x2=n2;
d_to_b(n2,binary);
for(i=0;binary[i]!='\0';++i)
bn2[i]=binary[i];
bn2[i]='\0';
break;
case 3: //addition
for(i=0;i<30;++i) //reset result
result[i]='\0';
carry=0;
if(strlen(bn1)<strlen(bn2))
r=strlen(bn2);
else
r=strlen(bn1);
for(i=0;i<r;++i)
{
result[i+1]='\0';
if(carry==0)
{
if(bn1[i]-48+bn2[i]-48+carry==1)
result[i]=bn1[i]-48+bn2[i]-48+48;
else
result[i]=0+48;
}
else
{
if(bn1[i]-48+bn2[i]-48+carry==2)
result[i]=0+48;
else
result[i]=1+48;
}
if(bn1[i]-48+bn2[i]-48+carry>1)
carry=1;
else
carry=0;
if(carry==1)
result[i+1]=carry+48;
}
printf("\n%s\n",strrev(result));
break;
case 4: //subtraction
for(i=0;i<30;++i) //reset result
result[i]='\0';
carry=0;
if(strlen(bn1)<strlen(bn2))
r=strlen(bn2);
else
r=strlen(bn1);
for(i=0;i<r;++i)
{
result[i+1]='\0';
if(bn1[i]<bn2[i])
carry=2,--bn1[i+1];
else
carry=0;
if(carry+bn1[i]-48-bn2[i]+48==1)
result[i]=1+48;
else
if(carry+bn1[i]-48-bn2[i]+48==0)
result[i]=0+48;
}
printf("\n%s\n",strrev(result));
break;
case 5: //binary multiplication complited on 27-03-2004
for(i=0;i<30;++i) //reset result
result[i]='\0';
strrev(bn2); // reversing second binary operand
k=0,x=0;
for(i=0;i<strlen(bn2);++i) //creating array for addition
if(bn2[i]=='1')
{
for(j=i+1;bn2[j]!='\0';++j)
multi[k][x++]='0';
for(l=0;bn1[l]!='\0';++j,++l)
multi[k][x++]=bn1[l];
for(;x<30;++j)
multi[k][x++]='0';
++k,x=0;
}
l=0;
for(j=0;j<30;++j) //addition of all columns without carry
{
x=0;
for(i=0;i<k;++i)
x+=(multi[i][j]-48);
multi[0][l++]=x;
}
for(i=0;i<30;++i) //loop for including carry.
if(multi[0][i]>1)
multi[0][i+1]+=((multi[0][i]-(multi[0][i]%2))/2);
printf("\n");
for(i=29;i>=0;--i) // excluding first zero's (0's) of array
if(multi[0][i]!=0)
break;
j=0;
for(;i>=0;--i) // final calculations and print
if(multi[0][i]<48)
{
multi[0][i]%=2;
result[j++]=multi[0][i]+48;
// printf("%d",multi[0][i]);
}
printf("\n");
printf("%s\n",result);
break;
case 6: //result in decimal
b_to_d(result);
printf("\n");
break;
}
n1=x1;
d_to_b(n1,binary);
for(i=0;binary[i]!='\0';++i)
bn1[i]=binary[i];
bn1[i]='\0';
n2=x2;
d_to_b(n2,binary);
for(i=0;binary[i]!='\0';++i)
bn2[i]=binary[i];
bn2[i]='\0';
}while(ch!=7);
printf("\n\n i will wait for your mails");
getch();
return 0;
}
void b_to_d(char result[]) //binary to decimal
{
short int i;
long int dec=0;
strrev(result);
for(i=0;i<strlen(result);++i)
dec+=(result[i]-48)*pow(2,i);
printf("result in decimal is %ld\n",dec);
strrev(result);
}
void d_to_b(int dec,char binary[]) // decimal to binary
{
int i=0;
while(dec>0)
{
binary[i++]=dec%2+48;
binary[i]='\0';
dec-=(dec%2);
dec/=2;
}
}
Последний раз редактировалось jawbreaker; 08.01.2009 в 19:23..
|
|
|

08.01.2009, 19:44
|
|
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме: 30086
Репутация:
0
|
|
Сообщение от 4p3
Ок, накрапаю от нечего делать
Жду,заранее спасибо
|
|
|

08.01.2009, 20:01
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Сообщение от jawbreaker
4p3
Всё правильно он говорит, "И" или конъюнкция или логическое умножение, таблица истинности...
...
Совершенно верно. В реквесте было именно арифметическое умножение. Потому & неприменим.
Последний раз редактировалось begin_end; 09.01.2009 в 01:27..
Причина: оверквотинг
|
|
|

09.01.2009, 09:08
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме: 750247
Репутация:
92
|
|
Сообщение от ankden
Жду,заранее спасибо
PHP код:
//---------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#include <assert.h>
#pragma hdrstop
namespace
{
using std::cout;
using std::cin;
using std::endl;
using std::system;
};
typedef unsigned int uint;
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
uint nNumb = 0;
int *pnArray = NULL;
cout << "Enter number of digits: ";
cin >> nNumb;
if (nNumb > 2 && nNumb < 30)
pnArray = new int[nNumb];
else
{
cout << "number of digits too smal or too large" << endl;
return 1;
}
assert(pnArray != NULL);
cout << "Enter digits: " << endl;
for (uint i = 0;i < nNumb;++i)
cin >> pnArray[i];
for (uint i = 0;i < nNumb;i++)
{
if (i+2 >= nNumb)
break;
if (pnArray[i] < pnArray[i+1] < pnArray[i+2])
cout << pnArray[i] << pnArray[i+1] << pnArray[i+2]
<< endl;
}
delete []pnArray;
pnArray = NULL;
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Последний раз редактировалось 4p3; 09.01.2009 в 09:16..
|
|
|

09.01.2009, 11:38
|
|
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме: 30086
Репутация:
0
|
|
Enter number of digits ввожу 3
Enter digits ввожу 123 435 907
выдает 12435907,а надо было вводить цифры наприсер 123435907
а выдать должно было 123
|
|
|

09.01.2009, 12:39
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
Сообщение от ankden
Enter number of digits ввожу 3
Enter digits ввожу 123 435 907
выдает 12435907,а надо было вводить цифры наприсер 123435907
а выдать должно было 123
Надо вывести первые три(number) числа?
|
|
|

09.01.2009, 13:15
|
|
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме: 30086
Репутация:
0
|
|
нет надо выбрать идущие подряд тройки цифр упорядоченных по возрастаню
т.е например вводится цыфры 123187456 вывод должен быть 123 456
187 выводиться не должно така как 7<8
Помогите плиз очень надо
|
|
|

09.01.2009, 15:50
|
|
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме: 811764
Репутация:
119
|
|
2 ankden:
Код:
#include <stdio.h>
int main(int argc, char *argv[])
{
int str[10] = {2,3,3,5,6,7,4,5,6};
int i;
int t = 0;
for(i = 0; i < 10; i++)
{
if((str[i+1] - str[i] == 1))
{
printf("%d", str[i]);
t++;
}
if(((i+1)%3 == 0) && (t == 2))
{
printf("%d", str[i]);
t = 0;
}
}
return 0;
}
так?
|
|
|

09.01.2009, 16:06
|
|
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме: 30086
Репутация:
0
|
|
нет программа выдает 25645
задача я с клавиатуру ввожу цыфры вывыеси долно тройки чисел упорядоченных по возрастанию
например 345678098 вывод 345 678
098 выводить не должно тк цыфры идуть не повозрастанию
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|