Содержание
1. Постановка задачи…………………………………………….3
2. Исходные данные……………………………………………...3
3. Основные формулы и порядок оценки точности……………3
4. Итоговые величины…………………………………………...5
5. Спецификации управляющей программы и разработанного
заголовочного файла………………………………………………...5
6. Подробное описание функций……………………………………...7
7. Тестовые наборы………………………………………………11
8. Тексты программ……………………………………………...14
9. Список литературы……………………………………………20
1. Постановка задачи
В геодезии существует много видов работ, в которых измерения осуществляются дважды, например, измерение длин линий в прямом и обратном ходах, нивелирование I, II, III классов и другие. Измерения, выполненные в паре, как правило, равноточны, т.е. выполняются в одинаковых условиях (длина линии, число станций и т.п.), хотя могут быть случаи, когда измерения в паре неравноточны.
В данном задании рассматривается случай, когда измерения в парах равноточны, а между парами нет. Требуется определить среднюю квадратичную погрешность одного измерения, среднего из двух измерений, и среднюю квадратичную погрешность единицы веса по разностям di двойных измерений.
Итак, конкретно для нашего задания. Проложен нивелирный ход II класса между двумя фундаментальными реперами, состоящий из n секций. По каждой секции известны превышения, полученные из прямого и обратного ходов и число станций. Необходимо определить среднюю квадратичную погрешность одиночного хода длиною в 1 условный километр (примерно 10 станций) и двойного хода той же длины.
2. Исходные данные
1.Число секций: n.
2.Превышения в прямом и обратном направлениях (в метрах):
h’1, h’2, …, h’n
h”1, h”2,…, h”n
3.Число станций по каждой секции:
k1, k2, ..., kn
3. Основные формулы и порядок оценки точности
1.Получение разностей di двойных измерений и вычисление весов Рi каждой пары:
di = h’i – h”i, Pi = 10/ ki
2.Проверка наличия систематических ошибок.
Влияние систематических ошибок считается несущественным, если выполняется следующее соотношение:
n n
abs(∑ di Pi ) ≤ 0.25 ∑ abs (di Pi ), т.е. δср = 0
I=1 i=1
В противном случае определяется значение систематической ошибки:
n
∑ di Pi
i=1
δср =
n
∑ Pi
i=1
и исключают ее из каждой разности: d’i = di – δср
3.Оценка точности.
Средняя квадратичная погрешность одиночного хода длиною в 1 условный км определяется следующим образом:
n
∑ Pi di2
i=1
2n , при отсутствии систематических ошибок
mод.хода =
n
∑ Pi (d’i)2
i=1
2(n-1) , при наличии систематических ошибок
Средняя квадратичная погрешность двойного хода длиною в 1 условный км определяется по формуле:
mдв.хода = mод.хода / 2
4.Вычисление средних значений по каждой паре.
Lср i = ½ (= h’i + h”i) (i=1,2,…,n)
4. Итоговые величины
1.Средние квадратичные превышения (в метрах) - Lср i (i=1,2,…,n)
2.Средние квадратичные погрешности одиночного хода - mод.хода
3.Средние квадратичные погрешности двойного хода - mдв.хода
4.При наличии систематических ошибок - δср
5. Спецификации управляющей программы и разработанного заголовочного файла
MAIN.CPP – это управляющая программа, которая содержит основную функцию main. К данному файлу с помощью директивы препроцессора подключен заголовочный файл (модуль) MYFUNC.CPP, содержащий совокупность функций совместно с необходимыми описаниями. Управляющая программа – это по сути главная программа без функций, которые подключаются (вызываются) в нужные моменты из модуля MYFUNC.CPP.
В заголовочном файле описаны нами следующие функции, доступные вызывающей программе main:
1) функция open_file, которая открывает определенный файл для чтения или записи;
2) функция read_array_from_file, с помощью которой производится считывание из файла определенного массива определенного размера;
3) функция write_array_to_screen, с помощью которой осуществляется вывод определенного массива определенной длины на экран;
4) функция write_array_to_file, которая предусматривает вывод определенного массива определенного размера в файл;
5) функция write_output_to_file, которая предназначена для вывода всех выходных результирующих данных в файл;
6) функция calculate_d, для подсчета всех значений разностей двойных измерений;
7) функция calculate_p, для подсчета всех значений весов каждой пары;
8) функция sum_in_array, необходимая для подсчета суммы определенного количества элементов определенного массива;
9) функция calculate_b_sr_, в которой осуществляется подсчет значения систематической ошибки;
10) функция calculate_b_sr, которая осуществляет проверку на наличие систематической ошибки;
11) функция calculate_d_, в которой вычисляется разность двойных измерений с учетом систематической ошибки;
12) функция calculate_m1, где вычисляется средняя квадратичная погрешность одиночного хода;
13) функция calculate_m2, где вычисляется средняя квадратичная погрешность двойного хода;
14) функция calculate_l_cp, необходимая для подсчета средних значений по каждой паре.
Таким образом, в нашей программе с помощью специально описанных функций осуществляется ввод исходных данных из одного файла “in.txt” и вывод результирующих данных в другой файл “out.txt”. Кроме того, на экран будут выводиться также исходные и результирующие данные в совокупности с промежуточными значениями, для того чтобы можно было отследить процесс вычислений. (Значения, выводимые на экран, все рассчитаны в метрах, за исключением k и P.) Все остальные функции выполняют расчеты промежуточных и исходных значений и также, как уже описано ранее, существует функция для получения суммы n величин, рекомендованная при выполнении данного задания.
Кроме того, при написании программы были использованы и стандартные функции языка C++, такие как – printf (форматный вывод на экран), fprintf (форматный вывод в файл), fscanf (чтение из файла), calloc (для описания динамических массивов), free (для освобождения памяти, выделенной под массивы), fopen (открытие файла), fcloseall (закрытие всех ранее открытых файлов), clrscr (очистка экрана).
Главной функции main доступны следующие переменные:
*f_in и *f_out – указатели на переменные файлового типа;
n – переменная целого типа;
*k, *h_, *h__, *d, *p, *d_, *l_cp – указатели на массивы вещественных чисел;
m1, m2, b_sr – переменные вещественного типа.
6. Подробное описание функций
Все функции, описанные в данной программе, являются независимыми от управляющей программы, передача исходной информации в функцию и возвращение результатов из нее выполняются только через параметры. Опишем уже обозначенные выше функции более подробно, рассматривая список формальных параметров, их назначение и типы.
1) функция open_file: FILE* open_file(char *name_file,char *status)
Данная функция возвращает указатель на файловую переменную. В качестве формальных параметров здесь используются *name_file – указатель на имя файла (символьного типа), который необходимо открыть и *status – указатель, который показывает открыт ли файл для чтения “r” или для записи “w”(указатель на переменную символьного типа);
2) функция read_array_from_file:
void read_array_from_file(FILE *f_in,float *array,int size_array)
Данная функция ничего не возвращает (void). В качестве формальных параметров здесь используются следующие переменные: *f_in – указатель на файл (переменную файлового типа), из которого производится чтение , *array – указатель на массив чисел вещественного типа, size_array – размер массива (целого типа);
3) функция write_array_to_screen:
void write_array_to_screen(float *array,int size_array)
Данная функция ничего не возвращает. В качестве формальных параметров здесь используются переменные: *array – указатель на динамический массив чисел вещественного типа, size_array – размер массива (целого типа);
4) функция write_array_to_file:
void write_array_to_file(FILE *f_out,char *title,float *array,int size_array)
Данная функция ничего не возвращает. Формальные параметры: *f_out – указатель на файл (переменную файлового типа), из которого производится чтение, *title – указатель на переменную символьного типа (вывод заголовка массива), *array - указатель на динамический массив чисел вещественного типа, size_array – размер массива (целого типа);
5) функция write_output_to_file:
void write_output_to_file(FILE *f_out,int n,float *h_,float *h__,float *k,float m1,float m2,float *l_cp,float b_sr)
Данная функция ничего не возвращает. Формальные параметры: *f_out - указатель на файл (переменную файлового типа), из которого производится чтение, n – число секций (целого типа), *h_ –указатель на динамический массив чисел вещественного типа (содержит превышения в прямом направлении), *h__ - указатель на динамический массив чисел вещественного типа (содержит превышения в обратном направлении), *k - указатель на динамический массив чисел вещественного типа (содержит число станций по каждой секции), m1 и m2 – переменные вещественного типа (содержат соответственно среднюю квадратичную погрешность одиночного и двойного хода), *l_cp - указатель на динамический массив чисел вещественного типа (содержит средние превышения), b_sr – переменная вещественного типа, которая содержит значение систематической ошибки;
6) функция calculate_d: void calculate_d(float *d,float *h_, float *h__,int n)
Функция производит расчет разностей двойных измерений. Формальные параметры: *d - указатель на динамический массив чисел вещественного типа (содержит разности двойных измерений), *h_ - указатель на динамический массив чисел вещественного типа (содержит превышения в прямом направлении), *h__ - указатель на динамический массив чисел вещественного типа (содержит превышения в обратном направлении), n – число секций (целого типа);
7) функция calculate_p: void calculate_p(float *p,float *k,int n)
Данная функция производит расчет весов для каждой пары. Формальные параметры: *p - указатель на динамический массив чисел вещественного типа (содержит значения весов для каждой пары), *k - указатель на динамический массив чисел вещественного типа (содержит число станций по каждой секции), n – число секций (целого типа);
8) функция sum_in_array: float sum_in_array(float *array,int size_array)
Данная функция возвращает значение вещественного типа (float). Формальные параметры: *array – указатель на динамический массив чисел вещественного типа, size_array – размер массива (целого типа);
9) функция calculate_b_sr_: float calculate_b_sr_(float *d,float *p,int n)
Данная функция возвращает значение вещественного типа (float). Формальные параметры: *d - указатель на динамический массив чисел вещественного типа (содержит значения разностей двойных измерений), *р - указатель на динамический массив чисел вещественного типа (содержит значения весов для каждой пары), n – число секций (целого типа);
10) функция calculate_b_sr: float calculate_b_sr(float *d,float *p,int n)
Данная функция возвращает значение вещественного типа (float). Формальные параметры: *d - указатель на динамический массив чисел вещественного типа (содержит значения разностей двойных измерений), *р - указатель на динамический массив чисел вещественного типа (содержит значения весов для каждой пары), n – число секций (целого типа);
11) функция calculate_d_: void calculate_d_(float *d_,float *d,int n,float b_sr)
Данная функция производит вычисление значений разностей двойных измерений с учетом систематической ошибки. Формальные параметры: *d_ - указатель на динамический массив чисел вещественного типа (содержит значения разностей двойных измерений с учетом систематической ошибки),*d - указатель на динамический массив чисел вещественного типа (содержит значения разностей двойных измерений), n – число секций (целого типа), b_sr – переменная вещественного типа, которая содержит значение систематической ошибки;
12) функция calculate_m1:
float calculate_m1(float *p,float *d,float *d_,int n,float b_sr)
Данная функция возвращает значение вещественного типа (float). Формальные параметры: *р - указатель на динамический массив чисел вещественного типа (содержит значения весов для каждой пары), *d_ - указатель на динамический массив чисел вещественного типа (содержит значения разностей двойных измерений с учетом систематической ошибки),*d - указатель на динамический массив чисел вещественного типа (содержит значения разностей двойных измерений), n – число секций (целого типа), b_sr – переменная вещественного типа, которая содержит значение систематической ошибки;
13) функция calculate_m2: float calculate_m2(float m1)
Данная функция возвращает значение вещественного типа (float). Формальные параметры: m1 - переменная вещественного типа (содержит среднюю квадратичную погрешность одиночного хода);
14) функция calculate_l_cp:
void calculate_l_cp(float *l_cp,float *h_, float *h__,int n)
Данная функция возвращает значение вещественного типа (float). Формальные параметры: *l_cp - указатель на динамический массив чисел вещественного типа (содержит средние превышения), *h_ - указатель на динамический массив чисел вещественного типа (содержит превышения в прямом направлении), *h__ - указатель на динамический массив чисел вещественного типа (содержит превышения в обратном направлении), n – число секций (целого типа).
7. Тестовые наборы
Вариант1
In.txt
10 // Число секций
-1.561 -1.484 -1.370 +0.102 +2.184 +1.219 -0.100 -0.153 +1.201 +0.157
// превышения в прямом направлении
-1.564 -1.482 -1.373 +0.105 +2.182 +1.222 -0.102 -0.151 +1.198 +0.159
// превышения в обратном направлении
7 27 13 25 32 15 19 18 16 23 // число станций по каждой секции
Out.txt-----------------------------------------------------------
| i | h',m | h'',m | k | Lcp,m |
-----------------------------------------------------------
| 1 | -1.561 | -1.564 | 7.000 | -1.562 |
| 2 | -1.484 | -1.482 | 27.000 | -1.483 |
| 3 | -1.370 | -1.373 | 13.000 | -1.372 |
| 4 | 0.102 | 0.105 | 25.000 | 0.103 |
| 5 | 2.184 | 2.182 | 32.000 | 2.183 |
| 6 | 1.219 | 1.222 | 15.000 | 1.220 |
| 7 | -0.100 | -0.102 | 19.000 | -0.101 |
| 8 | -0.153 | -0.151 | 18.000 | -0.152 |
| 9 | 1.201 | 1.198 | 16.000 | 1.199 |
| 10 | 0.157 | 0.159 | 23.000 | 0.158 |
-----------------------------------------------------------
Mod,mm = 1.480
Mdv,mm = 1.046
δcp,mm = 0.000
При подсчете критерия допустимости получается, что систематическими влияниями при оценке точности можно пренебречь (δcp, mm = 0.000). Исходя из, этого подсчитываем значения средней квадратической ошибки одиночного и двойного хода в 10 станций, а также значения средних превышений.
Вариант2
In.txt
10 // Число секций
+2.345 -11.450 +5.678 -4.256 -3.941 +2.523 +12.323 +8.107 +12.238 +3.744
// превышения в прямом направлении
+2.349 -11.450 +5.672 -4.262 -3.935 +2.528 +12.228 +8.111 +12.334 +3.739
// превышения в обратном направлении
11 15 8 8 9 10 7 6 5 6 // число станций по каждой секции
Out.txt
-----------------------------------------------------------
| i | h',m | h'',m | k | Lcp,m |
-----------------------------------------------------------
| 1 | 2.345 | 2.349 | 11.000 | 2.347 |
| 2 | -11.450 | -11.450 | 15.000 | -11.450 |
| 3 | 5.678 | 5.672 | 8.000 | 5.675 |
| 4 | -4.256 | -4.262 | 8.000 | -4.259 |
| 5 | -3.941 | -3.935 | 9.000 | -3.938 |
| 6 | 2.523 | 2.528 | 10.000 | 2.526 |
| 7 | 12.323 | 12.228 | 7.000 | 12.275 |
| 8 | 8.107 | 8.111 | 6.000 | 8.109 |
| 9 | 12.238 | 12.334 | 5.000 | 12.286 |
| 10 | 3.744 | 3.739 | 6.000 | 3.741 |
-----------------------------------------------------------
Mod,mm = 39.726
Mdv,mm = 28.090
δcp,mm = 0.000
Вариант 3
Возьмем все значения из Варианта 2, изменив только значение h”9 на +11.534
In.txt
10 // Число секций
+2.345 -11.450 +5.678 -4.256 -3.941 +2.523 +12.323 +8.107 +12.238 +3.744
// превышения в прямом направлении
+2.349 -11.450 +5.672 -4.262 -3.935 +2.528 +12.228 +8.111 +11.534 +3.739
// превышения в обратном направлении
11 15 8 8 9 10 7 6 5 6 // число станций по каждой секции
Out.txt-------------------------------------------------
| i | h',m | h'',m | k | Lcp,m |
-----------------------------------------------------------
| 1 | 2.345 | 2.349 | 11.000 | 2.347 |
| 2 | -11.450 | -11.450 | 15.000 | -11.450 |
| 3 | 5.678 | 5.672 | 8.000 | 5.675 |
| 4 | -4.256 | -4.262 | 8.000 | -4.259 |
| 5 | -3.941 | -3.935 | 9.000 | -3.938 |
| 6 | 2.523 | 2.528 | 10.000 | 2.526 |
| 7 | 12.323 | 12.228 | 7.000 | 12.275 |
| 8 | 8.107 | 8.111 | 6.000 | 8.109 |
| 9 | 12.238 | 11.534 | 5.000 | 11.886 |
| 10 | 3.744 | 3.739 | 6.000 | 3.741 |
-----------------------------------------------------------
Mod, mm = 213.437
Mdv, mm = 150.923
δcp,mm = 119.322
При подсчете критерия допустимости получается, что влияние систематической ошибки существенно (δcp, mm =119.322). Исходя из этого, подсчитываем новые значения разностей двойных измерений и затем значения средней квадратической ошибки одиночного и двойного хода в 10 станций.
8. Тексты программ
MAIN.CPP
#include "myfunc.cpp"
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
clrscr(); //ochistka ecrana
FILE *f_in,*f_out;
int n;
float *k=NULL,*h_=NULL,*h__=NULL;
float *d=NULL,*p=NULL,*d_=NULL;
float m1,m2,*l_cp=NULL;
float b_sr;
//otkritie failov
f_in=open_file("in.txt","r"); //so vhodnoi informaciei "in.txt" dlya chterniya
f_out=open_file("out.txt","w"); //dlya zapisi informacii "out.txt"
fscanf(f_in,"%d",&n);
printf("n = %d",n);
printf("\n");
// printf("lcp = %.2f",lcp_i(7,9));
//printf("\n");
printf("\nh', metr: \n");
h_=(float*)calloc(n,sizeof(float));
read_array_from_file(f_in,h_,n);
write_array_to_screen(h_,n);
printf("\nh'', metr: \n");
h__=(float*)calloc(n,sizeof(float));
read_array_from_file(f_in,h__,n);
write_array_to_screen(h__,n);
printf("\nk: \n");
k=(float*)calloc(n,sizeof(float));
read_array_from_file(f_in,k,n);
write_array_to_screen(k,n);
printf("\nd: \n");
d=(float*)calloc(n,sizeof(float));
calculate_d(d,h_,h__,n);
write_array_to_screen(d,n);
printf("\nP: \n");
p=(float*)calloc(n,sizeof(float));
calculate_p(p,k,n);
write_array_to_screen(p,n);
printf("\n");
b_sr=calculate_b_sr(d,p,n);
printf("\n %c = %f",(char)161,b_sr);
printf("\nd': \n");
d_=(float*)calloc(n,sizeof(float));
calculate_d_(d_,d,n,b_sr);
write_array_to_screen(d_,n);
printf("\nm1: \n");
m1=calculate_m1(p,d,d_,n,b_sr);
printf("\nMod = %f",m1);
printf("\nm2: \n");
m2=calculate_m2(m1);
printf("\nMdv = %f",m2);
printf("\nLcp: \n");
l_cp=(float*)calloc(n,sizeof(float));
calculate_l_cp(l_cp,h_,h__,n);
write_array_to_screen(l_cp,n);
//Vivodim bv fail resultati raschetov
write_output_to_file(f_out,n,h_,h__,k,m1,m2,l_cp,b_sr);
fcloseall(); //Zakrivaem vse otkritie faili
free(d);
free(p);
free(d_);
free(l_cp);
free(k);
free(h_);
free(h__);
getch();
}
MYFUNC.CPP
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//float lcp_i(int h_i_, int h_i__)
// {
// return(0.5*(h_i_+h_i__));
// }
//Otkrivaem fail "name_file" dlya chteniya ili zapisi ("status")
FILE* open_file(char *name_file,char *status)
{
FILE *f;
f=fopen(name_file,status);
if (f==NULL) //esli pri otkritie faila proizoshla oshibka
{
printf("Error %s",name_file);
exit(1);
}
return(f);
}
//Shitat iz faila "f_in" masssiv "array" razmerom "size_array"
void read_array_from_file(FILE *f_in,float *array,int size_array)
{
int i;
for (i=0; i<size_array; i++)
fscanf(f_in,"%f",&array[i]);
}
//Vivod masssiva "array" razmerom "size_array" na ekran
void write_array_to_screen(float *array,int size_array)
{
int i;
for (i=0; i<size_array; i++)
printf("%7.3f ",array[i]);
}
//Vivod masssiva "array" razmerom "size_array" v file
void write_array_to_file(FILE *f_out,char *title,float *array,int size_array)
{
int i;
fprintf(f_out,"\n%5s:",title);
for (i=0; i<size_array; i++)
fprintf(f_out,"%7.3f ",array[i]);
}
//Vivod vihodnih dannih v fail
void write_output_to_file(FILE *f_out,int n,float *h_,float *h__,float *k,float m1,float m2,float *l_cp,float b_sr)
{
int i;
fprintf(f_out,"\n-----------------------------------------------------------");
fprintf(f_out,"\n%2s %3s %2s %8s %2s %8s %2s %8s %2s %8s %2s","|","i","|","h',m","|","h'',m","|","k","|","Lcp,m","|");
fprintf(f_out,"\n-----------------------------------------------------------\n");
for (i=0; i<n; i++)
{
fprintf(f_out,"%2s ","|");
fprintf(f_out,"%3d ",i+1);
fprintf(f_out,"%2s ","|");
fprintf(f_out,"%8.3f ",h_[i]);
fprintf(f_out,"%2s ","|");
fprintf(f_out,"%8.3f ",h__[i]);
fprintf(f_out,"%2s ","|");
fprintf(f_out,"%8.3f ",k[i]);
fprintf(f_out,"%2s ","|");
fprintf(f_out,"%8.3f ",l_cp[i]);
fprintf(f_out,"%2s ","|");
fprintf(f_out,"\n");
}
fprintf(f_out,"-----------------------------------------------------------\n");
fprintf(f_out,"\nMod,mm = %7.3f ",m1*1000);
fprintf(f_out,"\nMdv,mm = %7.3f ",m2*1000);
fprintf(f_out,"\n%ccp,mm = %7.3f ",(char)161,b_sr*1000);
}
//Vichislenie raznostei dvoinih izmerenii
void calculate_d(float *d,float *h_, float *h__,int n)
{
int i;
for (i=0; i<n; i++)
d[i]=h_[i]-h__[i];
}
//Vichislenie vesov
void calculate_p(float *p,float *k,int n)
{
int i;
for (i=0; i<n; i++)
p[i]=10/k[i];
}
//Vichislenie summi "size_array" chisel iz massiva "array"
float sum_in_array(float *array,int size_array)
{
int i;
float sum=0;
for (i=0; i<size_array; i++)
sum+=array[i];
return(sum);
}
//Vichislenie sigmi "b_sr"
float calculate_b_sr_(float *d,float *p,int n)
{
float *pd,b;
int i;
pd=(float*)calloc(n,sizeof(float));
for (i=0; i<n; i++)
pd[i]=p[i]*d[i];
b=sum_in_array(pd,n)/sum_in_array(p,n);
free(pd);
return(b);
}
//Vichislenie sigmi "b_sr"
float calculate_b_sr(float *d,float *p,int n)
{
float *d_sqrt_p,*abs_d_sqrt_p;
int i;
d_sqrt_p=(float*)calloc(n,sizeof(float));
abs_d_sqrt_p=(float*)calloc(n,sizeof(float));
for (i=0; i<n; i++)
{
d_sqrt_p[i]=sqrt(p[i])*d[i];
abs_d_sqrt_p[i]=abs(d_sqrt_p[i]);
}
if (abs(sum_in_array(d_sqrt_p,n)) <= 0.25*sum_in_array(abs_d_sqrt_p,n))
{
free(d_sqrt_p);
free(abs_d_sqrt_p);
return(0);
}
else
{
free(d_sqrt_p);
free(abs_d_sqrt_p);
return(calculate_b_sr_(d,p,n));
}
}
//Vichislenie d'
void calculate_d_(float *d_,float *d,int n,float b_sr)
{
int i;
for (i=0; i<n; i++)
d_[i]=d[i]-b_sr;
}
//Vichislenie pogreshnosti odinochnogo hoda
float calculate_m1(float *p,float *d,float *d_,int n,float b_sr)
{
int i;
float *pd;
if (b_sr==0)
{
for (i=0; i<n; i++)
pd[i]=p[i]*d[i]*d[i];
return(sqrt(sum_in_array(pd,n)/(2*n)));
}
else
{
for (i=0; i<n; i++)
pd[i]=p[i]*d_[i]*d_[i];
return(sqrt(sum_in_array(pd,n)/(2*(n-1))));
}
free(pd);
}
//Vichislenie pogresh dvoinogo hoda
float calculate_m2(float m1)
{
int i;
return(m1/sqrt(2));
}
//Vichislenie srednih znachenii
void calculate_l_cp(float *l_cp,float *h_, float *h__,int n)
{
int i;
for (i=0; i<n; i++)
l_cp[i]=0.5*(h_[i]+h__[i]);
}
9. Список литературы
1. Большаков В.Д., Гайдаев П.А. Теория математической обработки геодезических измерений, 1977, с.160-169.
2. Большаков В.Д., Маркузе Ю.И. Практикум по теории математической обработки геодезических измерений. – М.: Недра, 1984, с.132-135.
3. Б. Керниган, Д. Ритчи. Язык программирования Си. - М.: "ФИС", 1992.
4. Б. Карпов, Т. Баранова. С++: Специальный справочник. - СПб: Питер, 2001. - 480 с.
5. Климова Л.М. Основы практического программирования на языке С++.-М.: Приор, 1999, 464 с.