Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
RebelUA
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 18
1

Задача на перестановку в одномерном масиве

14.04.2013, 14:22. Просмотров 371. Ответов 3
Метки нет (Все метки)

Такое вот интересное задание:
Во всех последовательностях положительных чисел изменить порядок элементов на противоположный
Примерный текст программы есть. Где находится начало последовательности, и последний элемент. Нужно только немного дополнить, может что-то исправить. Заранее благодарен!

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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <conio.h>
 int Ar[100];   /* массив, который обрабатывается */
 
int main(void) {
 int i, j;    /* индексы в массиве */
 int av;      /* среднее значение */
 int nn; /* последний эл. в последовательности */ 
 int k;      /* индекс начала последовательности */
 int r; /* рабочая переменная */
  
  /* vvod */
  randomize();
  for (i=0; i<100; Ar[i++]=random(101)-50 );
  printf("Nachialnyi masiv:\n");
  for (i=0; i<100; printf("%3d  ",Ar[i++]));
  putchar('\n');
  putchar('\n');
 
  /* obr */
  for (i=0; i<99; i++) {
  if (Ar[i]>=0 && Ar[i++]>=0) {
  for (j=i; Ar[j]<0; j++) {nn++;}
  for (k=i; (k<(nn mod 2)); k++) {
  /* Вот в этом цикле нужно уместить перестановку */  
  }
  }
  }
 
  /* vyvod */
  printf("Obrabotannyi masiv:\n");
  for (i=0; i<100; printf("%3d  ",Ar[i++]));
  putchar('\n');
  getch();
  return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 14:22
Ответы с готовыми решениями:

Заполнить закон в масиве
#include &lt;stdio.h&gt; #define N 4 int main() { int i,j,arr;...

Найти одинаковые фамилии в масиве структур
Есть такая структура struct sch{ char surname; char name; int form; }...

Найти непрерывную цепочку положительных элементов в масиве
Помогите написать код. Дан массив X из N целых чисел. Нужно найти самую...

В масиве найти максимальный элемент и его номер
В масиве найти максимальный элемент и его номер. Вот мой нерабочий вариант:...

Сосчитать сумму положительных и количество отрицательных элементов в масиве An
Даны натуральное число n, целые числа a1..an. Получить сумму положительных и...

3
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
14.04.2013, 14:24 2
А что такое randomize() и random() ?
0
RebelUA
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 18
14.04.2013, 14:25  [ТС] 3
Заполнение массива случайными числами
0
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
14.04.2013, 14:42 4
В C нет функции randomize, есть rand. Вот код:

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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define SIZE 20
#define MAX_VALUE 100
 
//инициализация массива
void initArray(int *list, int size);
 
//развернуть последовательность 
void revSeq(int *list, int start, int end);
 
//развернуть все последовательности неотрицательных чисел в списке list
void revAllSeq(int *list, int size);
 
//печать массива
void printArray(int *list, int size);
 
int main(void)
{
    int list[SIZE];  //массив, который обрабатывается
    
    srand(time(NULL));
 
    puts("input array:");
    initArray(list, SIZE);
    printArray(list, SIZE);
    
    revAllSeq(list, SIZE);
    puts("\n\noutput array:");
    printArray(list, SIZE);
 
    return 0;
}
 
void initArray(int *list, int size)
{
    int i, sgn;
 
    for(i = 0; i < size; i++){
        sgn = rand() % 2;
        list[i] = rand() % MAX_VALUE;
        if(sgn) list[i] *= (-1);
    }
}
 
void revSeq(int *list, int start, int end)
{
    int temp;
 
    while(start < end){
        temp = list[start];
        list[start] = list[end];
        list[end] = temp;
        start++; end--;
    }
}
 
void revAllSeq(int *list, int size)
{
    int start, end, i, j;
 
    for(i = 0; i < size; i++)
    {
        if(list[i] < 0)
            continue;
        
        start = i;
        for(j = start; j < size; j++)
            if(list[j] < 0)
                break;
        end = j - 1;
        revSeq(list, start, end);
        i += end - start;
    }
}
 
void printArray(int *list, int size)
{
    int i;
 
    for(i = 0; i < size; i++)
        printf("%4i ", list[i]);
 
    putchar('\n');
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2013, 14:42

поиск элемента в одномерном масиве
как осушествить поиск элемента в массиве дешевле задоной суммы(последнего...

Сделать выборку в одномерном масиве
есть массив 1,2,3,4,1,2,3,4,1,2,3,4 выбрать последованость 1,2,3,4 да так...

умножение на промежутке в одномерном масиве
В одномерном массиве В состоящим N целых элементов, вычислить: a) кол-во...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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