Помогите с решением

include<iostream>

include<conio.h>

include<math.h>

using namespace std;
int main()
{
const int N = 10;
float a[N];
int g = -2;
for (int i = 0; i < N; i++)
{

    cout << "a[" << i << "]= ";
    cin >> a[N];
}

for (int i = 0; i < N; i++)
{
    for (int j = 0; j < N; j++)
    if (a[i] < g) 
    {   
        cout << (a[i] * a[i]);

    }
    else

        {
        cout << (a[i] * 0.1);
        }

}

for (int i = 0; i< N; i++)
{
    cout << a[i]<<endl;
}

_getch();
return 0;

}

Дан массив из 10 элементов.Если в данной последовательности есть числа меньше -2, то все отрицательные заменить с квадратами, иначе все элементы массива умножить на 0,1

  1. При вводе элементов массива у тебя все значения вводятся в ячейку a[N], которая находится за границей массива.
  2. Оператор cout << (a[i] * a[i]); только выводит значение на экран, но не влияет на содержимое a[i].
  3. Со вложенными циклами ты вообще перемудрил.

Вот так работает:

#include <iostream>
#include <conio.h>

using namespace std;

int main() {

    const int N = 10;
    const float g = -2;
    float a[N];

    // ввод элементов массива
    for (int i = 0; i < N; i++) {
        cout << "a[" << i << "] = ";
        cin >> a[i];
    }

    // проверить все элементы массива
    bool sqr_on = false;
    for (int i = 0; i < N; i++) {
        if (a[i] < g) {
            sqr_on = true;      // условие выполнено
            break;              // дальше можно не проверять
        }
    }

    // обработать все элементы массива
    if (sqr_on)
        for (int i = 0; i < N; i++)
            a[i] *= a[i];
    else
        for (int i = 0; i < N; i++)
            a[i] *= 0.1f;

    // вывод элементов массива
    for (int i = 0; i < N; i++) {
        cout << a[i] << endl;
    }

    _getch();
    return 0;
}
//g++  5.4.0

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
    std::vector<double> vec{0.5, 4.3, -1.7, 8.0, -1.4, 2.4};
    if (
        std::find_if(
            vec.begin(), 
            vec.end(), 
            [](double x) { return (x < -2); }
        ) == vec.end()
    ){
        std::transform(
            vec.begin(), 
            vec.end(), 
            vec.begin(), 
            [](double x) { return ((x < 0)? x * x: x); }
        );
    } else {
        std::transform(
            vec.begin(), 
            vec.end(), 
            vec.begin(), 
            [](double x) { return (x * 0.01); }
        );
    }

    for (auto e: vec) {
        std::cout << e << ", ";
    }

}

http://rextester.com/HUMU96001

Ашипся немножко. Невнимательно прочитал задание. Квадраты должны быть только для отрицательных элементов. Обработка массива должна быть такая:

    // обработать все элементы массива
    if (sqr_on)
        for (int i = 0; i < N; i++) {
            if (a[i] < 0.0f)
                a[i] *= a[i];
        }
    else
        for (int i = 0; i < N; i++)
            a[i] *= 0.1f;

Croessmah, у тебя тоже ашипки.

  1. В первом if должно быть != vec.end()
  2. Во втором transform в лямбде должен быть множитель 0.1

А чего с последним for расслабился? Даёшь функциональное программирование в массы!

std::for_each(vec.begin(), vec.end(), [](double x) { std::cout << x << ", "; });

у тебя тоже ашипки.

Точно! Благодарю за пинок.
Видимо, я тоже невнимательный. )))

А чего с последним for расслабился?

Не хотелось страдать маразмом.

Даёшь функциональное программирование в массы!

Даёшь!

std::copy(vec.begin(), vec.end(), std::ostream_iterator<double>(std::cout, ", "));

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.