Как найти произведение нечетных элементов массива

Формулировка задачи:

Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти произведение элементов, имеющих нечетное значение

Код к задаче: «Найти произведение нечетных элементов массива»

textual

var
  a:array[1..10] of integer;
  i:integer;
  s:real;
  b:boolean;
begin
  write('Введите 10 элементов массива:');
  s:=1.0;b:=false;
  for i:=1 to 10 do begin read(a[i]);if odd(a[i]) then begin s:=s*a[i];b:=true;end;end;
  if b then writeln('Произведение=',s:0:0) else writeln('Все числа четные');
end.

Полезно ли:

9   голосов , оценка 4.111 из 5

0 / 0 / 0

Регистрация: 12.11.2015

Сообщений: 15

1

Необходимо найти произведение нечётных элементов массива.

23.04.2012, 02:26. Показов 20660. Ответов 4


Студворк — интернет-сервис помощи студентам

Довольно заезженная тема, но нигде не смог найти именно этого задания..)
само задание:
Описать и ввести одномерный массив, найти произведение его нечётных элементов.
знаю, нуб, но буду очень благодарен



0



RamonN

32 / 32 / 19

Регистрация: 13.07.2011

Сообщений: 140

23.04.2012, 02:43

2

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program zada4a;
Uses
  Crt;
Var
  i: byte;
  mas: array[1..50] of integer;
  proiz: integer;
Begin
  proiz := 1;
  for i:= 1 to 50 do
    begin
      read(mas[i]);
      if (i mod 2 <> 0) then
        proiz := proiz * mas[i];
    end;
  writeln(proiz);
End.



0



0 / 0 / 0

Регистрация: 12.11.2015

Сообщений: 15

23.04.2012, 17:00

3

Спасибо огромное, сам бы не додумался)

Цитата
Сообщение от RamonN
Посмотреть сообщение

if (i mod 2 <> 0) then

только тут “if (mas[i] mod 2 <> 0)”
иначе, умножались бы эл-ты с нечётными индексами, кажись



0



32 / 32 / 19

Регистрация: 13.07.2011

Сообщений: 140

23.04.2012, 18:44

4

Т.е. вам нужны элементы массива, знчения которых нечетные, а не сами элементы(1,3,5 и т.д.)? Тогда да нужно будет заменить на mas[i]



0



0 / 0 / 0

Регистрация: 03.11.2012

Сообщений: 35

02.04.2013, 19:52

5

А можно эти произ. нечетных элементов массива написать на другой массив и как это написать?



0



Данная тема основывается на теме: Массивы. Одномерные массивы. Инициализация массива


Содержание

  • 1. Нахождение сумм и произведений элементов массива. Примеры
  • 2. Нахождение максимального (минимального) элемента массива. Примеры
  • 3. Сортировка массива методом вставки
  • 4. Поиск элемента в массиве. Примеры
  • Связанные темы

Поиск на других ресурсах:

1. Нахождение сумм и произведений элементов массива. Примеры

Пример 1. Задан массив A, содержащий 100 целых чисел. Найти сумму элементов этого массива. Фрагмент кода, решающего эту задачу

// сумма элементов массива A из 100 целых чисел
int A[100];
int suma; // переменная, содержащая сумму
int i;    // дополнительная переменная

// ввод массива A
// ...

// Вычисление суммы
suma = 0; // обнулить сумму
for (i=0; i<100; i++)
    suma += A[i];

Перебор всех элементов массива выполняется в цикле for.

Переменная sum сохраняет результирующее значение суммы элементов массива. Переменная i есть счетчиком, определяющим индекс элемента массива A[i].



Пример 2. Задан массив B, содержащий 20 вещественных чисел. Найти сумму элементов массива, которые лежат на парных позициях. Считать, что позиции 0, 2, 4 и т.д. есть парными.

// сумма элементов массива B
// лежащих на парных позициях
float B[20];
float sum; // переменная, содержащая сумму
int i; // дополнительная переменная

// ввод массива
// ...

// Вычисление суммы
sum = 0; // обнулить сумму
for (i=0; i<20; i++)
    if ((i%2)==0)
        sum += B[i];

В этом примере выражение

(i%2)==0

определяет парную позицию (парный индекс) массива B. Если нужно взять нечетные позиции, то нужно написать

(i%2)==1

Пример 3. Задан массив, который содержит 50 целых чисел. Найти сумму положительных элементов массива.

// сумма положительных элементов массива
int A[50];
int sum; // переменная, содержащая сумму
int i; // дополнительная переменная

// ввод массива
// ...

// Вычисление суммы
sum = 0; // обнулить сумму
for (i=0; i<50; i++)
    if (A[i]>0)
        sum = sum + A[i];

Пример 4. Задан массив из 50 целых чисел. Найти произведение элементов массива, которые есть нечетными числами.

// произведение нечетных элементов массива
int A[50];
int d; // переменная, содержащая произведение
int i; // вспомогательная переменная

// ввод массива
// ...

// Вычисление произведения
d = 1; // начальная установка переменной d
for (i=0; i<50; i++)
    if ((A[i]%2)==1)
        d = d * A[i];

Чтобы определить, есть ли элемент массива A[i] нечетным, нужно проверить условие

(A[i]%2)==1

Если условие выполняется, то элемент массива есть нечетное число.

2. Нахождение максимального (минимального) элемента массива. Примеры

Пример 1. Задан массив из 30 вещественных чисел. Найти элемент (индекс), имеющий максимальное значение в массиве.

// поиск позиции (индекса), содержащего максимальное значение
float B[30];
float max; // переменная, содержащая максимум
int index; // позиция элемента, содержащего максимальное значение
int i; // дополнительная переменная

// ввод массива
// ...

// поиск максимума
// установить максимум как 1-й элемент массива
index = 0;
max = B[0]; 
for (i=1; i<30; i++)
    if (max<B[i]) 
    { 
        max = B[i]; // запомнить максимум
        index = i;  // запомнить позицию максимального элемента
    }

В вышеприведенном примере переменная max содержит максимальное значение. Переменная index содержит позицию элемента, который имеет максимальное значение. В начале переменной max присваивается значение первого элемента массива. Затем, начиная со второго элемента, происходит прохождение всего массива в цикле for. Одновременно проверяется условие

if (max<B[i])

Если условие выполняется (найден другой максимум), тогда новое значение максимума фиксируется в переменных max и index.

Вышеприведенный пример находит только один максимум. Однако, в массивах может быть несколько максимальных значений. В этом случае для сохранения позиций (индексов) максимальных значений нужно использовать дополнительный массив как показано в следующем примере.

Пример 2. Задан массив содержащий 50 целых чисел. Найти позицию (позиции) элемента, который имеет минимальное значение. Если таких элементов несколько, сформировать дополнительный массив индексов.

// поиск позиций (индексов), содержащих минимальное значение
int A[50];
int min; // переменная, содержащая минимальное значение
int INDEXES[50]; // позиции элементов, содержащих минимальное значение
int n; // число одинаковых минимальных значений
int i; // дополнительная переменная


// ввод массива
// ...

// 1. Поиск минимального значения
// установить минимальное значение в первом элементе массива
min = A[0];
for (i=1; i<50; i++)
    if (min>A[i])
        min = A[i]; // запомнить минимальное значение

// 2. Формирование массива
n = 0; // обнулить счетчик в массиве INDEXES
for (i=0; i<50; i++)
    if (min == A[i])
        {
            n++; // увеличить число элементов в INDEXES
            INDEXES[n-1] = i; // запомнить позицию
        }

listBox1->Items->Clear();

// 3. Вывод массива INDEXES в listBox1
for (i=0; i<n; i++)     
    listBox1->Items->Add(INDEXES[i].ToString());

В вышеприведенном листинге сначала ищется минимальное значение min.

На втором шаге формируется массив INDEXES, в котором число элементов записывается в переменную n. Происходит поиск минимального значения в массиве A с одновременным формированием массива INDEXES.

На третьем шаге приведен пример, как вывести массив INDEXES в элементе управления listBox1(ListBox).

3. Сортировка массива методом вставки

Пример. Пусть дан массив A, содержащий 10 целых чисел. Отсортировать элементы массива в нисходящем порядке с помощью метода вставки.

// сортировка массива методом вставки
int A[10];
int i, j; // дополнительные переменные - счетчики
int t; // дополнительная переменная

// ввод массива A
// ...

// сортировка
for (i=0; i<9; i++)
    for (j=i; j>=0; j--)
        if (A[j]<A[j+1])
        {
            // поменять местами A[j] и A[j+1]
            t = A[j];
            A[j] = A[j+1];
            A[j+1] = t;
        }

4.  Поиск элемента в массиве. Примеры

Пример 1. Определить, находится ли число k в массиве M состоящем из 50 целых чисел.

// определение наличия заданного числа в массиве чисел
int M[50];
int i;
int k; // искомое значение
bool f_is; // результат поиска, true - число k есть в массиве, иначе false

// ввод массива M
// ...
// ввод числа k
// ...

// поиск числа в массиве
f_is = false;
for (i=0; i<50; i++)
    if (k==M[i])
    {
        f_is = true; // число найдено
        break; // выход из цикла, дальнейший поиск не имеет смысла
    }

// вывод результата
if (f_is)
    label1->Text = "Число " + k.ToString() + " есть в массиве M.";
else
    label1->Text = "Числа " + k.ToString() + " нет в массиве M.";

Пример 2. Найти все позиции вхождения числа k в массиве M состоящим из 50 целых чисел.

// определение всех позиций заданного числа в массиве чисел
int M[50]; // массив чисел
int i; // вспомогательная переменная
int k; // искомое значение
int INDEXES[50]; // искомый массив позиций вхождения числа k
int n; // количество найденных позиций или количество элементов в массиве INDEXES

// ввод массива M
// ...
// ввод числа k
// ...

// поиск числа k в массиве M и одновременное формирование массива INDEXES
n = 0;
for (i=0; i<50; i++)
    if (k==M[i])
    {
        // число найдено
        n++;
        INDEXES[n-1] = i;
    }

// вывод результата в listBox1
listBox1->Items->Clear();

for (i=0; i<n; i++)
    listBox1->Items->Add(INDEXES[i].ToString());


Связанные темы

  • Массивы. Часть 1. Определение массива в C++. Одномерные массивы. Инициализация массива
  • Массивы. Часть 2. Двумерные массивы. Массивы строк. Многомерные массивы


Условие задачи : Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-19, 26] . Найти произведение элементов с нечетными номерами.

Сложность : легкая.

Задача похожа на (эту), но там мы искали сумму четных элементов, так что будем опираться на неё.

Первое что мы сделаем мы создадим свой тип данных как и зачем читайте (тут) :

type

massiv =
array
[
1..100
]
of
integer
;

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

var

n,proizv,i :
integer
;

mass : massiv;

Теперь мы просим пользователя ввести размер массива, также нам нужно присвоить начальное значение нашей переменной proizv единицу, т.к. в неё мы будем заносить произведение, а если этого не сделать то произведение всегда будут равна 0. ВСЕГДА!!!

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

randomize;
// генератор случайных чисел.
write
(
'Введите размер массива : '
); readln(n);
proizv :=
1
;

Теперь цикл. Что мы будем в нём делать ?

  • Сначала мы присвоим значение элементу массива.
  • Выведем его на экран
  • И проверим на нечетность.
  • Условие нечетности :

    if
    (mass[i]
    mod
    2
    <>
    0
    )
    then

    proizv := proizv * mass[i];

    Оно противоположно четности, про неё читайте ( здесь )

    Сам цикл :

    for
    i:=
    1
    to
    n
    do

    begin

    mass[i] := random(
    46
    ) -
    19
    ;

    writeln
    (i,
    ' число : '
    , mass[i]);

    if
    (mass[i]
    mod
    2
    <>
    0
    )
    then

    proizv := proizv * mass[i]

    else

    writeln
    (
    'Число '
    ,mass[i],
    ' четное, умножено не БУДЕТ!!! '
    );

    end
    ;

    Думаю что тут всё понятно, единственное что может вызвать трудность это random(), если написать random(46), то число у нас будет от 0 до 46 , а чтобы было только до 26 мы вычитаем 19, чтобы понять попробуйте по подставляйте.

    Вот и всё задача решена.

    Весь код программы :

    uses
    crt;
    type

    massiv =
    array
    [
    1..100
    ]
    of
    integer
    ;
    var

    n,proizv,i :
    integer
    ;

    mass : massiv;
    begin

    clrscr;

    randomize;
    // генератор случайных чисел.

    write
    (
    'Введите размер массива : '
    ); readln(n);

    proizv :=
    1
    ;

    for
    i:=
    1
    to
    n
    do

    begin

    mass[i] := random(
    46
    ) -
    19
    ;

    writeln
    (i,
    ' число : '
    , mass[i]);

    if
    (mass[i]
    mod
    2
    <>
    0
    )
    then

    proizv := proizv * mass[i]

    else

    writeln
    (
    'Число '
    ,mass[i],
    ' четное, умножено не БУДЕТ!!! '
    );

    end
    ;

    writeln
    (
    'Произведение массива равно : '
    , proizv);

    readln;
    // чтобы программа не закрывалась.
    end
    .

    Предыдущая

    ПрограммированиеЗадачи по Pascal. Произведение эл-тов с четными номерами, которые больше t.

    Следующая

    ПрограммированиеЗадачи по Pascal. Сумма четных элементов массива.

    С++. Задачи с решениями. Одномерные массивы

    массивы

    к списку всех задач на массивы

    к списку всех задач

    1. Удалить в массиве все числа, которые повторяются более двух раз.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    int main()

    {

        int a[100];

        int n=10;

        int i, j, count=0;

        srand(time(NULL));

        for (i = 0; i < n; i++)

        {

            a[i]=rand()%20;

            cout<<setw(4)<<a[i];

        }

        cout<<endl;

        for (i = 0; i < n; i++)

        {

         count=1;

            for (j=i+1; j<n; j++)

            {

                if (a[j] == a[i])

                    count++;

            }

            if (count > 2)

            {

             int one=a[i];

             for (j=i; j<n; j++)

             {

             if (a[j]==one)

             {

             // удаляем

             for (int k=j+1; k<n; k++)

             {

             a[k1]=a[k];

             }

             n;

             j;

             }

             }

             i;

            }

        }

        // www.itmathrepetitor.ru

        if (n==0)

            cout<<“empty array”<<endl;

        else

        for (int p = 0; p < n; p++)

        {

            cout<<setw(4)<<a[p];

        }

        cout<<endl;

        getch();

        return 0;

    }

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    int main()

    {

    int* a;

    int n;

    // ввод n с проверкой

    do

    {

    cout<<“input n: “;

    cin>>n;

    }

    while (n<1);

    // выделение памяти

    a=new int [n];

    // ввод с консоли значений массива

    for (int i=0; i<n; i++)

    {

    cout<<“input a[“<<i<<“]: “;

    cin>>a[i];

    }

    //вывод исходного массива на экран

    cout<<“start: “<<endl;

    for (int i=0; i<n; i++)

    cout<<a[i]<<” “;

    cout<<endl;

    // поиск наибольшего нечетного

    int imax=1;

    for (int i=0; i<n; i++)

    if (a[i]%2==1)

    {

    if (imax==1)

    imax=i;

    else

    if (a[imax]<a[i])

    imax=i;

    }

    if (imax==1) // если нечетных нет вообще

    cout<<“no odd number”<<endl;

    else

    {   // вывод на консоль наибольшего нечетного

    cout<<“max odd number: “<<a[imax]<<endl;

    cout<<“index         : “<<imax<<endl;

    if (imax!=n1) // если справа от него есть элементы

    for (int i=0; i<3; i++) // сдвиг три раза

    {

    int t=a[imax+1];

    for (int j=imax+1; j<n1; j++) // сдвиг

    a[j]=a[j+1];

    a[n1]=t;

    }

    if (imax!=0) // если слева от него есть элементы

    {

    int t=a[imax1];

    for (int j=imax1; j>0; j) // сдвиг

    a[j]=a[j1];

    a[0]=t;

    }

    // вывод на консоль результат

    cout<<“end: “<<endl;

    for (int i=0; i<n; i++)

    cout<<a[i]<<” “;

    cout<<endl;

    }

    // удаление памяти

    delete [] a;

    getch();

    return 0;

    }

    3. Найдите сумму отрицательных элементов массива.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    int sum=0;

    for (int i=0; i<n; i++)

    {

       if (a[i]<0)

       {

          sum+=a[i];

       }

    }

    if (!sum)

    {

       cout<<“no numbers < 0”;

    }

    else

    {

      cout<<“sum = “<<sum;

    }

    4. Найдите произведение элементов массива с нечетными номерами.

    int p=1;

    for (int i=1; i<n; i+=2)

    {

       p*=a[i];

    }

    cout<<“answer: “<<p<<endl;

    5. Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, то выведите ноль.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    int i1=1, i2=1;

    for (int i=0; i<n; i++)

    {

      // www.itmathrepetitor.ru

      if (!a[i])

      {  

         if (i1==1)

             i1=i;

         else if (i2==1)

             i2=i;

         else

            break;

      }

    }

    if (i2==1)

    {

       cout<<0;

    }

    else

    {

       if (i1==i21)

         cout<<“no numbers between zeros”;

       else

       {

          int s=0;

          for (int i=i1+1; i<i2; i++)

               s+=a[i];

          cout<<“sum = “<<s;

       }

    }

    6. Найдите наибольший элемент массива.

    int max=0;

    for (int i=1; i<n; i++) {   if (a[i]>max)

       max=a[i];

    }

    cout<<“max: “<<max<<endl;

    7. Найдите наименьший четный элемент массива. Если такого нет, то выведите первый элемент.

    int imin=1;

    for (int i=0; i<n; i++) {  

       if ((!(a[i]%2) && (imin==1 || a[imin]>a[i]))

            imin=i;

    }

    if (imin==1)

      cout<<a[0];

    else

      cout<<a[imin]<<endl;

    8. Преобразовать массив так, чтобы сначала шли нулевые элементы, а затем все остальные.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    int i1=0, i2=n1;

    while (i1<i2)

    {

        // www.itmathrepetitor.ru

        while (i1 < i2 && !a[i1])

             i1++;

        while (i2 > i1 && a[i2])

            i2;

        if (i1 < i2)

        {

            int tmp=a[i1];

            a[i1]=a[i2];

            a[i2]=tmp;

        }

        i1++;

        i2;

    }

    9. Найдите сумму номеров минимального и максимального элементов.

    int imax=0, imin=0;

    for (int i=1; i < n; i++) {    

      if (a[i]>a[imax])

             imax=i;

        if (a[i]<a[imin])

             imin=i;

    }

    cout<<“answer: “<<imin+imax<<endl;

    10. Найдите минимальный по модулю элемент массива.

    int min=abs(a[0]);

    for (int i = 1; i < n; i++) {      

      if (min>abs(a[i]))

             min=a[i];

    }

    // www.itmathrepetitor.ru

    cout<<“abs min: “<<min<<endl;

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