Primzahlen - Berechnungs - Programm



  • moin leute
    ich möchte gerne durch eingeben einer zahl ins editfeld herrausfinden ob es eine primzahl ist oder net.
    sollte es eine sein soll es in das memofeld geschriebn werden.
    ich hab schon nen anfang gemacht aber ich glaube es ist noch falsch.
    habt ihr nen verbesserungsvorschlag bzw. eine ganz andere lösung parat?

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    int modulo(int mod)
      {
        for(int b=mod%2; b>1; b--)
          {
            if(mod/b == 0)
              {return(0);}
            else
              {return(1);}
       }
    }
    
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
     int x;
     double y;
     int z;
    
     x= StrToInt(Edit1->Text);
     y= StrToFloat(Edit1->Text);
    
     if(x > 0)
      {
       if(modulo(x) ==1)
         {Label1->Caption="Primzahl";}
       if(modulo(x) ==0)
         {Label1->Caption="keine Primzahl";}
    
         Memo1->Clear();
         for(int i=1; i<x;i++)
          {
           if(modulo(i) ==1)
            {
            Memo1->Lines->Add(i);
            }
           }
    
    }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    

    danke
    😕



  • PomBär schrieb:

    [...]ich hab schon nen anfang gemacht aber ich glaube es ist noch falsch.

    Glauben kannst du in der Kirche. Was ist falsch? Wieso ist es falsch? Was verhält sich anders als du es erwartet hast? Schonmal mit dem Debugger den Programmablauf verfolgt?

    PomBär schrieb:

    habt ihr nen verbesserungsvorschlag bzw. eine ganz andere lösung parat?

    a) Die Funktion die du da hast macht kein Modulo. Modulo ist das % zeichen
    b) Rückgabewerte die nur 0 oder 1 sind bzw. true oder false sind geschickterweise bool. Hilft auch bei der Selbstdokumentation des Programms eher weiter.
    c) Ich glaube ebenfalls das irgendwas an deinem Programm falsch ist. Quizfrage: Wie stellst du mathematisch fest ob eine Zahl eine Primzahl ist?
    d) Gib deinen Objekten auf dem Formular Sinnvollere Namen als "Button1", "Edit1" oder "Memo1". Du willst dich ja später wieder zurechtfinden können?
    e) Gib deinen Variablen sinnvolle Namen welche auch etwas aussagen. x, y und z sind so aussagekräftig wie der Variablenname "Käsekuchen".
    f) Überarbeite nochmals deine Code-Formatierung, damit man den Code auch auf Anhieb lesen kann. So ein Chaos tut einem weh in den Augen.

    Ich denke das wars vorerst. Bei weiteren Zweifeln ungeniert nachfragen.

    -junix



  • junix schrieb:

    e) x, y und z sind so aussagekräftig wie der Variablenname "Käsekuchen".

    "Käsekuchen" kann doch durchaus für ein Programm für Kuchenrezepte ein gut
    gewählter Variablenname sein.
    Schlimmer finde ich wirklich aussagenlose Variablennamen wie

    bool isOkay;
    bool isTrue;
    int variableX;
    

    Gruß,

    Alexander



  • Vielleicht als Variableninhalt, ja... aber ich denke wir beide wissen wie das gemeint war (o;

    -junix



  • Alexander Kempf schrieb:

    "Käsekuchen" kann doch durchaus für ein Programm für Kuchenrezepte ein gut gewählter Variablenname sein.

    Wohl kaum. Zumindest nicht, solange es keinen Compiler gibt, der Umlaute in Variablennamen akzeptiert ... 😉



  • Moinxen

    Sacht ma wat seit denn ihr für Spasties?

    Zum einen Muss ick ma dem PomBär 'n paar auf die Zähne kloppen:
    Warum dokumentierst du deine Frage nicht besser?

    Zweitens: du junix Kloppie hast wohl übersehen, das da versucht wird eine MODULO funktion vorzutäuschen.

    Meines erachtens Arbeitet PomBär mit'm Zeh-Bilder.
    Was daraus schließen lässt, DASS er auch Delphi kennt.
    Daraus schließt ein Programmierer, der in der Lage ist kreativ zu denken(!), dass er versucht MODULO zu erzeugen - echt jetzt.
    Dass PomBär weis, was MODULO ist, beweist er in Zeile 10 (geschrieben zehn -> wie zehen, von denen ja auch die meisten Menschen 10 haben, halt nur mit einen "e" weniger)

    Außerdem denke ich, dass die Variablennamen in einem derart pupsigen Projekt schon OK gehen!

    Ich stimme jedoch trotz dem dafür, das der PomBär an seiner sorgfalt feilt!

    Und weil junix so schlau tut, muss er sich auch das folgende bieten lassen:
    Wenn du also so ein toller Programmierer bist - *unix - der hier großkotzig 'nen Absoluten Neuling zukackt, warum löst du dann nicht dieses selten einfache Problem???

    Das Proggy ist nämlich wirklich ein Kinderprogramm. So etwas hat man im zweiten Jahr Anfängerkurs drann genommen!
    ABER DU SCHEITERST AN DER ERSTEN FUNKTION *DICH AUSLACH*

    Also fahr mal dein Ego lieber wieder bissel runter und versuch das Problem zu lösen!
    Oder um es philosophisch auszudrücken: Du kannst weglaufen ODER dich der Aufgabe stellen!
    Das der PomBär sein Proggy unheimlich schlecht dokumentiert hat, darfst du als zusätzliche Schwierigkeit betrachten 😉

    ...jetzt genug der finstren Worte!

    Ich glaube aber so im schnellen überfliegen:
    Das Problem liegt in der FUNKTION -> modulo()

    VORSCHLAG:
    int modulo(int mod)
    {
    int b;
    b=(mod/2);
    for( ;b>1;b--)
    {
    if(mod%b == 0)
    {return(0);}
    }
    return(1);
    }

    ...Wie wollt ihr Spasties also den Sozialismus errichten, wenn ihr schon an einem So billigen Problem scheitert!

    --> OpenSource == Sozialismus!

    MsG puk

    PS: der Lösungsvorschlag ist wie immer ohne Gewähr, ist somit auf eigene Gefahr anzuwenden.
    Bei Risiken und Nebenwirkungen schmeiss dein Zeh-Bilder über Bord und nimm die jute ANJUTA --> www.anjuta.org



  • puk:
    Der Tonfall ist völlig unangemessen und hier unerwünscht. Ich bitte dich, das in Zukunft zu berücksichtigen.



  • War das nicht so(Primzahl=Zahl ausser 1, die nur durch 1 und sich selbst teilbar ist) ?
    Zum Thema Freundlichkeit ist es hier manchmal echt nicht so gut bestellt.
    @Junix
    Wie man in den Wald hineinruft .... 😉
    Fand deine Antwort an einen Anfänger auch ziemlich heftig.
    Wenn mann sowas als absoluter Newbie um die Ohren geknallt bekommt, traut man sich nie wieder hier was reinzusetzen.
    Aber man wächst mit den Jahren. 😉

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    bool isprim(int zahl)
    {
       bool prim=zahl%2;
       if(prim)
       {
          int div=3;
          while((prim=zahl%div)&&div<zahl/2) div+=2;
       }
       if(zahl>3) return prim;
       else return !prim;
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
       String ausgabe[2]={"Keine Primzahl","Primzahl"};
       Label1->Caption = ausgabe[isprim(StrToInt(Edit1->Text))];
    }
    //---------------------------------------------------------------------------
    


  • frank_ schrieb:

    Zum Thema Freundlichkeit ist es hier manchmal echt nicht so gut bestellt.

    Um die Bemühungen der hier fragenden ist es hier ebenfalls manchmal wirklich mieserabel bestellt. Dazu gehören meist dann auch Aussagen wie "ich glaube, dass da was noch falsch ist..." oder so. Was soll denn das für eine AUssage sein? Wenn er dies glaubt, wieso teilt er dann nicht mit, was ihn dies glauben macht? Hat er denn sein Programm nicht getestet? Hat er es getestet und es rechnet falsch? Diese Fragen zum Beispiel, sollte man doch in einem Erstposting auch beantworten? ( Siehe auch wrf )

    Dazu kömmt, dass ein so unvorbereitetes Posting mit dem kommentar "Ich hab da galub ich ein Problem" und einem riesen Code-Quote oft ein Indiz dafür ist, dass es sich um eine Panik-Aktion des Autors handelt, weil er mal kurz irgendwo den Kopf angeschlagen hat. (Bildlich gesprochen) und statt zu schauen woran er den Kopf angeschlagen hat, dreht er sich um und fragt den Hintermann.

    frank_ schrieb:

    Wie man in den Wald hineinruft .... 😉

    Wie habe ich denn gerufen? Ich würde mal sagen: Sachlich (mit leichten Übertreibungen zur Bekräftigung der Aussagen), kurz und unbeschönigt.

    frank_ schrieb:

    Fand deine Antwort an einen Anfänger auch ziemlich heftig.
    Wenn mann sowas als absoluter Newbie um die Ohren geknallt bekommt, traut man sich nie wieder hier was reinzusetzen.

    Was war daran heftig? Er hat nach Kritik gefragt und hat sie erhalten. Ist ja nicht so, dass ich einfach mal generell geschrieben habe, dass das Prog scheisse ist. Ich habe präzise gesagt, was zu überarbeiten wäre und wo dass er ansetzen sollte um mal generelle Fehler zu finden.
    Wenn man damit nicht umgehen kann, dann sollte man sich vielleicht überlegen, sich in eine geschützte Werkstatt für Mimosen zu begeben. Wer Fragen stellt darf die Antwort nicht scheuen, auch wenn sie einem vielleicht etwas härter kritisiert.

    Soviel dazu.

    @puk:
    Leute die nicht mal den Anstand haben, hier - wie alle anderen auch - in Hochdeutsch zu kommunizieren, und dann auch noch die Klappe weit aufreissen mit irgendwelchem inhaltslosen - dummen - gelaber, das nur darauf ausgelegt ist, zu beleidigen, kann ich prinzipiell nicht ernstnehmen, tut mir leid für dich.
    Daher bist du mir auch sicher nicht böse, wenn ich dein Posting nicht weiter kommentiere. Wenn du ein Problem mit mir hast, melde dich per Mail. Wir können gerne einen Termin machen.

    -junix



  • Dazu kömmt, dass ein so unvorbereitetes Posting mit dem kommentar "Ich hab da galub ich ein Problem" und einem riesen Code-Quote oft ein Indiz dafür ist, dass es sich um eine Panik-Aktion des Autors handelt, weil er mal kurz irgendwo den Kopf angeschlagen hat. (Bildlich gesprochen) und statt zu schauen woran er den Kopf angeschlagen hat, dreht er sich um und fragt den Hintermann.

    Es passt nicht jeder in die Schablone.
    Das kannst du nicht auf alle Leute die hier Fragen stellen projezieren.
    Die Fragestellung ist zwar etwas gewöhnungsbedürftig.Bei Leuten die mit den hiesigen Boardregeln aber noch nicht so vertraut sind sollte man etwas Nachsicht haben.
    Es gibt durchaus Fälle (besonders häufig bei Newbies die mit dem Debugger noch nicht so vertraut sind) wo man Stunden an einem Problem hängt und einfach nicht weiterkommt.
    Oder heisst es bei euch bald: Newbies nein danke ?
    Fragestellungen erst bei einem bestimmten Level zulässig ? 😉



  • noproblem schrieb:

    Es passt nicht jeder in die Schablone.
    Das kannst du nicht auf alle Leute die hier Fragen stellen projezieren.

    Erfahrungswert.

    noproblem schrieb:

    Es gibt durchaus Fälle (besonders häufig bei Newbies die mit dem Debugger noch nicht so vertraut sind) wo man Stunden an einem Problem hängt und einfach nicht weiterkommt.

    Gerade wenn man stunden an einem Problem gesessen hat, sollte man doch fähig sein, das problem umfassend zu beschreiben oder zumindest dazuzupacken, was man alles schon versucht hat. Wer nicht mit dem Debugger arbeiten kann, soll dazuschreiben, dass er sich mit dem Debugger nicht auskennt. Wo liegt das Problem?

    noproblem schrieb:

    Fragestellungen erst bei einem bestimmten Level zulässig ? 😉

    Wenn der Level sich auf den Informationsgehalt in der Frage bezieht... dann ein klares Ja vom meiner persönlichen Seite.

    -junix



  • noproblem schrieb:
    Es passt nicht jeder in die Schablone.

    Das kannst du nicht auf alle Leute die hier Fragen stellen projezieren.
    Erfahrungswert.

    Wie kann man Erfahrung anhand von Vermutungen sammeln ?

    Gerade wenn man stunden an einem Problem gesessen hat, sollte man doch fähig sein, das problem umfassend zu beschreiben oder zumindest dazuzupacken, was man alles schon versucht hat. Wer nicht mit dem Debugger arbeiten kann, soll dazuschreiben, dass er sich mit dem Debugger nicht auskennt. Wo liegt das Problem?

    Weisst du wie schwer eine Formulierung manchmal sein kann, wenn man das Problem selber noch nichtmal erkannt hat ?

    Wenn der Level sich auf den Informationsgehalt in der Frage bezieht... dann ein klares Ja vom meiner persönlichen Seite.

    Der Level bezieht sich auf den Kenntnisstand des Fragenden in Bezug auf C++ Kenntnisse und Compilerbedienung.



  • Hallo.

    @frank_:
    @PomBär:

    Als Abbruchbedingung sollte sogar <sqrt(zahl) genügen.
    Ist deutlich schneller 😉

    Gruss mathi



  • noproblem schrieb:

    noproblem schrieb:
    Es passt nicht jeder in die Schablone.

    Das kannst du nicht auf alle Leute die hier Fragen stellen projezieren.
    Erfahrungswert.

    Wie kann man Erfahrung anhand von Vermutungen sammeln ?

    Vermutungen die sich bei dem weiteren Arbeiten und tieferem Nachfragen bestätigt haben. So einfach ist das.

    noproblem schrieb:

    Gerade wenn man stunden an einem Problem gesessen hat, sollte man doch fähig sein, das problem umfassend zu beschreiben oder zumindest dazuzupacken, was man alles schon versucht hat. Wer nicht mit dem Debugger arbeiten kann, soll dazuschreiben, dass er sich mit dem Debugger nicht auskennt. Wo liegt das Problem?

    Weisst du wie schwer eine Formulierung manchmal sein kann, wenn man das Problem selber noch nichtmal erkannt hat ?

    Also bitte. Was ist so schwer an einer ausformulierten Fehlerbeschreibung die über "geht nicht" oder "ich glaube da ist ein Fehler" hinaus geht und am Erstellen einer Liste was man schon alels versucht hat? Ich glaube einen Beschrieb der Symptome bekommt auch ein Nicht-Programmierer oder ein Anfänger hin.

    noproblem schrieb:

    Wenn der Level sich auf den Informationsgehalt in der Frage bezieht... dann ein klares Ja vom meiner persönlichen Seite.

    Der Level bezieht sich auf den Kenntnisstand des Fragenden in Bezug auf C++ Kenntnisse und Compilerbedienung.

    Aus oben genannten Gründen eben nicht. Anders sähe es aus, wenn ich perfektes Fachchinesisch gefordert hätte.

    So nun genug der OT-Debatte. Bei weiterem Diskussionsbedarf:
    E-Mail, Thread in einem passenderen Forum, Anrufen, Brief schreiben oder was auch immer.

    -junix



  • hab hier auch mal nen Vorschlag ist aus der Schule nen halbes Jahr alt

    //---------------------------------------------------------------------------
    #include <vcl.h>
    #include <math.h> // benötigt wegen sqrt
    #pragma hdrstop

    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent
    Owner)
    : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int z = StrToIntDef (Edit1->Text,0);
    int w = sqrt(z); // square-root = Quadrat Wurzel in eng.
    int t = 2;
    Edit2->Text = "";
    Color = clRed;
    Repaint ();
    while ( (z%t!=0) && (t<w) )
    t++;
    Color = clSilver;
    if (z%t==0)
    Edit2->Text = t;
    else
    Edit2->Text = " Es ist eine Primzahl" ;
    }

    //---------------------------------------------------------------------------

    mfg
    tgitler



  • @tgitler

    Gib mal 2 oder 1 ein.


Anmelden zum Antworten