annakrasnikova2
14.10.2021 16:09

Нужна , нужно написать подпрограмму на языке си, которая
находит номер первого столбца таблицы, для которого скалярное произведение на заданный вектор минимально.
вот мой код, но там какая - то ошибка, исправить:

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;
}

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
david528
30.12.2020 01:02

не так уж и трудно, если

program project2;

var

n,a,b,c,i,k,max,min: longint;

inp,outp: text;

begin

assign(inp,'input.txt');

reset(inp);

assign(outp,'output.txt');

rewrite(outp);

readln(inp,n);

max: =0;

min: =0;

c: =0;

for i: =1 to n do

begin

read(f1,a);

if i=1 then

b: =a;

if a> max then

max: =a;

k: =a-c;

c: =a;

if k< 0 then

begin

k: =abs(k);

min: =min+k;

if k> min then

min: =k;

end;

end;

max: =max-b;

write(outp,max,' ',min);

close(inp);

close(outp);

end.

0,0(0 оценок)
Ответ:
танкистка7
30.12.2020 01:02

Python 3.6

n = int(input())

a = [int(i) for i in input().split()]  

up, now, max_, min_ = False,  0, 0, 0

if n == 1:

   print('0 0')

else:

   for i in range(1, n):

       if a[i - 1] < a[i]:            

           if not up:

               up = True

               now = 0

               

           now += a[i] - a[i-1]

           if now > max_:

               max_ = now

           

       if a[i-1] > a[i]:

           if up:

               up = False

               now = 0

                           

           now += a[i-1] - a[i]

           if now > min_:

               min_ = now

   print(max_, min_)

PascalABC.NET 3.5.1

Program c_contest;

var Data: array of longword;

   i, n, count, max, min, now: longword;

   up: boolean;

   F: textfile;

begin

 Assign(F, 'input.txt');

 Reset(F);

 readln(F, n);

 SetLength(Data, n);

 for i := 0 to n-1 do

   begin

     read(F, Data[i]);

   end;  

 Close(F);  

 if n = 1 then write('0 0')

 else

   begin  

     for i := 1 to n-1 do

       begin

         if Data[i-1] < Data[i] Then

           begin            

             if not up Then

               begin

                 up := True;

                 now := 0;

               end;

               

             now := now + (Data[i] - Data[i-1]);

             if now > max Then max := now;

           end;

           

         if Data[i-1] > Data[i] Then

           begin

             if up Then

               begin

                 up := False;

                 now := 0;

               end;

                           

             now := now + (Data[i-1] - Data[i]);

             if now > min Then min := now;

           end;

       end;      

     write(max, ' ',min);    

   end;

end.

Объяснение:

По коду видно

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота