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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
morgan30
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 8
#1

Вывести отсутствующие элементы массива - C++

01.07.2010, 09:22. Просмотров 1106. Ответов 11
Метки нет (Все метки)

Собственно есть массив, скажем a[5]={1,3,4,5,6}. Нужно сформировать второй массив такой же размерности, элементы которого будут недостающие значения первого массива в диапазоне от 0 до 9 b[5]={0,2,7,8,9}.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2010, 09:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести отсутствующие элементы массива (C++):

Найти элементы массива отсутствующие в другом массиве - C++
Необходимо создать третий массив в котором нужно собрать элементы массива А, которые не включаются в Б. Запрещается обращаться к элементам...

Переписать в третий массив элементы первого массива, отсутствующие во втором - C++
Нужно переписать в третий массив, элементы первого массива, которых нет во втором, и без повторения. Столкнулся с проблемой, размерность...

Вывести элементы массива на промежутке [ a,b ], вычислить количество элементов массива, заменить все положительные элементы - C++
В одномерном массиве, состоящем из n вещественных элементов, – вывести на печать элементы массива, значения которых не принадлежат...

Вывести все цифры отсутствующие в числе - C++
есть число, например, 93456 необходимо вывести 1 2 7 8 то есть все числа, которые в числе не встречаются. В голове есть примерное...

Сформировать и вывести на экран новый массив, который будет содержать вначале все элементы массива A(0), затем все элементы массива B(4) - C++
Здравствуйте! Помогите написать парочку программ... 3. Даны массивы A(0) и B(4). Сформировать и вывести на экран новый массив,...

Вывести элементы массива в виде таблицы и переставить его элементы местами - C++
Скажите каким образом переставляется двумерный массив ? К примеру : {1,2,3,4,5} мне нужно элементы поменять местами так чтобы последний (5)...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
01.07.2010, 10:01 #2
По логике, код должен работать. Но компилятор показывает что то не то. Что я делаю не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int size = 5;
    int a[size] = {1, 3, 4, 5, 6};
    int b[size];
    
    int i, c;
    for(i=0, c=0; i<10; i++)
    {
             if(i != a[c])
             {
                   b[c] = i;                                       
                   c++;
             }
             
    }
0
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
01.07.2010, 10:04 #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
#include <iostream>
 
int main()
{
    const int sz=10;
    int main[sz]={0,1,2,3,4,5,6,7,8,9};
    const int size=5;
    int first[size]={1,3,5,7,9};
    int second[size]={};
 
 
    for (int i=0; i<size; ++i){
        main[first[i]]=0;
    }
 
    int i=0;
    int j=0;
    while (i<sz){
        if (main[i]){
            second[j]=main[i];
            ++j;
        }
        ++i;
    }
 
     for (int i=0; i<size; ++i){
        std::cout<<second[i];
    }
 
    return EXIT_SUCCESS;
}
1
morgan30
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 8
05.07.2010, 11:44  [ТС] #4
Большое спасибо за помощь , а можно как-то без объявления массива с 10 элементами?

Добавлено через 37 минут
Алгоритм не совсем корректно работает, а если изменить элементы массива first, то программа сразу неправильно работает..надо что-то универсальное(
0
grrrrr
45 / 45 / 7
Регистрация: 21.04.2009
Сообщений: 265
05.07.2010, 12:51 #5
morgan30, вот грубоватый, но рабочий пример.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     int x[5] = {1, 3, 4, 5, 6};
     int y[5];
     int i, j=0;
     
     for(i=0, j=0; i<10; i++)
     {
          if( (i != x[0]) &&  (i != x[1]) && (i != x[2]) && (i != x[3]) && (i != x[4]))    
          {
              y[j] = i;
              j++;
          }
          
     }
 
     for(i=0; i<5; i++)
        cout << y[i] << " ";
     cout << "\n";
1
morgan30
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 8
05.07.2010, 17:14  [ТС] #6
ООО...оно, сам не додумался(((, большое вам человеческое спасибо)
0
PointsEqual
ниначмуроФ
835 / 519 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
05.07.2010, 18:31 #7
Цитата Сообщение от morgan30 Посмотреть сообщение
Алгоритм не совсем корректно работает, а если изменить элементы массива first, то программа сразу неправильно работает..надо что-то универсальное(
хм, ну перед тем как что то отправить я проверяю программу в действии, - изменял элементы, все нормально. А как вы изменяли? покажите код, ошибки

Добавлено через 37 секунд
Цитата Сообщение от grrrrr Посмотреть сообщение
if( (i != x[0]) && (i != x[1]) && (i != x[2]) && (i != x[3]) && (i != x[4]))
это универсально?
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,699
05.07.2010, 20:23 #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
30
#include <stdio.h>
 
#define SIZE 5
 
int main(void){
    int a[SIZE] = { 1, 3, 5, 7, 9 }, b[SIZE] = { -1, -1, -1, -1, -1 }, i, k;
 
    for ( k = 0; k < SIZE * 2; ++k ){
        for ( i = 0; i < SIZE && a[i] != k; ++i )
            ;
        if ( i == SIZE ){
            for ( i = 0; i < SIZE; ++i ){
                if ( b[i] < 0 ){
                    b[i] = k;
                    break;
                }
            }
        }
    }
 
    printf("\nA: ");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", a[i]);
    printf("\nB: ");
    for ( i = 0; i < SIZE; ++i )
        printf("%d ", b[i]);
    printf("\n");
 
    return 0;
}
1
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
05.07.2010, 20:58 #9
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
///////////////////////////////////////////////////////////////////////////////////////
//Собственно есть массив, скажем a[5]={1,3,4,5,6}. Нужно сформировать второй массив 
//такой же размерности, элементы которого будут недостающие значения первого массива 
//в диапазоне от 0 до 9 b[5]={0,2,7,8,9}.
///////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
 
void print_massiv(int* massiv, size_t  size)
{
    std::copy(massiv, massiv + size, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
}
 
int main()
{
    int a[] = {1, 3, 4, 5, 6, 11};
    const int ARR_SIZE = sizeof(a) / sizeof(int);    
    
    int b[ARR_SIZE];
 
    int a_ind = 0;
    int b_ind = 0;    
    for(int cur_num = 0; cur_num < ARR_SIZE * 2; ++cur_num)
    {
        cur_num == a[a_ind] ? ++a_ind : b[b_ind++] = cur_num;
    }
    print_massiv(a, ARR_SIZE);
    print_massiv(b, ARR_SIZE);  
    return 0;
}
1
morgan30
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 8
06.07.2010, 09:30  [ТС] #10
Цитата Сообщение от PointsEqual Посмотреть сообщение
хм, ну перед тем как что то отправить я проверяю программу в действии, - изменял элементы, все нормально. А как вы изменяли? покажите код, ошибки

Добавлено через 37 секунд

это универсально?
Нет, это тоже не универсально... проблема в том, что я начинающий, до функций я еще не дорос..поэтому мне сложновато пока разбираться с этим...Препад на паре говорил, что лучше всего задействовать булевскую переменную (типа флаг), которая меняет свое значение в зависимости от присутствия заданного числа в массиве...естественно как именно ее использовать не сказала. Вот я и сижу второй день пытаюсь написать(уже чисто спортивный интерес) с применением булевской переменной

Добавлено через 6 минут
Приношу свои извинения, работает, я ввел дважды одинаковые переменные поэтому вывело неправильно.
0
Mee
14 / 14 / 1
Регистрация: 05.07.2010
Сообщений: 88
06.07.2010, 10:57 #11
С булевской переменной можно так
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
#include "stdafx.h"
#include <iostream> 
#include <cstdlib> 
using namespace std;
 
int main()
{
    const int n=5;
    int big[10]={1,2,3,4,5,6,7,8,9,10},i,j;
    int c[n];
    bool flag;
    int k=0;
    int b[n]={2,1,3,5,4};
    for (i=0; i<10; i++)
         {
             flag=false;
             for (j=0; j<n; j++)
                 if (big[i]==b[j]) 
                    {
                        flag=true;
                        break;
                    }
                 if (flag==false)
                      { 
                       c[k]=a[i];
                       k++;
                      }
          }
    for (i=0; i<n; i++)
        cout << c[i] << " ";
    cin.get();
    return 0;
}
1
morgan30
0 / 0 / 0
Регистрация: 21.04.2010
Сообщений: 8
06.07.2010, 17:12  [ТС] #12
Спасибо, за еще один пример.

Добавлено через 1 час 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
const int size=5;
    int first[size]={},second[size]={};
    int k=0;
    bool flag;
    for (int i=0;i<size;i++)
    {
        cout<<"Vvedite "<<i<<" element massiva: ";
        cin>>first[i];
    }
    for(int i=0;i<10;i++)
    {
        flag=false;
        for(int j=0;j<size;j++)
        {
            if(i==first[j])
            {
                flag=true;
                break;
            }
        }
        if(flag==false)
        {
            second[k]=i;
            k++;
        }
    }
    for(int i=0;i<size;i++)
    {
        cout<<second[i]<<" ";
    }
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2010, 17:12
Привет! Вот еще темы с ответами:

Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат - C++
Добрый день. Прошу помочь решить вот такую вот задачку: &quot;есть два массива, в которых границы задает пользователь. Например, один...

Удалить из массива все элементы встречающиеся менее 3-х раз и вывести размер полученного массива и его содержимое. - C++
Помогите пожалуйста решить задачу!!!!!! Дан целочисленный массив размера n. Удалить из массива все элементы встречающиеся менее 3-х...

Ввести элементы двумерного массива с клавы С++.Нужно вывести его на экран в виде таблицы, в конце каждой строки надо вывести самый большой элемент - C++
Вот мой код : #include &lt;iostream&gt; #include &lt;Windows.h&gt; using namespace std; using std::cout; using std::cin; int...

Вывести на экран отдельно положительные элементы массива X (16) и отдельно отрицательные элементы - C++
Вывести на экран отдельно положительные элементы массива X (16) и отдельно отрицательные элементы.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.07.2010, 17:12
Ответ Создать тему
Опции темы

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