Primzahltest < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:59 Sa 05.12.2009 | Autor: | az118 |
Aufgabe | Schreiben Sie eine Funktion, die als Parameter eine natürliche Zahl p übergeben bekommt
und dann überprüft, ob p eine Primzahl ist. Die Funktion gibt 1 zurück, falls
p eine Primzahl ist, ansonsten wird 0 zurückgegeben. Benutzen Sie diese Funktion im
Hauptprogramm, um eine Liste aller Primzahlen < 1000 auszugeben. |
Hallo, hab jetzt den "ersten Teil" der Aufgabe programmieren können,weiß jetzt nur nicht, wo und wie ich die Liste aller Primzahlen < 1000 einfüge?
Hier mal mein Programm:
#include <stdio.h>
int primtest (int p);
int main () {
int p;
printf("Bitte geben Sie die zu pruefende Zahl ein: ");
[mm] scanf_s(" [/mm] %i ", &p);
printf("Das Ergebnis lautet: %i",primtest(p));
[mm] while(getchar()!='\r');
[/mm]
return 0;
}
int primtest ( int p){
int zaehler;
if (p < 2) return 0;
if (p == 2) return 1;
if (p %2 == 0) return 0;
for (zaehler = 3; zaehler * zaehler <= p; zaehler +=2)
{
if (p % zaehler == 0) return 0;
}
return 1;
}
|
|
|
|
> Schreiben Sie eine Funktion, die als Parameter eine
> natürliche Zahl p übergeben bekommt
> und dann überprüft, ob p eine Primzahl ist. Die Funktion
> gibt 1 zurück, falls
> p eine Primzahl ist, ansonsten wird 0 zurückgegeben.
> Benutzen Sie diese Funktion im
> Hauptprogramm, um eine Liste aller Primzahlen < 1000
> auszugeben.
> Hallo, hab jetzt den "ersten Teil" der Aufgabe
> programmieren können,weiß jetzt nur nicht, wo und wie ich
> die Liste aller Primzahlen < 1000 einfüge?
ich glaube du hast das falsch verstanden
du sollst eine funktion schreiben, die schaut ob eine zahl eine primzahl ist oder nicht, und dann 1 oder 0 zurückgeben.
in der main nimmst du dann ne schleife die von 1 bis 1000 läuft und die funktion aufruft und dann die primzahlen ALLE ausgibt
>
> Hier mal mein Programm:
1: |
| 2: | >
| 3: | > #include <stdio.h>
| 4: | >
| 5: | > int primtest (int p);
| 6: | >
| 7: | > int main () {
| 8: | > int p;
| 9: | >
| 10: | > printf("Bitte geben Sie die zu pruefende Zahl ein: ");
| 11: | > [mm] scanf_s("[/mm] %i ", &p);
| 12: | > printf("Das Ergebnis lautet: %i",primtest(p));
| 13: | >
| 14: | > [mm]while(getchar()!='\r');[/mm]
| 15: | >
| 16: | > return 0;
| 17: | >
| 18: | > }
| 19: | >
| 20: | > int primtest ( int p){
| 21: | > int zaehler;
| 22: | >
| 23: | > if (p < 2) return 0;
| 24: | >
| 25: | > if (p == 2) return 1;
| 26: | >
| 27: | > if (p %2 == 0) return 0;
| 28: | >
| 29: | > for (zaehler = 3; zaehler * zaehler <= p; zaehler +=2)
| 30: | > {
| 31: | > if (p % zaehler == 0) return 0;
| 32: | > }
| 33: | >
| 34: | > return 1;
| 35: | >
| 36: | > }
|
die funktion ansich ist aber schon richtig
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 10:42 So 06.12.2009 | Autor: | az118 |
Ok,dann weiß ich jetzt nicht wirklich wie ich das testen kann. Kann mir da jemand helfen? Danke
|
|
|
|
|
> Ok,dann weiß ich jetzt nicht wirklich wie ich das testen
> kann. Kann mir da jemand helfen? Danke
primzahlen bis 1000:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43,
47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107,
109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181,
191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263,
269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433,
439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521,
523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613,
617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887,
907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
kannst ja einige markante gegenchecken, das sollte dann reichen um festzustellen, dass der algorithmus funktioniert
gruß tee
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:40 So 06.12.2009 | Autor: | az118 |
Ja, ich meinte, ich weiß nicht, wie und wo ich die Bedingung <1000 einfügen kann und als Liste ausgebe?
|
|
|
|
|
Hallo az118,
ich verstehe die Frage irgendwie von Anfang an nicht.
1) Hast Du Schwierigkeiten, die Bedingung [mm] n\le{1000} [/mm] in Deinem Programm unterzubringen?
Du kennst doch sicher bedingte Schleifen...
2) Willst Du die Liste der gefundenen Zahlen erst speichern, bevor Du sie ausgibst?
Informiere Dich über arrays und ihre Indizierung.
Ich würde für das Programm ehrlich gesagt auf die Speicherung der Funde verzichten und jeden sofort ausgeben.
Oder war bei diesen beiden Problemen Deins nicht dabei?
Wie gesagt, ich sehe nicht, worauf Du hinaus willst.
lg
reverend
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:13 So 06.12.2009 | Autor: | az118 |
Ja genau diese beiden Probleme habe ich. Ich weiß, dass ich eine bedingte Schleife nutzen muss, aber ich weiß nicht, wie ich die jetzt noch in das programm einfügen kann,hatte es versucht,dann ging das programm aber auch nicht mehr?
|
|
|
|
|
> Ja genau diese beiden Probleme habe ich. Ich weiß, dass
> ich eine bedingte Schleife nutzen muss, aber ich weiß
> nicht, wie ich die jetzt noch in das programm einfügen
> kann,hatte es versucht,dann ging das programm aber auch
> nicht mehr?
naja deine primtest funktion war ja in ordnung, in die main kommt dann nur noch eine forschleife:
1: |
| 2: | int i;
| 3: | for (i=1;i<=1000;i++){
| 4: | if (primtest(i)) { printf("%d\n",i); }
| 5: | }
|
so ne grosse hürde sollte das eigentlich nicht sein..
gruß tee
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 12:32 So 06.12.2009 | Autor: | az118 |
Ach man, ich hatte die for-schleife in die funktion geschrieben und nicht in die main-funktion, deswegen ging es wohl nicht. Jetzt klappt es. Danke
|
|
|
|