Hilfe habe bald Klausur
-
cin>>x;sumd=sumd+ (1/x);probier mal x[i], da du die elemente im container dividieren möchtest
-
Ok, übersetzen wir mal. Erstmal fangen wir mit dem Grundgerüst eines C++ Programms an. wir werden Ein-/Ausgabe und Felder brauchen, also können wir schonmal iostream und vector einbinden und aus Faulheit machen wir noch using namespace std:
#include <iostream> #include <vector> using namespace std; int main() { }Und nun übersetzen wir:
`CLSREM $ DYNAMIC
`
Brauchen wir nicht.DIM feld! (1,2)
Das ist schon eher etwas. Aber wozu ist die zweite Dimension gut? Da ich das nicht verstehe, lasse ich sie mal weg. In C++ ist das dann:vector<double> feld;Aber da man in C++ Variablen erst da deklariert wo man sie braucht und nicht am Anfang verschieben wir das auf später. Wozu du überhaupt ein Feld benötigst, verstehe ich zwar auch nicht (
Das ist ein Hinweis auf die richtige Lösung, aber bloß nicht weitersagen), aber ich lasse es erstmal drin, weil es bei der Übersetzung deines Programms nötig ist.sum=0
Das istdouble sum=0;. Aber brauchen wir auch erst später.INPUT "Geben Sie die Anzahl der Messwerte an.";n
Ok, endlich kann's wirklich losgehen. Ein-Ausgabe kannst du ja, da muss ich nicht viel erklären:#include <iostream> #include <vector> using namespace std; int main() { cout << "Geben Sie die Anzahl der Messwerte an: " << flush; unsigned int anzahl_messwerte; // Variablen müssen in C++ anders als in Basic immer deklariert werden. Außerdem ist 'n' völlig nichtssagend, in C++ benutzt man sprechende Namen. cin >> anzahl_messwerte; }REDIM feld!(n,2)
Endlich spielt das Feld eine Rolle. Also können wir uns die Deklaration von oben schnappen. Und das REDIM können wir bei vector gleich als Parameter übergeben. Außerdem ändern wir den Namen auf etwas sinnvolles:vector<double> messwerte(anzahl_messwerte);`FOR i = 1 TO N
...
NEXT i `
Das kann man quasi 1:1 übernehmen, wenn man die Syntax ändert und an die Deklaration der variablen denkt:for (int i=0; i<anzahl_messwerte; ++i) { }Ebenso die Ausgabe am Schluss:
cout << "xharm: " << sum << endl;Gucken wir uns das innere der Schleife an:
`INPUT "geben sie den Messwert an";x[i]`
Auch direkt übertragbar, aber den Text kann man auch schöner machen:cout << "Geben sie den " << i+1 << ". Messwert an: " << flush; cin >> messwerte[i];P.S.:
Warum heißt das bei dir auf einmal x? Oben war das noch feld!. Das kommt davon wenn man nichtssagende Namen benutzt zudem noch in einer Sprache die bei fehlenden Deklarationen nicht von einem Schreibfehler ausgeht sondern sich irgendwas ausdenkt.Und das schlimmste zum Schluss:
sum = x/ (sum +1/x[i])
Das kann ich nicht übersetzen. Das kann doch auch in Basic unmöglich gültig sein. Das macht überhaupt keinen Sinn. Soll das vielleicht
sum = n/ (sum +1/x[i])
heißen?
Falls ja, wäre dies:sum = anzahl_messwerte / (sum + 1/messwerte[i]);Und somit das gesamte Programm:
#include <iostream> #include <vector> using namespace std; int main() { cout << "Geben Sie die Anzahl der Messwerte an: " << flush; unsigned int anzahl_messwerte; cin >> anzahl_messwerte; vector<double> messwerte(anzahl_messwerte); double sum = 0; for (unsigned int i=0; i<anzahl_messwerte; ++i) { cout << "Geben sie den " << i+1 << ". Messwert an: " << flush; cin >> messwerte[i]; sum = anzahl_messwerte / (sum + 1/messwerte[i]); } cout << "xharm: " << sum << endl; }Dies ist die Übersetzung deines Programmes. Und wenn wir dies nun laufen lassen, stellen wir fest:
Es kommt völliger Blödsinn raus.
Das liegt daran, weil deine Formel völliger Mist ist. Du hast in der Aufgabenstellung doch schon die Formel angegeben bekommen und dies hier hat absolut nichts mit der richtigen Formel gemeinsam. Da dies einer der Kernpunkte des Problems ist, überlasse ich dies aber erstmal dir.
-
hat ein bischen gedauert, ja ich bin/war etwas eingerostet aber das feuer ist gleich wieder ausgebrochen, wie am ersten tag

CLS INPUT "Geben Sie die Anzahl der Messwerte an: " n LET sum = 0 LET inp = 0 FOR i = 1 TO n INPUT "geben sie den naechsten messwert ein: " inp LET sum = sum + (1/inp) NEXT i LET sum = n/sum PRINT "Harmonisches Mittel:" PRINT sum END@edit ohne cls gibts kein basic

@edit2 jetzt jagts mich bitte nicht gleich vom hof ich post auch kein basic mehr
-
schonmal Vielen dank für deine Mühe mir mein Qbasic zu Übersetzten VORALLEM so ausführlich!!
ich habe da aus einigen Beispielaufgaben etwas zusammengeschneidert..also zu dem einen teil, ja es sollte natürlich n und nicht x sein..
ich versteh nicht was an der formel falsch ist.. wenn ich es mim taschenrechner ausrechne komme ich auch auf ein anderes ergebnis (also hast du natürlich recht was die Formel angeht)
wenn wir zum Beispiel den annehmen das wir 3 Messungen machen,
1. Messwert 3
2. Messwert 2
3. Messwert 3würde dir Formel doch:
3 / ( (1/3)+ (1/2)+ (1/3) ) heißen
bei:
sum = anzahl_messwerte / (sum + (1/messwerte[i])
3 [müsste stimmen] / so und DA muss ja mein fehler liegen, irgendwie komm
ich noch nicht drauf..es sollte eig. 2,57 rauskommen..
-
gefällt dir mein basic code nicht
es kommt auch 2.57143 raus 
-
sum = (sum + (1/3); sum = (sum + (1/2); sum = (sum + (1/3); sum = anzahl_messwerte / sum;
-
no_code schrieb:
hat ein bischen gedauert, ja ich bin/war etwas eingerostet aber das feuer ist gleich wieder ausgebrochen, wie am ersten tag

CLS INPUT "Geben Sie die Anzahl der Messwerte an: " n LET sum = 0 LET inp = 0 FOR i = 1 TO n INPUT "geben sie den naechsten messwert ein: " inp LET sum = sum + (1/inp) NEXT i LET sum = n/sum PRINT "Harmonisches Mittel:" PRINT sum END@edit ohne cls gibts kein basic

@edit2 jetzt jagts mich bitte nicht gleich vom hof ich post auch kein basic mehrwas ist den inp? da mekert er bei mir..
-
NATÜRLICH gefällt er mir.. nur scheinbar habe ich eine andere Version, die Nimmt deine leider nicht an.
-
int n; double sum = 0.0,inp; ..."inp" ist eine ganz normale double variable
interpretiert hab ichs mit yabasic da ging in kate nur das CLS nicht

-
aso, das erklärt auch warum du kein ";" verwendenet hast.. DANKE!!
-
ja das ; brachte bei mir iwie fehler, hab schon bischen von deinem gespickt

-
Also ich Hab jetzt noch etwas rumgetüftelt.. ich glaub ich versteh einfach nicht wie der das Programm die Formel umsetzt..
hab jetzt mal noch nen zwischenschritt eingebaut, aber da kommt dann auch nur blödsin bei rum..
#include <iostream>
#include <vector>using namespace std;
int main()
{
cout << "Geben Sie die Anzahl der Messwerte an: " << flush;
unsigned int anzahl_messwerte;
cin >> anzahl_messwerte;vector<double> messwerte(anzahl_messwerte);
double sum = 0;for (unsigned int i=0; i<anzahl_messwerte; ++i)
{
cout << "Geben sie den " << i+1 << ". Messwert an: " << flush;
cin >> messwerte[i];
double zwischenschritt;
zwischenschritt= 1/messwerte[i];
cout<<zwischenschritt;
sum = anzahl_messwerte / (zwischenschritt);
}cout << "xharm: " << sum << endl;
}ich habe mir extra den zwischenschritt mal ausgeben lassen, die Ergebnisse stimmen alle soweit, nur muss er die dann addieren nur wie ich das am besten anstelle weiß ich leider nicht..
-
mit:
zwischenschritt= (1/messwerte[i])+(1/messwerte[i+1]);
bekomm ich auch nen fehler..
-
maxbandel schrieb:
mit:
zwischenschritt= (1/messwerte[i])+(1/messwerte[i+1]);
bekomm ich auch nen fehler..
Das klingt nach einem klaren Fall für einen Schreibtischtest. Denk dir 5 Zahlen aus, berechne den harmonischen Durchschnitt. Dann nimmst du an, dass du alle Zahlen eine nach der anderen bekommst. Was machst du mit jeder neuen Zahl, wenn du als Hilfsmittel einen Taschenrechner mit einer Speichertaste hast? Kommst du auf das gleiche Ergebnis?
P.S.: Und lies dir mal diesen Thread durch: Mit Aussagen wie "bekomm ich auch nen fehler.." kann niemand etwas anfangen. Falsches Ergebnis? Laufzeitfehler? Compilerfehler? Wenn du dem Leser so wenig Information gibst, ist niemand motiviert dir zu helfen, denn du willst offensichtlich keine Hilfe sondern eine Lösung.
-
Ich möchte sehr alles andere als eine nur eine Lösung, schließlich muss ich es in der Klausur auch können, ich bin auch sehr Dankbar das sich soviel bemühen mir zu helfen.
denn der Fehler ist leider schwer zu beschrieben oder weiderzugeben, darum habe ich ein Screenshot gemacht und mal hochgeladen.
http://img17.imageshack.us/f/fehlerc.png/#
Danke für die Mühe!
-
Wenn du den Index von 0 bis size() laufen lässt, kannst du nicht [index + 1] ansprechen - gültige Indices des Containers liegen zwischen 0 und size() - 1. (Bzw. in deinem Fall anzahl_messwerte)
Ansonsten scheint es mir so, als sei das Puzzleteil, das dir fehlt, folgendes:
zwischenschritt = zwischenschritt + summand;...und achte auf den Gültigkeitsbereich der Variablen!
Der Vollständigkeit halber: Gleichbedeutend mit dem Codestück oben, aber hübscher anzusehen ist
zwischenschritt += summand;
-
Super, habs dann jetzt es hat mir also "nur" das + vor dem = gefehlt.
vielen dank für eure Geduld!
-
maxbandel schrieb:
Super, habs dann jetzt es hat mir also "nur" das + vor dem = gefehlt.
vielen dank für eure Geduld!
falls sich das auf das letzte von dir gepostete snippet bezieht nein!