![]() |
Armstrongzahlen
Hi soll dass in c programmieren und hab keine ahnung wie das geht. Wäre um tipps sehr dankbar
Eine Zahl mit n Ziffern in dezimaler Schreibweise heißt Arm-strong – Zahl, wenn sie gleich der Summe der n – ten Potenzen ihrer Ziffern ist. Beispiel: die Zahl 153 hat 3 Ziffern und es gilt:1³+5³+3³ .Schreiben Sie eine Funktion armstrong(n), die 1 zurückliefert, wenn die Ganzzahl n eine Armstrongzahl ist. Sonst wird 0 zurückgegeben. Erweitern Sie diese Funktion zur Berechnung beliebiger Armstrongzahlen größer als Null. Testen Sie diese Funktion im Hauptprogramm durch Ausgabe aller Arm-strongzahlen zwischen 1 und 100000. |
das ist simple:
beispiel in python-code, aber sicher verständlich. musst nur nach c übersetzen ;) import string import math for zahl in range(1, 1000): zahlstring = str(zahl) zahllaenge = len(zahlstring) ziffernsumme = 0 for ziffer in range(1, zahllaenge+1): tmpziffer = int(zahlstring[ziffer-1]) ziffernsumme = ziffernsumme + pow(tmpziffer, zahllaenge) if ziffernsumme == zahl: print "Zahl %d ist Armstrong-Zahl" % zahl |
danke für den tipp aber leider bin ich noch anfänger und sowas wie python code sagt mir leider nix.
|
Hirn anstrengen und die Hausübung selber machen :D :rolleyes: ;)
lg |
probier ich ja schon seit 3 stunden aber irgendwie fällt mir nix ein und wenn das gehirn dann auch noch sehr klein ist dann is um so schwieriger
|
für bestimmte zahlen wie zum beispiel von 100 bis 999 oder 1000 bis 9999 könnte ich es ja programmieren mein problem liegt darin es zu verallgemeinern dass das programm die stellen von 1 bis n der zahl erkennt.
|
schnell mal übersetzt:
Code:
int main () |
Danke für die kleine übersetzung aber jetzt hätt ich noch zwei fragen wo kommt die 20 her und die 48?
|
was ich echt nicht verstehe an dem ganzen:
du bekommst aufgaben die vom schwierigkeitsgrad sehr einfach gehalten sind und kannst damit überhaupt nichts anfangen!? Wenn euch euer Prof. solche Aufgaben gibt dann habt ihr ja die C-Grundlagen schon durch, also müsstest du das ja schon können (du kennst ja laut deiner Aussage nicht mal ein char array). Wenn ich mich an meine HTL Zeit zurückerinnere dann sind wir da schon anders zur Sache gegangen. Meines erachtens ist das Problem das viele Leute kein Algorithmisches Denken mehr haben und beim kleinsten Problem schon nicht mehr weiter wissen... ... |
mein leitspruch:
ich kann jedem affen beibringen, dass er auf einen knopf drückt, damit er eine banane bekommt - das heisst aber nicht, dass er intelligent ist. ;) |
kann man das ganze auch ohne felder lösen?
|
@hewlett
Zur meiner Verteidigung: Also die c Grundlagen haben wir bestimmt noch nicht durch und ein char array haben wir auch noch nicht durchgenommen. |
Zitat:
Schonmal überlegt die Zahl einfach zu zerlegen (dividieren durch 10 ist ein heißer Tipp) und dann einfach gemäß der Wertigkeit die Potenz dazuzubilden? Nicht böse sein, aber die Ausprogrammierung in <Sprache selbst einfügen> ist das kleinste Übel. Zeig uns deinen Pseudocode, wir zeigen dir, wie er umzusetzen ist pong |
ja das hab ich mir schon überlegt mit modulo 10 aber wie erkennt dass programm wie oft es das machen muss wenn ich irgendeine zahl eingebe. Dann müsste ich es ja für zweistellige dreistellige vierstellige usw immer wieder neu programmieren. deshalb hab ich ja schon geschrieben dass es für mich kein problem wäre wenn ich nur zahlen zwischen 100 und 999 hab oder 1000 und 9999.
|
Schonmal überlegt die Zahl einfach sooft durch 10 zu dividieren bis das Ergebnis 0 (int) bzw. <0 (float) ist?
Was hier fehlt sind essentielle Grundlagen nebst "dem Programmierer sein Denken" pong |
so sieht mein programm bis jetzt aus wie kann man dann die summe berechnen? bzw würde es so überhaupt klappen?
#include <stdio.h> int armstrong (int n) { int n; int summe; int zahl; zahl = n; do { n = zahl % 10; zahl = zahl / 10; } while (zahl>0); summe = ????? if (summe == n) return 1; else return 0; } |
1.) Fang dir nicht den Blödsinn mit Fussgesteuerten Schleifen an, das macht in Realität so ziemlich kein Mensch
2.) Zitat:
pong |
wie meinst du dass? ich dachte ich muss die zahl erst zerlegen damit ich die anzahl der stellen bekomme.
|
Wie willst wissen mit welcher Potenz du die Summe der Ziffern bildest, bevor du Stellenanzahl der Zahl weißt?
pong |
wie kommt man dann auf die stellenanzahl?
|
Das hat Pong drei Postings weiter oben geschrieben... :rolleyes:
|
ja solange durch 10 teilen bis 0 raus kommt bei int aber wie mach ich dass dann mit dem gemäß der wertigkeit der potenz übergeben?
|
Zitat:
pong |
so sieht meine funktion aus wollte wissen ob die so hinhaut?
int armstrong (int n) { int zahl; int laenge; laenge = 1; while (zahl > 9) { zahl = zahl / 10; laenge = laenge + 1; } int x; zahl = x; while (x > 0) { x = zahl % 10; zahl = zahl / 10; } |
Probiers halt einfach aus was rauskommt - dann überleg dir (falls es falsch ist) wo der Fehler liegt und verbessere ihn, gib Zwischenergebnisse aus usw... Try&Error.
Wirst ja hoffentlich einen C-Compiler haben um das ganze zu testen :-) lg p.s. so bekommst auf jeden fall einen compiler fehler weil eine klammer fehlt und ein Ergebnis gibt das ganze auch nicht zurück ;) |
Zitat:
btw. ich leg dir ans Herz 1.) zu testen 2.) deinen "Stil" schwer zu überdenken (allein schon wenn ich Deklarationen irgendwo innerhalb der Logik seh, wird mir schlecht) pong |
@druno
mich würde interessieren wie lange du schon Informatikunterricht hast? Ich will dir ja nicht zu nahe treten aber du gehst das Problem komplett falsch an. Du solltest die vorher überlegen wie du das Programm machen willst (dein Problem ist ja wirklich math. trivial) und nachher eventuel das ganze mittels Pseudecode mal aufschreiben. Wenn du das hast, dann kannst mit dem Implementieren anfangen. Mach dir Testausgaben, oder noch besser benutz den Debugger ordentlich. Wenn du dir immer von anderen Stück für Stück Infos holst wird das sicher nichts. Du musst dich halt schon mit der Materie (C) auseinandersetzen. |
Bitte um Hilfe ich versteh die Definition der Armstrong Zahl nicht wirklich. Könntet ihr mich mit einer verständlichen Erklärung aushelfen
lg Peter |
is eine zahl ist, bei der die summe der einzelnen ziffern, die man nun jeweils mit der anzahl der stellen dieser zahl (also zb. für 407=3 stellen) potenziert wird, wiederum gleich der Zahl ist
also etwa: 407=4^3+0^3+7^3=64+0+343=407 |
Aha danke :o , Da hatte ich mit 153 einen Rechenfehler darum bin ich nicht draufgekommen.
lg Peter |
@ hewlett
seit 5 wochen |
Zitat:
pong |
was soll mir das bringen?
|
:lol:
|
hallo,
jetzt muss ich auch mal was dazu schreiben - das tut ja schon weh beim mitlesen, schließlich bin ich von 10 jahren auch mal in eine edv htl gegangen. Ist das Niveau in den letzten Jahren denn wirklich so drastisch abgefallen? Du bist ein Techniker, der dazu ausgebildet wird, technische Probleme zu lösen! Das verlangt selbstständgies Denken. Du bist derjenige, der andren Leuten technische Sachen mal erklären soll! Du sollst dabei neue, eigene Lösungen entwickeln, an die zuvor keiner gedacht hat bzw. in der Lage war diese umzusetzen! Du sollst stolz darauf sein, weil du gut bist darin, was du tust! Wenn du an alle Aufgabenstellungen ohne Eigeninitiative herangehst, wirst du die HTL nicht schaffen. fg + is nicht böse, sondern hoffentlich motivierend gemeint, hannes |
Tut mir leid, ich kann leider kein C, aber wie die Herrn "Auskenner" da mit Dir umgehen, ist auch peinlich.
Wer hier vor ein paar Jahren diese Ausbildung hinter sich gebracht hat, scheint wohl von Pädagogik oder Didaktik nicht viel mitbekommen zu haben. Ich finde es ganz konträr völlig OK, wenn Du in Deiner Freizeit für die Lösung Deiner Aufgaben auch hier recherchierst. Lösungen im Austausch mit Menschen zu finden, wird Dich im Leben durchaus menschlicher machen als so manchen IT-Autisten, der hier auf scheinbare Pädagogik macht. Ich finde, Du zeigst damit durchaus Eigeninitiative, andere schreiben halt einfach ab. Übrigens: wer etwas wirklich verstanden hat, zeichnet sich für mich vor allem dadurch aus, dass er es jedem Trottel verständlich machen kann. Mit dem Programmierknowhow mancher Superschlauer scheint es somit nicht allzuweit her zu sein :D Doch nein: die haben nach 5 Wochen erstmaliger Befassung mit der Materie sicher schon nach 5 Minuten den fehlerfreien Code abgeliefert, bestimmt! :lol: |
hi,
da du mich so dezent indirekt ansprichst, möchte ich auch darauf antworten. :cool: Ich finde es völlig ok, wenn man zur Lösung seiner Probleme in Internetforen recherchiert - dazu sind foren ja da - jedoch haben wir wohl eine unterschiedliche auffassung von recherche. Für mich bedeutet diese nicht, dass mir jemand vorgefertigte Lösungen präsentiert. Weiters wurde inzwischen jedoch schon eine solche präsentiert. Ich stimme dir zu, dass in der Arbiet die menschliche Komponente genauso wichtig ist wie das Fachwissen (wenn nicht sogar wichtiger), jedoch bringt es halt auch nicht viel, wenn sich alle gut verstehen und unterhalten können, vom fach jedoch keiner eine ahnung hat - dann artet es in einen debatierclub aus und in einem technischen Beruf ist es halt auch wichtig, technisches Verständnis zu haben bzw. zu entwickeln. Weiters finde ich, dass man nach 5 Wochen Programmierunterricht und Beschäftigung mit der Materie die Aufgabenstellung durchaus lösen kann. Da es jetzt aber schon überhaupt nichts mehr mit dem Thema zu tun hat, möchte ich auf weitere kommentare verzichten. Mein Beitrag war wie gesagt auch als konstruktive Kritik für den Threadersteller gedacht. fg hannes |
Ich selbst kann erst seit einigen Monaten C (allerdings vorher schon andere Programmiersprachen), und meiner Meinung nach ist es nicht so wichtig ob man jetzt alle Befehle der string.h auswendig kann o.ä.
Was wirklich wichtig ist, ist strukturiertes Denken -> damit kann man zumindest Pseudocode produzieren, auch wenn man sich mit der C-Syntax nicht so gut auskennt. Wenn er so was gepostet hätte, hätte ihm sicher jeder geholfen, den Pseudocode nach C zu übersetzen. Hier ist ist allerdings nicht ersichtlich, ob er irgendwas verstanden hat bzw. wo er hängt. Ob man "Programmiererdenken" schon nach 5 Wochen verlangen kann, kann ich nicht beurteilen - aber ich gebe den anderen Postern recht, dass niemandem geholfen ist, wenn man ihm ein fertiges C-Programm präsentiert! [/rant] |
Zitat:
Liefert einen Pseudocode, an der Übersetzung in eine Sprache nach Wunsch solls ja nicht scheitern. Und nein, nach 5 Wochen hat niemand jemals fehlerfreien Code geliefert, aber zumindest Ansätze und diese lassen sich auch in Worte fassen btw. wäre druno seinen Code zumindest per Schreibtischtest - hoffentlich wird sowas noch gelehrt - durchgegangen hätte er sofort gemerkt, was nicht passt Ende (das artet sich hier wieder zu einer Grundsatzdiskussion aus) pong |
@Don Manuel
das mit der string.h war der andere thread. aber egal. wie die beiden anderen schon geantwortet haben, ist jeder von uns gerne bereit bei problemen mit einer sprache zu helfen. ist ja klar! allerdings ist ihm nicht nur nicht geholfen, sondern es ist so gar KONTRAPRODUKTIV, wenn er hier nur die angabe reinstellt und sich eine fertige lösung erwartet! man muss einfach im stande sein, ein programmiertechnisches problem in pseudo code umwandeln zu können. DAS ist der wichtige schritt. das kann man nach 5 wochen aber durchaus verlangen! |
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag