Предмет: Информатика, автор: kovalenkoaleksandra2

ПОМОГИТЕ. ЭТО УЖЕ КРИК ДУШИ!!
Напишите программу по-братски
я сижу над ней ооочень долго, но ничего на ум не приходит

Приложения:

dsxakep: Некоторые слова коряво переведены. Если оригинал на украинском, тогда кинь оригинальный текст. Бо я прекрасно знаю свою рідну українську мову і так буде для мене більш зрозуміло. І я спробую допомогти
kovalenkoaleksandra2: Задайте два вектори А(n) і В(m). Виконайте такі завдання:
1. визначити вектор С так, щоб його елементами були номери парних елементів векторів А і В і значення непарних елементи векторів А і В. Елементи вектора С розташувати у порядку зростання;
2. знайти суму елементів вектора А, розташованих між першим і останнім від’ємними елементами;
3. знайти добуток модулів елементів вектора А і вектора В, розташованих після мінімального за модулем елемента відповідного вектора.
kovalenkoaleksandra2: ОЙ
kovalenkoaleksandra2: сейчас
kovalenkoaleksandra2: Задайте два вектори А(n) і В(m). Виконайте такі завдання:
1. визначити вектор С так, щоб усі його елементи були рівні сумі відповідних елементів векторів А і В, якщо в А і В різниця між будь-якими двома сусідніми елементами не перевищує максимального значення двох векторів; якщо ж перевищує, то D буде вектором нульових елементів, кількість яких дорівнюватиме цілій частині максимального значення з двох векторів;
kovalenkoaleksandra2: 2. знайти добуток елементів вектора, розташованих між першим і другим нульовими елементами;
3. перетворити вектор так, щоб спочатку розташовувалися всі елементи, що дорівнюють нулю, а потім – усі інші елементи.
kovalenkoaleksandra2: Вот
dsxakep: Ще забув запитати: це на C++ треба написати? Бо я інші мови майже не знаю
kovalenkoaleksandra2: да)

Ответы

Автор ответа: dsxakep
0

Якось так в мене вийшло. Думаю може бути таке, що не весь код буде правильним, але я написав так, як зрозумів умову. Я так зрозумів, що тип векторів a і b буде float і вони заповнюються вручну з клавіатури. І ще результатів я не виводив, якщо треба буде, то думаю сама зрозумієш, як їх вивести. В 2 завданні, я так зрозумів, треба окремо помножити елементи векторів а і b, які знаходяться від першого елементу зі значенням 0 до другого з 0. Змінні doba і dobb містять результат множення. У випадку, якщо найдено тільки один нульовий елемент, то множиться від нього до кінця вектора; а якщо не найдено, то буде 0. А в 3 завданні я просто використав алгоритм сортування, який сортує значення векторів в порядку зростання. І вийде, що елементи з 0 будуть найперші.

P.S. Якщо щось не так, як треба, то або сама поправиш, або я поможу.

#include <iostream>

#include <vector>

#include <algorithm>

#include <math.h>

using namespace std;

int main(){

   int n, m;

   cin >> n >> m;

   vector<float> a(n), b(m), c, d;

   for(float& i: a)

       cin >> i;

   for(float& i: b)

       cin >> i;

   //1

   float maxv = max(*max_element(a.begin(), a.end()), *max_element(b.begin(), b.end()));

   bool isBgr = false;

   for (int i(1); i < n - 1; i++) {

       if(a[i - 1] - a[i] > maxv || a[i] - a[i - 1] > maxv){

           isBgr = true;

           break;

       }

   }

   if(isBgr)

       d.resize(abs(floor(maxv)), 0);

   else{

       c.resize(max(n, m));

       for (int i = 0; i < c.size(); i++) {

           if(i > n)

               c[i] = b[i];

           else if(i > m)

               c[i] = a[i];

           else c[i] = a[i] + b[i];

       }

   }

   //2a

   int i01(0), i02(0), doba(1), dobb(1);

   bool is02 = false;

   for (int i = 0; i < n; i++) {

       if(a[i] == 0 && !is02){

           i01 = i;

           is02 = true;

       }

       else if(a[i] == 0 && is02)

           i02 = i;

   }

   if(i01 != 0){

       if(i02 == 0)

           i02 = n;

       for (int i(i01 + 1); i < i02; i++)

           doba*=a[i];

   }else doba = 0;

   //2b

   is02 = false;

   i01 = 0;

   i02 = 0;

   for (int i = 0; i < m; i++) {

       if(b[i] == 0 && !is02){

           i01 = i;

           is02 = true;

       }

       else if(b[i] == 0 && is02)

           i02 = i;

   }

   if(i01 != 0){

       if(i02 == 0)

           i02 = m;

       for (int i(i01 + 1); i < i02; i++)

           dobb*=b[i];

   }else dobb = 0;

   cout << doba << ' ' << dobb;

   //3

   sort(a.begin(), a.end());

   sort(b.begin(), b.end());

   return 0;

}


kovalenkoaleksandra2: Спасибо большое))) но оно что-то не то выбивает
dsxakep: В каком задании не то, что надо? Мб помогу
kovalenkoaleksandra2: ну выбивает в итоге просто 0 0 и все
dsxakep: Це добутки, я так зрозумів. Ну, в умові там було порахувати добуток від першого елементу, який дорівнює 0 до другого такого. Якщо один нуль тільки, то від наступного елемента до кінця. А якщо ні одного з них немає, то я написав, щоб добуток був рівним нулю. Я так зрозумів цю умову і так зробив
Похожие вопросы
Предмет: Русский язык, автор: 2виктория
Предмет: Английский язык, автор: mama432