Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите поправить срочно

42K
24 декабря 2010 года
Homa.ru
6 / / 27.11.2008
всем привет. Вот написал код для ЛР, а не могу разобраться с ошибкой
Код:
#include <iostream>
#include <stdio.h>
#include <ctime>
using namespace std;

const int N = 10000;

long size[] = {32,64,128,256};
long *arrays[4];
int blocks = 2048;

long block1(long *arr, int size)
{
    long *ptr;
    time_t begin, end;
    begin = clock();
    for(int n=0; n<N; n++)
    {
        ptr = arr;
        for(int i=0; i<blocks*2; i++)
        {
            ptr = (long*)(*ptr);
        }
    }
    end = clock();
     cout << "32kb:"<< end-begin << " ms";
    return 0;
}

long block2(long *arr, int size)
{
    long *ptr;
    time_t begin, end;
    begin = clock();
    for(int n=0; n<N; n++)
    {
        ptr = arr;
        for(int i=0; i<blocks*4; i++)
        {
            ptr = (long*)(*ptr);
        }
    }
    end = clock();
    cout << "64kb:"<< end-begin << " ms";
    return 0;
}

long block3(long *arr, int size)
{
    long *ptr;
    time_t begin, end;
    begin = clock();
    for(int n=0; n<N; n++)
    {
        ptr = arr;
        for(int i=0; i<blocks*4; i++)
        {
            ptr = (long*)(*ptr);
        }
    }
    end = clock();
    cout << "128kb:"<< end-begin << " ms";
    return 0;
}

long block4(long *arr, int size)
{
    long *ptr;
    time_t begin, end;
    begin = clock();
    for(int n=0; n<N; n++)
    {
        ptr = arr;
        for(int i=0; i<blocks*8; i++)
        {
            ptr = (long*)(*ptr);
        }
    }
    end = clock();
    cout << "256kb:"<< end-begin << " ms";
    return 0;
}


int main (long *arr, int size) {
    // создаёт блоки и инициализирует их согласно условию задачи
    for(int i=1; i<5; i++)
    {
        blocks*=2;
        arrays = new long[blocks];
        for(int j=0; j<blocks; j++)
            arrays[j] = long ( arrays + j + 1 );
    }
    //запускаем блоки на выполнение и подсчет времени
    block1(long *arr, int size);
    block2(long *arr, int size);
    block3(long *arr, int size);
    block4(long *arr, int size);
    return 0;
}

не могу понять что передавать в block№(long *arr, int size);
Заранее спасибо
29K
24 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
Цитата:
не могу понять что передавать в block№(long *arr, int size);


я думаю это

 
Код:
block1(arrays[0], size[0]);
    block2(arrays[1], size[1]);
    block3(arrays[2], size[2]);
    block4(arrays[3], size[3]);



 
Код:
int main (long *arr, int size)
это неверно, Вы пишите что в функцию main должны передаваться параметры, но туда ничего не передаёте, более того, я думаю, передавать в эту функцию вообще ничего не надо, так как массив arrays[] вы заполняете внутри этой функции

 
Код:
// создаёт блоки и инициализирует их согласно условию задачи
    for(int i=1; i<5; i++)
    {
        blocks*=2;
        arrays = new long[blocks];
        for(int j=0; j<blocks; j++)
            arrays[j] = long ( arrays + j + 1 );
    }

я такого ещё не видел:) если запустите в отладчике, то увидите, что массив не заполняется
42K
25 декабря 2010 года
Homa.ru
6 / / 27.11.2008
вот оригинал
Код:
#include <iostream>
#include <ctime>
using namespace std;

const int N = 10000; //количество чтений каждого блока

//возвращает кол-во элементов в массиве
#define _countof(_Array) (sizeof(_Array)/sizeof(_Array[0]))

//возвращает кол-во элементов типа long в блоке размером kb килобайт
#define COUNT(kb) (kb*1024/sizeof(long))

long size[] = {1,2,4,8,16,32,64,128,256,512,1024}; //массив с размерами блоков
long *arrays[ _countof(size) ]; //массив указателей на блоки


// создаёт блоки и инициализирует их согласно условию задачи
void initArrays()
{
    for(int i=0; i<_countof(size); i++)
    {
        arrays = new long[ COUNT(size) ];
        for(int j=0; j<COUNT(size); j++)
            arrays[j] = long ( arrays + j + 1 );
        cout << _countof(size)<< endl;
    }
}


// возвращает время, потраченное на прохождение блока arr размера size
long getTime(long *arr, int size)
{
    long *ptr;
    time_t begin, end;
    begin = clock();
    for(int n=0; n<N; n++)
    {
        ptr = arr;
        for(int i=0; i<COUNT(size); i++)
        {
            ptr = (long*)(*ptr);
        }
        cout << COUNT(size) << endl;
    }
    end = clock();
    return end-begin;
}


int main()
{
    initArrays();
   
    for(int i=0; i<_countof(size); i++){
        cout << size << " kb: " << getTime(arrays, size) << "ms\n";
    cout << _countof(size)<< endl;
    }
}

Тот код, что сверху для девушки - чтобы разобралась.
Что нужно в ней поправить? Заранее Спасибо, очень помогаете
29K
25 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
чтоб легче помочь было, вы бы задание скинули:)
42K
25 декабря 2010 года
Homa.ru
6 / / 27.11.2008
1) Создать массив в памяти обьемом 32, 64, 128 и 256 килобайт.
2) Каждый элемент памяти должен содержать адрес следующего элемента памяти с шагом в единицу.
3) Определить время считывания отдельных блоков памяти.
4) Определить зависимость времени обращения к блоку в зависимости от обьема.
5) Определить влияние команд программы на время считывания блока. Для этого необходимо после каждой команды обращения к памяти добавить пустые блоки. Исполнить только для одного блока. Проанализировать полученные данные.

Чтобы засечь время - надо читать блоки 10 000 раз
29K
25 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
 
Код:
// создаёт блоки и инициализирует их согласно условию задачи
   [COLOR="Red"] for(int i=1; i<5; i++)[/COLOR]
    {
        blocks*=2;
        arrays = new long[blocks];
        for(int j=0; j<blocks; j++)
            arrays[j] = long ( arrays + j + 1 );
    }

вместо выделенной строки нужно написать
 
Код:
for(int i=0; i<4; i++)

иначе arrays[0] просто пропускаем, а в несуществующий arrays[4] будем пытаться что-то записать.

А так, в отладчике вылетает ошибка:
[HTML]Необработанное исключение в "0x00411536" в "12.exe":
0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdfd".[/HTML]
на строке:
Код:
long block1(long *arr, int size)
{
    long *ptr;
    time_t begin, end;
    begin = clock();
    for(int n=0; n<N; n++)
    {
        ptr = arr;
        for(int i=0; i<blocks*2; i++)
        {
       [COLOR="red"]     ptr = (long*)(*ptr); [/COLOR]
        }
    }
    end = clock();
     cout << "32kb:"<< end-begin << " ms";
    return 0;
}

к сожалению, я не смог исправить:(
29K
25 декабря 2010 года
Енот_в_Засаде
224 / / 09.11.2010
число слишком большое "0xfdfdfdfd" = 4261281277 (long int от -2147483648 до 2147483647)
42K
25 декабря 2010 года
Homa.ru
6 / / 27.11.2008
Большое спасибо. Выручили)))
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог