ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #991  
Старый 08.01.2009, 19:10
Аватар для 4p3
4p3
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме:
750247

Репутация: 92
Отправить сообщение для 4p3 с помощью ICQ
По умолчанию

Цитата:
Сообщение от k1113r  
возникла небольшая проблема надо побитово перемножить 2 числа (тоесть в двоичной системе) и перевести обратно
язык? формат ввода?

Последний раз редактировалось 4p3; 08.01.2009 в 19:16..
 
Ответить с цитированием

  #992  
Старый 08.01.2009, 19:18
Аватар для jawbreaker
jawbreaker
Участник форума
Регистрация: 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>|| 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..
 
Ответить с цитированием

  #993  
Старый 08.01.2009, 19:44
Аватар для ankden
ankden
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме:
30086

Репутация: 0
По умолчанию

Цитата:
Сообщение от 4p3  
Ок, накрапаю от нечего делать
Жду,заранее спасибо
 
Ответить с цитированием

  #994  
Старый 08.01.2009, 20:01
Аватар для 4p3
4p3
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме:
750247

Репутация: 92
Отправить сообщение для 4p3 с помощью ICQ
По умолчанию

Цитата:
Сообщение от jawbreaker  
4p3
Всё правильно он говорит, "И" или конъюнкция или логическое умножение, таблица истинности...
...
Совершенно верно. В реквесте было именно арифметическое умножение. Потому & неприменим.

Последний раз редактировалось begin_end; 09.01.2009 в 01:27.. Причина: оверквотинг
 
Ответить с цитированием

  #995  
Старый 09.01.2009, 09:08
Аватар для 4p3
4p3
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
Провел на форуме:
750247

Репутация: 92
Отправить сообщение для 4p3 с помощью ICQ
По умолчанию

Цитата:
Сообщение от 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 argccharargv[])
{
        
uint nNumb  0;
        
int *pnArray NULL;
        
cout << "Enter number of digits: ";
        
cin  >> nNumb;

        if (
nNumb && 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;nNumb;++i)
                
cin >> pnArray[i];

        for (
uint i 0;nNumb;i++)
        {
                if (
i+>= 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..
 
Ответить с цитированием

  #996  
Старый 09.01.2009, 11:38
Аватар для ankden
ankden
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме:
30086

Репутация: 0
По умолчанию

Enter number of digits ввожу 3
Enter digits ввожу 123 435 907
выдает 12435907,а надо было вводить цифры наприсер 123435907
а выдать должно было 123
 
Ответить с цитированием

  #997  
Старый 09.01.2009, 12:39
Аватар для criz
criz
Постоянный
Регистрация: 04.11.2007
Сообщений: 303
Провел на форуме:
811764

Репутация: 119
По умолчанию

Цитата:
Сообщение от ankden  
Enter number of digits ввожу 3
Enter digits ввожу 123 435 907
выдает 12435907,а надо было вводить цифры наприсер 123435907
а выдать должно было 123
Надо вывести первые три(number) числа?
 
Ответить с цитированием

  #998  
Старый 09.01.2009, 13:15
Аватар для ankden
ankden
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме:
30086

Репутация: 0
По умолчанию

нет надо выбрать идущие подряд тройки цифр упорядоченных по возрастаню
т.е например вводится цыфры 123187456 вывод должен быть 123 456
187 выводиться не должно така как 7<8
Помогите плиз очень надо
 
Ответить с цитированием

  #999  
Старый 09.01.2009, 15:50
Аватар для criz
criz
Постоянный
Регистрация: 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;
}
так?
 
Ответить с цитированием

  #1000  
Старый 09.01.2009, 16:06
Аватар для ankden
ankden
Новичок
Регистрация: 28.04.2008
Сообщений: 16
Провел на форуме:
30086

Репутация: 0
По умолчанию

нет программа выдает 25645
задача я с клавиатуру ввожу цыфры вывыеси долно тройки чисел упорядоченных по возрастанию
например 345678098 вывод 345 678
098 выводить не должно тк цыфры идуть не повозрастанию
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сюда выкладываем все проги для фрикринга мобильников, которых знаем! nigger Сотовый фрикинг 5 11.04.2009 11:15
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ