C++ ~ Primzahlen ...
BobbyPI 11.12.2002 - 15:53 4000 35
BobbyPI
jiu-jitsu rulez... ;)
|
#include "stdio.h"
void main(void)
{
int i1,i2,ist_primzahl;
char W=1,F=0;
for(i1=1;i1<=100;i1++)
{//ist i1 eine primzahl ?
ist_primzahl = W;
if (i1==1) ist_primzahl=F;
for(i2=2;i2<i1;i2++)
{ // ist i1 durch i2 teilbar ?
if ((i1/i2)*i2==i1) ist_primzahl=F;
}
if (ist_primzahl==W)printf("*");
else printf(" ");
printf("%d, ",i1);
}
}
also leute ... das prog funkt und alles .... aber das prob ist ... ich brauche diese funktion ... alle primzahlen bis 100 aber als array version .... also selbe aufgabe ... bloß ... mit arrays ... hat wer ne ahnung oder könnte es wer coden ... wäre wichtig ... .... Wenn nicht auch egal .... Mfg BobbyPI
|
crashman
OC Addicted
|
naja ich glaub so schwer ist das net int[] main(int anzahl){ ... int[] primzahlen = new int[anzahl] ... dann in der for schleife noch statt 100 anzahl und statt der ausgabe einfach primzahlen[i] = i1; und ganz unten return primzahlen; aber sicher bin ich net da ich mehr java mach und c++ eigentlich garnet
|
moidaschl
Vollzeit-Hackler
|
mhm willst du die primzahlen also ausrechnen lassen?? wenns nur bis hundert is kann ichs dir helfen.. aber desto weiter rauf desto mehr rechenzeit.. ich weis ned ob des sinnvoll ist.. aber gib mir bescheid ich kann dir da sicher helfen
|
crashman
OC Addicted
|
aja ich würd statt dem wahr falsch chars gleich einfach einen boolean primzahl verwenden
@moidasch naja ich nehm kaum an das er es für irgendwas wichtiges braucht ist wohl eher eine aufgabe. Sonst würde er sicher auf die vorhandenen math methoden zurückgreifen
|
moidaschl
Vollzeit-Hackler
|
#include <math.h> ... naja ich weis ned des zu berechnen is eh fast unmöglich wenn des große sein sollen.. wenn ned selber ausrechnen und reinschreiben
|
crashman
OC Addicted
|
hehe ganz effizient jedesmal die methode aufrufen und bis zur gewünschten stelle rechnen . Dann kann man dem kunden auch gleich an neuen server verkaufen
|
Neo-=IuE=-
Here to stay
|
statt dem teil: if (ist_primzahl==W)printf("*");
else printf(" ");
machst ein: int array[100];
int count=0;
if (ist_primzahl==W)
{
array[count] = i1;
count++;
}
|
BobbyPI
jiu-jitsu rulez... ;)
|
@Neo ... irgendwie ist das ein blödsinn ... er gibt mir jede zahl aus ... aber er macht keinen stern zu den prim zahlen ....
kann das mal wer nachchecken? ....
|
crashman
OC Addicted
|
#include "stdio.h"
//anzahl ist wieviele primzahlen du haben willst
int[] main(int anzahl){
int i1,i2;
boolean primzahl = false;
int[] array = new array[anzahl];
for(i1=1;i1<=anzahl;i1++){
//ist i1 eine primzahl ?
if (i1==1)
primzahl=false;
for(i2=2;i2<i1;i2++){
// ist i1 durch i2 teilbar ?
if ((i1/i2)*i2==i1)
primzahl=false;
else
primzahl=true;
}
//Primzahl
if (primzahl)
array[i] = i1;
}
return array;
}
keine ahnung ob ma in c arrays so deklarieren kann wie ichs gemacht hab. ebenfalls keine ahnung ob man die return werte so definieren kann. und sehr suspekt schaut mir das aus ((i1/i2)*i2==i1) aber vielleicht check ich das was net ganz Naja vielleicht können leute die mehr ahnung von c++ daran weiterarbeiten
|
atrox
in fairy dust... I trust!
|
25m
was machst denn dann mit dem vga kabel! das müsste dann ja auch so lang sein bei tombs idee!
meinst du damit, das ergebnis soll zahl um zahl in ein array gespeichert werden, oder brauchst du das s.g. "Sieb des Eratosthenes" ? bei diesem algorithmus werden aus einem array solange vielfache von 2..3..4..5...usw entfernt, bis nur noch primzahlen übrig sind. aber selbst wenn wir bei deinem algorithmus beleiben (es gibt eine ganze hand voll) läßt sich dieser wesentlich effizienter gestalten! überlege dir (bei der inneren schleife) - wenn du versuchst i1 durch alle zahlen kleiner i1 zu dividieren - ob man den suchraum nicht einengen kann? wie wäre es, wenn du nur bis i1/2 suchst... oder bis i1/3 .. geht dann auch i1/4 ? wann schon, und wann nicht ? [spoiler: das ergebnis dieser überlegung sollte sqrt(i1) sein]
|
atrox
in fairy dust... I trust!
|
crashman> wenn man keine dynamischen arrays braucht oder es sonst keine gründe für dynamischen speicher gibt, würde ich arrays genauso anlegen wie in C, also mit
int ergebnis[100]; int ergebnisindex=0; bei einer gefundenen primzahl: ergebnis[ergebnisindex++]=neueprimzahl;
warnung: return ergebnis; // liefert nur den pointer auf das array, da dieses am stack liegt(zumindest bei der definition wie oben) ist es hinterher ungültig. ausserdem kann man bei main() sowieso nur einen int als returncode ans OS zurückgeben. andere frage: nachdem der thread "C++ primzahlen" heißt... sollte da nicht irgendeine objektorientierte implemntation her ?
|
atrox
in fairy dust... I trust!
|
aja, noch eine verbesserung: sobald ein teiler i2 zu i1 gefunden worden ist, brauchst du nicht mehr weitersuchen und kannst die innere schleife abbrechen. im moment durchläuft dein programm ja die innere schleife 5000 mal!
|
BobbyPI
jiu-jitsu rulez... ;)
|
ok leute ... sorry ... es muss kein c++ sein ... es reicht normales c ... ich red immer von c++ dabei ist es nur normales c ... sorry
also könntet ihr das mal so machen das es passt?
Es soll halt bei jeder Primzahl ein Stern sein ... und bei zahlen wo keine ist ... halt gar nix ....
|
irreversible
oberspammer
|
selber coden?
|
atrox
in fairy dust... I trust!
|
du hast die anderen fragen nicht beantwortet... bist du sicher daß dein lehrer(?) genau diesen algorithmus meint, und nicht das Sieb des Eratosthenes ?
|