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 "C/C++" - Primzahlendarstellung
Primzahlendarstellung < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Primzahlendarstellung: Aufgabe
Status: (Frage) beantwortet Status 
Datum: 18:11 Sa 03.11.2007
Autor: Fibonacci-

Aufgabe
[Dateianhang nicht öffentlich]

Ich weiß, dass dieser Algorithmus nun die Primzahl ausgeben wird.
Meine Frage ist jetzt inwiefern die Zahl(en) ausgegeben werden muss (müssen).
Ist aus dem array wirklich eine Zahlenfolge zu entnehmen?
Und wie stellt man das ganze (wie in der Aufgabenstellung) in C++ dar?

Mein Ansatz:

1:
2: #include <iostream>
3: using namespace std;
4:
5:
6: int main (){
7:  
8:
9: cout << "Geben Sie eine natuerliche Zahl ein: ";
10: int n = 0;
11: cin >> n;
12:
13: int is_prime(n);
14: is_prime=true;
15:
16:
17:             
18:     int i=2;
19:         while (i<n){
20:               if (is_prime (i) == true){
21:                            int k=2;
22:                            while (k*i<n)
23:                            {is_prime (k*i) = false;
24:                            k++; 
25:                            }}
26:                            i++;
27:                            }
28:  
29:             cout << "Array " << "=>" << is_prime (n) << "\n";
30:     return 0;
31: }    


Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

Leider funktioniert das nicht so wie ich es mir vorgestellt hab.
Bitte somit um Hilfe.

Danke im Voraus.

Dateianhänge:
Anhang Nr. 1 (Typ: jpg) [nicht öffentlich]
        
Bezug
Primzahlendarstellung: Boolean-Feld
Status: (Antwort) fertig Status 
Datum: 18:28 Sa 03.11.2007
Autor: Infinit

Hallo Fibonacci,
das Array beinhaltet nur eine logische Variable, ob der Wert an der n-ten Stelle (und damit die Integerzahl n) eine Primzahl ist oder nicht. Du initiierst jedoch dieses Feld als Integer-Feld und vergleicht es mit einer logischen Variablen, was kaum hinhauen dürfte, wenn man an der Ausgabe von Primzahlen interessiert ist. Dies wird jedoch, zu meinem Wundern, in der Aufgabe gar nicht verlangt, man soll nur das Feld zurückgeben als Ergebnis des Vergleiches. Wenn man an den Primzahlen bis zur Zahl n interessiert ist, und davon gehe ich mal aus, müsste man den Index derjenigen Feldelemente ausgeben, die "true" sind.
Viele Grüße,
Infinit

Bezug
                
Bezug
Primzahlendarstellung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 19:09 Sa 03.11.2007
Autor: Fibonacci-

Weißt du wie sich das im C++ darstellen lässt?
Hab alle Kombis schon fast durchgearbeitet und da kommt nur Unsinn raus :(

Bezug
                        
Bezug
Primzahlendarstellung: Antwort
Status: (Antwort) fertig Status 
Datum: 21:21 Sa 03.11.2007
Autor: Martin243

Hallo,

> Hab alle Kombis schon fast durchgearbeitet und da kommt nur Unsinn raus :(

Dann hattest du diese Kombi wohl noch nicht:

1: #include <iostream>  
2:
3: int main (int argc, char* argv[])
4: {  
5:   int i, k, n;  
6:   bool* is_prime;
7:    
8:   if (argc > 1) 
9:     n = atoi(argv[1]);
10:   else
11:   {
12:     std::cout << "Geben Sie eine natuerliche Zahl ein: ";  
13:     std::cin >> n;
14:   }
15:
16:   is_prime = reinterpret_cast<bool*>(malloc(n*sizeof(bool)));
17:   is_prime[0] = false;
18:   is_prime[1] = false;
19:   for (i=2; i<n; ++i) is_prime[i] = true;
20:
21:   for (i=2; i<n; ++i)
22:     if (is_prime[i])
23:       for (k=2; k*i<n; ++k)
24:         is_prime[k*i] = false;
25:     
26:   std::cout << "\nDie Primzahlen unter " << n << ": \n";         
27:   for (i=1; i<n; ++i)
28:     if (is_prime[i])
29:       std::cout << i << '\t';
30:
31:   std::cout << "\n\nDas Sieb-Array ab 1: \n";
32:   for (i=1; i<n; ++i)
33:     std::cout << is_prime[i] << '\t';
34:     
35:   free(is_prime);
36:



Gruß
Martin

Bezug
                                
Bezug
Primzahlendarstellung: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 13:01 So 04.11.2007
Autor: Fibonacci-

Nun das ist eine Kombi, die allerdings nicht aus der Aufgabenstellung hervorgeht!
Da sind Befehle, die überflüssig sind!
es sollte schon bei

1: int main (){

bleiben!
Am besten eine Struktur aus der Aufgabenstellung entwickeln.
Die Befehle hatten wir zum größten Teil noch nicht also wird das wohl nicht die Lösung sein.
Alternativ werde ich es zwar verwenden aber suche trotzdem noch die "einfachere" Lösung.

Bezug
                                        
Bezug
Primzahlendarstellung: Antwort
Status: (Antwort) fertig Status 
Datum: 13:21 So 04.11.2007
Autor: Martin243

Hallo,

dabei fand ich meine Lösung eleganter, aber den Einwand verstehe ich.

Das int main() hatte ich nur ersetzt, damit man das n direkt beim Aufruf übergeben kann (und nur notfalls per cin). OK, ist weg.

Vermutlich war auch das malloc nicht erlaubt. Daher habe ich nun ein statisches bool-Array. Hier muss aber vorher (zur Kompilierzeit) das maximale n - hier durch die Konstante MAX_N festegelegt werden. Die kannst du natürlich ändern, nur eben vor dem Kompilieren. Ist halt ineffizient.

> Am besten eine Struktur aus der Aufgabenstellung entwickeln.

Ja, habe ich auch. Aber ein bisschen "Drumherum" muss es schon geben.
Außerdem würde ich überall, wo ich die Anzahl der Durchläufe schon kenne, for- anstelle von while-Schleifen benutzen. Da muss ich mich nicht um die Auswertung der Bedingung kümmern.

> Die Befehle hatten wir zum größten Teil noch nicht also wird das wohl nicht die Lösung sein.

"Die Lösung" gibt es natürlich nicht. Aber ich denke, wenn man malloc und das main(...) weglässt, dann ist alles im Grünen Bereich, oder?

Vielleicht so:
1: #include <iostream>  
2:
3: int main (int argc, char* argv[])
4: {  
5: const int MAX_N = 1000;
6: int i, k, n;  
7: bool is_prime[MAX_N];
8:    
9: std::cout << "Geben Sie eine natuerliche Zahl ein: ";  
10: std::cin >> n;
11: if (n > MAX_N) 
12: {
13: std::cout << n << " ist groesser als " << MAX_N << ". Abbruch!\n";
14: exit(-1);
15: }
16:
17: is_prime[0] = false;
18: is_prime[1] = false;
19: for (i=2; i<n; ++i) 
20: is_prime[i] = true;
21:
22:   for (i=2; i<n; ++i)
23: if (is_prime[i])
24: for (k=2; k*i<n; ++k)
25: is_prime[k*i] = false;
26:     
27: std::cout << "\nDie Primzahlen unter " << n << ": \n";         
28: for (i=1; i<n; ++i)
29: if (is_prime[i])
30: std::cout << i << '\t';
31:
32: std::cout << "\n\nDas Sieb-Array ab 1: \n";
33: for (i=1; i<n; ++i)
34: std::cout << is_prime[i] << '\t';
35: }     



Gruß
Martin

Bezug
                                                
Bezug
Primzahlendarstellung: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:55 So 04.11.2007
Autor: Fibonacci-

Vielen Dank :)
ich versuche noch ein bisschen "rumzubasteln".
Du hast mir auf jeden Fall weitergeholfen.

Nochmals Danke.

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "C/C++"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]