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

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

Восстановить пароль Регистрация
 
L.M.
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 8
29.06.2011, 00:14     Одномерные массивы; на ЯП Си, среда – Borland C++5.02 #1
Здравствуйте!
Помогите, пожалуйста, выполнить следующее задание:
Задать целочисленный массив размером N. Поменять местами серии с минимальной и максимальной длиной. Если таких серий несколько, то любые из них.
Серия – последовательность одинаковых элементов в массиве. Один элемент – серия с длиной равной 1.

Заранее спасибо всем кто откликнется!!!

Добавлено через 20 часов 49 минут
написала код для создания массива и нахождения в нём минимальной и максимальной серий
помогите уже хотябы поменять их местами
Код
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <alloc.h>
void main(void)
{
int *a;
int n,i;
   puts("\n Vvedite n:");
   scanf("%d",&n);
   a =(int*)calloc(n,sizeof(int));
	clrscr();
   randomize();
   	puts("\n Ishodnyj massiv:\n");
      for (i=0;i<n;i++)
      {
       a[i]=random(2)-0;
       printf("%d ",a[i]);
      }
int max_count=1, max_index=0, count=1, index=0;
int min_count=n, min_index=0;
    for (int i=0; i<n; i++)
    {
        if (a[i]==a[i+1])
       	   count++;
        else
        {
            if (count>max_count)
            {
            	max_count=count;
               max_index=index;
            }
             if (count<min_count)
            {
            	min_count=count;
               min_index=index;
            }
            count=1;
            index=i+1;
        }
    }
printf("\n\n max=%d,i=%d",max_count,max_index);
printf("\n\n min=%d,i=%d",min_count,min_index);
      free(a);
      getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2011, 00:14     Одномерные массивы; на ЯП Си, среда – Borland C++5.02
Посмотрите здесь:

C++ Одномерные массивы
C++ одномерные массивы 2
Одномерные массивы C++
Одномерные массивы C++
C++ Одномерные массивы.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
 Аватар для OstapBender
581 / 519 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
29.06.2011, 02:24     Одномерные массивы; на ЯП Си, среда – Borland C++5.02 #2
L.M., проще всего завести новый массив и туда перенести старый только изменив порядок 2-х последовательностей
L.M.
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 8
29.06.2011, 16:01  [ТС]     Одномерные массивы; на ЯП Си, среда – Borland C++5.02 #3
ааааа!...не получается у меня!
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
29.06.2011, 21:09     Одномерные массивы; на ЯП Си, среда – Borland C++5.02 #4
Вот попробовал выполнить без дополнительного массива.

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;
}
Jupiter
29.06.2011, 21:15
  #5

Не по теме:

Цитата Сообщение от xAtom Посмотреть сообщение
struct sinfo {
int pos, cnt;
};
возврат через указатель уже не в моде? зачем плодить лишюю сущность

L.M.
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 8
29.06.2011, 21:18  [ТС]     Одномерные массивы; на ЯП Си, среда – Borland C++5.02 #6
кошмар...спасибо конешно,но я в этом не разберусь...я это преподавателю не объясню
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.07.2011, 17:58     Одномерные массивы; на ЯП Си, среда – Borland C++5.02
Еще ссылки по теме:

одномерные массивы C++
C++ Одномерные массивы C++
Одномерные массивы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
L.M.
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 8
01.07.2011, 17:58  [ТС]     Одномерные массивы; на ЯП Си, среда – Borland C++5.02 #7
доделала и уже сдала!
серии меняла местами с помощью дополнительного массива:

int k;
int *b;
b =(int*)calloc(n,sizeof(int));
if (max_index<min_index)
{
k=0;
for(i = 0; i< max_index; k++,i++)
b[k]=a[i];
for(i = min_index; i<(min_index+min_count); k++,i++)
b[k]=a[i];
for(i = max_index+max_count; i< min_index; k++,i++)
b[k]=a[i];
for(i = max_index; i<(max_index+max_count); k++,i++)
b[k]=a[i];
for(i = min_index+min_count; i< n; k++,i++)
b[k]=a[i];
}
else
{
k=0;
for(i = 0; i< min_index; k++,i++)
b[k]=a[i];
for(i = max_index; i<(max_index+max_count); k++,i++)
b[k]=a[i];
for(i = min_index+min_count; i< max_index; k++,i++)
b[k]=a[i];
for(i = min_index; i<(min_index+min_count); k++,i++)
b[k]=a[i];
for(i = max_index+max_count; i< n; k++,i++)
b[k]=a[i];
}
Yandex
Объявления
01.07.2011, 17:58     Одномерные массивы; на ЯП Си, среда – Borland C++5.02
Ответ Создать тему
Опции темы

Текущее время: 13:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru