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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 20:20   #1
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию поиск элемента массива по сумме, с++

Здравствуйте! Задание в коде.
Программа работает, но не корректно
во-первых, ругается что я не удаляю память, хотя вроде как удаляю(но как-то неправильно получается, подскажите как надо )
во-вторых, даже если я ввожу число М=5 и в массиве встречается элемент сумма которого равна М, его номер не выводится. В чем проблема?
Visual Studio 2008
Код:
/* вывести номер элемента одномерного динамического массива, сумма цифр которого равна заданному с клавиатуры числу M. Размерность массива указать в диалоговом режиме*/
#include <iostream>
#include <math.h>
#include <locale>
using namespace std;
//#include "Rus.h"
int zap_mas (int *mas, int n, int max, int min);
void vivod_mas (int *mas, int n);
int sum(int n, int M, int *mas);
int zap_mas (int *mas, int n, int max, int min)
{
	int i;
	
	srand(time(NULL)*1000);
	for (i=0;i<=n;i++)
	{
	mas[i]=(rand()%(max-min+1)+min);
	}

	/*for (i=0;i<n;i++)
	{
	mas[i]=rand()%(max-min+1)+min;
	}*/
	return mas[i];
}
void vivod_mas (int *mas, int n)
{
	int i;

    for (i=0; i<n; i++)
	cout<<mas[i]<<"  ";
	cout<<endl;
}
int sum(int n, int M, int *mas)
	{
	int x,c1,c2,c3,c,i;
	for (i=0; i<n; i++)
	{
		x=abs(M);
		
		c1=x/100;
        c2=x/10;
        c2=c2%10;
        c3=x%10;
        c=c1+c2+c3;

		if (c==M) 
		{
			return i;
		}
		
	}
		return 0;
	
}
void main ()
{
	setlocale(LC_CTYPE, "russian");
	int *mas, n, M,i=1,v=0,k=0;
	srand(NULL);
	cout<<"Введите размерность массива и число М \n";
	cin>>n>>M;
	mas= new int [n]; 
	zap_mas ( mas, n, 1000, -1000);
	vivod_mas ( mas, n);
	//i=sum ( n, M, mas);
	k=sum(n,M,mas);
	cout<<k<<"-ый элемент массива равен введенному числу M"<<endl;
		//cout<<"Индекс элемента ="<<v<<endl;
	delete[] mas;
	mas=0;
}

Последний раз редактировалось Tiva; 07.12.2011 в 20:21. Причина: добавил среду
Tiva вне форума Ответить с цитированием
Старый 07.12.2011, 20:42   #2
viron
Форумчанин
 
Аватар для viron
 
Регистрация: 02.12.2011
Сообщений: 110
По умолчанию

Цитата:
for (i=0;i<=n;i++)
{
mas[i]=(rand()%(max-min+1)+min);
}
Выход за границы массива

Код:
	for (i=0;i<n;i++)
	{
	mas[i]=(rand()%(max-min+1)+min);
	}
И функция main() должна возвращать целое
Код:
int main()
{
  ...
  return 0;
}

Последний раз редактировалось viron; 07.12.2011 в 20:45.
viron вне форума Ответить с цитированием
Старый 07.12.2011, 20:48   #3
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию

Спасибо. А как на счет функции sum?
почему не выводит нужный элемент?
Tiva вне форума Ответить с цитированием
Старый 07.12.2011, 21:04   #4
Tiva
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 49
По умолчанию

переписал ошибки памяти, и переделал функцию sum(которая проверяет совпадение суммы цифр с веденным числом)
но у меня выводится только один результат из нескольких
как сделать чтоб выводились все результаты
т.е. в итоге программа выдала:
5-ый элемент равен числу М
9-ый элемент равен числу М
15-ый элемент равен числу М

Код:
#include <iostream>
#include <math.h>
#include <locale>
using namespace std;
//#include "Rus.h"
int zap_mas (int *mas, int n, int max, int min);
void vivod_mas (int *mas, int n);
int sum(int n, int M, int *mas);
int zap_mas (int *mas, int n, int max, int min)
{
	int i;
	
	srand(time(NULL)*10);
	for (i=0;i<n;i++)
	{
	mas[i]=(rand()%(max-min+1)+min);
	}

	/*for (i=0;i<n;i++)
	{
	mas[i]=rand()%(max-min+1)+min;
	}*/
	return mas[i];
}
void vivod_mas (int *mas, int n)
{
	int i;

    for (i=0; i<n; i++)
	cout<<mas[i]<<"  ";
	cout<<endl;
}
int sum(int n, int M, int *mas)
	{
	int x,c1,c2,c3,c,i;
	
	for (i=0; i<n; i++)
	{
		x=abs(mas[i]);
		c1=x/100;
        c2=x/10;
        c2=c2%10;
        c3=x%10;
        c=c1+c2+c3;

		if (c==M) 
		{
			return i;
		}
		
	}
		return 0;
	
}
int main ()
{
	setlocale(LC_CTYPE, "russian");
	int *mas, n, M,i=1,v=0,k=0;
	srand(NULL);
	cout<<"Введите размерность массива и число М \n";
	cin>>n>>M;
	mas= new int [n]; 
	zap_mas ( mas, n, 10, -10);
	vivod_mas ( mas, n);
	//i=sum ( n, M, mas);
	k=sum(n,M,mas);
	cout<<k<<"-ый элемент массива равен введенному числу M"<<endl;
		//cout<<"Индекс элемента ="<<v<<endl;
	delete[] mas;
	mas=0;
	return 0;
}
Tiva вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск максимального элемента массива (assembler) квант Помощь студентам 1 07.12.2011 16:24
Поиск максимального элемента массива morskoy brat Помощь студентам 1 18.11.2011 13:11
Неверный поиск элемента массива. torren108 Помощь студентам 1 22.10.2011 23:30
поиск мин. элемента массива lg12 Помощь студентам 1 10.07.2009 15:07