Frage zu C - Code
-
Aufgabe:
Es sollen alle Primzahlen von 2 bis 100 ausgegeben werden.Verfahren:
A[100] <----Feld
Anfangsprimzahl 2, dessen Vielfachen, SOLLEN == 0 gesetzt werden.
Dann wird die nächste Primzahl, dh. nächste Zahl, die != 0 ist, dessen Vielfachen == 0 usw...Finde den Fehler einfach nicht. Kann jemand nachschauen? MFG
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> using namespace std; int main(int argc, char *argv[]) { int x,b,n=0; int A[100]; for(x=0;x<100;x++){ A[x]=x+1; printf("%i\n",A[x]); } for(x=2;x<100;x++){ b=0; for(n=2;b<100;n++){ b=x*n; A[b-1]=0; } } for(x=1;x<100;x++){ if(A[x]!=0) printf("%i\n",A[x]); } system("PAUSE"); return EXIT_SUCCESS; }
-
lucbossman schrieb:
Finde den Fehler einfach nicht.
Welchen Fehler, außer dem, dass du fälschlicherweise beim Abschreiben aus dem Internet ein paar Zeilen C++ eingebaut hast?
Du schreibst übrigens fröhlich über Arraygrenzen. Überleg mal, was genau und in welcher Reihenfolge passiert, wenn in Zeile 18 ein Wert > 100 rauskommt.
In for-Schleifen darf man auch anderes machen, als stumpf um 1 hoch zu zählen. Überleg dir mal, ob es nicht bessere Methoden gibt, die Vielfachen einer Zahl zu erhalten.
-
lucbossman schrieb:
Aufgabe:
Es sollen alle Primzahlen von 2 bis 100 ausgegeben werden.Verfahren:
A[100] <----Feld
Anfangsprimzahl 2, dessen Vielfachen, SOLLEN == 0 gesetzt werden.
Dann wird die nächste Primzahl, dh. nächste Zahl, die != 0 ist, dessen Vielfachen == 0 usw...Finde den Fehler einfach nicht. Kann jemand nachschauen? MFG
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <time.h> #include <unistd.h> using namespace std; int main(int argc, char *argv[]) { int x,b,n=0; int A[193]; for(x=0;x<100;x++){ A[x]=x+1; printf("%i\n",A[x]); } for(x=2;x<100;x++){ b=0; for(n=2;b<100;n++){ b=x*n; A[b-1]=0; } } for(x=1;x<100;x++){ if(A[x]!=0) printf("%i\n",A[x]); } system("PAUSE"); return EXIT_SUCCESS; }
-
Ich wusste nicht, dass man über die Feldgrenze hinausschreiben darf. Aber wieso darf man das in meinem Code nicht?
-
lucbossman schrieb:
Aber wieso darf man das in meinem Code nicht?
Weil es dann wer weiß wo hin schreibt. Du hast ja immer noch nicht gesagt, was überhaupt dein Fehler ist. Ich tippe mal Endlosschleife oder Segmentation-Fault, da du entweder an anderer Stelle etwas wichtiges überschreibst oder weil du in etwas schreibst, wo du nicht hinschreiben darfst.
Ich wusste nicht, dass man über die Feldgrenze hinausschreiben darf.
C ist eben kein Ponyhof. Checks von Arraygrößen kosten Laufzeit. Wenn du welche willst, dann bau dir welche ein, da kann dich keiner hindern. Vorgeschriebene Performancebremsen überlässt man lieber Sandkastensprachen wie Java.
-
Der Fehler war , dass ich über das Feld hinausgeschrieben habe.
ZB. int A[100];
A[160]==0;Das darf man ja anscheinend nicht, ich werde versuchen, das in Zukunft zu vermeiden. MFG