Одномерный массив, проблема в умножении..

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
rodin_jr
Сообщения: 6
Зарегистрирован: 21 фев 2011, 21:06

Код: Выделить всё

#include <iostream.h>
#include <math.h>

void main()
{
const int k=5;
int a[k];
int i,j,l;
int prz=1;

for (l=0; l<k; l++){
	cout << l+1 << ":";
	cin >> a[l];
}
int min= a[0];
for (j=1; j<k; j++){
	if (a[j]<min) min= a[j];
}
cout << "Minimal'nyi element massiva= " << min << endl;

int max= a[0];
for (i=1; i<k; i++){
	if (a[i]>max) max= a[i];
}
	cout << "Maksimal'nyi element massiva= " << max << endl;

for (int t= min+1; t <max; t++){
		prz= prz* a[t];
}
cout << "Proizvedenie elementov= " << prz << endl;
}
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

rodin_jr
на самом деле, проблема в подсветке и форматировании кода.
А еще, стоит подсказать нам какое у вас задание.
Догадаюсь, надо найти произведение элементов массива, расположенных между минимум и максимум(такая задача встречается в интернетах чуть реже чем постоянно).
приведу пример как работает ваша программа
массив: 1,2,-2,100.
всего 4 элемента. min=-2, max=100. по-любому a[min+1]=a[-1] завершится с ошибкой, a[max-1]=a[99] - тоже самое.
Вам надо искать индекс минимума и индекс максимума(назовем их imax и imin) и обращаться к a[imax] и a[imin]

Код: Выделить всё

#include <math.h>
а эта библиотека у вас неиспользуется
Приглашаю на свой блог о программировании: pro-prof.com
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Код: Выделить всё

#include <iostream.h>

int main(){
	const int k=5;
	int a[k],
		i,imax,imin,
		p;

	for (i=0; i<k; i++){
		cout << i+1 << ":";
		cin >> a[i];
	}

	imin=0;
	for(i=1; i<k; i++)
		if(a[i]<a[imin]) 
			imin=i;
	cout << "Minimal'nyi element massiva= " << a[imin] << endl;

	imax=0;
	for(i=1; i<k; i++)
		if(a[i]>a[imax]) 
			imax=i;
	cout << "Maksimal'nyi element massiva= " << a[imax] << endl;

	if(imin>imax){
		imin+=imax;
		imax=imin-imax;
		imin-=imax;
	}

	p=1;
	for(i=imin+1;i<imax;i++)
		p*=a[i];
	cout << "Proizvedenie elementov= " << p << endl;

	return 0;
} 
старался сохранить код rodin_jr
Приглашаю на свой блог о программировании: pro-prof.com
rodin_jr
Сообщения: 6
Зарегистрирован: 21 фев 2011, 21:06

Задание:
найти произведение элементов массива, между его минимальным и максимальным элементом.
Спасибо большое за помощь!))
rodin_jr
Сообщения: 6
Зарегистрирован: 21 фев 2011, 21:06

if(imin>imax){
imin+=imax;
imax=imin-imax;
imin-=imax;
}

а что происходит вот здесь?
если можно, то с коментами)
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Код: Выделить всё

if(imin>imax){
imin+=imax;
imax=imin-imax;
imin-=imax;
}
обмен значений двух переменных через сумму
например А=2, В=3
А+=В // А=2+3=5, В=3
В=А-В // В=5-3=2, А=5
А-=В // А=5-2=3, В=2
можно заменить на обмен со вспомогательной переменной, гугл должен помочь :)
Приглашаю на свой блог о программировании: pro-prof.com
rodin_jr
Сообщения: 6
Зарегистрирован: 21 фев 2011, 21:06

Ага, ну вобщем-то понял)
спасибо за разъяснение)
THuND3Rb0LT
Сообщения: 22
Зарегистрирован: 16 авг 2009, 13:02
Откуда: Dnepropetrovsk
Контактная информация:

Добавьте еще две переменные j1,j2;
if (a[j]<min) { min= a[j];j1=j}
...
if (a>max) { max= a;j2=i}
...
for (int t= j1; t <j2; t++)
...
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

THuND3Rb0LT
зачем их добавлять?
j1 и j2 которые предлагаете добавить это индексы минимума и максимума, в том коде что я предложил, ими являются переменные imax и imin (с чуть более говорящими названиями чем j1 и j2 xD ).
Что вы предлагаете изменить?
Приглашаю на свой блог о программировании: pro-prof.com
Ответить