Основы программирования на C++, PASCAL
Евклидовой нормой вектора называют корень квадратный из суммы квадратов его элементов:
Если строку матрицы рассматривать как вектор, то данную формулу надо применить к каждой строке. В результате получим M чисел.
Определение функции вычисления нормы произвольного вектора:
double Norma(int n, double X[])
{ int i;
double S=0;
for(i=0; i<n; i++) S+=X[i]*X[i];
return sqrt(S);
}
Заголовок этой функции можно было записать и в такой форме:
double Norma(int n, double *X)
В обоих случаях в качестве второго параметра функции используется указатель на начало массива. Во втором варианте это более очевидно, однако оба варианта тождественны.
При вызове функции Norma() в качестве второго фактического параметра должен передаваться адрес начала массива (вектора).
Рассмотрим фрагмент основной программы, использующей данную функцию для обработки матрицы размером 5 х 10.
В обращении к функции второй фактический параметр A[i] является указателем на начало i-й строки матрицы А.
Пример 2. Заполнить двумерную матрицу случайными целыми числами в диапазоне от 0 до 99. Отсортировать строки полученной матрицы по возрастанию значений. Отсортированную матрицу вывести на экран.
#include <iostream.h>
#include <iomanip.h>
Здесь все выглядит совсем как при использовании процедур на Паскале. Обратите внимание на прототип и заголовок функции Matr() . В них явно указывается вторая размерность параметра-матрицы. Первую тоже можно указать, но это необязательно. Как уже говорилось выше, двумерный массив рассматривается как одномерный массив, элементами которого являются массивы (в данном случае — строки матрицы). Компилятору необходимо «знать» размер этих элементов. Для массивов большей размерности (3, 4 и т.д.) в заголовках функций необходимо указывать все размеры, начиная со второго.
При обращении к функции Matr() фактическим параметром является указатель на начало двумерного массива А, а при обращении к функции Sort () — указатели на начало строк.
В итоге тестирования программы получен следующий результат.
Матрица до сортировки:
Матрица после сортировки:
Упражнения
1. В оперативной памяти вектор int Х[10] расположен, начиная с адреса B7F0. Какие значения примут выражения:
а) х+1; б) х+5; в) х-4?
2. В программе объявлен массив:
int Р[]={0,2,4,5,6,7,9,12);
Какие значения примут выражения:
а) Р[3]; б) *Р; в) *(Р+4); г) *(Р+P[2])?
3. Составить функцию сортировки значений трех переменных а, b, с в порядке возрастания.
4. Составить функцию заполнения целочисленного одномерного массива случайными значениями в диапазоне от 0 до N.
5. Составить функцию вычисления среднего значения элементов вещественного одномерного массива. Использовать эту функцию в основной программе, определяющей в матрице номер строки с наибольшим средним значением.