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

Количество элементов в разности множеств - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ записть текста в файл с формы http://www.cyberforum.ru/cpp-beginners/thread742133.html
Привет. создала на форме кнопку chackBox. в ней я должна написать название песни и при нажатие на нее у меня название песни должно записываться в файл. не подскажете как это сделать?
C++ Перегрузка функции в С++ 1. Определить функцию Search(), которая позволяет найти самое длинное слово в предложении. Перегрузить функцию Search() для нахождения самого длинного слова в предложении, начинающегося с заданной буквы. 2. Определить функцию Letter(), которая подсчитывает количество букв ‘a’ в заданном слове. Перегрузить функцию Letter для нахождения количества заданной буквы в слове. http://www.cyberforum.ru/cpp-beginners/thread742128.html
Ввод с клавиатуры строку символов C++
Здраствуйте. Пользователь вводит с клавиатуры строку символов. Найти в строке все маленькие англ. букви и перевести их в верхний регистр. Вывести на экран новую строку. Зарание спасибо за помощь.
C++ исправить ошибку в коде
#include <stdio.h> #include <conio.h> #include <windows.h> #include <locale.h> #include <stdlib.h> #define OUTPUT_FILE "./OUTPUT.TXT" #define STRUCT_FILE "./STRUCT.DAT" struct info
C++ Вычислить (case и if) http://www.cyberforum.ru/cpp-beginners/thread742053.html
Здраствуйте дорогие друзья, нужна помощь по case и if.
C++ Символ '\n' и манипулятор endl Встретил в одной книге вот такое выражение (дословно): Если операционная система не использует буферизацию вывода, то между символом новой строки '\n' и манипулятором endl нет никакой разницы. Хотелось бы узнать, а нынешняя Windows использует буферизацию или нет? подробнее

Показать сообщение отдельно
alex_creed
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 3

Количество элементов в разности множеств - C++

22.12.2012, 17:35. Просмотров 411. Ответов 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
40
41
42
43
44
45
46
47
48
49
50
51
52
//Курсовая работа(вариант с массивом)
#include <iostream>
using namespace std;
 
const int AMAX = 100;
 
int main()
{
    setlocale(0, "");
    //Объявление переменных
    int F[AMAX], //Множество F
        G[AMAX], //Множество G
        i,       //Счетчики циклов 
        j,
        n,       //Размерность массивов 
        razn=0;    //Количество элементов в разности
    bool flag;   //"Флаг" несовпадения элементов
    //Ввод данных в массивы
    cout << "Введите размерность множеств: ";
    cin >> n;
    cout << "Введите элементы множества F: ";
    for(i=1; i<=n; i++)
        cin >> F[i];
    cout << "Введите элементы множества G: ";
    for(j=1; j<=n; j++)
        cin >> G[j];
    cout << endl;   
    //Цикл вычисление разности
    for(i=1; i<=n; i++)
    {
        flag=1;
        cout << endl << "<" << i << ">" << endl;
        for(j=1; j<=n; j++)
        {
            if (F[i]==G[j])
            {
                flag=0;
                break;
            }
            cout << "<" << i << "." << j << "> " << F[i] << " vs " << G[j] << endl;
        }
        if (flag) 
            razn++;
        else
            cout << "<" << i << "." << j << "> " << F[i] << " vs " << G[j] << " Совпадение!" << endl;
        cout << "<" << i << ">" << "Количество элементов в разности равно: " << razn << endl;
    }
    
    cout << endl << "Количество элементов в разности равно " << razn;
    
    return 0;
}
Можно ли ее как-то оптимизировать или и так все в порядке? Просто меня смущает то, что каждый раз приходится во вложенном цикле прогонять второй массив.

И второй вопрос(собственно почему я пока сделал все с массивами).
Вот фрагмент программы с файлами:
C++
1
2
3
4
5
6
7
8
9
10
11
while (inF >> f) //Цикл вычисления razn (inF - оператор ввода из файла F.txt)
    { 
        flag=1;
        while (inG >> g) 
                if (g==f) 
            { 
                flag=0;
                break;
            }
        if (flag) razn++;
    }
Как видите, у меня цикл продолжается, пока идет ввод из файла(в основном цикле F.txt, во вложенном - G.txt). Если с основным циклом все в порядке(по очереди вводит элементы из f.txt), то во вложенном проблема. Программа считывает его только один раз, а дальше перескакивает через цикл(т.к. из G.txt уже ввод не идет, он уже прошел). Как сделать, чтобы каждый шаг цикла она снова вводила элементы из G.txt?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru