"We are back" « oc.at

C++ ~ Primzahlen ...

BobbyPI 11.12.2002 - 15:53 4000 35
Posts

BobbyPI

jiu-jitsu rulez... ;)
Avatar
Registered: Nov 2001
Location: Vienna
Posts: 721
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

OC Addicted
Avatar
Registered: Oct 2001
Location: Vienna
Posts: 891
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
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
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
Avatar
Registered: Oct 2001
Location: Vienna
Posts: 891
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
Avatar
Registered: Aug 2002
Location: 1210, ABK-D/L
Posts: 4029
#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
Avatar
Registered: Oct 2001
Location: Vienna
Posts: 891
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
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3232
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

jiu-jitsu rulez... ;)
Avatar
Registered: Nov 2001
Location: Vienna
Posts: 721
@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
Avatar
Registered: Oct 2001
Location: Vienna
Posts: 891
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

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
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... ;)
Avatar
Registered: Nov 2001
Location: Vienna
Posts: 721
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
Avatar
Registered: Mar 2001
Location: 2524
Posts: 1058
selber coden? :o

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
du hast die anderen fragen nicht beantwortet... bist du sicher daß dein lehrer(?) genau diesen algorithmus meint, und nicht das Sieb des Eratosthenes ?
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz