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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2009, 11:57   #1
ziman
Новичок
Джуниор
 
Регистрация: 04.05.2008
Сообщений: 1
Вопрос замена элементов динамического массива

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

у меня же меняет на противоположные все положительные элементы, где надо подправить ??
Код:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <alloc.h>
int main(void) {
 int size;                   /* размер */
 int *Ar;       /* указатель на начало массива */
 int *Cr, *Ir;            /* текущие указатели */
 int nn;            /* количество элементов в последовательности  */
  randomize(); 
  size=20;
  printf("size=%d\n",size);
  /* выделения памяти */
  Ar=(int far *)malloc(size*sizeof(int));
  
  printf("Начальный массив:\n");
  for (Cr=Ar; Cr<Ar+size; Cr++) {
    *Cr=random(101)-50;
    printf("%3d ",*Cr);
    }
  putchar('\n');
 
  /* перебор массива */
  for (nn=0, Cr=Ar; Cr<Ar+size; Cr++) { 
    if (*Cr>0)
 
      if (!nn) {                                  
         Ir=Cr; nn=1;
         }
      else {
 
         nn++;
        }
 
    else
      if (nn) {
      
        for (nn; Ir<Cr; Ir++)
          if (*Ir>0) *Ir=-*Ir;
        nn=0; 
        }  
    }  
  if (nn)
    for (nn; Ir<Cr; Ir++)
      if (*Ir>0) *Ir=-*Ir;
  /* вывод результатов */
  printf("Массив-результат:\n");
  for (Cr=Ar; Cr<Ar+size; printf("%3d ",*Cr++));
  putchar('\n');
  /* освобождение памяти */
  free(Ar);
  return 0;
}

у меня проблема с обнаружением положительной последовательности, помогите пожалуйста.
Заранее благодарен.
ziman вне форума Ответить с цитированием
Старый 17.12.2009, 13:50   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Идея следующая. Вводим переменную bool flag=false.
При переборе массива сравниваем знаки текущего и следующего элемента, если они равны и положительные, то знак текущего изменяем, flag=true. Если разные и flag=true, то изменяем и flag=false. Для последнего элемента сравниваем только его знак и значение флага.
Неприятности приходят и уходят, а жизнь продолжается!
Sweta вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
найти среднее арифметическое элементов массива состоящее из 5 элементов viatlon Общие вопросы C/C++ 9 12.12.2009 00:45
Адреса элементов динамического массива меняются... Altera Общие вопросы Delphi 6 07.09.2009 07:31
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16
Удаление элементов из динамического массива dashulka Общие вопросы Delphi 4 31.10.2008 14:03