?>
Нужна , нужно написать подпрограмму на языке си, которая находит номер первого столбца таблицы, для которого скалярное произведение на заданный вектор минимально. вот мой код, но там какая - то ошибка, исправить: const int rows = 100, cols = 100; //максимальный размер массва 100х100 double a[rows][cols]; double table = a[rows][cols]; bool scal(double & table, int n, int m, int & n) { //подпрограмма находит номер первого столбца таблицы, для которого скалярное произведение на заданный вектор минимально; //входные параметры: table - двумерный статический массив вещественных чисел; // n, m - количество строк и столбцов таблицы; // выходной параметр: n - искомый номер столбца. // функция возвращает true - если результат найден // false - если размеры заданы некорректно, в этом случае n - неопределено double vec[rows]; int i, j; double s = 0, t; bool er = false; setlocale(lc_all, "rus"); srand(time(null)); printf("заданный вектор: "); for (i = 0; i < n; i++) { vec[i] = rand(); printf("%lf ", vec[i]); //задаём координаты вектора псевдослучайными числами } for (j = m - 1; j> =0; --j) { //проверяем столбцы таблицы, начиная с последнего for (i = 0; i < n; i ++) s += a[i][j] * vec[i]; //считаем скалярное произведение столбца массива на заданный вектор if (j = m - 1) { n = m - 1; t = s; s = 0; } else { if (s < t) //если скалярное произведение данного столбца на вектор меньше чем произведение предыдущего, присваиваем переменной n номер этого столбца n = j; t = s; //присваиваем переменной t произведение данного столбца на вектор для дальнейшнго сравнения s = 0; } //переменную s зануляем, чтобы посчитать произведение следующего столбца на вектор } if (n > 0 || m > 0 || n < = rows || m < = cols) er = true; //проверка входных параметров на допустимость return er; }
Ответы
n, sum, max: integer;
begin
sum:=0;
write('Введите натуральное число n: ');
readln(n);
a := new integer[n];
write('Введите действительные числа: ');
for var i:=0 to a.Length-1 do
read(a[i] );
write('Сумма равна: ');
for var i:=0 to a.Length-1 do
sum:=sum+a[i];
writeln(sum);
write('Максимальный элемент равен: ');
max := a[0];
for var i:=0 to a.Length-1 do
if a[i]>max then
begin
max := a[i];
end;
writeln(max);
write('S = (А1+ А2+ …,+ Аn) + max (А1, А2, …, Аn) = ');
sum:=sum+max;
write(sum);
end.