Top.Mail.Ru
Ответы

C++ В одномерном массиве, состоящем из n вещественных элементов, вычислить

В одномерном массиве, состоящем из n вещественных элементов,
вычислить:
а) номер минимального элемента массива;
б) сумму элементов массива, расположенных между первым и вторым
отрицательными элементами;
в) преобразовать массив таким образом, чтобы сначала располагались все
элементы, модуль которых не превышает 1, а потом — все остальные.

По дате
По рейтингу
Аватар пользователя
Новичок

У Вас плохо прописаны спецификации к задаче (как задаётся массив, нужно ли его выводить на печать до и после трансформации, что делать, если первые два отрицательных элемента стоят рядом или их вообще нет и т.д.), а сочинять их на ходу как правило всегда мало охотников. И ещё такой момент: вот у меня всё работает корректно, потому что хорошо продумано, а Вы хоть что-то поймёте из такого, например, кода?

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
 #include <ctime> 
#include <cstdlib> 
#include <iomanip> 
#include <iostream> 
using namespace std; 
void print_array(string s, double *A, int n) 
{ 
    int i, j = 0; 
    cout << s << setprecision(3) << endl; 
    for (i = 0; i < n; i++) 
    { 
	cout << setw(8) << A[i]; 
	j++; 
	if (j == 10) 
	{ 
	    j = 0; 
	    cout << endl; 
	} 
     } 
    if (j) cout << endl; 
} 
int main() 
{ 
    int i, indmini = 0, j, k = 0, l = 1, n, B[2]; 
    double a, b, mini, s = 0; 
    cout << "\033[1ma b n: " << fixed; 
    cin >> a >> b >> n; 
    double *A = new double [n]; 
    srand(time(nullptr)); 
    mini = A[0] = (b - a) * rand() / RAND_MAX + a; 
    if (A[0] < 0.) 
    { 
	B[k] = 0; 
	k++; 
    } 
    for (i = 1; i < n; i++) 
    { 
	A[i] = (b - a) * rand() / RAND_MAX + a; 
	if (A[i] < mini) 
	{ 
	    mini = A[i]; 
	    indmini = i; 
	} 
	if (k < 2) if (A[i] < 0.) 
	{ 
	    B[k] = i; 
	    k++; 
	} 
    } 
    if (k == 2) { if (B[1] - B[0] > 1) 
    for (i = B[0] + 1; i < B[1]; i++) s += A[i]; 
    else l = 0; } else l = 0; 
    print_array("Array:", A, n); 
    cout << "min=" << setprecision(10) 
    << mini << ", index=" << indmini << 
    endl << B[0] << ' ' << B[1] << ": "; 
    if (l) cout << s << endl; 
    else cout << "no elements" << endl; 
    for (i = 1; i < n; i++) for (j = n - 1; j >= i; j--) 
    if (abs(A[j - 1]) > 1. && abs(A[j]) <= 1.) 
        swap(A[j - 1], A[j]); 
    print_array("Array after sorting", A, n); 
    delete [] A; cin.get();
    cin.get(); return 0; 
} 

Сортировка, если что, пузырьковая, но если даже непонятно причём тут сортировка (а она здесь не по возрастанию или убыванию, а по следованию), то после этого что-то даже обсуждать бессмысленно...

Аватар пользователя
Мыслитель
123
 vector<int> x = { 2,2,1,4 }; 
int min = find(x.begin(),x.end(),*min_element(begin(x), end(x))) - x.begin(); 
cout << min; 

вот как сделать "a". Остальное делай сам

Аватар пользователя
Ученик

ясно. Ну так и вычисляй