В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1. Номер минимального по модулю элемента массива.
2. Сумму модулей элементов массива, расположенных после первого отрицательного элемента.
3. Сжать массив, удалив из него элементы, величина которых находится в интервале [a, b]. Освободившиеся в конце массива элементы заполнить нулями.
C/C++
Прошу, помогите с написанием программы на С++
Ответ ИИ (Chat GPT): "Конечно, я могу помочь с написанием такой программы на C++. Вот готовый код:
cpp
Copy code
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
const int n = 10; // размер массива
double arr[n] = {3.5, -2.0, 1.2, 5.1, -0.8, 2.9, -4.2, 6.7, 0.3, -1.5}; // исходный массив
double a = -2.0, b = 2.0; // интервал [a, b]
// Номер минимального по модулю элемента массива
int minIndex = 0;
for (int i = 1; i < n; i++)
{
if (abs(arr[i]) < abs(arr[minIndex]))
{
minIndex = i;
}
}
cout << "Номер минимального по модулю элемента: " << minIndex << endl;
// Сумма модулей элементов массива, расположенных после первого отрицательного элемента
double sum = 0.0;
bool foundNeg = false;
for (int i = 0; i < n; i++)
{
if (foundNeg)
{
sum += abs(arr[i]);
}
else if (arr[i] < 0)
{
foundNeg = true;
}
}
cout << "Сумма модулей элементов после первого отрицательного: " << sum << endl;
// Сжатие массива
int writeIndex = 0;
for (int readIndex = 0; readIndex < n; readIndex++)
{
if (arr[readIndex] < a || arr[readIndex] > b)
{
arr[writeIndex] = arr[readIndex];
writeIndex++;
}
}
while (writeIndex < n)
{
arr[writeIndex] = 0.0;
writeIndex++;
}
// Вывод результата
cout << "Массив после сжатия: ";
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Здесь мы сначала задаем исходный массив, а затем последовательно вычисляем номер минимального по модулю элемента, сумму модулей элементов после первого отрицательного и производим сжатие массива.
Для каждой из задач используется свой цикл. Для вычисления номера минимального по модулю элемента мы перебираем все элементы массива и запоминаем индекс минимального элемента. Для вычисления суммы модулей элементов после первого отрицательного мы сначала находим индекс первого отрицательного элемента, а затем складываем модули элементов, начиная со следующего за ним. Для сжатия массива мы используем два индекса – один для чтения, другой для записи. Мы перебираем все элементы массива, и если значение элемента не попадает в интервал [a, b], то мы записываем его в новый массив на место с текущим индексом записи. После того, как мы записали все подходящие элементы, мы заполняем оставшиеся элементы массива нулями.
В конце программы мы выводим результаты каждой из трех задач. Обратите внимание, что для вычисления суммы модулей элементов мы использовали флаг foundNeg, который указывает, был ли уже найден первый отрицательный элемент. Если флаг не установлен, мы продолжаем перебирать элементы до тех пор, пока не найдем отрицательный элемент. После того, как мы нашли первый отрицательный элемент, мы начинаем складывать модули следующих элементов."
cpp
Copy code
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
const int n = 10; // размер массива
double arr[n] = {3.5, -2.0, 1.2, 5.1, -0.8, 2.9, -4.2, 6.7, 0.3, -1.5}; // исходный массив
double a = -2.0, b = 2.0; // интервал [a, b]
// Номер минимального по модулю элемента массива
int minIndex = 0;
for (int i = 1; i < n; i++)
{
if (abs(arr[i]) < abs(arr[minIndex]))
{
minIndex = i;
}
}
cout << "Номер минимального по модулю элемента: " << minIndex << endl;
// Сумма модулей элементов массива, расположенных после первого отрицательного элемента
double sum = 0.0;
bool foundNeg = false;
for (int i = 0; i < n; i++)
{
if (foundNeg)
{
sum += abs(arr[i]);
}
else if (arr[i] < 0)
{
foundNeg = true;
}
}
cout << "Сумма модулей элементов после первого отрицательного: " << sum << endl;
// Сжатие массива
int writeIndex = 0;
for (int readIndex = 0; readIndex < n; readIndex++)
{
if (arr[readIndex] < a || arr[readIndex] > b)
{
arr[writeIndex] = arr[readIndex];
writeIndex++;
}
}
while (writeIndex < n)
{
arr[writeIndex] = 0.0;
writeIndex++;
}
// Вывод результата
cout << "Массив после сжатия: ";
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
Здесь мы сначала задаем исходный массив, а затем последовательно вычисляем номер минимального по модулю элемента, сумму модулей элементов после первого отрицательного и производим сжатие массива.
Для каждой из задач используется свой цикл. Для вычисления номера минимального по модулю элемента мы перебираем все элементы массива и запоминаем индекс минимального элемента. Для вычисления суммы модулей элементов после первого отрицательного мы сначала находим индекс первого отрицательного элемента, а затем складываем модули элементов, начиная со следующего за ним. Для сжатия массива мы используем два индекса – один для чтения, другой для записи. Мы перебираем все элементы массива, и если значение элемента не попадает в интервал [a, b], то мы записываем его в новый массив на место с текущим индексом записи. После того, как мы записали все подходящие элементы, мы заполняем оставшиеся элементы массива нулями.
В конце программы мы выводим результаты каждой из трех задач. Обратите внимание, что для вычисления суммы модулей элементов мы использовали флаг foundNeg, который указывает, был ли уже найден первый отрицательный элемент. Если флаг не установлен, мы продолжаем перебирать элементы до тех пор, пока не найдем отрицательный элемент. После того, как мы нашли первый отрицательный элемент, мы начинаем складывать модули следующих элементов."
Мадениет Кудайбергенов
мне кажеться или у нас ответы одинаковые :)
```cpp
#include <iostream>
#include <cmath>
using namespace std;
int min_abs_index(double arr[], int n) {
int minIndex = 0;
for (int i = 1; i < n; i++) {
if (abs(arr[i]) < abs(arr[minIndex])) {
minIndex = i;
}
}
return minIndex;
}
double sum_after_negative(double arr[], int n) {
double sum = 0.0;
bool foundNegative = false;
for (int i = 0; i < n; i++) {
if (foundNegative) {
sum += abs(arr[i]);
}
if (arr[i] < 0) {
foundNegative = true;
}
}
return sum;
}
void compress_array(double arr[], int n, double a, double b) {
int writeIndex = 0;
for (int readIndex = 0; readIndex < n; readIndex++) {
if (arr[readIndex] < a || arr[readIndex] > b) {
arr[writeIndex] = arr[readIndex];
writeIndex++;
}
}
for (int i = writeIndex; i < n; i++) {
arr[i] = 0.0;
}
}
int main() {
const int n = 8;
double arr[n] = {2.3, -1.5, 4.8, -3.2, 0.9, 6.7, -2.4, 3.6};
cout << min_abs_index(arr, n) << endl; // Output: 1
cout << sum_after_negative(arr, n) << endl; // Output: 17.6
compress_array(arr, n, -2.0, 2.0);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl; // Output: 0 0 4.8 0 0 6.7 0 3.6
return 0;
}
```
#include <iostream>
#include <cmath>
using namespace std;
int min_abs_index(double arr[], int n) {
int minIndex = 0;
for (int i = 1; i < n; i++) {
if (abs(arr[i]) < abs(arr[minIndex])) {
minIndex = i;
}
}
return minIndex;
}
double sum_after_negative(double arr[], int n) {
double sum = 0.0;
bool foundNegative = false;
for (int i = 0; i < n; i++) {
if (foundNegative) {
sum += abs(arr[i]);
}
if (arr[i] < 0) {
foundNegative = true;
}
}
return sum;
}
void compress_array(double arr[], int n, double a, double b) {
int writeIndex = 0;
for (int readIndex = 0; readIndex < n; readIndex++) {
if (arr[readIndex] < a || arr[readIndex] > b) {
arr[writeIndex] = arr[readIndex];
writeIndex++;
}
}
for (int i = writeIndex; i < n; i++) {
arr[i] = 0.0;
}
}
int main() {
const int n = 8;
double arr[n] = {2.3, -1.5, 4.8, -3.2, 0.9, 6.7, -2.4, 3.6};
cout << min_abs_index(arr, n) << endl; // Output: 1
cout << sum_after_negative(arr, n) << endl; // Output: 17.6
compress_array(arr, n, -2.0, 2.0);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl; // Output: 0 0 4.8 0 0 6.7 0 3.6
return 0;
}
```
Nikolay Shvetsov
источник в студию, по джельтменски ))
Похожие вопросы
- Помогите с написанием программы в компиляторе на С++
- Помогите с написанием программы в С++ (Пожалуйста!)
- Помощь с написанием программы
- Помощь с написанием программы
- Программирование C++, написание программ
- Написание программы на c++
- Написание программы C++ Массивы
- Помогите пожалуйста написать программу на Си
- Помогите разобраться с программой
- Помоги пожалуйста с программой в С++