Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
C
Если аргумент процедуры – массив, то используется механизм передачи по адресу. При этом в список аргументов включается имя массива, в вызываемую процедуру передается адрес первого элемента (с нулевыми индексами) и массив некопируется в локальную память функции. При описании float a[10][10] обращение вида: <имя_функции>(a) эквивалентно обращению: <имя_функции>(& a[0][0]). Следовательно, массивы-параметры занимают память, отводимую в вызывающей процедуре массивам-аргументам, поэтому в вызываемой процедуре допустимы описания вида float b[], a[][10]; Длины всех измерений, кроме первого, надо задавать, чтобы правильно извлечь из памяти значения нужного элемента массива (см. формулу в параграфе "Распределение массивов"). Допустимо даже несоответствие размерностей аргумента и параметра.
Пример.
Аргументы Параметры
float a[5][5], b[36]; float a[ ], b[ ][6];
Пример. Вычислить: z=uТbu, где {ui]}, i=1...4; {bij]}, i,j=1...4.
/* Вычисление квадратичной формы */
void main( void ){
float u[4], /* Входной вектор */
b[4][4], /* Входная матрица */
v[4], /* Вектор b*u */
z, /* Результат */
scalar( float u[ ], float v[ ]); /*Скалярное произведение векторов */
int i, j;
/* Умножение матрицы на вектор */
void matrix(float b[ ][4], float u[ ], float v[ ]);
printf("Исходный вектор:\n");
for (i=0; i<4; i++){
scanf("%f", & u[ i ]);
}
printf("Исходная матрица:\n");
for (i=0; i<4; i++){
for (j=0; j<4; j++){
scanf("%f", & b[ i ][ j ]);
}
}
matrix(b, u, v);
z=scalar(v, u);
printf("\n\n\nКвадратичная форма равна %.5g\n", z);
}/* End main */
/* Умножение матрицы на вектор */
void matrix(floa t a[ ][4], float x[ ], floa t y[ ]){
int i, j;
for (i=0; i<4; i++){
for (y[ i ]=j=0; j<4; j++){
y[ i ] += a[ i ][ j ]*x[ j ];
}
}
}/* End matrix */
/* Скалярное произведение векторов */
float scalar (float x[ ], float y[ ]){
int i;
float z;
for (z=i=0; i<4; i++){
z+=x[ i ]*y[ i ];
}
return z;
}/* End scalar */
Basic
Массивы передаются также по адресу, поэтому изменение их в вызывающей процедуре затруднений не вызывает.
Дальнейший материал относится только к языкам C и C++. В языке Basic подобных средств нет.
Дата публикования: 2014-11-02; Прочитано: 208 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!