Interpolation in C
-
Hi Leute, ich hab ein kleines Problem vielleicht kann mir ja da jemand helfen??
Ich muss eine Interpolation in C programmieren - das gute ist das mathematisch bzw. der theoretische teil kein Problem ist und auch schon gelöst ist aber wie kann ich das in C programmieren??
Hier die Aufgabenstellung:
Gegeben ist ein unregelmäßig geformtes Tank an dessen unterem ende ein Drucksensor angebracht ist wodurch die Höhe des Flüssigkeitsstandes gemessen wird um nun auf die Füllmenge zu schließen wird in eine Tabelle nachgeguckt:Füllhöhe in cm - Tankinhalt in l
1...............2
2...............4
3...............5
4...............7
5...............10
6...............11
7...............14
8...............18
9...............25
10..............31
...Es ist ein Programm zu schreiben dass zu einem Füllstand die Füllmenge mit Hilfe der Tabelle berechnet. Das Programm soll in einer Schleife jeweils eine Höhe h einlesen und dazu die Füllmenge ausgeben (es sind auch nicht ganzzahlige Höhen zulässig!)
also wenn man jetzt z.B. "3,5cm" eingibt soll der Programm "6 Liter" ausgeben
nach einiger Überlegung kam dann diese Formel raus:
m = hi + (hj - hi) * (haktuell - j)
m = zu berechnende Füllmenge
haktuell = eingegeben Füllhöhe
j = um eins höher liegende Nachbar in der Tabelle von haktuell
hj & hi = die zur eingegebene Füllhöhenbenachberten Füllstandeinträge in der Tabellez.B:
man gibt 4,5 ein (der Programm muss jetzt bei 4cm gucken also haktuell = oder nicht > als zahl in der Tabelle) -> Programm geht dann in die Tabelle für die Füllhöhe und guckt 1<4,5 ...2<4,5...3<4,5...4<4,5… 5>4,5 aha jetzt muss er zurück springen auf 4 und guckt den Literinhalt für 4 nach das sind
7 (hi) einlesen, hj währe nun die 10 und j währe die 5 (siehe Formel)Ok alles schön und gut aber wie Programmiere ich das
-
In dem du dich hinsetzt und das Schritt für Schritt programmierst...
-
Deine Formel ist so nicht ganz richtig, ich habe sie korrigiert und nen Beispiel geschrieben:
Ne Fehlerprüfung ist jetzt nicht drin, sprich der Benutzer darf maximal 10 eingeben und minimal 1.
Da Arrays in C++ bei 0 anfangen und ich die Höhe einfach als Index nehme, wird aus i = eingabe und j = eingabe + 1 einfach i = eingabe -1 und j = eingabe
wobei eingabe auf die nächste Ganzzahl abgerundet wird (das mach ich einfach durch umwandeln nach int, dann wird er Kommateil abgeschnitten).Anschließend wird die Differenz zwischen den Füllmengen berechnet und diese Multipliziert mit dem Kommaanteil, den bekommt man indem man den Ganzzahligen Teil (das ist hier j, da Arrays ja bei 0 beginnen, die Eingabe aber bei 1) von der Kommazahl abzieht.
Das was man da rausbekommt wird auf die kleinere Füllmenge addiert und schon hat man den richtigen Füllstand.#include <iostream> using namespace std; int main() { int fuellhoehe[ 10 ] = { 2, 4, 5, 7, 10, 11, 14, 18, 25, 31 }; double hoehe; cout << "Geben sie die Hoehe in cm ein: "; while( !( cin >> hoehe ) ) { //Stream leeren nach Falscheingabe cin.clear(); cin.ignore(cin.rdbuf()->in_avail()); cout << "\nUngueltige Eingabe.\nGeben Sie die Hoehe in cm ein: "; } int i = ( int )hoehe - 1; int j = ( int )hoehe; int diff = fuellhoehe[ j ] - fuellhoehe[ i ]; double fuellmenge = fuellhoehe[ i ] + diff * ( hoehe - j ); cout << "Die Fuellmenge betraegt " << fuellmenge << " Liter."; }
-
Dr. Prof.: die Umsetzung ist aber wohl fehlerhaft, da ja (wie der Post-Ersteller richtig geschrieben hat), zuerst der Index berechnet werden muß und nicht die eingegebene Höhe als Index genommen werden kann.
Dr. Prof: sechs, setzen und nochmal neu machen...
-
Das Programm soll in einer Schleife jeweils eine Höhe h einlesen und dazu die Füllmenge ausgeben (es sind auch nicht ganzzahlige Höhen zulässig!)