2016-04-13 6 views
1

ich verpflichtet bin, vollständig den folgenden Code zu verstehen:Schwierigkeiten zu verstehen, wie die Elemente einer bestimmten Funktion Arbeit

#include <iostream> 
using namespace std; 
double area(double length, double width); 
double time(double p_area, double h_area, double mow_rate); 

int main() { 
    double d_plot_length, d_plot_width, d_home_side, d_mow_rate; 
    double plot_area, home_area, time_taken; 
    // I've used double for all of these to get the most precise values possible, something I'd only really consider doing on small programmes such as this 
    cout << "What is the length of the plot? In meters please." << endl; 
    cin >> d_plot_length; 
    cout << "What is the width of the plot? In meters please." << endl; 
    cin >> d_plot_width; 
    cout<< "What is the size of the side of the house? In meters please." << endl; 
    cin >> d_home_side; 
    cout << "What is the rate at which you are going to be mowing? In meters per minute please" << endl; 
    cin >> d_mow_rate; 
    // Just getting all the data I need from the user 
    plot_area = area(d_plot_length, d_plot_width); 
    home_area = area(d_home_side, d_home_side); 
    time_taken = time(plot_area, home_area, d_mow_rate); 
    cout << "It will take " << time_taken << " minutes to mow this lawn. Better get cracking" << endl; 
    return 0; 
} 

double area(double length, double width) { 
    double value; 
    value = length * width; 
    return value; 
} 

double time(double p_area, double h_area, double mow_rate) { 
    double value; 
    value = (p_area - h_area)/mow_rate; 
    return value; 
} 

ich kämpfen, um zu verstehen, wie die time() Funktion funktioniert.

Bisher Ich verstehe, dass:

time_taken, dessen Wert von der time() Funktion bekommt: time(plot_area, home_area, d_mow_rate).

Die Funktion time() erhält ihre Werte aus der Funktionsdeklaration am unteren Rand.

double time(double p_area, double h_area, double mow_rate) { 
    double value; 
    value = (p_area - h_area)/mow_rate; 
    return value; 
} 

Allerdings ist dies, wo ich feststecke. Der Benutzer wird aufgefordert, Werte für d_plot_length, d_plot_width usw. einzugeben. So kann ich nicht verstehen, wie der Compiler weiß, was diese Werte p_area und h_area tatsächlich sind.

Ich weiß, dass irgendwie die area() Funktion die time() Funktion zur Unterstützung verwendet wird, aber soweit ich weiß die Variablen P_area usw. innerhalb der time() Funktion haben keine Werte zugewiesen.

Bitte kann jemand die Lücken in meinem Verständnis ausfüllen.

Um genauer zu sein, möchte ich genau wissen, wie time_taken auf dem Bildschirm angezeigt wird, vom Anfang des Prozesses bis cout. Wie gesagt, ich kenne die meisten Bereiche, aber nicht alle.

+1

Parameter innerhalb der Funktion Körper haben Werte übergeben als Argumente im Funktionsaufruf. Wenn Sie 'time (plot_area, home_area, d_mow_rate) aufrufen, wird die Funktion' time' mit 'p_area' ausgeführt, die den Wert von' plot_area' haben, 'h_area' den Wert von' home_area' und so weiter. –

+0

Danke, das macht viel Sinn! –

Antwort

1

In Ihrem Programm haben Sie die folgenden Werte berechnet:

 
plot_area = area(d_plot_length, d_plot_width); 
home_area = area(d_home_side, d_home_side); 

Wenn das Verfahren area(double,double) aufgerufen wird, der resultierende double Wert in diesen Variablen gespeichert wird.

Dann haben Sie den Funktionsaufruf: time_taken = time(plot_area, home_area, d_mow_rate);

Dies ist der Aufruf von Wert Art der Funktionsaufruf. Eine Kopie der Werte in den Variablen plot_area, home_area und d_mow_rate wird an die Funktion übergeben. In time(double, double, double) erfolgt die Berechnung auf der Grundlage der Logik, die Sie in dieser Methode definiert haben, und der resultierende Wert wird an den Funktionsaufruf in der Methode main() zurückgegeben.

Bitte beachten Sie, dass der Funktionsaufruf von call by value ist und somit nur eine Kopie der Werte auf die Argumente in der Funktion time(double, double, double) obwohl die Variablennamen sind gleich in den main() und in dem Funktionsaufruf erwähnt geben.

Für weitere Lesung, werde ich vorschlagen, dass Sie unter den folgenden Links einen Blick haben:

  1. Call By Value
  2. Call By Reference
  3. Call By Pointer
Verwandte Themen