Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачки для новичков! Задачи 
:(
    Опции темы
Чoо
Дата 16.11.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



по поводу ошибки при освобождении памяти. Удивительно, что ошибки не возникают при определенных условиях. 
Код

char *get_full_patch(const char *patch, const char *fname)
{
    char *dest;
    int l;
    l=strlen(patch)+strlen(fname);
    dest = new char[l];
    dest = strcpy(dest,patch);
    dest = strcat(dest,fname);
    return dest;
}

А атк причина ошибки в том, что память выделялась по одному адресу, а освободить я пытался по другому. я думал, что после return dest fullpatch будет указывать на тот же участок памяти, что и dest.

**
ни как не получается. пробовал убрать вышенаписанную функцию, а действия из нее перенести в вызывающуюю ее функцию. Все равно таже ошибка при попытке освободить память и при тех же условиях.
Код

FILE *OpenFile(const char *patch, const char *fname, const char *mode)
{
    char *fullpatch = 0;
    int l=strlen(patch)+strlen(fname);
    fullpatch = new char[l];
    strcpy(fullpatch,patch);
    fullpatch = strcat(fullpatch,fname);
    FILE *f = fopen(fullpatch,mode);
    delete []fullpatch;
    return f;
}



подскажите плз, как можно передать в функцию fopen составной путь (состоящий из пути к файлу и его имени)?

***
о.. пошло.. как раз тогда когда собрался сдаться... ошибка в строке
Код

int l=strlen(patch)+strlen(fname);

в итоге переполнение массива, та как я не выделил память под нулевой символ. => кривое освобождение памяти

Это сообщение отредактировал(а) Чoо - 16.11.2010, 13:07


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Чoо
Дата 16.11.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



сделал я задачу сортировки большого файла с использованием индексов. Честно говоря расстроен, так как на сортировку затрачено времени примерно раз в 5 больше (153,755 сек против 28-29 сек без индексов). Отметки времени еще не расставлял, что бы узнать на каком этапе требуется много времени. 
вот решение с индексированием:
Код

/*
 имеется текстовый файл, строки которого не упорядочены. Упорядочите их
 при помощи сортировки слиянием
 */
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <sys/time.h>
using namespace std;

#define n 100

/* функция составляет полный путь к файлу и открывает его*/
FILE *OpenFile(const char *patch, const char *fname, const char *mode)
{
    char *fullpatch = 0;
    int l=strlen(patch)+strlen(fname)+1;
    fullpatch = new char[l];
    strcpy(fullpatch,patch);
    fullpatch = strcat(fullpatch,fname);
    FILE *f = fopen(fullpatch,mode);
    delete []fullpatch;

    return f;
}

long GetFileSize(const char *patch, const char *fname)
{
    long f_size;
    FILE *f = OpenFile(patch,fname,"r");
    if(!f)
        return 0;
    fseek(f,0,SEEK_END);
    f_size = ftell(f);
    fclose(f);
    return f_size;
}

/* функция сливает файлы c индексами в один*/
void merge(const char *patch, const char *f_ix_nm, const char *fname, int D)
{
    int f_size = GetFileSize(patch,f_ix_nm);
    char sbuf_a[n]; //буфер для чтения и сравнения строк
    char sbuf_b[n]; //буфер для чтения и сравнения строк
    long pos_a,pos_b; //буферы для помещения индекса

    /* откроем файл индексов для записи */
    FILE *f_ix = OpenFile(patch,f_ix_nm,"w");
    /*файлы индексов и сортируемый файл - для чтения*/
    FILE *ftemp_a = OpenFile(patch,"temp_a","r");
    FILE *ftemp_b = OpenFile(patch,"temp_b","r");
    FILE *f = OpenFile(patch,fname,"rt");

    /* получим индексы строк */
    fread(&pos_a,4,1,ftemp_a);
    fread(&pos_b,4,1,ftemp_b);
    while(!feof(ftemp_a) && !feof(ftemp_b))
    {
        int i = 0;
        int j = 0;
        while(i < D && j < D && !feof(ftemp_a) && !feof(ftemp_b))
        {
            /*получаем строки по смещению в pos_a и pos_b */
            fseek(f,pos_a,SEEK_SET);
            fgets(sbuf_a,n,f);
            fseek(f,pos_b,SEEK_SET);
            fgets(sbuf_b,n,f);

            /*сравниваем полученные строки и в соответствии с результатом сравнения
              записываем индексы в индексный файл
            */
            if(strcmp(sbuf_a,sbuf_b) < 0)
            {
                fwrite(&pos_a,4,1,f_ix);
                fread(&pos_a,4,1,ftemp_a);
                i++;
            }
            else
            {
                fwrite(&pos_b,4,1,f_ix);
                fread(&pos_b,4,1,ftemp_b);
                j++;
            }
        }
        if(i==D) //копируем остаток группы из файла Б
            while(j<D && !feof(ftemp_b))
            {
                fwrite(&pos_b,4,1,f_ix);
                fread(&pos_b,4,1,ftemp_b);
                j++;
            }
        else
            if(j==D) //копируем остаток группы из файла А
                while(i<D && !feof(ftemp_a))
                {
                    fwrite(&pos_a,4,1,f_ix);
                    fread(&pos_a,4,1,ftemp_a);
                    i++;
                }
    }
    /* вышли из цикла. Если в каком-либо файле что-то осталось
       копируем это в файл f
     */
    if(feof(ftemp_a))
        while(!feof(ftemp_b))
        {
            fwrite(&pos_b,4,1,f_ix);
            fread(&pos_b,4,1,ftemp_b);
        }
    else
        if(feof(ftemp_b))
            while(!feof(ftemp_a))
            {
                fwrite(&pos_a,4,1,f_ix);
                fread(&pos_a,4,1,ftemp_a);
            }

    /*закрываем открытые файлы */
    fclose(f_ix);
    fclose(ftemp_a);
    fclose(ftemp_b);
    fclose(f);
}

/* делит индексный файл пополам
   Шаг D для того, ято бы случайно не разорвать группу индексов.
*/
void CpyRecordsToFiles(const char *patch, const char *f_ix_nm, int D)
{
    long buf; //буфер для индекса
    FILE *f = OpenFile(patch,f_ix_nm,"r");
    FILE *ftemp_a = OpenFile(patch,"temp_a","w");
    FILE *ftemp_b = OpenFile(patch,"temp_b","w");

    /*приступаем к распределению индексов по половинкам */
    while(!feof(f))
    {
        for(int i = 0; i<D && !feof(f);++i)
        {
            if(fread(&buf,4,1,f))
                fwrite(&buf,4,1,ftemp_a);
        }
        for(int i =0;i < D && !feof(f);++i)
        {
            if(fread(&buf,4,1,f))
                fwrite(&buf,4,1,ftemp_b);
        }
    }
    /* записи скопировали. теперь можно закрыть файлы */
    fclose(f);
    fclose(ftemp_a);
    fclose(ftemp_b);
}



/* функция индексирует строки в файле
   возвращает единицу, если файл проиндексирован.
*/
int indexing(const char *patch, const char *fname)
{
    char buf[n];
    long pos = 0; //указатель на начало строки в файле
    long f_size; //размер сортируемого файла

    /* открываем сортируемый файл */
    FILE *f = OpenFile(patch,fname,"rt");
    if(!f)
        return 0;

    /*создаем индексный файл */
    FILE *findex = OpenFile(patch,"index","w");
    if(!f)
        return 0;

    /*получаем размер сортируемого файла */
    f_size = GetFileSize(patch,fname);
    while(!feof(f) && pos != f_size)    //если текущая позиция равна размеру файла, то по ней строки не будет
    {
        fwrite(&pos,4,1,findex);
        fgets(buf,n,f);
        pos = ftell(f);
    }
    /* закрываем сортируемый и индексный файлы */
    fclose(f);
    fclose(findex);
    return 1;
}

int GetRecordsCount(const char *patch)
{
    int f_size = GetFileSize(patch,"index");
    return f_size/4;
}

/* функция принимает путь к файлу, строки которого надо упорядочить по-возрастанию
 и сортирует файл */
int SortMerge(const char *patch, const char *fname)
{
    /* в начале длина упорядоченного участка = 1 */
    int D = 1;
    int strings_count;

    /*создаем индексный файл*/
    if(!indexing(patch,fname))
        return 0;

    /*определяем количество строк в исходном файле */
    strings_count = GetRecordsCount(patch);

    while(D<strings_count)
    {
        CpyRecordsToFiles(patch,"index",D);
        merge(patch,"index",fname,D);
        D *=2;
    }
    /* отсортировали файл с индексами. Теперь создадим отсортированный файл
       в порядке следования индексов*/
    FILE *f_ix = OpenFile(patch,"index","r");
    FILE *f = OpenFile(patch,fname,"rt");
    FILE *f_sorted = OpenFile(patch,"sorted.txt","wt");
    cout << "sorted.txt be created...\n";
    long pos;
    char buf[n];
    while(!feof(f_ix) && fread(&pos,4,1,f_ix))
    {
        fseek(f,pos,SEEK_SET);
        fgets(buf,n,f);
        fputs(buf,f_sorted);
    }
    fclose(f_ix);
    fclose(f);
    fclose(f_sorted);
    return 1;
}

int main()
{
    timeval tp = {0,0}, tp2={0,0};
    gettimeofday(&tp,0);
    if(SortMerge("/home/oem/Developed/Cpp/study/exercise/8.13.2 with indexing/untitled2/","xxx.txt"))
    {
        gettimeofday(&tp2,0);
        cout << "file is sorted (" << tp2.tv_sec - tp.tv_sec << "," <<  tp2.tv_usec - tp.tv_usec << "s)"  << "\n";
    }
    else
        cout << "FAILED to sort file\n";
    return 0;
}

думаю можно ускорить программу за счет неполного считывания строки при сравнении двух строк по индексу. Хотя прирост скорости в этом случае будет не большим. Кажется, что львиная часть времени уходит на считывание строки по индексу.

Это сообщение отредактировал(а) Чoо - 16.11.2010, 18:16


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
bsa
Дата 16.11.2010, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(Чoо @  16.11.2010,  19:09 Найти цитируемый пост)
думаю можно ускорить программу за счет неполного считывания строки при сравнении двух строк по индексу. Хотя прирост скорости в этом случае будет не большим. Кажется, что львиная часть времени уходит на считывание строки по индексу.

Не поможет. Так как из файла читается минимум 1 кластер (2-4 КБ).
PM   Вверх
Чoо
Дата 16.11.2010, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



Цитата(bsa @  16.11.2010,  18:22 Найти цитируемый пост)

Не поможет. Так как из файла читается минимум 1 кластер (2-4 КБ). 

логично.. да. снова не подумал я. А это нормально, что так скорость упала или это я что-то криво написал? smile




--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
bsa
Дата 17.11.2010, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Если ты сравниваешь с вариантом "полная загрузка в память", то нет ничего удивительного. Если же до этого ты сортировал как-то иначе из файла в файл, то удивительно.
PM   Вверх
Чoо
Дата 17.11.2010, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



bsa, я сравнивал с вариантом, когда делил исходный файл пополам (точнее на две половины), а потом эти половины сливал снова в один файл.

Добавлено через 56 секунд
вот с этим: http://forum.vingrad.ru/index.php?showtopi...t&p=2246278 smile


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
bsa
Дата 17.11.2010, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



вот только как при этом ты уложился в 3 файла?
PM   Вверх
Чoо
Дата 17.11.2010, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



bsa, в смысле как? в один момент времени существовало не более 3х файлов: file_a, file_b и f. после распределения f  по первым двум f можно было затирать... 
Я сейчас подумал над временной сложностью для последнего решения (первое сейчас еще пересмотрю). Если все учел правильно, то за одну фазу происходит N считываний при делении индексного файла на две части, N считываний из индексного файла (уже половинок, а не целого файла) при слиянии и еще N считываний из сортируемого файла, опять же во время слияния. В итоге имеем утроеное N. И так, полное рассчетное время будет выглядеть как: T = const * 3N * log2n
Там где log2 - 2 нижним индексом. Время на получения индексного файла я не учитывал - разовая операция. Занимает примерно секунду при 3х миллионах строк.

Добавлено @ 01:11
в первом решении T = const * 2N * log2n. 
Значит можно быстрее сделать, так как достаточно одного просмотра строк на каждом этапе.

странно... может я неправильно считаю временную сложность, так как в этом случае скорость сортировки должна бы была упасть только в 1,5 раза, но не в 5

Это сообщение отредактировал(а) Чoо - 17.11.2010, 01:14


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
bsa
Дата 17.11.2010, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Чoо, в первом случае у тебя была последовательная работа с файлами. А во втором - случайный доступ. Он хуже ускоряется буферами, чем первый.
PM   Вверх
Чoо
Дата 17.11.2010, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



bsa, ааа... теперь понятно, спсибо за помощь.
**
ну раз с данной задачей справились, перехожу к следующей, а именно: к бинарному поиску. Если успею, сегодня напишу решение smile.


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Чoо
Дата 17.11.2010, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



Цитата

    В текстовом файле находится словарь, по одному слову в строке.
    Запрограммируйте поиск заданного слова, приспособив для этой
    цели алгоритм двоичного поиска

Код

/*
    В текстовом файле находится словарь, по одному слову в строке.
    Запрограммируйте поиск заданного слова, приспособив для этой
    цели алгоритм двоичного поиска
*/
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

#define N 100

/* функция составляет полный путь к файлу и открывает его*/
FILE *OpenFile(const char *patch, const char *fname, const char *mode)
{
    char *fullpatch = 0;
    int l=strlen(patch)+strlen(fname)+1;
    fullpatch = new char[l];
    strcpy(fullpatch,patch);
    fullpatch = strcat(fullpatch,fname);
    FILE *f = fopen(fullpatch,mode);
    delete []fullpatch;

    return f;
}

/*функция определяет размер файла*/
long GetFileSize(const char *patch, const char *fname)
{
    long f_size;
    FILE *f = OpenFile(patch,fname,"r");
    if(!f)
        return 0;
    fseek(f,0,SEEK_END);
    f_size = ftell(f);
    fclose(f);
    return f_size;
}


/*функция индексирует заданный файл.
  Возвращает двойку, если файл проиндексирован.
             единицу, если не проиндексирован,
             0 - при ошибке
*/
int indexing(const char *patch, const char *fname)
{
    char buf[N];
    long pos = 0; //указатель на начало строки в файле
    long f_size; //размер сортируемого файла

    /* открываем сортируемый файл */
    FILE *f = OpenFile(patch,fname,"rt");
    if(!f)
        return 0;

    /*пробуем открыть индексный файл. Если он отсутствует
      то создаем, если он существует, то спрашиваем пользователя
      о необходимости создать его
    */
    FILE *findex = OpenFile(patch,"index","r");
    if(!findex)
    {
        /*создаем индексный файл */
        findex = OpenFile(patch,"index","w");
        if(!findex)
        {
            fclose(f);
            return 0;
        }
    }
    else
    {
        /*индексный файл существует, спрашиваем пользователя
          необходимо ли его переписать*/
        cout << "Index file exists. Overwrite it? (y/n)\n";
        char c[1];
        cin >> c;

        if((strcmp(c,"y")==0) || (strcmp(c,"Y"))==0)
        {
            /*создаем индексный файл */
            fclose(findex);
            findex = OpenFile(patch,"index","w");
            if(!findex)
            {
                fclose(f);
                return 0;
            }
        }
        else
        {
            fclose(findex);
            fclose(f);
            return 1;
        }
    }


    /*получаем размер индексируемогофайла */
    f_size = GetFileSize(patch,fname);
    while(!feof(f) && pos != f_size)    //если текущая позиция равна размеру файла, то по ней строки не будет
    {
        fwrite(&pos,4,1,findex);
        fgets(buf,N,f);
        pos = ftell(f);
    }
    /* закрываем индексируемый и индексный файлы */
    fclose(f);
    fclose(findex);
    return 2;
}

/*функция осуществляет бинарный поиск в заданном файле. При успехе возвращает
  единицу, иначе - 0*/
int BinarySearch(const char *patch, const char *fname, const char *word)
{
    int result;
    /*сначала пробуем проиндексировать файл*/
    cout << "Indexation file, please wait...\n";
    result = indexing(patch,fname);
    if(result == 2)
        cout << "File is indexed. Continue search...\n";
    else
    if(result == 1)
        cout << "Indexation aborted. Continue search...\n";
    else
    {
        cout << "Indexation failed, search impossible, sorry...\n";
        return 0;
    }

    /* количество строк в индексируемом файле */
    long s_count = GetFileSize(patch,"index")/4; //4  -  размер типа long

    /*приступаем к поиску*/
    int left = 0;
    int right = s_count-1;
    long ix; //индекс строки
    char buf[N]; //буфер для приема строк
    FILE *f = OpenFile(patch,fname,"rt");
    if(!f)
        return 0;
    FILE *f_ix = OpenFile (patch,"index","r");
    if(!f_ix)
        return 0;
    while(left <= right)
    {
        /*середина участка поиска */
        int middle = (left + right)/2;
        fseek(f_ix,middle*4,SEEK_SET);
        fread(&ix,4,1,f_ix);
        fseek(f,ix,SEEK_SET);
        fscanf(f,"%s",buf);
        result = strcmp(buf,word);
        if(result>0)
            right = middle-1;
        else
            if(result<0)
                left = middle+1;
            else
                return 1;
    }
    return 0;
}

int main()
{
    char buf[N];
    for(;;)
    {
        cout << "Enter a search word: ";
        cin >> buf;
        if(BinarySearch("/home/oem/Developed/Cpp/study/exercise/8.13.4/untitled1/","xxx.txt",buf))
            cout << "Word found\n";
        else
            cout << "Word not found\n";
        cout << "Find another word? (y/n)";
        cin >> buf;
        if(strcmp(buf,"y")!=0)
            if(strcmp(buf,"Y")!=0)
                break;
    }
    return 0;
}

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


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Чoо
Дата 17.11.2010, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



Dov, ваш вариант интересней будет. разобрал его. У меня слишком много кода и всё усложнено как-то.


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Dov
Дата 18.11.2010, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(Чoо @  17.11.2010,  21:15 Найти цитируемый пост)
У меня слишком много кода и всё усложнено как-то.

Эт точно. Такое количество кода трудно переваривать, а то, что комментируешь это хорошо.  
     Вот интересный момент:
Код
        cout << "Index file exists. Overwrite it? (y/n)\n";
        char c[1];
        cin >> c;

        if((strcmp(c,"y")==0) || (strcmp(c,"Y"))==0)

Зачем так сложно?  smile 

Вот немного переделал, вроде так попроще:
Код
#define N 20
int main()
{
    char     buf[N];
    char  *  key  = "qwerty";
    FILE  *  file = fopen("file_name.txt", "rt");
    int      left, mid, right, cmp = 0;

    fseek(file, 0, SEEK_END);
    left  = 0;
    right = ftell(file);
 
    while(left < right)
    {
        mid = (left + right) / 2;
        fseek(file, mid, SEEK_SET);

        while(mid > 0 && fgetc(file) != '\n')
        {
            mid -= 2;
            fseek(file, mid < 2 ? 0 : mid, SEEK_SET);
        }

        fgets(buf, N, file);
        if(buf[strlen(buf) - 1] == '\n')
            buf[strlen(buf) - 1] = '\0';

        if((cmp = strcmp(key, buf)) == 0)
            break;

        cmp < 0 ? right = mid : left = mid + strlen(buf) + 1;
    }
    printf("%s%sfound!\n", key, cmp ? " not " : " ");
    fclose(file);
    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Чoо
Дата 18.11.2010, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 22.9.2009

Репутация: 4
Всего: 4



Цитата(Dov @  18.11.2010,  00:22 Найти цитируемый пост)
Зачем так сложно?  smile 

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

Цитата(Dov @  18.11.2010,  00:22 Найти цитируемый пост)
Вот немного переделал

обязательно разберу чуть по-позже, неясности кое-какие есть (в принципе пошагово проверить не проблема, потому не спрашиваю smile.

комментарии... ну с ними проще как-то.. Когда-то пренебрегал подробными комментами, пока не понадобилось "ковырять" старые проекты

Добавлено @ 01:12
кстати вот не знал, что так можно: 
Код

cmp < 0 ? right = mid : left = mid + strlen(buf) + 1;

конечно разобрал что к чему, но такую запись не видел еще smile

Это сообщение отредактировал(а) Чoо - 18.11.2010, 01:16


--------------------
user posted image

OS: Debian Squeeze (kernel 3.8.2)
IDE: qtCreator 1.3.1; Eclipse SDK 3.5.2
PM MAIL   Вверх
Dov
Дата 18.11.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(Чoо @  18.11.2010,  00:11 Найти цитируемый пост)
можно было еще сделать как в главной функции Main . Ну вообще задумка там была производить индексирование только в том случае, если проиндексированный файл поменялся.

Чoо, я не про это говорю. Зачем сравнивать строки(), если можно сравнить символы?
Код
if((strcmp(c,"y")==0) || (strcmp(c,"Y"))==0)



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1365 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.