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

Количество элементов, которые изменили позицию в массиве - C++

Восстановить пароль Регистрация
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
17.12.2010, 18:34     Количество элементов, которые изменили позицию в массиве #1
Нужно вывести кол-во элементов, которые изменили(или не изменили, лучше оба значения) свою позицию в массиве, например:

мас = (4 3 2 5 9 6 3 1)
результат работы проги = (1 3 6 9 5 2 3 4)

как видно, "3" как были так и остались на своих местах, т.е. мне нужно, чтобы на выходе был ответ "2 элемента сохранили свою позицию" или "6 поменяли ее же". Сколько ни пытался, не выходит

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
#include <iostream>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
using namespace std;
int main()
{
    int i;
 int* mas;
 int n = 0, temp = 0;
 cout << "Enter size of array ";
 cin >> n;
 mas = (int*) calloc(n, sizeof(int));
 cout << "Enter array's elements"<<endl;
 for(i = 0; i < n; i++){
   cin >> mas[i];
    }
    for( i = 0; i < n/2; i++){
      temp = mas[i];
      mas[i] = mas[n - i - 1];
      mas[n - i - 1] = temp;
    }
 for( i = 0; i < n; i++){
   cout << mas[i]<<" ";
    }
    cout << endl;
 free(mas);
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2010, 18:34     Количество элементов, которые изменили позицию в массиве
Посмотрите здесь:

C++ В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов.
В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю. C++
определить количество элементов двумерного массива,которые меньше среднего арифметического значения всех элементов своей строки C++
определите количество строк в массиве, которые содержат значение, равное наибольшему. C++
C++ В одномерном массиве состоящий из n элементов вычислить количество элементов массива, меньших C
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
17.12.2010, 18:56     Количество элементов, которые изменили позицию в массиве #2
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
#include <iostream>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
using namespace std;
int main()
{
        int i, col=0;
 int* mas;
 int n = 0, temp = 0;
 cout << "Enter size of array ";
 cin >> n;
 mas = (int*) calloc(n, sizeof(int));
 cout << "Enter array's elements"<<endl;
 for(i = 0; i < n; i++){
   cin >> mas[i];
    }
    for( i = 0; i < n/2; i++){
        if(mas[i]!=mas[n - i - 1])
            col+=2;
      temp = mas[i];
      mas[i] = mas[n - i - 1];
      mas[n - i - 1] = temp;
    }
 for( i = 0; i < n; i++){
   cout << mas[i]<<" ";
    }
 
    cout << endl;
    cout<<"Izmenili: "<<col<<endl;
    cout<<"Neizmenili: "<<n-col<<endl;
 free(mas);
return 0;
}
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
17.12.2010, 18:58     Количество элементов, которые изменили позицию в массиве #3
в цикле, в котором меняешь местами элементы, добавь проверку - если взаимозаменяемые элементы равны, то счетчик увеличить.
Я так понял задание: поменять местами значения противоположных относительно середины массива элементов, и сосчитать количество не измененных значений элементов или в этом духе?

а что это такое в программе?
C++
1
2
3
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif
очень интересно.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.12.2010, 19:00     Количество элементов, которые изменили позицию в массиве #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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
 
#define SIZE 10
 
int asc_cmp(const void * a, const void * b) { return *(int*)a - *(int*)b; }
 
int main(void){
    int unsorted[SIZE], sorted[SIZE], i, cnt;
    
    srand(time(NULL));
    printf("Unsorted: ");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", ( unsorted[i] = rand() % 10 ));
    
    memcpy(sorted, unsorted, sizeof(int) * SIZE);
    qsort(sorted, SIZE, sizeof(int), asc_cmp);
    printf("\nSorted:   ");
    for ( cnt = i = 0; i < SIZE; ++i ){
        printf("%d ", sorted[i]);
        if ( unsorted[i] == sorted[i] )
            ++cnt;
    }
    printf("\n%d elements have retained their positions.\n", cnt);
    
    return 0;
}

Цитата Сообщение от apachan Посмотреть сообщение
C++
1
2
3
#if defined (_MSC_VER) && _MSC_VER <= 1200 
#define for if (false) ; else for 
#endif
А это что за танец с бубном?
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
17.12.2010, 19:02  [ТС]     Количество элементов, которые изменили позицию в массиве #5
Спасибо, мой вариант выдавал ошибку =/

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
#include <iostream>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
using namespace std;
int main()
{
    int i;
    int k=0;
 int* mas;
 int n = 0, temp = 0;
 cout << "Enter size of array ";
 cin >> n;
 mas = (int*) calloc(n, sizeof(int));
 cout << "Enter array's elements"<<endl;
 for(i = 0; i < n; i++){
  cout <<"N " <<i <<" >> ";
   cin >> mas[i];
    if (mas[i+1]=mas[n - i - 1]) k=k+1;
 
    }
    for( i = 0; i < n/2; i++){
      temp = mas[i];
      mas[i] = mas[n - i - 1];
      mas[n - i - 1] = temp;
     
    }
 
 
 for( i = 0; i < n; i++){
   cout << mas[i]<<" ";
    }
    cout << endl;
 
 cout << k;
 cout << endl;
 free(mas);
return 0;
}
Добавлено через 1 минуту
А это что за танец с бубном?
Без этого не работало почему-то, гугл подсказал почему...

Добавлено через 1 минуту
по-моему проще второй массив завести, его отсортировать и посчитать, сколько элементов на своих местах останется...
Без второго массива.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
17.12.2010, 19:14     Количество элементов, которые изменили позицию в массиве #6
apachan, гугл не поможет, я же не могу получить те же ошибки, что и ты без этого макроса. гугл сказал, что _MSC_VER это версия сервис пака или типа того для Visual Studio. А причем тут for if (false) ; else for? Как без этого работать не может? Расскажи пожалуйста!
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
17.12.2010, 19:21  [ТС]     Количество элементов, которые изменили позицию в массиве #7
Появлялись разные ошибки, гугл привел меня кстати на этот форум, в теме было ответ человеку с такими же ошибками - вставь в код и все будет ок
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2010, 23:35     Количество элементов, которые изменили позицию в массиве
Еще ссылки по теме:

C++ Найти номера тех элементов массива, которые больше своего правого соседа, и количество таких элементов
C++ В одномерном массиве определить и вывести на экран количество элементов, которые меньше левого, но больше прав
Найти количество строк в массиве, которые содержат максимум C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
17.12.2010, 23:35     Количество элементов, которые изменили позицию в массиве #8
Как-то я невнимательно задание прочитал... Вот так должно быть правильно:
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define SIZE 10
 
int main(void){
    int arr[SIZE], * head, * tail, i, cnt;
 
    srand(time(NULL));
    printf("Before: ");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", ( arr[i] = rand() % 10 ));
    for ( cnt = 0, head = arr, tail = arr + SIZE - 1; head <= tail; ++head, --tail ){
        if ( *head == *tail )
            ++cnt;
        else {
            i = *head;
            *head = *tail;
            *tail = i;
        }
    }
    printf("\nAfter:  ");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", arr[i]);
    printf("\n%d element(s) have retained their positions.\n", cnt);
 
    return 0;
}
Yandex
Объявления
17.12.2010, 23:35     Количество элементов, которые изменили позицию в массиве
Ответ Создать тему
Опции темы

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