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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
L.M.
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 8
#1

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

29.06.2011, 00:14. Просмотров 843. Ответов 6
Метки нет (Все метки)

Здравствуйте!
Помогите, пожалуйста, выполнить следующее задание:
Задать целочисленный массив размером 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++
решите пожалуйста задачу.... вот условие: в одномерном массиве, состоящем из n вещественных элементов, вычислить: количество элементов...

Одномерные массивы С++ - C++
Помогите пожалуйста написать программку! Заполнение динамического целочисленного массива длинной N. Отсортировать массив по...

Одномерные массивы - C++
Привет можете посмотреть мой код и сказать что подправить.(не уверен правильно ли считает числа отличающиеся от заданнго на 0.5) ...

Одномерные массивы - C++
Задать 2 вектора A(n) и B(m). Выполнить такие задания: -найти вектора C, D и E из элементов векторов A и B так, чтобы в С находились...

одномерные массивы - C++
Помогите, пожалуйста, сделать задание, ну хотя бы намекните! В одномерном массиве, который состоит из n действительных чисел, найти сумму...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OstapBender
583 / 521 / 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
914 / 739 / 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++
Большая просьба помочь мне в решении двух задач! Буду Вам очень признателен, товарищи! задачи выглядят следующим образом: 1....

Одномерные массивы в С#(С++) - C++
Помогите пожалуйсто,пишу программу,а она чего-то не хочет писаться,выдает многочисленные ошибки.На основании этой программы нужно сделать...

Одномерные массивы - C++
Задание во вложении, сделал как понял задание, но с ошибками, которые ни как не могу найти. Даны 3 одномерных массива, в каждом посчитать...

Одномерные массивы - C++
Прошу помочь с заданием В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1) произведение отрицательных...


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

Или воспользуйтесь поиском по форуму:
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
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru