Доброго времени суток, уважаемые читатели, наша рубрика стартует с примеров на одномерный массив, различные преобразования элементов и т.д.
Сегодня мы разберем следующую задачу:
В одномерном массиве, состоящем из n целых элементов, вычислить:
1) Номер максимального элемента массива
2) Произведение элементов массива, расположенных между первым и вторым нулевыми элементами.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине — элементы, стоявшие в четных позициях.
Ну что ж, начнем:
#include <conio.h> #include <iostream> #include <cstdlib> #include <ctime> using namespace std;
В самом начале необходимо подключить стандартные библиотеки(первые 3 нужны для Windows, а 4 нужна для рандомного заполнения массива) и пространство имен.
Перейдем к main:
int main() { setlocale(LC_ALL, "Russian"); srand(time(0)); const int N(20); int A[N]; int i; for(i = 0; i < N; i++) { A[i] = rand()%11; cout << A[i] << " "; } int i_one, i_two, result = 1; int Max = A[0]; int i_max = 0;
Первой строчкой мы указываем компилятору, что хотим выводить сообщения на экран на русском языке. Далее идет объявление массива и заполнение его рандомными числами, которые при каждом запуске программы будут разными(функция srand(time) отвечает за это).
Также объявим переменные для индексов максимального элемента, 1 и 2 нулевых элементов и присвоим максимуму — значение первого элемента массива.
for(i = 1; i < N; i ++) { if(Max < A[i]) { Max = A[i]; i_max = i; } } cout << "\n\n максимальное число в массиве: " << Max << endl; cout << " индекс макс. элемента: " << i_max << endl << endl;
В этой части кода находим максимальный элемент, его индекс, и все это выводим на экран.
for(i = 0; i < N; i ++) { if(A[i] == 0) { i_one = i; // 1 нулевой элемент i = N; //заканчиваем цикл } } if(i_one < 0) { cout << " нулей нет, рекомендую перезапустить программу" << endl; return -1; } else { cout << " индекс 1 нулевого элемента: " << i_one << endl; } for(i = i_one + 1; i < N; i ++) { if(A[i] == 0) { i_two = i; // 2 нулевой элемент i = N; //заканчиваем цикл } } if(i_two < i_one) { cout << " 2 нуля нету, результат будет неверным, рекомендую перезапустить программу " << endl; // return -1; } else { cout << " индекс 2 нулевого элемента: " << i_two << endl; } for(i = i_one + 1; i < i_two; i ++) { result *= A[i]; } if(i_two - i_one == 1) result = 0; cout << " перемножение элементов между индексами: " << result << endl << endl ;
Перебираем в цикле наш массив до первого нулевого элемента и выходим из цикла, обрабатываем возможные ошибки. Далее опять перебираем массив начиная с индекса первого нулевого элемента до того как достигнем второго нулевого элемента. Незабываем про возможные ошибки, ведь мы же работаем с рандомными числами!
После, присваиваем переменной result значение умножения элементов между 2 индексами, и выводим.
И наконец:
int B[N], j = N/2, k = 0; for(i= 0; i < N; i ++) { if((i+1)%2 ==0) { B[j] = A[i]; j++; } else { B[k] = A[i]; k++; } } for(i=0;i< N; i++) { cout << B[i]<< " "; } _getch(); // нужен для Windows return 0; }
В последней части кода мы создаем новый массив, и 2 индекса: один начинается с нуля, другой с середины, далее в цикле записываем элементы соответственно в начало и в середину. Далее выводим полученный массив и все проверяем.
На этом все, спасибо за внимание, вопросы задавайте в комментариях.
Скачать исходники
Будьте первым, кто оставит комментарий