Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Mein Array will sich nicht befüllen lassen (https://www.delphipraxis.net/194388-mein-array-will-sich-nicht-befuellen-lassen.html)

Zyvex 14. Nov 2017 15:18

Mein Array will sich nicht befüllen lassen
 
Hallo erstmal.

Ich habe eine Aufgabe zu erledigen, in der es heisst ich solle Primzahlen bis zu einer gewissen obergrenze berechnen und die Anzahl der errechneten Primzahlen ausgeben. Alles kein problem und läuft auch. Allerdings ist die Aufgabenstellung, dass ich alle errechneten Primzahlen in ein entsprechendes array einspeicher und sie darüber ausgebe, wie auch die Menge der errechneten Zahlen über die Größe des arrays.

Funktioniert:
Code:
    //oS steht für obere Schranke und wird weiter oben im code von der Tastatur eingelesen
    int count = 0;
    int i;
    for(i=2; i<=oS; i++){ 
    int teiler = 2;
        while(i % teiler != 0){ 
            teiler++;
        }
        if(teiler == i){ 
            count++;
            printf("%d\n", i);
        }
    }

    printf("Es wurden insgesamt %d Primzahlen berechnet", count);
return 0;
soviel zum Primzahlenrechner.
Hier ist mein verzweifelter Versuch das alles über ein array auszugeben:

Code:
    //oS steht für obere Schranke und wird weiter oben im code von der Tastatur eingelesen
    int Primzahlen[oS];
    int count = 0;
    int i;
    for(i=2; i<=oS; i++){ 
    int teiler = 2;
        while(i % teiler != 0){ 
            teiler++;
        }
        if(teiler == i){ 
            Primzahlen[count] = i;
            printf("%d\n", Primzahlen[count]);
            count++;
        }
    }

    printf("Es wurden insgesamt %d Primzahlen berechnet", sizeof(Primzahlen[count]/sizeof(int));
return 0;
Die Idee war, die jeweils errechnete Zahl in der stelle "count" im array einzuspeichern und nachdem jegliche Arbeit in einem loop mit diesem array vollbracht ist, count um 1 zu erhöhen. Das Programm gibt zwar alle Primzahlen wie gewünscht aus, für die Größe des Arrays jedoch IMMER als 1... und ich weiß nicht wieso.

Würde mich über viele hilfreiche tipps freuen :)

TiGü 14. Nov 2017 15:58

AW: Mein Array will sich nicht befüllen lassen
 
Wie ist es denn so:

(sizeof(Primzahlen)/sizeof(*Primzahlen))

Zyvex 14. Nov 2017 16:05

AW: Mein Array will sich nicht befüllen lassen
 
Zitat:

Zitat von TiGü (Beitrag 1386250)
Wie ist es denn so:

(sizeof(Primzahlen)/sizeof(*Primzahlen))

da das array auf eine maximalgröße von der oberen Schranke definiert ist, gibt das programm mit dieser Schreibweise die vom nutzer eingegebene Schranke aus. wenn ich das array wiederrum auf die größe von count definier, hat es nie mehr als 8 stellen. der algorythmus soll primzahlen bis zu einer obergrenze von über 100.000 berechnen und ausgeben können, also kann das nicht die lösung sein

Neutral General 14. Nov 2017 16:05

AW: Mein Array will sich nicht befüllen lassen
 
Du machst es dir unnötig schwer:
Code:
printf("Es wurden insgesamt %d Primzahlen berechnet", count);
Und ich lese die Aufgabenstellung NICHt so dass die Anzahl der generierten Zahlen am Array berechnet werden sollen.
Was wahrscheinlich gemeint ist, ist dass du erst die Primzahlen generierst und in einem Array speicherst.

Im 2. Schritt durchläufst du das Array bis count und gibst die Zahlen aus.
So lese ich das zumindest.

Zyvex 14. Nov 2017 16:08

AW: Mein Array will sich nicht befüllen lassen
 
Zitat:

Zitat von Neutral General (Beitrag 1386252)
Du machst es dir unnötig schwer:
Code:
printf("Es wurden insgesamt %d Primzahlen berechnet", count);
Edit: Ignorieren! Bin den Post grad nochmal am lesen.

genau das ist das problem... ich wär ja schon längst fertig, wenn die aufgabenstellung es nicht über ein array verlangen würde

edit: meinst du mit einer extra for-Schleife zur Ausgabe des arrays bis count? so:

Code:
    int j;
    for(j=0; j<count; j++){
        printf("%d\n", Primzahlen[j]);
    }

Neutral General 14. Nov 2017 16:16

AW: Mein Array will sich nicht befüllen lassen
 
Zitat:

Zitat von Zyvex (Beitrag 1386253)
edit: meinst du mit einer extra for-Schleife zur Ausgabe des arrays bis count? so:

Code:
    int j;
    for(j=0; j<count; j++){
        printf("%d\n", Primzahlen[j]);
    }

So verstehe ICH die Aufgabenstellung.
Ich bin mir ziemlich sicher, dass man nicht die Anzahl der wirklichen Einträge eines Arrays berechnen kann.
Das Mitzählen mit der count-Variable ist das einzig wirklich sinnvolle.

Zyvex 14. Nov 2017 16:20

AW: Mein Array will sich nicht befüllen lassen
 
Zitat:

Zitat von Neutral General (Beitrag 1386254)
Zitat:

Zitat von Zyvex (Beitrag 1386253)
edit: meinst du mit einer extra for-Schleife zur Ausgabe des arrays bis count? so:

Code:
    int j;
    for(j=0; j<count; j++){
        printf("%d\n", Primzahlen[j]);
    }

So verstehe ICH die Aufgabenstellung.
Ich bin mir ziemlich sicher, dass man nicht die Anzahl der wirklichen Einträge eines Arrays berechnen kann.
Das Mitzählen mit der count-Variable ist das einzig wirklich sinnvolle.

also um fair zu sein, die aufgabenstellungen meiner uni waren bisher alle unnötig kompliziert. fast jeder code wurde beinahe doppelt so lang wie er sein musste aus schulungszwecken. ich werde deine variante im laufe der woche mal einem tutor vorlegen und gucken wie er sich dazu rechtfertigt :)

Neutral General 14. Nov 2017 16:20

AW: Mein Array will sich nicht befüllen lassen
 
Kannst du vielleicht mal die original Aufgabenstellung hier posten?

PS: Du hast dich ja scheinbar hier für dieses Problem angemeldet.
Wie kamst du darauf dich in einem Delphi Forum anzumelden um eine C-Frage zu stellen? :mrgreen:

Zyvex 14. Nov 2017 16:28

AW: Mein Array will sich nicht befüllen lassen
 
Zitat:

Zitat von Neutral General (Beitrag 1386256)
Kannst du vielleicht mal die original Aufgabenstellung hier posten?

PS: Du hast dich ja scheinbar hier für dieses Problem angemeldet.
Wie kamst du darauf dich in einem Delphi Forum anzumelden um eine C-Frage zu stellen? :mrgreen:

verzweiflung. und es war das erste forum das ich gefunden habe :D Hier die Aufgabenstellung:

Aufgabe 2.3: Berechnung verschiedener Primzahlen
Abgabe am 13.12.2017 um 14 Uhr

Erstellen Sie ein Programm, dass alle Primzahlen bis zur einer vorgegebenen Schranke
berechnet, speichert und ausgibt. Gehen Sie dafür wie folgt vor:
•Einlesen einer Zahl die als obere Schranke dienen soll.
•Berechnung aller Primzahlen die kleiner gleich der oberen Schranke sind.
•Abspeichern der gefundenen Primzahlen in dem int-Array primzahlen[...]


Sind alle Primzahlen abgespeichert:
◦Ausgabe aller Primzahlen und deren Anzahl.
◦Ausgabe der benötigten Zeit in Millisekunden zur Berechnung aller Primzahlen.

Die Zeit in Millisekunden habe ich bereits im code integriert, aber erstmal für dieses problem nicht mit reinkopiert. Mich stört wirklich nur dass ich das ganze mit nem array ausgeben muss.

Zacherl 14. Nov 2017 16:33

AW: Mein Array will sich nicht befüllen lassen
 
Zitat:

Zitat von Zyvex (Beitrag 1386258)
es war das erste forum das ich gefunden habe :D

Und direkt das Beste erwischt :stupid:

Zitat:

Zitat von Zyvex (Beitrag 1386247)
Code:
int Primzahlen[oS]

Diese Zeile stört mich schon direkt. Das ist maximal seit C++ 2017 im Standard möglich. Ich denke mal hier sollst du eher ein dynamisches Array verwenden, statt ein Statisches.
Edit:
Nvm, geht doch. Nur MSVC kann es scheinbar bisher nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz