Skip to content

Одномерный массив. Задача 1

Доброго времени суток, уважаемые читатели, наша рубрика стартует с примеров на одномерный массив, различные преобразования элементов и т.д.

Сегодня мы разберем следующую задачу:

В одномерном массиве, состоящем из 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 индекса: один начинается с нуля, другой с середины, далее в цикле записываем элементы соответственно в начало и в середину. Далее выводим полученный массив и все проверяем.

На этом все, спасибо за внимание, вопросы задавайте в комментариях.

Скачать исходники

Опубликовано вC++

Будьте первым, кто оставит комментарий

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *