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

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

Войти
Регистрация
Восстановить пароль
 
Stak
0 / 0 / 0
Регистрация: 11.04.2009
Сообщений: 21
#1

Построение бинарным поиском - C++

11.04.2009, 16:59. Просмотров 515. Ответов 0
Метки нет (Все метки)

Добрый день. Я написал программу для нахождения Объединения, пересечения, разности и симметрической разности 2-х списков, причём первый список упорядочен по убыванию и 1-е элементы обоих списков служат индексом на количество элементов в этих списках. Но у меня возникла проблема с бинарным поиском =\ Не могли ы вы мне с ним помочь?
Код
#include <stdio.h>
int main()
{
    int i;                                        //счётчик эл-тов в массиве
    int m=0;                                      //длина массива M
    int n=0;                                      //длина массива N
    int M[255];                           //массив для работы с 1 множеством
    int N[255];                           //массив для работы со 2 множеством
    int a=0;                                      //номер эл-та в множестве M
    int b=0;                                      //номер эл-та в множестве N
    int c=0;                                      //номер эл-та в массивах
    int d=0;                                      //номер эл-та в массиве разности M-N
    int e=0;                                      //номер эл-та в массиве разности N-M
    int objedinenie[255];         //массив, в котором будет строится объединение
    int peresechenie[255];        //массив, в котором будет строится пересечение
    int raznMN[255];                      //массив, в котором будет строится разность M-N
    int raznNM[255];                      //массив, в котором будет строится разность N-M
    int simrazn[255];                     //массив, в котором будет строится симметричная разность
    int flag=0;


    FILE *fpin, *fpout;


    fpin=fopen("input.txt","r");          //открытие файла на чтение
    fscanf(fpin,"%d",&m);                 //считывание длин множеств и сами множества в массив
    for(i=0;i<m;i++)
        fscanf(fpin,"%d",&M[i]);
    fscanf(fpin,"%d",&n);
    for(i=0;i<n;i++)
        fscanf(fpin,"%d",&N[i]);
    fclose(fpin);


    fpout=fopen("output.txt","w");        //открытие файла на запись


//построение объединения
    c=0;
    flag=0;
    for(a=0;a<m;a++)
    {
        objedinenie[c]=M[a];
        c++;
    }
    for(b=0;b<n;b++)
    {
        for(i=0;i<m;i++)
            if(N[b]==objedinenie[i])
                flag=1;
        if(flag==0)
        {
            objedinenie[c]=N[b];
            c++;
            i=0;
        }
        else
        {
            i=0;
            flag=0;
        }
    }
    fprintf(fpout,"объединение: \n ");            //вывод результата в output.txt
    fprintf(fpout,"%d:",c);
    for(i=0;i<c;i++)
        fprintf(fpout,"%d ",objedinenie[i]);


//построение пересечения
    c=0;
    for(a=0;a<m;a++)
    {
        for(b=0;b<n;b++)
            if(M[a]==N[b])
            {
                peresechenie[c]=M[a];
                c++;
            }
        b=0;
    }
    fprintf(fpout,"\n пересечение: \n ");         //вывод результата в output.txt
    fprintf(fpout,"%d:",c);
    for(i=0;i<c;i++)
        fprintf(fpout,"%d ",peresechenie[i]);


//построение разности M-N
    flag=0;
    for(a=0;a<m;a++)
    {
        for(i=0;i<c;i++)
            if(peresechenie[i]==M[a])
                flag=1;
        if(flag==0)
        {
            raznMN[d]=M[a];
            d++;
            i=0;
        }
        else
        {
            i=0;
            flag=0;
        }
    }
    fprintf(fpout,"\n разность M-N: \n ");        //вывод результата в output.txt
    fprintf(fpout,"%d:",d);
    for(i=0;i<d;i++)
        fprintf(fpout,"%d ",raznMN[i]);
//построение разности N-M
    flag=0;
    for(b=0;b<n;b++)
    {
        for(i=0;i<c;i++)
            if(peresechenie[i]==N[b])
                flag=1;
        if(flag==0)
        {
            raznNM[e]=N[b];
            e++;
            i=0;
        }
        else
        {
            i=0;
            flag=0;
        }
    }
    fprintf(fpout,"\n разность N-M: \n ");        //вывод результата в output.txt
    fprintf(fpout,"%d:",e);
    for(i=0;i<e;i++)
        fprintf(fpout,"%d ",raznNM[i]);


//рассчёт симметрической разности
    c=0;
    for(i=0;i<d;i++)
    {
        simrazn[c]=raznMN[i];
        c++;
    }
    for(i=0;i<e;i++)
    {
        simrazn[c]=raznNM[i];
        c++;
    }
    fprintf(fpout,"\n симметрическая разность: \n ");     //вывод результата в output.txt
    fprintf(fpout,"%d:",c);
    for(i=0;i<c;i++)
        fprintf(fpout,"%d ",simrazn[i]);
    fclose(fpout);                                //закрытие файла
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2009, 16:59     Построение бинарным поиском
Посмотрите здесь:

C++ Помогите с бинарным файлом
Литература по бинарным деревьям C++
задача с бинарным файлом C++
C++ Проблемы с бинарным файлом
C++ Поиск буквы бинарным поиском в тексте
C++ работа с бинарным файлом
Поиск бинарным методом C++
C++ Работа с бинарным файлом
Работа с бинарным файлом C++
C++ Поиздеавться над бинарным поиском
Сортировка бинарным деревом C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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