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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2009, 17:01   #1
_llllllllll_
 
Регистрация: 20.09.2009
Сообщений: 5
По умолчанию помогите исправить

имеется программа, которая должна исключать из массива рядомстоящие одинаковые элементы...но исключает их только если они в первой половине этого массива...во второй ругается

Код:
int arr[10],i, n=0,t;
int *a, *n1=NULL, *n2=NULL;
printf("enter arrray", arr[10]);
for (i = 0; i <10; i++) {  scanf("%d", &arr[i]);}
a= arr;
for (i = 0; i <10; i++, a++) 
{
  if(*(a) == *(a+1))
 { n1=a;
  break;  }
}
//printf("%d",*n1);
a= arr+4;
for (i = 9; i >0; i++,a--) {
   if(*(a) == *(a-1))
    {n2=a;
      break;}
 }
//printf("%d",*n2);
a=arr;
while(n2!=(arr+9))
{
 *n1=*n2+1; \\ругается сюда
  n1++;
  n2++;
  t=n2-n1;
  t++;}

 for (i = 0; i < 10-t; i++) { printf("%d",arr[i]);
 }
}
помогите плс.

Последний раз редактировалось Sazary; 21.09.2009 в 00:16.
_llllllllll_ вне форума Ответить с цитированием
Старый 21.09.2009, 00:23   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А что оно должно делать? И что за ошибка?
Стоит заметить, что у вас n1 и n2 определены не при любых входных данных.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 21.09.2009, 00:43   #3
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
printf("enter arrray", arr[10]); // Здесь уберите arr[10], оно ни к чему тут
for (i = 9; i >0; i++,a--) { // Тут вместо i++ поставьте i--, иначе цикл будет выполнятся ооочень много раз.
И, как заметил Sazary, n1 и n2 в случае, если не окажется двух одинаковых элементов в массиве будут равны нулю. Кстати, интересно, как поведёт себя программа, если в массиве окажется два повторяющихся элемента). Делайте проверку на этот случай. И я бы использовал индексацию массива, а не указатель, так будет наглядней и, местами, проще. Так же, во втором цикле, будет чтение из памяти вне границ массива
Код:
for (i = 0; i <10; i++, a++) 
{
  if(*(a) == *(a+1)) // a рано или поздно будет указывать на последний элемент. a+1 вне пределов массива.
 { n1=a;
  break;  }
}
Да, насчёт ошибки:
Код:
a = arr+4; // Тут надо arr+9;(конец массива)
...
while(n2!=(arr+9)) { // А тут arr+10

Последний раз редактировалось netrino; 21.09.2009 в 00:57.
netrino вне форума Ответить с цитированием
Старый 21.09.2009, 09:22   #4
_llllllllll_
 
Регистрация: 20.09.2009
Сообщений: 5
По умолчанию

спасибо(::
_llllllllll_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить fenix-88 Помощь студентам 0 21.06.2009 18:58
помогите исправить Aivar Помощь студентам 12 11.11.2008 20:04
Помогите исправить L_M Помощь студентам 3 08.06.2008 01:06
Помогите исправить NeiL Общие вопросы C/C++ 1 31.05.2008 13:31