"We are back" « oc.at

"sieb des eratosthenes" - finde meinen fehler nicht

Gex 20.12.2005 - 14:47 2440 17
Posts

vandroiy

Bloody Newbie
Registered: Mar 2005
Location: Linz
Posts: 10
Zitat von Gex
von mir aus auch if-anweisung oder sonstwas. tut hier aber jetzt relativ wenig zur sache :o
Weil sie`s so gelernt bekommen. Ich höre das immer wieder...

smashIt

master of disaster
Avatar
Registered: Feb 2004
Location: OÖ
Posts: 5305
mich wunderts nciht das viele if als schleife bezeichnen
sieht ja vom code her fast genauso aus
allso if(bla){nochmehr bla;} im vergleich zu for(bla;bla;bla){schonwieder bla;}

Neo-=IuE=-

Here to stay
Registered: Jun 2002
Location: Berndorf, NÖ
Posts: 3232
Zitat von Gex
najo, stimmt schon, ist vielleicht etwas unschön.
aber das hier:
CODE
ändert am ergebnis auch nix...

oja der unterschied ist, dass du deine zählvariable nicht verwendest
im ursprünglichen Programm hättest eigentlich bei calc = i*j einfach calc = (i+1)*j schreiben können, und bei dem array zugriff calc-1 statt calc
weiters musst beim ausgeben k+1 statt k ausgeben
und problem gelöst und die abbruchbedingung vor dem zugriff auf das array und böse überraschung bleiben einem erspart ;)

hier der code von dir nur verändert so, dass er geht
Code:
#include<stdlib.h>
#include<stdio.h>

int size,calc;

int main(void)
{
	printf("Ich moechte die Primzahlen bis zu diesem Wert berechnen:\n");
	scanf("%d",&size);

	// Bool'sches Array wird definiert
	bool prim[size];
	
	// Alle Elemente des Arrays werden auf "true" gesetzt
	for (int i=0; i < size; i++)
	{
		prim[i] = true;
	}
	
	// Das erste Element wird auf "false" geÀndert
	prim[0] = false;


	// Sieben
	for (int i=1; i < size; i++)
	{	
		if (prim[i] == true)
		{
			for (int j = 2; j < size; j++)
			{
				calc = (i+1)*j;
				if (calc > size)
					break;
				prim[calc-1] = false;
			}
		}
	}


	// Ausgabe
	for (int k=0; k < size; k++)
	{
		if (prim[k] == true)
		{
			printf("%d \n",k+1);
		}
	}
	return 0;
}
Bearbeitet von Neo-=IuE=- am 24.12.2005, 11:33
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz