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

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

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

    Ness Гость

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

    Boriss Гость

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

    Ness Гость

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

    Boriss Гость

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

    Guest Гость

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

    Ness Гость

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

    Boriss Гость

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

    Ness Гость

    <!--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 Гость

    А я всё жду...
     
  10. Boriss

    Boriss Гость

    Вот основа. Проверялось в 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 Гость

    :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 Гость

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

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