Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Rekursiv Aufgabe mit Problem

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 <
010
26.05.2004, 14:03 Uhr
chrisuni



Ist mir wieder mal Peinlich aber eine Sache verstehe ich leider nicht an dem code:

C++:
if (x%2)




x%2 bedeutet doch x modulo 2...
Als Beispiel 3 modulo 2 = 1
6 modulo 2 = 3

hoffe mal das stimmt wenigstens....

aber was passiert jetzt in dieser Zeile genau ?
dort steht ja nur wenn x%2 dann.....
ich verstehe das nicht muss es nicht heißen wenn x%2 = irgendwas, dann...
vllt kann mir das noch einer erklären was da genau passiert an dieser stelle.
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
26.05.2004, 14:09 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wenn x gerade ist liefert das ergebnis der moduloperation eine 0...
alles was ungleich 0 ist wird als true gewertet nur 0 selber als false...


übersetzt lautet das also ungefähr wenn x ungerade ist dann tue dies...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
26.05.2004, 14:23 Uhr
chrisuni



Vielen Dank Windalf habs kapiert, aber ich hab doch noch ein Problem:
wenn ich die Summe der geraden Zahlen !zwischen! 1 und 3 mir anzeigen lassen will ist dies so richtig:

C++:
int addi(int x, int y)
{
    if (x>y) return 0;
    if (x%2)
        return addi(x+1, y);
    else
        return x+addi(x+2, y);
}



wenn ich jetzt aber die Summe aller geraden Zahlen !zwischen! 2 und 3 haben möchte müsste dieses Ergebnis 0 lauten da es keine geraden Zahlen zwischen 2 un 3 gibt.. hierfür würde der code so aussehen:

C++:
int addi(int x, int y)
{
    if (x>y) return 0;
    if (x%2)
        return addi(x+1, y);
    else
        return addi(x+2, y);
}




aber nun stimmt das ergebnis gar nicht mehr wenn ich die zahlen 1 und 3 eingebe....
Somit habe ich diese Aufgabe ja nicht richtig gelöst...
versteht ihr mein Problem ?
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
26.05.2004, 14:34 Uhr
virtual
Sexiest Bit alive
(Operator)


Was definierst Du als "zwischen"? Inklusive oder exklusive der Werte Die Du eingebene hast?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
26.05.2004, 14:42 Uhr
chrisuni



Das weiß ich ebend auch nicht, habe die Aufgabe nicht gestellt,aber ich denke dazwischen bedeutet exclusive der Werte. Inclusive der Werte wäre Dein Programm ja perfekt und würde 100% funktionieren... aber ich suche nach ner Lösung nochmal für exclusive, nur nach meinen Kenntnissen müsste die Funktion dann ganz anders aussehen, aber ich komme nicht drauf wie ich das machen sollte...
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
26.05.2004, 14:56 Uhr
virtual
Sexiest Bit alive
(Operator)


Üblich ist meist der erste Wert inclusive und der letzte Exclusive, jedenfalls wäre das consistent mit Sequences in C++, Arrayindizierung usw.
Auch so kannst die Funktion ja unverändert lassen, du brauchst ja nur den Aufruf zu ändern ( +/-1 an das a/b beim Aufruf im main anhängen).
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
26.05.2004, 15:08 Uhr
chrisuni



Perfekt so funzt es Prima !!!Danke nochmal für Deine Geduld mit mir, auch wenn es sehr mühselig für Euch ist mir dauernd zu antworten... ich lerne dadurch sehr gut und merke das mir einige Sachen leichter Fallen...

hier nochmal das Ergebnis:

C++:
#include <iostream>
#include <conio.h>
using namespace std;

int addi(int x, int y);

main()
{
int a = 0;
int b = 0;

cout <<"\nBitte geben Sie 2 Zahlen ein: " << endl;
cin >> a;
cout << endl;
cin >> b;
cout << endl;

cout << "Das ergbnis lautet: "<<addi (a+1,b)<<endl;

getch();
return 0;
}

int addi(int x, int y)
{
    if (x>=y) return 0;
    if (x%2)
        return addi(x+1, y);
    else
        return x + addi(x+2, y);
}


--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
26.05.2004, 15:44 Uhr
0xdeadbeef
Gott
(Operator)



Zitat:
chrisuni postete
x%2 bedeutet doch x modulo 2...
Als Beispiel 3 modulo 2 = 1
6 modulo 2 = 3


Also...nur fürs Protokll: 6 modulo 2 = 0. "modulo" wirft den Rest, der bei der ganzzahligen Division bleibt, raus.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
26.05.2004, 15:48 Uhr
chrisuni




Zitat:
0xdeadbeef postete
[quote]chrisuni postete
x%2 bedeutet doch x modulo 2...
Als Beispiel 3 modulo 2 = 1
6 modulo 2 = 3


Also...nur fürs Protokll: 6 modulo 2 = 0. "modulo" wirft den Rest, der bei der ganzzahligen Division bleibt, raus.[/quote]



Das dachte ich auch, aber scheinbar arbeitet das Programm doch so als wenn 6 modulo 2 = 0 ist, denn wenn ich das programm starte und die werte 4 und 6 eingebe ist das ergebnis 0 so wie es auch sein sollte, denn zwischen 4 und 6 ist keine gerade ganze Zahl....

Ich frage mich natürlich auch warum er mir dann nicht den wert 3 benutzt, aber ich verstehe das halt nicht, hauptsache das Prog funktioniert ^^
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
26.05.2004, 17:18 Uhr
0xdeadbeef
Gott
(Operator)


Nein, 6 modulo 2 ist 0. Wenn du 6 durch 2 teilst, ist der Rest 0. Und in C ist 0 == false.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


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: