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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] черный ящик, .Напишите комментарии 
:(
    Опции темы
klmden
Дата 25.11.2010, 09:58 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Напишите пожалуйста комментарии на против строчек. что они значат.

Код
#include <process.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
  int test_num=35;
  int i=0,j=0,y=0,e=0,rez,mis=0,not=0;

  char *arg[5];
  arg[1]=new char[10];
  arg[2]=new char[10];
  arg[3]=new char[10];
  arg[4]=new char[10];

  char rec_res [30];
  char test_rec [50];
  char exp_res [30];
  FILE *in,*in2;

  clrscr();
  printf("\tПрограмма-тестер\n\tТестирование файла");

  in2 = fopen("TESTS.TXT", "r");

  while( fgets(test_rec, 50, in2) != NULL)
  {
    clrscr();
    in = fopen("RESULT.TXT", "r");
    printf("\tТест номер %i\n\n",i+1);
    printf("\tВ программу передаются аргументы:\n\t");
    j=-1;
    for(y=1; y<=4; y++)
    {
        e=0;
        j++;
        while(j<strlen(test_rec)&&test_rec[j]!=' ')
        {
            arg[y][e]=test_rec[j];
            j++;
            e++;
        }
        arg[y][e]='\0';
    }
    j++;
    e=0;
    while(j<strlen(test_rec))
    {
        exp_res[e]=test_rec[j];
        e++;
        j++;
    }
    for(j=1; j<5; j++)
    {
        printf("%s  ",arg[j]);
    }

    printf("\n\n\tОжидаемый результат: %s\n\n",exp_res);
    rez=spawnv(P_WAIT,"RECT.EXE", arg);
    if(rez!=0)
    {
        printf("\tОшибка! Код ошибки: %i\n",rez);
        not++;
    }
    else
    {
        printf("\tПрограмма выполнена успешно\n\n");
        printf("\tРезультат выполнения: ");
        while (!feof(in))
        {
          if ( fgets(rec_res, 30, in) != NULL )
            printf("%s ", rec_res);
        }
        if(strstr(rec_res,exp_res)!=NULL) printf("\n\tБыл получен ожидаемый результат.\n");
        else
        {
            printf("\n\tПолученный результат не совпадает с ожидаемым!\n"); 
            mis++;
        }
    }
    fclose(in);
    printf("\n\tНажмите любую клавишу для перехода к следующему тесту");
    i++;
    getch();
  }
  clrscr();
  printf("\tБыло проведено тестов: %i\n\tОжидаемый результат не совпал с полученным %i раз\n\tТестируемая программа аварийно завершила работу %i раз",test_num,mis,not);
  getch();
  fclose(in2);
  delete arg;
  return 0;
}



Модератор: Не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 25.11.2010, 13:15
PM MAIL   Вверх
borisbn
Дата 25.11.2010, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



 int test_num=35; // переменной test_num присваивается 35
...
  FILE *in,*in2; // содаются два указателя на структуру FILE
...
  clrscr(); // вызывается функция clrscr
...
  in2 = fopen("TESTS.TXT", "r"); // переменной in2 присваивается результат выполнения функции fopen


пойдёт ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
klmden
Дата 25.11.2010, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(borisbn @ 25.11.2010,  10:33)
int test_num=35; // переменной test_num присваивается 35
...
  FILE *in,*in2; // содаются два указателя на структуру FILE
...
  clrscr(); // вызывается функция clrscr
...
  in2 = fopen("TESTS.TXT", "r"); // переменной in2 присваивается результат выполнения функции fopen


пойдёт ?

а можно чуть по подробнее. в смысле строчек больше прокомментировать
PM MAIL   Вверх
jonie
Дата 25.11.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



дополню что строки вида:
Код

  {

и
Код

  }

это соотвественно открывающая и закрывающая скобка.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Cheloveck
Дата 25.11.2010, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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





--------------------
user posted image
PM Jabber   Вверх
xvr
Дата 25.11.2010, 12:15 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(klmden @  25.11.2010,  09:58 Найти цитируемый пост)
Напишите пожалуйста комментарии на против строчек. что они значат.

Счас напишу!
Код

#include <process.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
// Подключили кучу инклюдов, не важно - нужны они были или нет

int main()
{
  int test_num=35;
  int i=0,j=0,y=0,e=0,rez,mis=0,not=0;

  char *arg[5];
  arg[1]=new char[10];
  arg[2]=new char[10];
  arg[3]=new char[10];
  arg[4]=new char[10];
// Аффтар был не в курсе, что массивы в С++ индексируются с 0, так же он не в курсе, что в С++ совсем не обязательно все пихать в new. Там и просто память есть :)


  char rec_res [30];
  char test_rec [50];
  char exp_res [30];
  FILE *in,*in2;

  clrscr();
// Кроме того, аффтар видимо последние 30 лет просидел в каком то окопе, иначе не понятна причина применения компилятора (и ОС) 30ти летней давности

  printf("\tПрограмма-тестер\n\tТестирование файла");

  in2 = fopen("TESTS.TXT", "r");
// Еще аффтар не в курсе существования текстовых и бинарных файлов в его любимой консервированной оси.

  while( fgets(test_rec, 50, in2) != NULL)
  {
    clrscr();
// Зато у аффтара видимо стробоскопическое зрение, иначе непонятно, как он сможет увидеть на экране выводы предыдущего printf, если он их практически немедленно стер

    in = fopen("RESULT.TXT", "r");
// Аффтору предупредительный выстрел в голову за многократное открытие/закрытие одного и того же файла в цикле

    printf("\tТест номер %i\n\n",i+1);
    printf("\tВ программу передаются аргументы:\n\t");
    j=-1;
    for(y=1; y<=4; y++)
    {
        e=0;
        j++;
        while(j<strlen(test_rec)&&test_rec[j]!=' ')
// Аффтору оторвать голову за цикл j<strlen(test_rec)
        {
            arg[y][e]=test_rec[j];
// Возможный (и весьма вероятный) выход за пределя массива
            j++;
            e++;
        }
        arg[y][e]='\0';
    }
// За весь вышеизложенный цикл, и за незнание основ string.h (который он кстати зачем то включил в начале) - оторвать руки. Цикл удалить и написать:
///////
   char* tr=strtok(test_rec," ");
   for(y=1; tr && y<=4; y++, tr=strtok(NULL," "))
    {
     char* p=arg[y];
     strncpy(p,tr,10); 
     p[9]=0;
    }
   tr=strtok(NULL,"");
///////

    j++;
    e=0;
    while(j<strlen(test_rec))
    {
        exp_res[e]=test_rec[j];
        e++;
        j++;
    }
// Аффтару оторвать жопу, для решения проблемы кривых рук в корне :) Вместо цикла написать:
   strncpy(exp_res,tr,sizeof(exp_res)-1);

    for(j=1; j<5; j++)
    {
        printf("%s  ",arg[j]);
    }

    printf("\n\n\tОжидаемый результат: %s\n\n",exp_res);
    rez=spawnv(P_WAIT,"RECT.EXE", arg);
    if(rez!=0)
    {
        printf("\tОшибка! Код ошибки: %i\n",rez);
        not++;
    }
    else
    {
        printf("\tПрограмма выполнена успешно\n\n");
        printf("\tРезультат выполнения: ");
        while (!feof(in))
        {
          if ( fgets(rec_res, 30, in) != NULL )
            printf("%s ", rec_res);
        }
        if(strstr(rec_res,exp_res)!=NULL) printf("\n\tБыл получен ожидаемый результат.\n");
// О! Вот зачем был #include <strings.h> в начале!!!
// А за метод проверки правильности результата - расстрелять из рогатки

        else
        {
            printf("\n\tПолученный результат не совпадает с ожидаемым!\n"); 
            mis++;
        }
    }
    fclose(in);
    printf("\n\tНажмите любую клавишу для перехода к следующему тесту");
    i++;
    getch();
  }
  clrscr();
  printf("\tБыло проведено тестов: %i\n\tОжидаемый результат не совпал с полученным %i раз\n\tТестируемая программа аварийно завершила работу %i раз",test_num,mis,not);
  getch();
  fclose(in2);
  delete arg;
// А это вообще шедевр - new делали для одного (и 4 раза), а delete делаем для другого (и 1 раз)!
  return 0;
}

PM MAIL   Вверх
bsa
Дата 25.11.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
Cheloveck
Дата 25.11.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

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



Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
Аффтору предупредительный выстрел в голову

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
Аффтору оторвать голову

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
оторвать руки

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
Аффтару оторвать жопу

Цитата(xvr @  25.11.2010,  12:15 Найти цитируемый пост)
расстрелять из рогатки

Не слишком жестокое наказание для первокурсника? o_O

Это сообщение отредактировал(а) Cheloveck - 25.11.2010, 13:46


--------------------
user posted image
PM Jabber   Вверх
xvr
Дата 25.11.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(Cheloveck @  25.11.2010,  13:46 Найти цитируемый пост)
Не слишком жестокое наказание для первокурсника? o_O
Нет, не слишком. Может аффтор уверен, что его прога (программой это назвать у меня язык не поворачивается) - верх совершенства. Иначе он бы ее не дал ТС для слизывания (сам ТС явно автором этого опуса не является, иначе не просил бы откоментировать). 
Да и самому ТС будет не вредно узнать оценку качества этой проги  smile 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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