Programm funktioniert nicht



  • Hallo erstmal,
    ich bin ein c Neuling also seid nicht so streng ; )
    Ich will quadratzahlen herausfinden doch irgendwas funktioniert nicht un da bitte ich euch um Hilfe, denn ich bekomme es einfach nicht hin u. Hier ist der Code:
    Liebe grüße!

    
    void calcQuadrat(int a[])
    {
        int i;
        int x = sqrt(a[i]);
        int j;
        int sum = 1;
        int cnt = 1;
    
        for(i = 0; i < SIZE; i++)
        {
            for(j = 0; j <= x - 1; j++)
            {
                sum = cnt + 2;
    
                if(sum == a[i])
                {
                printf("%d ist eine Quadrat Zahl  ", a[i]);
                 }
                else
                {
                printf("%d ist keine Quadrat Zahl  ", a[i]);
                }
            
            }
    
            
    
        }
    }


  • „Funktioniert nicht“ ist keine Fehlerbeschreibung.



  • Dir fehlt die Funktion main



  • Dieser Beitrag wurde gelöscht!


  • „Funktioniert nicht“ ist keine Fehlerbeschreibung.
    Wenn es eine Quadratzahl ist gibt es trotzdem nur "die Zahl ist keine Quadratzahl aus" und ich komme auf den Fehler nicht drauf



  • 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



  • Dieser Beitrag wurde gelöscht!


  • 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.


Anmelden zum Antworten