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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2014, 01:20   #1
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию Ошибка в работе программы[Visual C++]

Приветствую всех участников форума.После проверки работы программы выскакивает ошибка.
Нужно удалить четные элементы одномерного массива(динамического);
Код:
 switch (n)
	 {
	 case 1:
		 cout << "Введите размерность массива: ";
		 cin >> n;
		 srand(time(NULL));
		 ptrmas = new int[n];
		 for (i = 0; i < n; i++)
		 {
			 q++;
			 ptrmas[i] = rand() % 20 + 1;
		 }
		 //--------------------------------------------
		 cout << "Для выхода из режима нажмите - 0: ";
		 cin >> k;
		 system("cls");
		 if (k == 0) { break; }
	 case 2:
		 cout << "Четные элементы массива: ";
		 for (i = 0; i < q; i++)
		 {
			 if (!(ptrmas[i] % 2 == 0))
			 {
				 yes++;
				 cout << ptrmas[i] << " ";	 
			 }
		 }
		 ptrmas2 = new int[yes];
			 for (i = 0; i < q; i++)
			 {
			 if (!(ptrmas[i] % 2 == 0))
			  {
				 ptrmas2[i] = ptrmas[i];
			  }
			 }
			 delete[]ptrmas;
			 ptrmas = new int[yes];
			 for (i = 0; i <= yes; i++)
			 {
				 ptrmas[i] = ptrmas2[i];
			 }
			 delete[]ptrmas2;
		 //-------------------------------------------------
		 cout << "Для выхода из режима нажмите - 0: ";
		 cin >> k;
		 system("cls");
		 if (k == 0) { break; }
	 
	 case 3:
		 cout << "Массив: ";
		 for (i = 0; i <q; i++)
		 {
			 cout << ptrmas[i] <<" ";
		 }
		 cout << endl;
		 //-------------------------------------------------
		 cout << "Для выхода из режима нажмите - 0: ";
		 cin >> k;
		 system("cls");
		 if (k == 0) { break; }
Безымянный.png
Может просто просмотр одномерного массива нужно сделать через функцию?Возможно ли так сделать ?
spectrum988 вне форума Ответить с цитированием
Старый 14.10.2014, 06:40   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

А зачем такое условие
Код:
 if (k == 0) { break; }
? Насколько я помню, после каждого case должен быть обязательный безусловный break, т.е.
Код:
switch (i)
{
case 1: 
...
break;
case 2:
...
break;
case default:
break;
}
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 14.10.2014, 08:24   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

1. Ваш алгоритм разве делает заявленное?
2.
Код:
for (i = 0; i <= yes; i++)
			 {
				 ptrmas[i] = ptrmas2[i];
У этих массивов нет элемента с индексом йес...

Цитата:
Насколько я помню, после каждого case должен быть обязательный безусловный break
Не должен.
p51x вне форума Ответить с цитированием
Старый 14.10.2014, 12:14   #4
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Дело в том,что я прелварительно создал проверку,сколько у меня получится элементов, поэтому и использовал yes;И у меня же был создан ptrmas2 c числом элементов yes,а код который вы выделили я использовал лишь ради того,чтобы поменять название динамическогода массива,чтобы я смог его потом просматрвать. Но мне кажется,что я это сделал как-то нерационально.

Последний раз редактировалось spectrum988; 14.10.2014 в 12:18.
spectrum988 вне форума Ответить с цитированием
Старый 14.10.2014, 12:59   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

У вас проблема с выходом за границы массивов, вот и валится...
p51x вне форума Ответить с цитированием
Старый 14.10.2014, 14:42   #6
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Спасибо за помощь,буду искать ошибку.

Код:
for (i = 0; i <= q; i++)
		 {
			 if (!(ptrmas[i] % 2 == 0))
			 {
				 yes++;	 
			 }
		 }
		  ptrmas2 = new int[yes];
			 for (i = 0; i < q; i++)
			 {
			 if (!(ptrmas[i] % 2 == 0))
			  {
				 ptrmas2[i] = ptrmas[i];
			  }
			 }
Безымянный.png
Получается,что-то такое.

Последний раз редактировалось spectrum988; 14.10.2014 в 22:32.
spectrum988 вне форума Ответить с цитированием
Старый 15.10.2014, 20:29   #7
spectrum988
Форумчанин
 
Аватар для spectrum988
 
Регистрация: 24.10.2013
Сообщений: 241
По умолчанию

Спасибо всем за помощь,вопрос уже неактуален.

Последний раз редактировалось spectrum988; 15.10.2014 в 20:50.
spectrum988 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в работе программы East Undia Trading Помощь студентам 3 07.11.2013 20:53
Ошибка в работе программы uityu Помощь студентам 1 28.10.2013 05:53
Ошибка программы по работе с БД!? TeleSky БД в Delphi 5 14.09.2013 23:27
ошибка в работе программы julia9311 Общие вопросы C/C++ 5 28.06.2012 03:18
Ошибка в работе программы Wefast Помощь студентам 1 25.12.2009 08:13