Программа на Си.

Тема в разделе "Общие вопросы по С и С++", создана пользователем Ness, 19 дек 2005.

Статус темы:
Закрыта.
  1. Ness

    Ness Гость

    Репутация:
    0
    Срочно надо на языке Си написать программу, которая могла бы измерить скорость вывода данных на диск.
    Заранее огромное спасибо!
     
  2. Boriss

    Boriss Гость

    Репутация:
    0
    Не совсем корректный вопрос. Нужно уточнить:
    1) на каком С
    2) в какой опер. системе
    3) какими функциями (опер. системы - API?) можно пользоваться
    4) что писать на диск (тип файла) - или максимальную скорость
    5) на какой диск
    6) точность, с какой определять
    Идея простая: засечь время, вывести N раз, разница времен, деленная на N
     
  3. Ness

    Ness Гость

    Репутация:
    0
    1) чтобы компилятором Turbo C компилировалась
    2) винда
    3) я полагаю, что можно пользоваться наиболее простыми функциями... на ваше усмотрение, на самом деле...
    4) вопрос не поняла... :) в принципе, ничего при выдаче заданий не оговаривалось... но дело в том, что эта задача рассматривается, как курсовая работа на 1м курсе технического ВУЗа... поэтому какие-то ограничения всё-таки есть, наверное...
    5) хард, наверное
    6) тоже не оговорено... важна суть...
    З.ы: если вы утверждаете, что идея несложна, то может быть окажете небольшую услугу... если осидеть и покорпеть месяца 2 - возможно, я и додумаюсь, как написать вот такую вот непростую прогу... Но у меня в запасе всего 3-4 дня... не больше...
    B)
     
  4. Boriss

    Boriss Гость

    Репутация:
    0
    1) У меня Turbo C 2.0 - пойдет? (есть GCC из свободных, и стандартный набор)
    4) Тип файла - в принципе ОБЩАЯ скорость записи может быть различной (например, при записи в текстовый идет еще и преобразование информации). Но, видимо, если судить по Вашему ответу, то .... Хм. Попробую сравнить
    ЗЫ: иначе бы и не писал B)
     
  5. Guest

    Guest Гость

    Репутация:
    0
    Boriss,
    1) пойдёт.
    З.ы: в понедельник - последний день сдачи курсовика...
    на вас вся надежда...
    З.ы#2: есть одно пожелание - в проге оставляйте, плз, комменты, чтобы я могла разобраться, что к чему, и тоже писать такие вотЪ программы...
     
  6. Ness

    Ness Гость

    Репутация:
    0
    Boriss
    Помогите.... Ну пожалуйста....
    :D
     
  7. Boriss

    Boriss Гость

    Репутация:
    0
    К вечеру только смогу прислать - отчеты заели
     
  8. Ness

    Ness Гость

    Репутация:
    0
    <!--QuoteBegin-Boriss+26:12:2005, 12:17 -->
    <span class="vbquote">(Boriss @ 26:12:2005, 12:17 )</span><!--QuoteEBegin-->К вечеру только смогу прислать - отчеты заели
    [snapback]28766" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Хорошо! Конечно...!
    Лишь бы только написали бы...
     
  9. Ness

    Ness Гость

    Репутация:
    0
    А я всё жду...
     
  10. Boriss

    Boriss Гость

    Репутация:
    0
    Вот основа. Проверялось в TurboC 2.0
    Теперь найдите информацию (спишите, скопируйте о выводе с помощью потоков fwrite ....)
    Код (Text):
    #include <stdio.h>
    #include <time.h>

    int main () {
     FILE *fp;
     char str[80] = "0123456789";
     int len;
     time_t start, end;
     long int t, null_for;
     long times = 100;

     if ((fp = fopen("diskwr1.dat", "w")) == NULL) {
     printf("Ошибка открытия файла diskwr.dat\n");
     return -1; }

     printf("Определение длительности работы пустого цикла\n");
     printf("и одновременно необходимого числа раз выполнения цикла\n");
     do {
     times *= 2;
     start = time(NULL);
      for (t=0; t < times; t++);
     end  = time(NULL);
     null_for = difftime(end, start);
     printf("times = %li  %i\n", times, null_for);
     } while (null_for == 0);

     len = strlen(str);
     printf("Вывод с помощью оператора fputs\n");
     start = time(NULL);
      for (t=0; t<times; t++)
      fputs(str, fp);
     end  = time(NULL);
    /*  fputs("\n", fp); */
     printf("\nС помощью fputs символ записывается за %e секунд\n",
     (difftime(end, start)-null_for)/times/len);
     fclose(fp);

     printf("Вывод с помощью оператора fwrite\n");
     fp = fopen("diskwr2.dat", "wb");
     start = time(NULL);
      for (t=0; t < times; t++) fwrite(&str, len, 1, fp);
     end = time(NULL);
     fclose(fp);

     printf("с помощью fwrite за %e секунд",
       (difftime(end, start)-null_for)/times/len);

    return 0;
    }
    Думаю, что все ясно. Но учтите, что файлы создаются на 62,5 Мег
    Есть и другие варианты решения ...
     
  11. Ness

    Ness Гость

    Репутация:
    0
    :rolleyes:
    А проще это нельзя решить..?
    Вот посмотрите такой вариант проги, он правильный?

    Код (Text):
    #include <stdio.h>
    #include <conio.h>
    #include <dos.h>
    #include <time.h>

    void main()

    {
    FILE* file;
    int pr, pr1, pr2;
    double i;
    struct dostime_t t1, t2;
    _dos_gettime(&t1);
    file = fopen ("test.txt", "wt");
    for(i=0;i<10000000;i++)
    {
     fputc (rand(100), file);
    }
    _dos_gettime(&t2);


    pr1 = (int)t1.second + t2.second+ t1.hsecond+t1.hsecond;
    pr2 = (int)t2.second + t2.second+ t2.hsecond+t2.hsecond;

    printf("%d\n", pr1+pr2);


    fclose(file);
    getch();
    }
     
  12. Ness

    Ness Гость

    Репутация:
    0
    Спасибо всем большое!!!!!!!!!!!!!!!
    Особенно вам, Boriss!
    У меня зачёт по курсовой!!!
    С наступающим и удачи в Новом году!
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей