Entwickler-Ecke
Algorithmen, Optimierung und Assembler - HILFE für ein programm mit primzahlen
ACeS - Di 17.11.09 21:04
Titel: HILFE für ein programm mit primzahlen
Also ich habe eine aufgabe in info bekommen und schreibe morgen eine kursarbeit. es könnte sein, das auch eine solche aufgabe kommt. ich habe das programm soweit geschrieben (bzw. eine andere aufgabe umgeschrieben), weiß aber nicht warum es nicht geht.
also die aufgabe heißt:
schreibe ein programm, das die ersten n primzahlen ausgibt (n=eingabe).
und die aufgabe die ich umschrieb lautete: schreibe ein programm, das alle primzahlen, bis zur grenze n ausgibt (n eingabe).
also das habe ich geschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TForm1.Button1Click(Sender: TObject); var a,b,c,d,g:integer; f:string; begin
a:=strtoint(edit1.text); d:=0; For c:=2 to a do begin For b:=2 to (c-1) do begin if (c mod b)=0 THEN d:=1 end; if d = 0 THEN f:=f+ inttostr(c)+ chr(13); g:= g+1; end; d:=0; if (g=a) THEN Label1.caption:=f; end;
end. |
Warum funktioniert es nicht?
wenn man das programm starten will, gibt er nun gar nichts aus.
Bitte bitte brauche hilfe!
thx im vorraus
Moderiert von
Gausi: Delphi-Tags hinzugefügt
Moderiert von
Narses: Titel geändert.
Gausi - Di 17.11.09 21:19
Hallo und :welcome: in der Entwickler-Ecke,
Lass mal die Variable g komplett weg. Die scheint mir keinen weiteren Sinn zu haben, außer dass die Überprüfung if g=a am Ende immer fehlschlagen muss.
Edit: Ah, ne. Du sollst die ersten a Primzahlen ausgeben, nicht alle im Bereich 1..n. Dann wäre eine While-do oder repeat-until schleife besser, denn du weißt ja nicht, wie groß die größte Primzahl ist, die du suchst. Größer als a ist sie auf jeden Fall, daher reicht deine For-Schleife bis a nicht aus.
ACeS - Di 17.11.09 22:34
ja das hatte ich mir auch schon gedacht aber da
weiß ich nicht wie ich das schreiben soll. kann mir das vllt mal jemand so schreiben, das es funktioniert. evtl mit erklärung, was warum wo steht und was was macht^^
bütte :-)
Namenlosnameless - Di 17.11.09 23:30
Ich kenn Delphi nicht, trotzdem habe ich mir schonmal sowas geschrieben aber in VBA-Excel:
Prinzipiel ist eine Primzahl so definiert, das wenn man sie durch alle vorangegangenen Primzahlen dividiert keine ganze Zahl herauskommt.
d.h.
Du hast eine Schleife die von 3 bis a geht (allerdings in 2er Schritten da gerade Zahlen sowieso keine Primzahlen sein können.)
In dieser Schleife ist noch eine Schleife die a durch alle vorherigen Primzahlen dividiert. die 2te Schleife läuft solange bis die erste division eine ganze Zahl ergibt oder bis alle zahlen durchgelaufen wurden.
Mit einer if-abfage entscheiden lassen ob es eine Primzahl ist oder nicht.
Das ist mein Beitrag probiere es mal so nachzuschreiben! Näheres müssen dir Leute erklären die Delphi kennen!
ACeS - Di 17.11.09 23:39
thx für die antwort. so hab ich mir das auch iwie gedacht, aber wie schreibe ich das nun genau.
also ich kenn mich auch nicht so aus (eig gar nicht). hab erst seit 5-6 wochen informatik in der schule und bin noch relativ unsicher.
Namenlosnameless - Fr 20.11.09 19:23
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| static void Main(string[] args) { Console.WriteLine("Geben sie eine Zahl ein die die höchste Primzahl sein kann");
int a; int b; int c; double d; int Zähler;
Zähler=0; d = 0; List<int> arr1 = new List<int>(); arr1.Add(2);
try { a = int.Parse(Console.ReadLine()); } catch (FormatException) { Console.WriteLine("Bitte geben sie eine positive Zahl ein"); a = int.Parse(Console.ReadLine()); }
for ( b=3;b<=a; b=b+2) { while ((arr1.Count!=Zähler)) { c = arr1[Zähler]; d= (double)(b) / (c); Zähler = Zähler + 1; if (d-Convert.ToInt32(d)==0) { Zähler = arr1.Count; }
else if(Zähler==arr1.Count) { Console.WriteLine(b); arr1.Add(b); }
}
Zähler=0; } Console.ReadLine(); } |
hier ist der Code für C#!! Ich hab dir bei fast jeder Zeile dazugeschrieben was sie bringt!
Das was du noch machen musst ist das ganze in den Delphi-Code zu übersetzen!
Dabei kann ich dir nicht helfen
hoffe ich konnte helfen
ACeS - Fr 20.11.09 20:56
ja danke
jetzt weiß ich zumindest schonmal wie das programm rechnerisch funktioniert.
leider kann ich das selbst auch nicht übersetzen und kenne auch einige befehle nicht.
trotzdem danke. glaube mittlerweile, das die aufgabe ne scherzfrage des lehrers war und wir die gar nicht lösen können.
lg
Namenlosnameless - Fr 20.11.09 23:17
naja so schwer ist das auch wieder nicht! also mit 6-7 Wochen programmieren vlt. schon, aber es gehört eher zu den basics der basics vom proggn!
Kleiner Tipp: Proggen wirst du nimals in der Schule oder so lernen! Sondern du musst dich zuhause hinsetzen und kleine Programme schreiben die dann immer komplexer werden. wenn dir was nicht klar ist dann benutze googel oder dieses Forum hier.
Das einzige was dir ein Lehrer wirkllich bringt ist dass er dich in deinem Lernprozess unterstützen kann und dir vlt ein paar bisics zeigen kann aber er wird dir nie alle 20-30k befehle von Delphi und C# oder anderen Sprachen beibringen können.
Pepp3r - Mo 27.09.10 16:53
Der VOllständigkeit halber hier meine Lösung (Sieb des Eratosthenes)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure Eratosthenes(bis: Integer); var keinePrim: Array of Boolean; i, step, ende: Integer; begin setlength(keinePrim, bis); ende := round(sqrt(high(keinePrim))); keinePrim[0] := True; keinePrim[1] := True; for i:=2 to ende do begin if (keinePrim[i]) then continue; step := i; while step+i <= high(keinePrim) do begin step := step+i; if (keinePrim[i]) then continue; keinePrim[step] := True; end; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!