Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2009, 18:14   #1
brain-bras
 
Регистрация: 04.05.2009
Сообщений: 3
По умолчанию непонятный баг

Код:
#include<iostream.h>
#include<math.h>
void mrecord(float*,int);
float min(float*, int);
void nulel(float *mas,int n);
float summ(float *mas, int n);
//==========================================================================
void main()
{
 int n,m;
 float masiv1[100],masiv2[100];
 float *mas1,*mas2;
 //float mn;
 cout<<"/n vv kool el 1-go mas /n ";
 cin>>n;mas1=&masiv1[n];
 cout<<"/n vv kool el 2-go mas /n ";
 cin>>m;mas2=&masiv2[m];
 mrecord(mas1,n);
 mrecord(mas2,m);
 cout<<"minimum 1-go= "<<min(mas1,n)<<endl;
 cout<<"minimum 2-go= "<<min(mas2,m)<<endl;
 cout<<"summa 1-go= "; nulel(mas1,n);

 cout<<endl<<"summa 2-go= ";
 nulel(mas2,m);

}
void mrecord(float *mas, int n)
{
 cout<<"/n vvod massiva /n";
 for(int i=0;i<=n-1;i++)
 {
  cin>>*(mas+i);
  cout<<endl<<*(mas+i)<<endl;
 }
}
float min(float *mas, int n)
{
 float minel;
 minel=*mas;
 for(int i=1;i<=n-1;i++)
 {
  if(minel>fabs(*(mas+i))) minel=*(mas+i);
 }
 return minel;
}
void nulel(float *mas,int N)
{
 float *pmin;
 int k;
 pmin=mas+N;
 for(int i=0;i<=N-1;i++)
 {
  if (*(mas+i)==0)
   {
   pmin=(mas+i);
   k=N-i;
   break;
   }
 }
 summ(pmin,k);
}

float summ(float *mas, int M)
{
 float Summa;
 Summa=0;
 for(int i=0;i<=M;i++)
 {
  Summa+=*(mas+i);
 // if (mas-masn==0) break;
 }
 cout<<Summa;
}

Ввести и обработать два одномерных массива, содержащие соответственно n целых и m вещественных компонентов. Вычислить:
1) минимальный по модулю элемент массива;
2) сумму модулей элементов массива, расположенных после первого элемента, равного нулю.
...
не могу понять в чём дело..
Почему один массив обрабатывается а другой не хочет.
загвоздка п последних двух функциях.!
Помогите кому не лень
Заранее Благодарен!!!
Изображения
Тип файла: jpg scr.jpg (13.6 Кб, 142 просмотров)
brain-bras вне форума Ответить с цитированием
Старый 14.10.2009, 19:34   #2
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

мне кажется, такие ошибки:

mas1=&masiv1[n]; - берется ссылка на последний элемент массива, можно использовать просто masiv1

cin>>*(mas+i); - в cin передается значение i-го элемента, используй mas[i]
Namolem вне форума Ответить с цитированием
Старый 14.10.2009, 19:37   #3
brain-bras
 
Регистрация: 04.05.2009
Сообщений: 3
По умолчанию

Namolem, дело в том что всё работает.
но как видно у меня 2 массива:
1-й считает
а второй.....error

если есть какие ещё предложения - обязательно выслушаю.
Спасибо.!
brain-bras вне форума Ответить с цитированием
Старый 14.10.2009, 20:08   #4
Namolem
Oo
Форумчанин
 
Аватар для Namolem
 
Регистрация: 10.10.2009
Сообщений: 350
По умолчанию

Код:
#include <iostream>
#include <cmath>
using namespace std;

// заполнение массива
void mrecord(float*,int);
// минимальный элемент
float min(float*, int);
// сумма модулей элементов после первого нулевого
float nulel(float *,int);
// вычисление суммы
float summ(float *, int ,int);
//==========================================================================
int main()
{
	int n,m;
	float masiv1[100],masiv2[100];
	cout<<"Количество элементов первого массива? > ";
	cin>>n;
	cout<<"Количество элементов второго массива? > ";
	cin>>m;
	mrecord(masiv1,n);
	mrecord(masiv2,m);
	cout	<<"Минимальный элемент первого массива: "<<min(masiv1,n)<<endl
			<<"Минимальный элемент второго массива: "<<min(masiv2,m)<<endl
			<<"Сумма первого: "<<nulel(masiv1,n)<<endl
			<<"Сумма второго:  "<<nulel(masiv2,m)<<endl;

}
void mrecord(float *mas, int n){
	cout<<"Введите "<<n<<" элементов: ";
	for (int i=0;i<=n-1;i++)
		cin >>mas[i];
}

float min(float *mas, int n){
	float minel;
	minel=*mas;
	for(int i=1;i<=n-1;i++)
		if(minel>fabs(mas[i]))
			 minel=*(mas+i);
	return minel;
}

float nulel(float *mas,int N){
	float *pmin;
	pmin=mas;
	for(int i=0;i<N-1;i++)
		if (!mas[i])
			return summ(mas,i,N);
}

float summ(float *mas, int M,int msize){
	float Summa=0;
	for(int i=M+1;i<msize;i++)
		Summa+=abs(mas[i]);
	return Summa;
}

Последний раз редактировалось Namolem; 14.10.2009 в 20:13.
Namolem вне форума Ответить с цитированием
Старый 14.10.2009, 21:26   #5
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

float nulel(float *mas,int N){
float *pmin;
pmin=mas;
for(int i=0;i<N-1;i++)
if (!mas[i])
return summ(mas,i,N);
}

эта функция должна всегда возвращать значение, она возвращает значение только тогда, когда выполняется условие, когда условие не выполняется, она не возвращает значение, что может привести к непредсказуемому результату или ошибке
capta1n вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятный синтаксис. jojahti Общие вопросы C/C++ 10 14.10.2009 19:05
Непонятный глюк Delphi 2009 aesoem Общие вопросы Delphi 3 15.08.2009 12:30
непонятный компилятор Waleriy Общие вопросы по Java, Java SE, Kotlin 2 11.12.2008 14:16
Что это за непонятный бред? Манжосов Денис :) О форуме и сайтах клуба 14 15.07.2008 22:50
непонятный код Kostua Помощь студентам 5 27.04.2008 18:17