Позвольте мне представить, как я получил эту проблему ... Ну, я знаю немного 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»).
Надеюсь, это сделало мои вопросы более ясными.
Функции должны принимать аргументы и возвращать значения. Вот как вы передаете информацию. – Barmar