Dodawanie liczb binarnych- program w C

s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

Dodawanie liczb binarnych- program w C

Post autor: s3ba »

Zadanie:
Napisac program symulujacy dodawanie binarne 2 liczb co najwyzej 12-bitowy.
Wynik przedstaw w postaci binarnej.

Program ktory napisalem poprawnie zamienia liczby dziesietne na binarne, lecz wskazuje zle wartosci po ich zsumowaniu.
Prosze o poprawienie tego kodu, badz wskazanie bledow.
Z gory dziekuje za wszelka pomoc.

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
int main () {
    unsigned int x,y;
    int k,r,b1[12],b2[12],i=0,n=0,licznik,carry=0,sum=0,suma[12],j;
    
    do
    {
        printf("
Podaj liczbe x=");
        k=scanf("%u",&x);
        fflush(stdin);
        } while (k==0);
        
    do
    {
        printf("
Podaj liczbe y=");
        k=scanf("%u",&y);
        fflush(stdin);
        } while (k==0);
        
        do
        {
               r=x%2;
               x=x/2;
               b1[i]=r;
               i++;
               } while (x>0);
               
        do
        {
               r=y%2;
               y=y/2;
               b2[n]=r;
               n++;
               } while (y>0);       // do tego momentu program dziala poprawnie
        
               if(i>n)
                      licznik=i;
               else
                      licznik=n;
                      
               for(i=0; i<licznik; i++);
               {
                        sum=b1[i]+b2[i]+carry;

                        if (sum==0)
                        {
                        suma[i]=0;
                        carry=0;
                        }
                        
                        if (sum==1)
                        {
                        suma[i]=1;
                        carry=0;
                        }
                        }
               
               printf("
Suma: ");
               for(j=--i;j>=0;j--)
               printf("%d",suma[j]);
               printf("
");
               
    getch();
    return 0;
}

soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Dodawanie liczb binarnych- program w C

Post autor: soku11 »

1. Czy te liczby na pewno masz wczytywać jako liczby decymalne, konwertować na binarne i dopiero dodawać?
2. W warunkach na wczytanie lepiej dać while(k!=1), czyli aż nie wczyta poprawnie jednej liczby unsigned.
3. Samego kodu dodającego nie oglądam, bo po pętli for jest średnik. Także pętla nic nie robi Skasuj średnik - powinno pomóc.

Pozdrawiam.
s3ba
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 18 sty 2009, o 21:53
Płeć: Mężczyzna
Podziękował: 37 razy
Pomógł: 5 razy

Dodawanie liczb binarnych- program w C

Post autor: s3ba »

Juz znalazlem bledy. Mimo wszystko dzieki za pomoc.

Dzialajacy program:

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
int main () {
    unsigned int x,y;
    int k,r,b1[12]={0},b2[12]={0},i=0,n=0,licznik,carry=0,sum,suma[12],j;
    
    do
    {
        printf("
Podaj liczbe x=");
        k=scanf("%u",&x);
        fflush(stdin);
        } while (k==0);
        
    do
    {
        printf("
Podaj liczbe y=");
        k=scanf("%u",&y);
        fflush(stdin);
        } while (k==0);
        
        do
        {
               r=x%2;
               x=x/2;
               b1[i]=r;
               i++;
               } while (x>0);
               
        do
        {
               r=y%2;
               y=y/2;
               b2[n]=r;
               n++;
               } while (y>0);
               
               printf("
Postac binarna x: ");
               for(j=i-1;j>=0;j--)
               printf("%d",b1[j]);
               printf("
"); 
               
               printf("
Postac binarna y: ");
               for(j=n-1;j>=0;j--)
               printf("%d",b2[j]);
               printf("
");
        
               if(i>n)
                      licznik=++i;
               else
                      licznik=++n;
                      
               for(i=0; i<licznik; i++)
               {
                        sum=b1[i]+b2[i]+carry;

                        if (sum==0)
                        {
                        suma[i]=0;
                        carry=0;
                        }
                        if (sum==1)
                        {
                        suma[i]=1;
                        carry=0;
                        }
                        if (sum==2)
                        {
                        suma[i]=0;
                        carry=1;
                        }
                        if (sum==3)
                        {
                        suma[i]=1;
                        carry=1;
                        }
                        }
               printf("
Suma: ");
               for(j=--i;j>=0;j--)
               printf("%d",suma[j]);
               printf("
");
               
    getch();
    return 0;
}
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Dodawanie liczb binarnych- program w C

Post autor: soku11 »

Przejrzyj też ten kod:

Kod: Zaznacz cały

#include <stdio.h>
#include <string.h>

#define MAX_DIGITS  12

void unsignedToBin(unsigned int number,char* tab)
{
  char* position=tab;
  int i=0;

  for(i=0;i<MAX_DIGITS;++i)
  {
    (number&0x1)? (*position++='1'):(*position++='0');
    number>>=1;
  }
  *position='\0';
}

int add(char* first,char* second,char* result)
{
  int i=0;
  int carry=0;

  for(i=0;i<MAX_DIGITS;++i)
  {
    result[i]=first[i]+second[i]-'0'+carry;
    if(result[i]>'1')
    {
      result[i]-=2;
      carry=1;
    }
    else
      carry=0;
  }
  result[MAX_DIGITS]='\0';

  return carry;
}

int main(void)
{
  unsigned int number=0;
  int overflow=0;
  int i=0;
  char first[MAX_DIGITS+1]={"0"};
  char second[MAX_DIGITS+1]={"0"};
  char result[MAX_DIGITS+1]={"0"};

  printf("Podaj liczbe x: ");
  scanf("%u",&number);

  unsignedToBin(number,first);

  printf("Podaj liczbe y: ");
  scanf("%u",&number);

  unsignedToBin(number,second);
  overflow=add(first,second,result);

  printf("%s\n%s +\n",first,second);
  for(i=0;i<MAX_DIGITS+1;++i)
    printf("-");
  printf("\n%s\nPrzepelnienie: %d\n",result,overflow);

  return 0;
}

Kiedyś go sobie naskrobałem także może się przydać :) Tylko go trochę zmodyfikowałem by pasował do twojego zadania.
Pozdrawiam.
ODPOWIEDZ