2016-12-01 4 views
-2

Grundsätzlich hat Wasser bei bestimmten Temperaturen unterschiedliche spezifische Gewichte, die ich in 2 Arrays einstelle, je nachdem, welches Einheitensystem SI für metrisch und I für imperial verwendet. Ich versuche herauszufinden, wie man entweder eine Funktion zur Verwendung der Benutzereingabetemperatur des Wassers macht, um sein entsprechendes spezifisches Gewicht zu bestimmen oder wie man den Benutzer dazu bringt, einen Wert einzugeben, ohne von vorne anzufangen. Jetzt habe ich dieses Ding zu arbeiten, wenn Sie eine Standardtemperatur eingeben, aber ich muss herausfinden, wie man den Benutzer dazu bringt, eine Temperatur neu einzugeben, wenn sie vorher einen nicht standardmäßigen Wert eingegeben hatten.PROBLEM MIT Arrays und Funktionen C++

Beispiel: Wenn Sie durch den Prozess gehen und wählen Sie Y und SI und T und erhalten Sie < < "Was ist die Temperatur von Wasser"; cin < < T [1]; // auch keine Idee, warum ich dies in ein Array von itself

einfügen, wenn Sie sagen, 88 das spezifische Gewicht berechnet zu Null, weil das ist kein Wert in der Temperatur-Array, obwohl der Wert ist offensichtlich nicht zu sein Null. Gibt es eine Möglichkeit, es dem Benutzer zu erlauben, es erneut zu versuchen, ohne es zu schließen und erneut zu starten, während er arbeitet oder irgendwie eine Funktion verwendet oder sogar die Temperatur auf den nächsten Standardwert aufrundet und nur dieses spezifische Gewicht verwendet ??? ps meine Programmierkenntnisse sind super einfach (wenn Sie nicht durch meinen Code erzählen)

jede Hilfe wäre dankbar, Danke!

// this program will calculate the specific weight of water at any given temperature in either metirc or imperial and the reslutant force of the water in in tank 


#include<iostream> 
#include<math.h> 
#include<string> 
#include<iomanip> 
#include<fstream> 

using namespace std; 

// my sad attempt at trying to write a function 

float match_temp_to_sw(float T[1]); 

/*float match_temp_to_sw{ 
for(i=o; T[1]!=SI[i]; i++){ 
c = i+1; 
x = SWSI[c]; 
} 

} 
*/ 



int main() { 

    string units_system, units_sw, units_p, units_FR, a; 
    string fluid; 
    char pressure, pressure1; 
    int calculate_specific_weight; 
    char calculate_SW, calculate_FR; 
    float specific_gravity, specific_weight, temperature; 
    float pressureA; 
    int i,c; 
// these are count variables for the for loops to determine the specific        weight of water at a specific temperature 
    float x, area, height, FR; 

// these are the values of the temperature and specific weight of water in metric and imperial units 

    int SI[21] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100}; 

    float SWSI[21]= {9.81,9.81,9.81,9.81,9.79,9.78,9.77,9.75,9.73,9.71,9.69,9.67,9.65,9.62,9.59,9.56,9.53,9.50,9.47,9.44,9.40}; 

    int I[19] = {32,40,50,60,70,80,90,100,110,120,130,140,150,160,170,180,190,200,212}; 

    float SWI[19] = {62.4,62.4,62.4,62.4,62.3,62.1,62.0,61.9,61.7,61.5,61.4,61.2,61.0,60.8,60.6,60.4,60.1,59.8}; 
    int T[1]; 

    cout << fixed << showpoint;// setting the precision of the number of sigfigs 
    cout << setprecision(2); 

    cout << "Do you want to calculate the resultant force of water acting on a tanks surface?(Y or N)\n"; 

    cin >> calculate_FR; 

    while(calculate_FR == 'Y') { // the outer most loop 

// initialzing the string variable to zero so that way when you repeat this whole process they dont remember your previous input 

     a = "NULL"; 
     units_system ="NULL"; 

// initializing the standard set of units that are going to be used throughout the calculations 

     while(units_system !="Imperial"&& units_system!="SI") { 

      cout<< "what units system are you using Imperial or SI\n"; 
      cin>> units_system; 
      cout<< "\nTherefore, you are using the "<<units_system<< " system\n" ; 
     } 

     fluid = "water"; 


     while (a!="SG" && a!="T") { 

      cout << "\nDo you know the specific gravity(SG) or the temperature(T)?\n"; 
      cin >> a; 
     } 

     if(a == "SG") { 

      cout << "\nWhat is the specific gravity of the water?\n"; 
      cin >> specific_gravity; 
     } 


     else if (a == "T") { 
      cout << "\nWhat is the temperature of water\n"; 
      cin >> T[1]; 
     } 


// if you are using the SI system the units for specific wieght will be kN/m^3 

     if(units_system == "SI") { 
      units_sw = " kN/m^3"; 
      units_p = " kPa"; 
      specific_weight = (specific_gravity *9.81); 
      units_FR = "kN"; 

      if(a == "T") { 


       if (T[1]== SI[0]) { 
        specific_weight =SWSI[0]; 
       } 
       for(i=0; T[1]!=SI[i]; i++) { 
        c = (i+1); 
        specific_weight= SWSI[c]; 


       } 
       if(T[1]!=SI[21]) { 
        cout << "You did not enter a standard value, and i dont know how to get you to reinput a proper value without restarting this program so please try again"; 
        return 0; 
       } 
      } 
     } 
// if you are using the imperial system the units for specific weight will be lb/ft^3 
     else if(units_system == "Imperial") { 
      units_sw = " lb/ft^3"; 
      units_p = " lb/ft^2"; 
      specific_weight = (specific_gravity *62.4); 
      units_FR = "lb"; 

      if(a == "T") { 

       if(T[1]== I[0]) { 
        specific_weight=SWI[0]; 
       } 

       for(i=0; T[1]!=I[i]; i++) { // a for loop to determine the corresponding specific wieght to the user input temperature 

        specific_weight= SWI[i]; 

       } 
      } 
     } 

     cout <<"\nTherefore, the specific weight of "<<fluid<<" is "; 
     cout << specific_weight<< units_sw; 

// i know this isnt in the right spot lol 

//cout << "\n\nDo you want to calculate the specific weight of water at another temperature(Y or N)?\n"; 
//cin >> calculate_SW; 

     cout << "\n\nWhat is the vertical height to the centroid of the shape you are analyzing\n"; 
     cin >> height; 

     cout << "What is the area of the shape you are analyzing\n"; 
     cin >> area; 

     FR = (specific_weight * height * area); 

     cout << "\nThe resultant force acting on the tank you are analyzing is " << FR <<" " << units_FR; 

     cout << "\n\nDo you want to calculate the resultant force of water at another temperature(Y or N)?\n"; 
     cin >> calculate_SW; 

     while (calculate_FR == 'N') { 

      cout << "\nYou do not want to complete anymore calculations"; 
      return 0; 
     } 
    } 



} 
+2

Bitte korrigieren Sie die Einrückung des angezeigten Codes. Die zufällige Einrückung macht den gezeigten Code ziemlich unlesbar. –

+0

'cin >> a;' - Geben Sie Ihren Variablen 1-Buchstaben-Namen macht den Code schwerer zu lesen, schwerer zu verstehen, schwerer zu debuggen und leichter einen Fehler zu machen. Verwenden Sie aussagekräftigere Namen. – PaulMcKenzie

+0

Für Werte, die nicht in Ihren Arrays sind, können Sie * interpolieren. Am einfachsten und am besten ist es anzunehmen, dass Ihre Datenpunkte durch gerade Liniensegmente verbunden sind; Dies wird als lineare Interpolation bezeichnet. Es sieht so aus als hättest du * parallele Arrays *. Es ist normalerweise einfacher, weniger komplex, ein Array von Elementen zu verwenden, in denen jedes Element eine Gruppe verwandter Werte enthält. Sie können 'struct' verwenden, um einen geeigneten Elementtyp zu definieren. –

Antwort

0

Eine while Schleife sollte Ihr Problem lösen. Siehe unten:

else if (a == "T") { 
    int temperature; 
    cout << "\nWhat is the temperature of water\n"; 
    cin >> temperature; 

    while (temperature <= 88) { 
     cout << "Temperature should be greater than 88. Try again: "; 
     cin >> temperature; 
    } 
    T[1] = temperature; 
} 

Die while Schleife wird entweder fallen durch oder nie ausführen einmal eingegeben die Temperatur höher als 88 ist in diesem Fall. Auf diese Weise können Sie weiterhin unbegrenzt lange falsche Temperaturen eingeben, bis die korrekte Temperatur gefunden wurde, ohne das Programm zu verlassen und erneut zu starten.

Sie können eine globale const Variable definieren, um anstelle von 88 - abhängig davon, was Ihre Untergrenze auf der Temperatur ist, die ein Benutzer eingeben kann - Ihren Code ein wenig leichter zu verstehen und zu bearbeiten in der Zukunft. So etwas wie const int MIN_TEMP = 88; an der Spitze des Codes, wobei in diesem Fall Ihres while Zustand würde wie folgt aussehen:

while (temperature <= MIN_TEMP) { 

Man könnte sogar eine Funktion definieren getTemp() mit allem, aber der letzten Anweisung in dem obigen else if Block, der ein int zurück entspricht einer gültigen vom Benutzer eingegebenen Temperatur.