Antworte auf:  C: Armstrongzahl-Programm incl. Hilfsfunktion funktioniert nicht von Ehemaliges_Mitglied
Forum:  Programmieren, moderiert von: matph

[Zur Forum-Gliederung] [Wie man Fragen beantwortet] [Themenstart einblenden]

  Alle registrierten Mitglieder können Mitteilungen schreiben.
Benutzername:
Passwort:
Nachricht-Icon:                   
                  
              
Nachricht:


 

Erledigt J


Input assistance tools (JavaScript): [Link extern intern] [MathML?] [$$?]
[fed-area] [LaTeX-inline] [LaTeX-display] [Tikz] [hide-area][show-area] [Source code [num.]][?]
 Show Preview      Write using fedgeo formula editor or Latex.

Smilies for your message:
😃 😄 😁 🙂 🙃 😉 🤗 🤫 🤔 🙄 😴 🤒 😎 😮 😲 😂
🙁 😖 😒 😐 😡 👌 👍 👎 🤢 🤧 🥵 🥶 😵 🤯 😛 😷
Optionen: Deaktiviere HTML in dieser Nachricht
Deaktiviere MATHML in dieser Nachricht. Wenn Dein Text $-Zeichen enthält, die nicht LaTeX-Formeln begrenzen.
Deaktiviere Smilies in dieser Nachricht
Zeige die Signatur (Kann in 'Mein Profil' editiert werden.)
    [Abbrechen]
 
Beachte bitte die [Forumregeln]


Themenübersicht
zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 1268
Herkunft:
 Beitrag No.3, eingetragen 2019-05-19 13:01    [Diesen Beitrag zitieren]

2019-05-19 12:33 - Zrebna in Beitrag No. 2 schreibt:
Was meinst du mit richtiger Reihenfolge?
Du meinst, dass armstrong_Fkt. über der Potenz-Hilfs-Fkt. stehen soll?

Nein, genau umgekehrt: Eine Funktion ist zu definieren, bevor sie verwendet wird. Da "potenz" in "armstrong" verwendet wird, ist also erst "potenz" und dann "armstrong" zu definieren.


Ehemaliges_Mitglied
 Beitrag No.2, eingetragen 2019-05-19 12:33    [Diesen Beitrag zitieren]

2019-05-18 13:31 - zippy in Beitrag No. 1 schreibt:
2019-05-18 13:23 - Zrebna im Themenstart schreibt:
Wieso geht das nicht?

Du zerstörst in der "while"-Schleife deine Zahl, obwohl du sie in der "for"-Schleife noch brauchst.

Tatsächlich - danke!

Außerdem solltest du die Definitionen von "armstrong" und "potenz" in die richtige Reihenfolge bringen, sonst ist der Compiler nicht ganz glücklich:
$ gcc x.c
x.c: In function 'armstrong':
x.c:14:29: warning: implicit declaration of function 'potenz' [-Wimplicit-function-declaration]
  summe = summe + potenz(stelle, laenge); //zur Berechnung der einzelnen Summanden - KG gilt.
                  ^~~~~~


Was meinst du mit richtiger Reihenfolge?
Du meinst, dass armstrong_Fkt. über der Potenz-Hilfs-Fkt. stehen soll?

so, in etwa:
C
  1. #include <stdio.h>
  2.  
  3. int armstrong(int zahl) {
  4. int laenge = 0, summe = 0, stelle, i, original;
  5.  
  6. original = zahl;
  7.  
  8. while(zahl != 0) {
  9. zahl /= 10;
  10. laenge++;
  11. }
  12.  
  13. zahl = original;
  14.  
  15. for (i = 0; zahl != 0; i++){
  16. stelle = zahl % 10;
  17. summe = summe + potenz(stelle, laenge); //zur Berechnung der einzelnen Summanden - KG gilt.
  18. // printf("%d\n", potenz(stelle, laenge));
  19. zahl /= 10;
  20. }
  21.  
  22. // printf("%d\n", summe); 0 wird ausgeprintet - wieso klappt Rechnung nicht?
  23.  
  24. if (original == summe) {
  25. return 1;
  26. }
  27. else {
  28. return 0;
  29. }
  30. }
  31.  
  32. int potenz(int basis, int exponent) {
  33. int erg = 1, i;
  34.  
  35. for (i = 0; i < exponent; i++) {
  36. erg *= basis;
  37. }
  38. // printf("%d\n", erg);
  39. return erg;
  40. }
  41.  
  42. int main()
  43. {
  44. int test = 153;
  45.  
  46. if (armstrong(test)) {
  47. printf("Die Zahl %d ist eine Armstrongzahl.\n", test);
  48. }
  49. else {
  50. printf("Die Zahl %d ist keine Armstrongzahl.\n", test);
  51. }
  52.  
  53. return 0;
  54. }
  55.  


zippy
Senior
Dabei seit: 24.10.2018
Mitteilungen: 1268
Herkunft:
 Beitrag No.1, eingetragen 2019-05-18 13:31    [Diesen Beitrag zitieren]

2019-05-18 13:23 - Zrebna im Themenstart schreibt:
Wieso geht das nicht?

Du zerstörst in der "while"-Schleife deine Zahl, obwohl du sie in der "for"-Schleife noch brauchst.

Außerdem solltest du die Definitionen von "armstrong" und "potenz" in die richtige Reihenfolge bringen, sonst ist der Compiler nicht ganz glücklich:
$ gcc x.c
x.c: In function 'armstrong':
x.c:14:29: warning: implicit declaration of function 'potenz' [-Wimplicit-function-declaration]
  summe = summe + potenz(stelle, laenge); //zur Berechnung der einzelnen Summanden - KG gilt.
                  ^~~~~~


Ehemaliges_Mitglied
 Themenstart: 2019-05-18 13:23    [Diesen Beitrag zitieren]

Hallo!

Ich habe mich an einem Programm versucht, welches prüfen soll, ob eine Zahl beliebiger Länge (Input per scanf) eine Armstrongzahl ist.
Anmerkung: Erstmal keine eingegebene Zahl,
sondern als testcase die Zahl 153.

So sieht mein Quellcode aus:
C
  1. #include <stdio.h>
  2.  
  3. int armstrong(int zahl) {
  4. int laenge = 0, summe = 0, stelle, i, orginal;
  5.  
  6. orginal = zahl;
  7.  
  8. while(zahl != 0) {
  9. zahl /= 10;
  10. laenge++;
  11. }
  12. for (i = 0; zahl != 0; i++){
  13. stelle = zahl % 10;
  14. summe = summe + potenz(stelle, laenge); //zur Berechnung der einzelnen Summanden - KG gilt.
  15. // printf("%d\n", potenz(stelle, laenge));
  16. zahl /= 10;
  17. }
  18.  
  19. // printf("%d\n", summe); 0 wird ausgeprintet - wieso klappt Rechnung nicht?
  20.  
  21. if (summe == orginal) {
  22. return 1;
  23. }
  24. else {
  25. return 0;
  26. }
  27. }
  28.  
  29. int potenz(int basis, int exponent) {
  30. int erg = 1, i;
  31.  
  32. for (i = 0; i < exponent; i++) {
  33. erg *= basis;
  34. }
  35. // printf("%d\n", erg);
  36. return erg;
  37. }
  38.  
  39. int main()
  40. {
  41. int test = 153;
  42.  
  43. if (armstrong(test)) {
  44. printf("Die Zahl %d ist eine Armstrongzahl.\n", test);
  45. }
  46. else {
  47. printf("Die Zahl %d ist keine Armstrongzahl.\n", test);
  48. }
  49.  
  50. return 0;
  51. }
  52.  


In Zeile 18 habe ich den Output der Summe an dieser Stelle natürlich auskommentiert - wollte nur gucken, was mein Programm an der Stelle "intuss" hat bzw. "was es macht".
Falls Zeile 18 aber drucken lassen würde, dann wäre die Summe 0 und nicht 153 (27 + 125  + 1 bzw. 3³ + 5³ + 1³).
Daher scheint es, dass entweder die Rechnung in der Funktion nicht geschehen ist, oder etwas in der Hilfsfunktion Potenz() ist schief gelaufen.
Nebenfrage:
Ich wollte bei Zeile 34 gucken, ob mein Programm die Potenz berechnet hat und es vor "return" printen.
Wieso geht das nicht?
Bei Zeile 15 wollte ich auch gucken, ob per Iteration die korrekten Potenzen bzw. Summanden zurückgegeben worden sind.
Auch hier gab es keinen Output.
Ich hätte nun vermutet, dass man nur in der main() print-output erzeugen kann, aber in Zeile 19 wäre es ja zu einem Output gekommen, wenn es nicht auskommentiert wäre.

Na ja, evtl. findet ihr paar Hinweise und könnt mir helfen, das Programm zum Laufen zu bringen.

Lg,
Zrebna


 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]