Programm funktioniert nicht



  • Da stimmt einiges nicht:

    1. Was soll
    int i;
    int x = sqrt(a[i]);
    

    deiner Meinung nach machen? i ist uninitialisiert und du greifst daher bei a[i] auf irgendeinen Speicher zu => "undefined behaviour" (UB).
    2. Die Variable cnt änderst du nie, d.h. die Zuweisung sum = cnt + 2 ergibt bisher immer 3 (und damit wird bisher [fälschlicherweise] nur diese Zahl als Quadratzahl angesehen)!
    3. Die innere for-Schleife ergibt auch keinen Sinn, da du nirgends j benutzt.
    4. ...

    Beschreibe mal, was du genau machen möchtest (d.h. nach welcher Formel möchtest du ermitteln, ob eine der Zahlen in dem Array a eine Quadratzahl ist)?

    PS: Die Größe des Arrays solltest du als weiteren Funktionsparameter übergeben, anstatt als festes Makro SIZE.



  • Da stimmt einiges nicht:

    1. Was soll
    int i;
    int x = sqrt(a[i]);
    

    deiner Meinung nach machen? i ist uninitialisiert und du greifst daher bei a[i] auf irgendeinen Speicher zu => "undefined behaviour" (UB).
    2. Die Variable cnt änderst du nie, d.h. die Zuweisung sum = cnt +2 ergibt bisher immer 3!

    Beschreibe mal, was du genau machen möchtest (d.h. nach welcher Formel möchtest du ermitteln, ob eine der Zahlen in dem Array a eine Quadratzahl ist)?

    PS: Die Größe des Arrays solltest du als weiteren Funktionsparameter übergeben, anstatt als festes Makro SIZE.

    ich habe a[] mit zuffälligen Werten initialisiert und will das zb a[i] 16 ist das erstmal die Wurzel ausgerechnet wird also 4 und dann soll es 1 + 3 + 5 + 7 addieren und wenn das a[i] also 16 ist ist es eine Quadratzahl also es soll so oft ungerade Zahlen addieren wie die Wurzel der Zahl ist. Ich hoffe es ist verständlich.
    LG



  • This post is deleted!


  • OK, du willst also nach Formeln zum Generieren von Quadratzahlen diese ermitteln.

    Am besten du schreibst dir dann eine Funktion, welche für eine Zahl überprüft, ob diese eine Quadratzahl ist - und diese Funktion rufst du dann in einer Schleife für alle Werte des Arrays a auf (dann sollte dir klar(er) werden, was bisher an deinem Code logisch falsch ist).



  • @Th69 also 1 weiß ich, dass int x = sqrt(a[i]) in die Schleife gehört, aber mehr dann auch nicht...



  • @Th69 Das Problem ist halt auch, dass icht nicht gut bin im programmieren ich tue micht bei den Lösungswegen trotz Bemühungen einfach sehr schwer.



  • Wenn du schon sqrt benutzt, dann könntest du auch einfach

    int x = sqrt(a[i]);
    
    if (x * x == a[i])
      printf("%d ist eine Quadratzahl\n", a[i]);
    else
      printf("%d ist keine Quadratzahl\n", a[i]);
    

    berechnen.
    Wenn das jedoch eine Übungsaufgabe sein soll, dann sollte diese auch ohne sqrt auskommen...

    Und daher auch mein Rat, mit Aufteilen der Gesamtaufgabe in kleinere, überschaubare Funktionen.



  • @Th69 Das hab ich e schon gemacht, aber ich wollte es mal so probieren aber anscheinend ohne Erfolg.



  • @Anfänger1 sagte in Programm funktioniert nicht:

    void calcQuadrat(int a[])
    {
    int i;
    int x = sqrt(a[i]);

    Welchen Wert hat i zu dem Zeitpunkt, wo du damit den Zeiger a dereferenzierst?



  • @Wutz Habe es schon geschafft danke waren sehr dumme Fehler dabei.


Log in to reply