Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » addieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
11.07.2004, 04:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zu schreiben ist folgende funktion

C++:
int addieren(int x,int y){//todo}


das scheint mir diesmal zum golfen geeignet...

erlaubt sind nur bitoperatoren und zuweisungen, alle anderen sind verboten
das ganze soll auch für negative zahlen funzen...

bin mal gespannt was ihr für lösungen habt ich fand das war ne ganz schöne nuss...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.07.2004 um 04:01 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.07.2004, 12:11 Uhr
Pablo
Supertux
(Operator)


Ok, meine Salz in die Suppe


C++:
#include <stdio.h>
#include <stdlib.h>

int addieren(int x, int y)
{
    int res=0,i,carry=0;
    int maske=1;
    int xt,yt,s,c,d=0;
    
    for(i=0; i<32; ++i)
    {
        xt=(x&maske ? 1 : 0);
        yt=(y&maske ? 1 : 0);
        d=s=xt^yt;
        if(carry) {
            carry--;
            s=1^d;
            carry+=1&d;
            d=s;
        }
        c=xt&yt;
        if(c) carry++;
        if(d) res|=maske;
        maske <<=1;

    }

    return res;
}

int main(int argc, char** argv)
{
    int a,b;
    if (argc!=3) {
        fprintf(stderr, "usage: %s number1 number2\n", argv[0]);
        return 1;
    }

    a = atoi(argv[1]);
    b = atoi(argv[2]);

    printf("%d + %d = %d\n", a,b,addieren(a,b));

    return 0;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 11.07.2004 um 12:13 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.07.2004, 12:36 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
for(i=0; i<32; ++i)
carry+=1&d;
carry++;


jweils nicht erlaubt


Zitat:

erlaubt sind nur bitoperatoren und zuweisungen


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.07.2004 um 12:53 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.07.2004, 12:44 Uhr
Pablo
Supertux
(Operator)


dann muss ich mir was neues dafür überlegen. Aber das ist gemein
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 11.07.2004 um 12:53 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.07.2004, 12:57 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Aber das ist gemein


*rofl* das leben ist halt nicht gerecht



Bearbeitung:

ach so um missverständnissen vorzubeugen... das einzig verbotene an der schleife
C++:
for(i=0; i<32; ++i)
ist die Inkrementierung von i


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.07.2004 um 12:59 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.07.2004, 13:01 Uhr
NemoEimi



Huhu,


Zitat von Windalf:

bin mal gespannt was ihr für lösungen habt ich fand das war ne ganz schöne nuss...


Nichts könnte leichter sein, hier ist mal meins:


C++:

int addiere(int x, int y) {
  int s1 = x^y;
  int s2 = x&y;
  if (s2) return(addiere(s2 << 1, s1)); else return(s1);
  }



oder auch, iterativ hingeschrieben:


C++:
int addiere(int x, int y) {
  while(y){
    int tmp = x ^ y;
    y = (y & x) << 1;
    x = tmp;
    }
  return(x);
  }



Grüße,
Nemo

Dieser Post wurde am 11.07.2004 um 13:08 Uhr von NemoEimi editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.07.2004, 13:08 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


@NemoEimi


Zitat:

Nichts könnte leichter sein, hier ist mal meins:


Danke das baut mich auf

argh eine rekursive Lösung, verdammt und die iterative ist auch so einfach...
ich hab mir gestern voll einen abgbrochen und dann ist das so einfach...


C++:
int addieren(int x,int y){
int c=0,rv=0,m=1;
unsigned int a=x,b=y;
while(a||b||c){rv|=x&m^y&m^c&m;c=x&y|x&c|y&c;c&=m;c<<=1;m<<=1;a>>=1;b>>=1;}
return rv;
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 11.07.2004 um 13:09 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.07.2004, 13:08 Uhr
(un)wissender
Niveauwart


Ich versteh das nicht.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.07.2004, 13:12 Uhr
NemoEimi




Zitat von (un)wissender:
Ich versteh das nicht.


Wenn Du ganz scharf hinschaust, dann wirst Du erkennen, daß das einfach das Additionsverfahren aus der Grundschule ist, angewendet auf das Binärsystem und formuliert in C++ .
Natürlich funktioniert das in der Grundschule nicht mit negativen Zahlen auch so leicht, aber in der Grundschule lernt man ja auch, mit echten ganzen Zahlen umzugehen, wohingegen wir hier Computerarithmetik machen, und die ist immer isomorph zur Arithmetik in Z/2^n, und dort ist das kein Problem.

Grüße,
Nemo

Dieser Post wurde am 11.07.2004 um 13:26 Uhr von NemoEimi editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.07.2004, 13:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


gibts gar nicht soviel zu verstehen
wenn du zwei zahlen binär addierst machst du das genauso wie bei ner anderen addition
schreib dir die mal untereinander...
wenn beide stellen 1 sind bekommst du einen übertrag und wenn nur eine stelle 1 ist dann ist das ergebnis dieser stelle auch 1 (so es keinen übertrag der letzten stelle gab)

die stelle rechnet dir also das xor aus und den übertrag bekommst du mit ner und verknüpfung...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: