www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 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
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
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 ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]