www.matheraum.de
Das Matheforum.
Das Matheforum des MatheRaum.

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenJavaKardinalität
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Deutsch • Englisch • Französisch • Latein • Spanisch • Russisch • Griechisch
Forum "Java" - Kardinalität
Kardinalität < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Kardinalität: Algorithmus
Status: (Frage) beantwortet Status 
Datum: 16:26 Do 03.11.2011
Autor: mikexx

Aufgabe
Hallo, ich habe folgendes Problem.

Eine Integer-Zahl steht ja für eine bestimmte Menge.

So steht die Zahl 4 für die Menge [mm]\left\{2\right\}[/mm], weil in der 32-bit-Binärdarstellung nur eine 1 an der 2. Position steht, ansonsten Nullen.

Aufgabe ist es nun einen Java-Algorithmus zu bauen, der einem die Kardinalität der zu einer Integer-Zahl gehörigen Menge ausgibt.


Meine Idee ist es eigentlich gewesen, das mit einer for-Schleife und der bitweisen Rechts-Verschiebung zu machen:

Ich schiebe jeweils die i-te Bit-Position um 32-i Stellen nach Rechts, dann kommt entweder 0 oder 1 heraus. Wenn eine 1 herauskommt (sprich: an der 0-ten Bitstelle steht), erhöhe ich die Kardinalität um 1, wenn da eine Null steht, eben nicht.

Zu Anfang lege ich also die Kardinalität auf Null fest.


Könnte man das so machen??



        
Bezug
Kardinalität: Antwort
Status: (Antwort) fertig Status 
Datum: 16:44 Do 03.11.2011
Autor: Schadowmaster

moin mikexx,

Ja, das dürfte so klappen.
Du musst aber nach dem Verschieben noch "mod 2" rechnen, damit du auch wirklich nur die letzte Stelle erhältst.


lg

Schadow

Bezug
                
Bezug
Kardinalität: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 16:47 Do 03.11.2011
Autor: mikexx

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Mein Problem ist, daß ich das nicht in Java-Code umsetzen kann.

Kannst Du mir dabei vielleicht helfen??

Mein Ansatz ist dieses hier:

public class schieben {

/**
* @param args
*/
public static void main(String[] args) {
int a=96;


for(int i=0; i<32;i++)
{
int kard=0;
int d=a>>>(32-i);
if (d==1)
kard=kard++;
else
kard=+0;

}
// TODO Auto-generated method stub
System.out.println(kard);


Aber er zeigt an, daß bei dem System.out was nicht stimmt.

Bezug
                        
Bezug
Kardinalität: Antwort
Status: (Antwort) fertig Status 
Datum: 17:07 Do 03.11.2011
Autor: Schadowmaster

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

>  
> Mein Problem ist, daß ich das nicht in Java-Code umsetzen
> kann.
>  
> Kannst Du mir dabei vielleicht helfen??
>  
> Mein Ansatz ist dieses hier:


Hmm, seltsamer Code...


public class schieben $\{$

>  
> /**
>   * @param args
>   */
>   public static void main(String[] args) $\{$
>   int a=96;
>  
>
> for(int i=0; i<32;i++)
>   $\{$
>   int kard=0; du setzt kard jedesmal wieder auf 0, also unschön wenn du hochzählen willst^^ (ich würde hier auch nen syntaxfehler erwarten, aber was solls)
>   int d=a>>>(32-i);
>   if (d%2==1) mod 2 nicht vergessen!
>   kard=kard++; wieso auf diese Art? Wieso nicht einfach kard++; ?
>   else
>   kard=+0; kannst den else-Teil doch auch ganz weg lassen^^
>  
> $\}$
>   // TODO Auto-generated method stub
>  System.out.println(kard);

>
> Aber er zeigt an, daß bei dem System.out was nicht stimmt.

Jupp, kard existiert nicht.
Du definierst kard innerhalb der for-Schleife, deshalb existiert es auch nur darin.
Wenn du System.out außerhalb der Schleife aufrufst ist kard nicht bekannt...

Also überarbeite den Code nochmal und definiere kard außerhalb der for-Schleife.


lg

Schadow


Bezug
                                
Bezug
Kardinalität: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:20 Do 03.11.2011
Autor: mikexx

Jetzt gibt er eine Lösung aus.

Was mich wundert, ist:

Für a=7 gibt er 4 aus, es müsste aber wohl 3 herauskommen...

Weißt Du, woran das liegen könnte?

Bezug
                                        
Bezug
Kardinalität: Antwort
Status: (Antwort) fertig Status 
Datum: 17:26 Do 03.11.2011
Autor: Schadowmaster


> Jetzt gibt er eine Lösung aus.
>  
> Was mich wundert, ist:
>  
> Für a=7 gibt er 4 aus, es müsste aber wohl 3
> herauskommen...
>  
> Weißt Du, woran das liegen könnte?

Hmm, dürfte wohl irgendwo ein Logikfehler drinn sein.
Ich kenne mich aber mit Bitshifts nicht ganz so gut aus.
Versuch es vielleicht mal mit Division durch 2:
7%2 = 1, also um 1 erhöhen.
7/2 = 3
3%1 = 1, also um 1 erhöhen.
3/2 = 1
1%1 = 1, also um 1 erhöhen.
1/2 = 0; Berechnung beenden.

Hierbei ist mit / natürlich immer die Ganzzahldivision gemeint.

Es müsste mit Bitshifts auch irgendwie funktionieren, aber frag mich nicht wieso bei dir nicht...

lg

Schadow

Bezug
                                                
Bezug
Kardinalität: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:30 Do 03.11.2011
Autor: mikexx

Ich glaube mein Fehler war, daß ich in der Schleife i<33 hatte, ich habe es jetzt auf i<32 korrigiert und bei a=7 kommt auch 3 heraus.

Noch eine weitere Frage hierzu.

Wenn ich es jetzt als Methode formulieren soll,

so ist es doch recht ähnlich wie der obige Code, nur, daß ich als Parameter int a nehme. Oder?


Ich will die vollständige Methode lieber nicht posten, nachher kapieren die Tutoren nicht, daß ICH das hier geschrieben habe und meinen, ich hätte kopiert.

Vielleicht darf ich es Dir zusenden??

Bezug
                                                        
Bezug
Kardinalität: Antwort
Status: (Antwort) fertig Status 
Datum: 17:44 Do 03.11.2011
Autor: Schadowmaster

Die Tutoren lesen hier mit aber können nicht so weit denken zu sehen, dass du das geschrieben hast?^^
Komische Tutoren hast du da...

Aber zu deiner Frage:
Ja, als Methode übergibst du einfach a als Parameter und anstelle der System.out. gibst du dann eben kard zurück.
Wie weit genau die Schleife laufen muss musst du halt ein wenig testen, ich würde es wie gesagt mit Division durch 2 machen.

lg

Schadow

Bezug
                                                                
Bezug
Kardinalität: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:51 Do 03.11.2011
Autor: mikexx

Man muss es nicht unbedingt ausgegeben oder?


Vorgesehen ist "return" und dann das, was die Methode macht.

Was ist "return"?

Da wird nichts ausgegeben, aber zurückgegebenb?

Bezug
                                                                        
Bezug
Kardinalität: Antwort
Status: (Antwort) fertig Status 
Datum: 17:57 Do 03.11.2011
Autor: Schadowmaster

Du ersetzt deine letzte Zeile durch
return kard;
Damit wird das zurückgegeben, ja.
Du kannst dir das ganze wie eine mathematische Funktion denken.
Wenn du eine Funktion f hast dann steckst du ein x rein und bekommst f(x) zurück.
Der Vergleich hinkt zwar manchmal etwas, aber zur Anschauung ist er ganz praktisch.
Also in deinem Programm hast du etwa:

int x = 200;
int y = BerechneKard(x);

dann wird die Funktion BerechneKard (oder wie auch immer du sie nennst) aufgerufen, ihr wird der Wert x übergeben und das Ergebnis wird in der Variablen y gespeichert.
Deine Funktion BerechneKard sollte dann in etwa so aussehen:

public static int BerechneKard(int a)
[mm] $\{$ ...dein Code... return kard; $\}$ [/mm]


lg

Schadow

Bezug
                                                                                
Bezug
Kardinalität: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:01 Do 03.11.2011
Autor: mikexx

Okay, ich sage lieber "Methode" statt Funktion.


Jetzt soll ich eine Methode bilden, die das Objekt zur leeren Menge macht.

Ist damit einfach

public void leereMenge(int a)
{
if(a!=0)
  a=0;
}

gemeint?

(Das Wort "Objekt" irritiert mich nämlich ein bisschen.)

Bezug
                                                                                        
Bezug
Kardinalität: Antwort
Status: (Antwort) fertig Status 
Datum: 18:14 Do 03.11.2011
Autor: Schadowmaster

joa, würde ich so machen, auch wenn mich diese Fragestellung auch etwas wundert.

Bezug
                                                                                                
Bezug
Kardinalität: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 18:26 Do 03.11.2011
Autor: mikexx

Und noch eine Frage.

Man soll der menge ein Element hinzufügen, wobei der parameter die nummer des elements sein soll, das man hinzufügen soll.

ich verstehe das so.

am anfang ist ein int a definiert.

sagen wir mal das wäre 4, also a=4.

dann ist das ja die menge {2}.

Nun versteh ich das so, daß man zum beispiel auch 17 in der menge haben will, das hieße meines erachtens :

public void einfuegen(int b)
{
a | [mm] 2^{b} [/mm]

}


wäre das richtig?

kann man in der methode einfach a schreiben?
ich denke ja, a ist ja außerhalb der methode dann definiert?


Aber wie schreibt man in java [mm] 2^b, [/mm] wenn b eine Integerzahl sein soll... und 2 ist ja auch kein double. Math.pow(double,double) kanns also nicht sein...

Bezug
                                                                                                        
Bezug
Kardinalität: Frage (überfällig)
Status: (Frage) überfällig Status 
Datum: 21:44 Do 03.11.2011
Autor: dennis2

Ich befasse mich anscheinend mit der gleichen Aufgabe:

http://www.matheboard.de/thread.php?postid=1496269#post1496269


Bräuchte auch dringend Hilfe...


Bezug
                                                                                                                
Bezug
Kardinalität: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 22:20 Sa 05.11.2011
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
                                                                                                        
Bezug
Kardinalität: Fälligkeit abgelaufen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 19:20 Sa 05.11.2011
Autor: matux

$MATUXTEXT(ueberfaellige_frage)
Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheforum.net
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]