Формулировка задачи:
Дан массив целых чисел, состоящий из 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 |
|||
0 |
0 / 0 / 0 Регистрация: 12.11.2015 Сообщений: 15 |
|
23.04.2012, 17:00 |
3 |
Спасибо огромное, сам бы не додумался)
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[k–1]=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!=n–1) // если справа от него есть элементы for (int i=0; i<3; i++) // сдвиг три раза { int t=a[imax+1]; for (int j=imax+1; j<n–1; j++) // сдвиг a[j]=a[j+1]; a[n–1]=t; } if (imax!=0) // если слева от него есть элементы { int t=a[imax–1]; for (int j=imax–1; j>0; j—) // сдвиг a[j]=a[j–1]; 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==i2–1) 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=n–1; 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; |