Primzahlen mit Wurzel

StephaniePlum

Grünschnabel
:-(

Hallo zusammen bin absoluter Frischling in C++ (1.Semester) und verstehe nur Bahnhof. habe jetzt eine für mich schwere Aufgabe zu lesen und komme nicht weiter. Vielleicht kann mir ja jemand helfen

Aufgabe:
Schreiben Sie ein Programm, das die ersten m Primzahlen in ein Array schreibt.

Setzen Sie p[0] = 2. Die weiteren Primzahlen sollen gefunden werden, indem für jede ungerade Zahl n= 3,5,7,9.... geprüft wird, ob n durch eine schon im Array befindliche Primzahl, die kleiner oder gleich ?n ist, teilbar ist. Wenn nicht, wird n als nächste Primzahl in das Array eingetragen.

Wäre echt dankbar wenn mir da einer helfen kann, hatte bei der letzten Kompilierung 22 Fehler und bin fast am verzweifeln

Danke Steph
 
Hm, wir haben hier so eine Art Absprache, die besagt, dass wir bei der Aufgabenhilfe erst mal sehen wollen, dass der betreffende Fragesteller sich schon selbst mit dem Thema beschäftigt hat. Wir möchten nämlich vermeiden, dass die Leute irgendwann von uns nur noch fertige Lösungen erwarten und nichts mehr selbst lernen.

Und ausserdem kann man besser über das Problem sprechen, wenn ein konkreter Sourcecode vorliegt.

Poste doch bitte deinen Code mit den 22 Fehlern, dann sehen wir weiter.

Und noch eine Bitte: Nicht die Code-Tags vergessen! ;)
 

Anhänge

  • codetags.gif
    codetags.gif
    7,1 KB · Aufrufe: 132

Ok Ich weiß zwar nicht genau ob du das meintest, aber das hier ist mein bisheriger Versuch, konnte die Fehler auf drei reduzieren.


Code:
#include <iostream>
using namespace std;

void main()
{
	bool b;
	int p,n,j,i;
	double wurzel_n;
	b=false;
	wurzel_n = sqrt(double(n));
	for (n=2;n==100;n++);
			while (j<i && p[j] <= wurzel_n && !b)
				b=n%p[j]==0;
				b=true;
			cout<<p<<endl;
		
}
Code:
C 2065 / C2109

Er nimmt aufjedenfall den Wurzelbefehl nicht, nur warum keine Ahnung, denn den hatten wir vom Prof so vorgegeben gekriegt.
 
in math.h ist sqrt z.B. definiert
um sqrt zu kennen schreibst du:
#include "math.h"

Code Tags für den Code verwenden ;)

Code:
#include  <math.h>
#include <iostream>
using namespace std;

void main()
{
bool b;
int p,n,j,i;
double wurzel_n;
b=false;
wurzel_n = sqrt(double(n));
for (n=2;n==100;n++);
while (j<i && p[j] <= wurzel_n && !b)
b=n%p[j]==0;
b=true;
cout<<p<<endl;

}

zum weiterdenken:

* n hat kein Wert zugewiesen bekommen !
* for (n=2;n==100;n++); << Wozu ist das Gut ?
* p[j] << p ist nur ein Integer , du kannst kein Indexzugriff darauf machen (dass meint C2109); Erstelle p als Array .. die Länge musst du schon selber rausfinden ;)

Lese dir noch mal die Aufgabe durch:

Setzen Sie p[0] = 2. Die weiteren Primzahlen sollen gefunden werden, indem für jede ungerade Zahl n= 3,5,7,9.... geprüft wird, ob n durch eine schon im Array befindliche Primzahl, die kleiner oder gleich ?n ist, teilbar ist. Wenn nicht, wird n als nächste Primzahl in das Array eingetragen.

--> Bei Überprüfungen musst du nur die ungeraden Werte testen ,
d.h. eine Schleife von x = 3 solange x < ?n mit Inkrement von 2.

Eine while schleife sieht wie folgt aus

Code:
while(Bedingung)
{
Anweisung1;
..
Anweisung_m;
}

Hoffe das reicht als Denk anstöße , Frage ruhig weiter.
 
Das war schon mal etwas hilfreich zumindest akzeptiert er jetzt die wurzel danke, der rest ist aber irgendwie immer noch russisch, ich werde aber mir noch mal etwas zeit nehmen zum grübeln, aber erstmal danke steph
 
Oh mein Gott Ich bin blond

also jetzt schaut es so aus das ich keine Fehler drinne habe aber das was ich will tut es immer noch nicht.

Naja irgendwie verstehe ich das ganze wohl nicht so richtig

Code:
#include <math.h>


scusi

bin da wohl ne absolute blindschleiche

for (n=2;n==100;n++)
heißt soweit ich weiß beginne für n bei 2 bis, bis 100 hoch und nehme immer ein dazu. So habe ich das verstanden.
Vielleicht mag mir das ja mal jemand auf Blondinenniveau erklären:(
Danke
 
vor allem was das mit den Code tgs. und source code auf sich hat

Code:
#include <math.h> 
#include <iostream
using namespace std; 
void main()
{
	bool b;
                     int p[100];
	int n,i;
	double wurzel_n;
		b=false;
		for (n=2;n==100;n++);
		for (i=0;i<100;i++);
			wurzel_n = sqrt(n);
			while (2<i && p[i] <= wurzel_n && !b)
			{	b=n%p[i]==0;
				b=true;
			}
			cout<<n<<endl;
		
}


hoffe nur das das so klappt
steph
 
Code:
for (n=2;n==100;n++);
		for (i=0;i<100;i++);
Das sind zwei üble Zeilen. In der ersten steht drin "Setze zu Beginn n=2; Lass die Schleife laufen, solange n gleich 100 ist (also nie); erhöhe n um 1. Der Schleifenkörper, also das, was wiederholt wird (ausser dem n++) ist in dem Fall das Semikolon . Das Semikolon steht für eine Leeranweisung, bzw. beendet die ganze for -Konstruktion. Hier ein Beispiel für eine korrekte for -Schleife, die die Zahlen von 2 bis 100 ausgibt:
Code:
#include <iostream>

using namespace std;

int main()
{
  int n = 0;
  
  for ( n= 2; n <= 100; ++n )
  {
    cout << n << endl;
  }
}

Die for -Anweisung mit dem i sieht besser aus, allerdings ist auch da direkt ein Semikolen hinter, was der Compiler als leeren Schleifenrumpf ansieht.
 
Mach dich nur nicht ständig schlecht, mit der zeit wird das schon, wir alle haben mal klein angefangen.

Weiter konkrete Fragen stellen und wir helfen gerne.


Vielleicht wäre es eine Idee am Anfang, das Programm noch recht "dumm" zu machen.
Sprich:
- Viele Ausgaben mit printf oder cout (siehe Beispiel von kachelator) helfen am Anfang sehr!
- Konstrukte wie
Code:
(2<i && p[i] <= wurzel_n && !b)
in deinem while eher nicht anwenden sondern dies lesbar machen mit eventuell mehreren if/else etc.
- denke dran du kannst mit break; eine Schliefe sofort beenden
-
Code:
b=(n%p[i]==0);
				b=true;
du setzt b mit true oder false (je nach werten von n und p[i]) und danach setzt du b gleich auf true. Vielleicht ist da ein Fehler
 
Zurück