Форум программистов, компьютерный форум CyberForum.ru

Одномерные массивы; на ЯП Си, среда – Borland C++5.02 - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сформировать массив http://www.cyberforum.ru/cpp-beginners/thread326941.html
Массив Y сформировать по правилу Yi=cos2ix/(2i-1)(2i+1), x вводить с клавиатуры. Определить количество элементов yi<1.2 среди элементов с нечетными номерами и сумму элементов с четными порядковыми номерами.
C++ Вычислить величину Дана непустая последовательность положительных вещественных чисел x1, x2, … , xn (n заранее не известно), за которой следует отрицательное число. Вычислить величину nx1 + (n–1)x2 + … + 2xn-1 +xn. http://www.cyberforum.ru/cpp-beginners/thread326934.html
C++ Обработка строки
здравствуйте. такая задача: написать функцию, входным параметром которой является указатель на строку. функция должна вернуть количество слов в строке, у которых первый и последний символ совпадают. я тут кое-чего набыдлокодил, да и то не работает. если можно поправьте существующее решение, чтобы оно работало или предложите более лучшее решение: int quantity(char*); int main() { char s1="...
C++ подсчитать количество цифр
Для целого неотрицательного числа n подсчитать количество цифр в десятичной, шестнадцатеричной, восьмеричной и двоичной системах счисления.
C++ Доступ к классу как к контейнеру http://www.cyberforum.ru/cpp-beginners/thread326927.html
Здравствуйте, не подскажите как нужно определить класс-контейнер, что бы можно было получать данные путем такого обращения : Подробнее: class kont{ int arr; } kont::kont{ for(int a=0;a<4;a++) arr = a; } void main(void){
C++ разрешение конфликтов в цепях маркова Надо измените переходы в рассматриваемой цепи Маркова. Именно, задать число Ps (между нулём и единицей). При возникновении конфликта "разыграйте" случайное число альфа (между 0 и 1). Если получится альфа < Ps, то отдайте ресурс 1-му процессу (переход из состояния (11) в состояние (01) или (11) в соответствие с переходами 1-го процесса, как это Вы уже делали. В противном случае (11)будет... подробнее

Показать сообщение отдельно
xAtom
914 / 739 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.06.2011, 21:09
Вот попробовал выполнить без дополнительного массива.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
 
 
struct sinfo {
   int pos, cnt;
};
 
 
// поиск максимальной последовательности
struct sinfo  search_max(const int* arr, int  size) {
    struct sinfo info = { 0, 0 };
    const  int*  next = arr + 1;
    int    pos = 0, cnt = 1;
    while( size-- ) {
       if( *arr == *next )
              cnt++;
        else {
              if(cnt >= info.cnt) {
                  info.cnt = cnt;
                  info.pos = pos - cnt + 1;
              }
              cnt = 1;
        }
       *arr++;
       *next++;
        pos++;
    };
    return  info;
}
 
 
 
// поиск минимальной последовательности
struct sinfo search_min(int imax, const int* arr, int size) {
    struct sinfo info = { 0, 0 };
    const  int*  next = arr + 1;
    int    pos = 0, cnt = 0, tmp = 0;
    info.cnt   = imax;
    while( size--){
       if( *arr == *next )
              cnt++;
        else {
              if(cnt < info.cnt && cnt > 0) {
                  info.cnt = cnt + 1;
                  info.pos = pos - cnt;
              }
              cnt = 0;
        }
       *arr++;
       *next++;
        pos++;
    };
    return  info;
}
 
 
// функция по-обмену
void  swap_n(int* arr, int  size, const struct sinfo* first, const struct sinfo* last) {
      int  len, val1, val2, cnt;
 
      if(first->pos < last->pos) {  // сжатие
 
          val1  = *((arr) + first->pos);
          val2  = *((arr) + last->pos);
 
          cnt   = first->cnt - last->cnt;
          while(cnt--) {
            for(len = first->pos + last->cnt; len < last->pos - 1; len++)
                 *((arr) + len) = *((arr) + len + 1);
          }
          for(len = first->pos; len < first->pos + last->cnt; len++)
               *((arr) + len) = val2;
 
          for(len = last->pos - (first->cnt - last->cnt); len < last->pos + last->cnt; len++)
               *((arr) + len) = val1;
 
 
      } else {   // растяжение
 
           val1  = *((arr) + first->pos);
           val2  = *((arr) + last->pos);
 
 
           cnt   = first->cnt - last->cnt;
           while(cnt--) {
                for(len = first->pos; len > last->pos; len--)
                        *((arr) + len + 1) = *((arr) + len);
           }
 
           for(len = last->pos; len < last->pos + first->cnt; len++)
                *((arr) + len) = val1;
 
           cnt  = first->cnt - last->cnt;
           for(len = first->pos + cnt; len < first->pos + cnt + last->cnt; len++)
                *((arr) + len) = val2;
      }
 
}
 
 
 
 
int main(int argc, char* argv[])
{
 
     // обмен местами самой короткой последовательности на самую  большую
     int i;
 
     int arr[] = { 2, 3, 7, 20, 20, 20, 0, 20, 8, 10, 10, 10, 10, 0, 7 };
     int size  = sizeof(arr) / sizeof(int);
     struct sinfo a, b;
 
     a = search_max(arr, size);  // находим самую длиную последовательность
     b = search_min(a.cnt, arr, size);  // находим коротку минимум - 2(элемента)
 
 
     printf("src array: ");     // распечатываем исходный массив
     for(i = 0; i < size; i++)
          printf("%d, ", *((arr) + i) );
     puts("\n");
 
     
     swap_n(arr, size, &a, &b);   // обмениваем
 
     printf("dst array: ");
     for(i = 0; i < size; i++)   // обработанный массив
          printf("%d, ", *((arr) + i) );
     puts("");
 
 
     getchar();
     return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru