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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2012, 22:24   #1
netfilter
 
Регистрация: 24.11.2012
Сообщений: 3
По умолчанию Соответствие условию

Условие задачи звучит так: Дан текстовой файл размером не менее 100 Кбайт, содержащий строки различной длины. Считать этот файл в оперативную память построчно. Операцию повторить 20 раз. Характеристика: максимальный размер строк (диапазон изменения 64-128 байт).

Написал код:
Код:
#include <iostream>
#include <windows.h>
 
using namespace std;
 
#define FileSize 100*1024      
#define M 20                       
#define _rand(min, max) ( rand() % ((max) - (min) + 1) + (min) )
 
int main(){
    
    __int64 c1, c2, fr; 
    byte  *MemoryArea;
    int i, j, k;
    HANDLE File;                
    DWORD c;
    float t,v;
    char chars[93];                  
    const wchar_t *FileName = TEXT("file.txt");
 
    setlocale(LC_ALL, "Russian");
 
//Открываем файл и заполняем его случайными символами на 100Кб  
 
    File = CreateFile(  FileName, 
                        GENERIC_READ|GENERIC_WRITE, 
                        0, 
                        NULL, 
                        CREATE_ALWAYS, 
                        FILE_ATTRIBUTE_NORMAL, 
                        0);  
 
    if (File == INVALID_HANDLE_VALUE || File == NULL){  
            cout << "Ошибка: " << GetLastError() << endl;
            cin.get();
            return 0;
    }
    for(int i=33, n=1; i<=126; ++i, ++n){
        chars[n] = (char)i; 
    }
    MemoryArea=(byte *)GlobalAlloc(GPTR, FileSize);
 
    for (i=0; i<FileSize; i++){ 
        CopyMemory(MemoryArea+i, &chars[_rand(0, 93)], 1);                                          
    }
    WriteFile(File,MemoryArea,FileSize,&c,0);
    
    if(WriteFile==0){
      cout<< "Ошибка" << GetLastError()<< endl;
      cin.get();
      return 0;
    }
    GlobalFree(MemoryArea); 
 
//Копируем получившийся файл в ОП блоками разной длины
 
    for (i=64; i<=128; i*=2){
        t=0.0;
        MemoryArea=(byte *)GlobalAlloc(GPTR,i); 
 
            for (j=0; j<M; j++){
                SetFilePointer(File,0,NULL,FILE_BEGIN);    
                    
                    for (k=0; k<FileSize/i; k++){
                        QueryPerformanceCounter((LARGE_INTEGER *)&c1);
                        
                        ReadFile(File,MemoryArea,i,&c,0);  
 
                        QueryPerformanceCounter((LARGE_INTEGER *)&c2);
                        QueryPerformanceFrequency((LARGE_INTEGER *)&fr);
 
                        t=t+(c2-c1)/(float)fr; //Итоговое время                       
                    }
            }
        t=t/M; //Среднее время
        v=FileSize/(1024*1024*t);//Скорость MB/s
 
        cout << i << "    | " << v << endl;
        GlobalFree(MemoryArea);                             
    }
 
CloseHandle(File);
cin.get();
return 0;
}
Все работает, но сомневаюсь насчет правильности понимания мной условия,
а именно 'содержащий строки различной длины' и 'Считать этот файл в оперативную память построчно'.
Правильно ли я реализовал условие?
netfilter вне форума Ответить с цитированием
Старый 10.12.2012, 14:00   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

строка в текстовом файле - набор символов, оканчивающихся символами возврата каретки и перевода строки, i.e. "\r\n". В зависимости, ессно, от кодировки и системы.
Перевод строки - Вики

Поэтому, "строка в с++", как значение переменной, терминирующейся нулевым символом, не совсем то, а иногда совсем не то, что имеется в виду под "строка в текстовом файле".
Smogg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка данных из Веба на соответствие заданному условию без вставки их на лист Snekich Microsoft Office Excel 6 23.11.2011 20:18
Соответствие сборки деталей ПК маГГ Компьютерное железо 7 24.09.2011 12:44
Проверка столбцов на соответствие ZSV Microsoft Office Excel 22 22.09.2010 18:32
Соответствие алгоритма и кода @Manya@ Общие вопросы C/C++ 0 08.05.2010 15:45
не соответствие типов amandra SQL, базы данных 6 30.06.2008 18:04