C++ ~ Primzahlen ...

Seite 1 von 3 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/c_primzahlen_58535/page_1 - zur Vollversion wechseln!


BobbyPI schrieb am 11.12.2002 um 15:53

Code:
#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 .... :bash:

Mfg

BobbyPI


crashman schrieb am 11.12.2002 um 16:04

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 schrieb am 11.12.2002 um 16:12

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 schrieb am 11.12.2002 um 16:15

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 schrieb am 11.12.2002 um 16:23

#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 schrieb am 11.12.2002 um 16:27

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=- schrieb am 11.12.2002 um 18:15

statt dem teil:

Code:
if (ist_primzahl==W)printf("*"); 
else printf(" "); 
machst ein:
Code:
int array[100];
int count=0;
if (ist_primzahl==W)
{
  array[count] = i1;
  count++;
}


BobbyPI schrieb am 11.12.2002 um 19:00

@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 schrieb am 11.12.2002 um 19:13

Code: PHP
#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 :D


atrox schrieb am 11.12.2002 um 19:30

Zitat von BobbyPI
Zitat von starfucker
25m :eek:

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 schrieb am 11.12.2002 um 19:38

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 schrieb am 11.12.2002 um 19:47

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 schrieb am 11.12.2002 um 19:51

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 schrieb am 11.12.2002 um 19:58

selber coden? :o


atrox schrieb am 11.12.2002 um 19:59

du hast die anderen fragen nicht beantwortet... bist du sicher daß dein lehrer(?) genau diesen algorithmus meint, und nicht das Sieb des Eratosthenes ?




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026