2015-01-01 2 views
0

Позвольте мне представить, как я получил эту проблему ... Ну, я знаю немного FORTRAN, и теперь я изучаю C++. Когда я прочитал начало, я (ре) создаю старую программу, которую я написал в FORTRAN. Это часть расчета топографической съемки замкнутой многоугольника.Чтение переменных другой функции

Ну, я читаю книгу «Программирование: принципы и практика с использованием C++», и в ней говорится, что в C++ мы предпочли бы, чтобы каждая функция выполняла минимальное количество вещей. На данный момент, у меня есть что-то вроде этого (я игнорировал все другие функции):

int main(){ 

//Starting the program and reading all variables 
try 
{ 
    //Program beginning 
    cout << "Hello. Welcome to the 'Topography Program'\n\n\n"; 

    //Reading all the information needed 
    reading_is_fundamental(); 

    //Testing the angular tolerance 
    ang_tolerance_test (number_of_points); } ...there's more subroutines' calls 

catch (runtime_error& e) 
{ 
    cerr << "error:" << e.what()<<'\n'; 
    return 1; 
} 

return 0;} 

«reading_is_fundamental()» это вызов подпрограммы. Там я прочитал всю необходимую информацию. Моя проблема лежит во второй подпрограмме: «ang_tolerance_test (number_of_points)».

В FORTRAN я злоупотреблял слишком большим количеством глобальных переменных, и теперь в этой книге говорится, что мы должны избегать глобальных переменных.

Конец истории, у меня есть два вопроса:

1 - Эта логика верна или я неправильно понял эту книгу? Должен ли я поместить некоторые вычисления (или, по крайней мере, чтение входной переменной, как они будут отображаться во всей подпрограмме) в основной функции, или я должен использовать ее только для вызова моих подпрограмм?

2 - Если это действительно так, как мы должны делать в C++ (разделять каждое действие в одной функции), может кто-нибудь объяснить мне, как захватить переменные, которые были записаны в первой подпрограмме, и отправить другим, например, «ang_tolerance_test» один?

Большое спасибо заранее!

РЕДАКТИРОВАТЬ

Функция "reading_is_fundamental()", где я прочитал все значения с помощью клавиатуры. Я знаю, как читать значения в текстовом файле в FORTRAN, и в этом случае это большое преимущество, так как есть так много чисел, которые нужно читать. Но я еще не знаю, как это сделать на C++, поэтому, пожалуйста, проигнорируйте, что я читаю много переменных с клавиатуры, я изучаю их еще! На самом деле, на самом деле не имеет значения, так, что я читаю переменные, дело в том, что я хочу, чтобы эти парный, внутр и векторы в других soubroutines ...

Ну, это «reading_is_fundamental:

//This subroutine reads all the variables 
void reading_is_fundamental(){ 
cout << "What is the linear tolerance?\n"; 
double lin_tolerance; 
cin >> lin_tolerance; 

cout << "\nHow many points did you study?\n"; 
int number_of_points; 
cin >> number_of_points; 

cout << "\nWhat's the distance between each point?\n"; 
vector <double> distances; 
for (double dist; cin >> dist;) 
distances.push_back(dist); 
if (distances.size() != number_of_points) error ("The number of distances must be equal to the number of points"); 

cout << "\nWhat's each horizontal degree angle?\n"; 
vector <double> horizontal_degrees; 
for (double horizontal_degree; cin >> horizontal_degree;) 
horizontal_degrees.push_back(horizontal_degree); 
if (horizontal_degrees.size() != number_of_points) error ("The number of angles must be equal to the number of points"); 

cout << "\nWhat's each horizontal minute angle?\n"; 
vector <double> horizontal_minutes; 
for (double horizontal_minute; cin >> horizontal_minute;) 
horizontal_minutes.push_back(horizontal_minute); 
if (horizontal_minutes.size() != number_of_pointsint) ("The number of angles must be equal to the number of points"); 

cout << "\nWhat's each horizontal second angle?\n"; 
vector <double> horizontal_seconds; 
for (double horizontal_second; cin >> horizontal_second;) 
horizontal_seconds.push_back(horizontal_second); 
if (horizontal_seconds.size() != number_of_points) error ("The number of angles must be equal to the number of points"); 

cout << "\nWhat's the first azimuth degree?\n"; 
double first_az_degree; 
cin >> first_az_degree; 

cout << "\nWhat's the first azimuth minute?\n"; 
double first_az_minute; 
cin >> first_az_minute; 

cout << "\nWhat's the first azimuth second?\n"; 
double first_az_second; 
cin >> first_az_second; 
cin >> number_of_points;} 

Одна вещь, которую я din't знаю, когда я был сочинительство это, если правильно поставить пустоту в этой функции. Мой способ мышления TAHT я не хочу одно возвращение, но некоторые переменные подали.

Вторая функция - «ang_tolerance_test()». Она еще не готова, поэтому я не буду копировать здесь. Дело в том, что когда я вызываю эту функцию в main(), я хочу поместите аргумент этого значения в значение «read_is_fundamental()» (то есть «number_of_points»).

Надеюсь, это сделало мои вопросы более ясными.

+3

Функции должны принимать аргументы и возвращать значения. Вот как вы передаете информацию. – Barmar

ответ

0

Попробуйте возвращения значения из reading_is_fundamental функции, которые вы могли бы передать его другой функции, как:

int number_of_points = reading_is_fundamental(); 
//Testing the angular tolerance 
ang_tolerance_test (number_of_points); 

и определить функции, как:

int reading_is_fundamental() { 
    .... 
    return number; 
} 

Определение класса, как:

class Record 
{ 
    private: 
    double lin_tolerance; 
    int number_of_points; 

    public: 
    int getNumberOfPoints() { return number_of_points; } 
    void setNumberOfPoints(int v) { number_of_points = v; } 

    double getLinTolerance() { return lin_tolerance; } 
    void setLinTolerancedouble v) { lin_tolerance = v; } 
}; 

И когда вы читаете значения, создайте экземпляр записи, сохраните populati ng значения внутри записи и в конце вернуть это значение, чтобы вы могли передать его на ang_tolerance_test. Теперь, как сейчас, вместо int теперь вы получите объект Record из функции.

+0

Хмм ... Я не знаю, помогает ли это мне. Функция, которую я хочу передать значения другим, является первой, «read_is_fundamental». Проблема в том, что эта функция читает один двойной, один int и шесть векторов двойников. – chriss3008

+0

, а стоимость, которую вы хотите передать? Я не вижу ничего в вашем коде, кроме вызова функции как первый оператор после cout в вашем главном? – SMA

+0

Я пытался получить кучу кодов. Я отредактирую первый вопрос с кодами. – chriss3008

Смежные вопросы