Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2013, 17:38   #1
Ligeros905
Пользователь
 
Регистрация: 14.10.2013
Сообщений: 33
По умолчанию Программа с массивами и метод пузырька (C++)

Здравствуйте, помогите написать программу на C++ связанной с работой массивов. Никак не могу понять, с чего и как начинать.

Постановка задачи
1. Разработайте программу, выполняющую обработку массивов в соответствии с
заданием для вашего варианта. Используйте статическое выделение памяти для массивов.

Сама задача
На основе исходных массивов A[n] и B[m] (n и m – рабочие размеры массивов)
сформировать массив C, который будет состоять из чисел, которые входят в массив A, но
при этом не входят в массив B. Упорядочить массив С по возрастанию, используя метод
«пузырька». Вывести элементы массива С на экран.
Массивы A, B и C являются целочисленными. Значения m и n, а также значения элементов массива A и B вводятся с клавиатуры

Заранее спасибо
Ligeros905 вне форума Ответить с цитированием
Старый 31.10.2013, 20:53   #2
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void bsort(int*, int);
bool is_set(const int*, int, int);



int main(void) {
     int i, n, m, k;
     int a[32], b[32], c[32];

     cout << "enter array size A: ";
     cin  >> n;
     cout << "enter elements: ";
     for(i = 0; i < n; i++)
            cin >> a[i];
     cout << endl;

     cout << "enter array size B: ";
     cin  >> m;
     cout << "enter elements: ";
     for(i = 0; i < m; i++)
            cin >> b[i];
     cout << endl << endl;
     cin.ignore();

    // перед поиском вхождений нужно отсортировать данное множество
     bsort(b, m);  
     for(k = i = 0; i < n; i++) {
            if(! is_set(b, m, a[i])) // если нет такого элемента
                   c[k++] = a[i]; // значит записываем в массив данный элемент
     }

     // отсортируем по возрастанию и выведем
     bsort(c, k);
     cout << "print array C: ";
     for(i = 0; i < k; i++)
            cout << c[i] << ' ';
     cin.get();
     return 0;
}



// сортировка методом "пузырька"
void bsort(int* arr, int sz) {
     bool is = true;
     int  tmp;
     while(is) {
           is = false;
           for(int i = 0; i < (sz - 1); i++) {
                 if(arr[i] > arr[i + 1]) {
                        tmp = arr[i];
                        arr[i] = arr[i + 1];
                        arr[i + 1] = tmp;
                        is  = true;
                 }
           }
     }
}



// двоичный поиск
bool is_set(const int* arr, int sz, int val) {
      if((val < *arr) || (val > arr[sz-1]))
            return false;
      int m, l, f;

      f = 0;
      l = sz;
      while(f < l) {
           m = (f + l) >> 1;
           if(arr[m] >= val)
                  l = m;
           else
                  f = ++m;
      }
      return (arr[m] == val);
}
Nuklon вне форума Ответить с цитированием
Старый 31.10.2013, 21:49   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
// перед поиском вхождений нужно отсортировать данное множество
bsort(b, m);
Зачем? Будет работать быстрее? Спорно..
Сначала пузырек - O(N^2)
Далее бинарный поиск - O (log N)

А просто бежать в цикле O(N^2).. тадам..
Poma][a вне форума Ответить с цитированием
Старый 31.10.2013, 22:12   #4
Ligeros905
Пользователь
 
Регистрация: 14.10.2013
Сообщений: 33
По умолчанию

Цитата:
Сообщение от Nuklon Посмотреть сообщение
Код:
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
void bsort(int*, int);
bool is_set(const int*, int, int);



int main(void) {
     int i, n, m, k;
     int a[32], b[32], c[32];

     cout << "enter array size A: ";
     cin  >> n;
     cout << "enter elements: ";
     for(i = 0; i < n; i++)
            cin >> a[i];
     cout << endl;

     cout << "enter array size B: ";
     cin  >> m;
     cout << "enter elements: ";
     for(i = 0; i < m; i++)
            cin >> b[i];
     cout << endl << endl;
     cin.ignore();

    // перед поиском вхождений нужно отсортировать данное множество
     bsort(b, m);  
     for(k = i = 0; i < n; i++) {
            if(! is_set(b, m, a[i])) // если нет такого элемента
                   c[k++] = a[i]; // значит записываем в массив данный элемент
     }

     // отсортируем по возрастанию и выведем
     bsort(c, k);
     cout << "print array C: ";
     for(i = 0; i < k; i++)
            cout << c[i] << ' ';
     cin.get();
     return 0;
}



// сортировка методом "пузырька"
void bsort(int* arr, int sz) {
     bool is = true;
     int  tmp;
     while(is) {
           is = false;
           for(int i = 0; i < (sz - 1); i++) {
                 if(arr[i] > arr[i + 1]) {
                        tmp = arr[i];
                        arr[i] = arr[i + 1];
                        arr[i + 1] = tmp;
                        is  = true;
                 }
           }
     }
}



// двоичный поиск
bool is_set(const int* arr, int sz, int val) {
      if((val < *arr) || (val > arr[sz-1]))
            return false;
      int m, l, f;

      f = 0;
      l = sz;
      while(f < l) {
           m = (f + l) >> 1;
           if(arr[m] >= val)
                  l = m;
           else
                  f = ++m;
      }
      return (arr[m] == val);
}
Огромное человеческое спасибо, а подскажите возможно как-то составить блок-схему по этому коду?
Ligeros905 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод пузырька NEXit Помощь студентам 5 28.05.2013 21:10
метод пузырька vrtp Общие вопросы C/C++ 1 18.04.2012 08:47
Метод пузырька gennc Общие вопросы C/C++ 2 15.06.2010 17:57
Метод пузырька(c++) ioda1986 Помощь студентам 1 25.02.2010 10:42
Метод пузырька 13Anka07 Паскаль, Turbo Pascal, PascalABC.NET 1 23.05.2009 19:36