Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Programm schreiben, dass die ersten k Kubikzahlen addiert

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
08.05.2017, 21:28 Uhr
Tom88



Hallo,

ich sitze gerade an folgender Aufgabe und komme leider nicht so recht weiter.

Es geht darum, ein Programm zu schreiben, dass die ersten k Kubikzahlen addiert und deren Summe auf dem Bildschirm ausgibt. Der Benutzer soll dabei aufgefordert werden, die Zahl k einzugeben.

Zur Lösung soll eine for-Schleife verwendet werden.

Wenn man also beispielsweise 3 angibt, dann soll als Ergebnis 36 erscheinen, weil 1^3 + 2^3 + 3^3 = 36 ist.


Könnt ihr mir helfen, wie ich die for-Schleife entwickle.
Ich würde denken, dass diese mit 0 initialisiert werden müsste. Aber letztlich weiß ich nicht, wie ich die Rechnung mit der for-Schleife erstellen kann.

Ich würde mich über eure Hilfe freuen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.05.2017, 22:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)



Zitat:

Wenn man also beispielsweise 3 angibt, dann soll als Ergebnis 36 erscheinen, weil 1^3 + 2^3 + 3^3 = 36 ist.



Naja hier steht doch schon die halbe Rechnung für deine (Haus-?)Aufgabe.

Wenn du als k 3 eingibst, dann willst du ja 3 Summanden:

- 1^3
- 2^3
- 3^3

Aus was besteht denn eine for-Schleife? Aus einem Zähler und einer Bedingung.
Der Zähler sollte deinen aktuellen Summanden darstellen (also z.b die "1" in den 1 ^ 3)

- Wo sollte der Zähler starten?
- Was müsste deine Bedingung dann sein?

Der Rest ist eine Summe und Multiplikationen.
Zuerst zu den Multiplikationen:

- Wie kann man denn 3^3 noch darstellen? (kleiner Tipp: 3 * 3 * 3)
- Wie sieht also ein Summand deiner Summe aus?

Nun zur Summe:
Du willst deine Summe ja nach der Schleife immer noch behalten, also fällt der Zähler dafür ja flach.
Was bedeutet das dann? (kleiner Tipp: Du brauchst eine Variable vor der Schleife.)

Zusammenaddieren solltest du dann können!

Schreib uns deinen Quellcodeansatz, dann können wir dir genauer helfen (ich habe das hier bewusst nicht als die 3-5 Zeilen code geschrieben, die es wären, du sollst ja auch etwas lernen, und Programmieren lernt man nicht durch abschreiben ;-))
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.05.2017, 11:31 Uhr
Tom88



Danke für die Hilfe.

Ich habe mal einen Ansatz entwickelt, irgendwo sind aber definitiv Fehler vorhanden...

C++:
#include "stdafx.h"


int main()
{
    int i;
    int k;
    int sum;
    cout << "Gebe an, wie viele Kubikzahlen addiert werden sollen" << endl;
    cin >> k;
    for (i=1; i==k;)
        cout << "Die Summe der ersten" << k << "Kubikzahlen ist:" << sum (i*i*i);
    _getch();
    return 0;  
}


Ich habe mir gedacht, dass die Schleife bei 1 startet. Meine Bedingung war, dass sie solange geht, bis k erreicht ist. Also wenn man 3 eingibt, dass geht die Schleife bis zur k-ten Multiplikation.

Wie ich das mit der Summe mache, habe ich leider noch nicht so verstanden. Bei einer Recherche habe ich gesehen, dass man dafür "sum" wählen kann.

In Visual Studio wird mir hier allerdings eine Fehlermeldung angezeigt .


Am Anfang habe ich jeweils für i,k und sum die Definition vorgenommen. Dies ist doch notwendig oder irre ich mich da?
-----
Edit: cpp-Tags eingefügt.

Dieser Post wurde am 09.05.2017 um 19:43 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.05.2017, 20:37 Uhr
Hans
Library Walker
(Operator)


Hi,

Zitat:
irgendwo sind aber definitiv Fehler vorhanden...

allerdings.

Da wäre zunächst einmal der Schleifenkopf, also die Zeile mit for (...)

C++:
   for (i=1; i==k;)
        cout << "Die Summe der ersten" << k << "Kubikzahlen ist:" << sum (i*i*i);


wenn die Schleife den Wert i von 1 bis k hochzählen soll, fehlt dafür die Anweisung, genau dieses zu tun. Wie man das macht, kannst Du etwa hier im Abschnitt The for loop nachlesen. (Eine deutsche Anleitung weis ich gerade nicht.)


Zitat:
Wie ich das mit der Summe mache, habe ich leider noch nicht so verstanden. Bei einer Recherche habe ich gesehen, dass man dafür "sum" wählen kann.

In Visual Studio wird mir hier allerdings eine Fehlermeldung angezeigt .

Ja, "sum" kann man die Variable nennen, das ist sinnvoll. Du hast da allerdings drei Fehler in Deiner Konstruktion: der Erste ist, dass Du die Variable sum am Anfang, d.h. vor der Schleife, nicht auf Null stetzt, also ihr den Wert Null (0) zuweist. Das sollte man in C++ aber immer tun, weil der Compiler es einem nicht abnimmt. Der Zweite ist, dass Du sum in der Schleife wie eine Funktion benutzt. Was Du da stehen hast, liest der Compiler als "Rufe die Funktion sum mit dem Parameter i*i*i auf". Da sum aber eine Variable ist, bekommt man eine Fehlermeldung. Und der dritte Fehler ist schlieslich die Abbruchbedingung: Eine for-Schleife wird solange durchlaufen, wie diese Bedingung wahr ist. So wie Du es da stehen hast, wird die Bedingung aber erst in ihrem letzten Durchgang wahr. Vorher trift die Bedingung nicht zu, was dazu führt, dass die Ausführung der Schleife abgebrochen wird. Die Lösung für diesen logischen Fehler liegt in der Formulierung der Abbruchbedingung. D.h. Du musst diese Abbruchbedingung anders formulieren. Dazu brauchst Du die Vergleichsoperatoren "grösser als" und/oder "kleiner als".


Zitat:
Am Anfang habe ich jeweils für i,k und sum die Definition vorgenommen. Dies ist doch notwendig oder irre ich mich da?

Nein, da irrst Du nicht. Aber die Definitionen besagen nur, dass es Variablen mit diesen Namen gibt, und dass sie vom Typ "int" sein sollen und Speicherplatz für sie bereit gestellt wird. Es werden aber keinerlei Werte rein geschrieben. Es ist aber zumindest für die Variable "sum" notwendig, diese vor der Schleife mit dem Wert Null zu initialisieren, d.h. ihr den Wert Null zu geben, was man auch als "zuzuweisen" bezeichnet. Wenn man das nicht tut, arbeitet man mit einem nicht definierten Wert, der an jener Stelle im Speicher liegt, wo der Compiler die Variable sum platziert hat.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.05.2017, 22:28 Uhr
Tom88



Danke für die Antwort.
Ich habe nun versucht, die Fehler zu beheben, wobei ich mir bei einem der angesprochenen Fehler immer noch nicht ganz sicher bin :\


Mein neuer Ansatz wäre:


C++:
#include "stdafx.h"


int main()
{
    int i;
    int k;
    int sum;
    sum=0;
    cout << "Gebe an, wie viele Kubikzahlen addiert werden sollen" << endl;
    cin >> k;
    for (i=1; i<=k; i++;)
        sum=(i*i*i);
        cout << "Die Summe der ersten" << k << "Kubikzahlen ist:" << sum (i*i*i);
    _getch();
    return 0;
}



Ich habe also nun sum mit 0 initialisiert, außerdem habe ich die for-Schleife dahingehend bearbeitet, dass nun die Abbruchsbedingung definiert ist, und mit i++ läuft die Schleife nach vorne.

Wie ich den Fehler mit sum bearbeite habe ich leider noch nicht 100% verstanden. Ich habe es vor dem cout-Befehl geschrieben, aber ich glaube, das ist nicht die Lösung. Auch bekomme ich immer noch eine Fehlermeldung. Kann mir da jemand noch helfen?

edit: cpp-Tags eingefügt

Dieser Post wurde am 10.05.2017 um 09:28 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.05.2017, 09:45 Uhr
ao

(Operator)


1. Wenn du Code postest, dann mach das bitte ab jetzt selber mit CPP-Tags:
Vor dem Code: Eckige Klammer auf, cpp, eckige Klammer zu.
Hinter dem Code: Eckige Klammer auf, /cpp, eckige Klammer zu.
Nur so ist Quellcode lesbar.

2. Schreib bitte nicht "ich bekomme eine Fehlermeldung". Das ist schon klar, denn sonst würdest du hier nicht posten. Schreib "ich bekomme die Fehlermeldung ...." und dann die Meldung zitieren, und zwar vollständig mit Angabe der Zeilennummer.

3. Bevor du postest "ich bekomme die Fehlermeldung ...": Lies die Meldung erst mal selber und versuche, sie zu verstehen. Denk nicht "dazu bin ich zu blöd". So haben wir alle mal angefangen. Fehlermeldungen sind dazu da, dass man aus ihnen schlauer wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.05.2017, 10:52 Uhr
Tom88



Ich habe zunächst einmal den Syntaxfehler in Zeile 12 erkannt, dort darf kein ; nach i++ stehen.

Ich erhalte für Zeile 14 die Fehlermeldung " Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt"

Hans hat mir ja schon zuvor gesagt, dass das nicht richtig ist, leider komme ich aber nicht auf die richtige Lösung.
Kann mir da jemand einen Tipp geben, wie ich das mache?

Dieser Post wurde am 10.05.2017 um 10:54 Uhr von Tom88 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.05.2017, 13:25 Uhr
ao

(Operator)



Zitat von Tom88:
Ich habe zunächst einmal den Syntaxfehler in Zeile 12 erkannt, dort darf kein ; nach i++ stehen.

Richtig, das war der 1. Fehler.


Zitat:
Ich erhalte für Zeile 14 die Fehlermeldung " Ausdruck ergibt keine Funktion, die 1 Argumente übernimmt"

Der Ausdruck sum(i*i*i) ist syntaktisch gesehen ein Funktionsaufruf (Bezeichner - Klammer auf - Argument - Klammer zu). "sum" bezeichnet aber keine Funktion, sondern eine Variable, mit der ein Funktionsaufruf nicht möglich ist.

Wenn du den Wert von sum abfragen willst, schreibst du einfach sum ohne Klammern und ohne i*i*i.

Darf ich fragen, ob du irgendein Buch, Skript, Tutorial oder so hast, nach dem du lernst? Das sind nämlich hier gerade die absoluten Basics, die Stufe 2 gleich nach dem Hello World.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.05.2017, 19:48 Uhr
Tom88



Danke. Ich habe die Aufgabe dann gelöst.

Ich arbeite mit einem Buch, nur halt erst seit 2 Wochen sporadisch, deshalb muss ich eben noch viel lernen...
Ich habe aber auch schon par Aufgaben zuvor erfolgreich gelöst wie zum Beispiel das Programmieren einen Mini-Taschenrechners mit switch-case-Anweisungen. Hier habe ich mich aber etwas schwerer getan.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.05.2017, 20:09 Uhr
Tom88



Wobei ich sehe gerade, dass die Aufgabe ja doch noch nicht gelöst ist, so wie ich es hier bisher stehen habe.


C++:
#include "stdafx.h"


int main()
{
    int i;
    int k;
    int sum;
    sum=0;  
    cout << "Gebe an, wie viele Kubikzahlen addiert werden sollen" << endl;
    cin >> k;  
    for (i=1; i<=k; i++)  
        sum=(i*i*i);
        cout << "Die Summe der ersten " << k << " Kubikzahlen ist: " << sum;
    _getch();
}



Wenn ich nun nämlich eine Zahl eingebe, so erhalte ich nur die Kubikzahl der eingegebenen Zahl, nicht aber die Addition mit den vorherigen Zahlen.
Muss ich dann noch was an der Schleife bearbeiten?

Dieser Post wurde am 10.05.2017 um 20:10 Uhr von Tom88 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: