Russian Qt Forum
Сентябрь 24, 2024, 06:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 5 6 [7] 8 9 ... 12   Вниз
  Печать  
Автор Тема: Тренировка навыков быстрого программирования  (Прочитано 79996 раз)
Bepec
Гость
« Ответ #90 : Март 04, 2014, 12:28 »

Улыбающийся Это и есть недостаток этого сервиса Веселый Моя программа не проходила пятый тест, причём все входные данные указанные в задаче и всевозможные их вариации проходят успешно Показает язык
Записан
8Observer8
Гость
« Ответ #91 : Март 04, 2014, 12:29 »

Улыбающийся Это и есть недостаток этого сервиса Веселый Моя программа не проходила пятый тест, причём все входные данные указанные в задаче и всевозможные их вариации проходят успешно Показает язык

Спасибо за ответ! У меня задача не проходит первый тест Улыбающийся
Записан
Bepec
Гость
« Ответ #92 : Март 04, 2014, 14:02 »

Возможно ты неправильно понял - входные данные в этом сервисе неизвестны. Потому определить где ошибка невозможно Показает язык
Записан
8Observer8
Гость
« Ответ #93 : Март 04, 2014, 15:11 »

Возможно ты неправильно понял - входные данные в этом сервисе неизвестны. Потому определить где ошибка невозможно Показает язык

Какие входные данные для моей программы могут могут приводить к неверному результату? Есть варианты?
Записан
Bepec
Гость
« Ответ #94 : Март 04, 2014, 15:15 »

Неа Улыбающийся В том вся и прелесть Показает язык
Записан
8Observer8
Гость
« Ответ #95 : Март 04, 2014, 15:17 »

Я имел ввиду, что может я задачу неверно понял? Наверняка, в моём алгоритме ошибка. Скорее всего есть такие входные данные, которые моя программа неверно обрабатывает. Буду думать.
« Последнее редактирование: Март 04, 2014, 15:33 от 8Observer8 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #96 : Март 05, 2014, 09:10 »

1)
Код
C++ (Qt)
void bulls_and_cows(int first, int second, int &nbulls, int &ncows)
 
Часто пишут так
Код
C++ (Qt)
void bulls_and_cows(int first, int second, int * nbulls, int * ncows)
 
Смысл: вызывающий видит вход/выход, Если же ссылки, то можно так
Код
C++ (Qt)
void bulls_and_cows(int iFirst, int iSecond, int & oBulls, int & oCows)
 

2)
Код
C++ (Qt)
   // Проверяем, что числа четырёхзначные
   if ( (vec_first.size() != nsize) && (vec_second.size() != nsize) ) {
       return;
   }
 
Правильно || (вместо &&), и возврат кода ошибки никто не отменял. И если у Вас цикл до nsize, то откуда возьмется др число эл-тов?

3) Не выделена ф-ция создания массива/контейнера из числа, все свалено в  bulls_and_cows, в результате она смотрится тяжеловато.

4) Неуемное использование std:: Чем не устраивал простенький char[4] (вместо векторов)? Да, это не общее решение - но нужна ли здесь какая-то общность? С др стороны по скорости "просто массив" заметно выигрывает. Вообще зачем подсчеты в 2 циклах? Почему бы не написать непредвзято и незатейливо, напр
Код
C++ (Qt)
void CalcBullsCows( const char * s1, const char * s2, int count, int & num_Bull, int & num_Cows )
{
 num_Bull = num_Cows = 0;
 for (int i = 0; i < count; ++i) {
   if (s1[i] == s2[i]) {
    ++num_Bulls;
    continue;
   }
 
  for (int j = 0; j < count; ++j) {
   if (s1[j] == s2[i])
    if (s1[j] != s2[j])  { // на всякий случай учтем что цифры могут повторяться
      ++num_Cows;
       break;  
    }
   }
 }
}
Записан
8Observer8
Гость
« Ответ #97 : Март 05, 2014, 09:39 »

Спасибо огромное! Обязательно всё разберу, даже может за сегодня Улыбающийся

У меня вопрос. Какую букву лучше поставить перед именем "fileName" (см. функцию ниже) . С одной стороны это имя выходного файла, а с другой - входной параметр для функции:

Код
C++ (Qt)
/**
* Записываем результат выходной в файл
*
* @param oFileName Имя выходного файла
* @param vec Массив, который нужно записать в файл
* @return Код ошибки: 0 - если ошибок нет
*                     1 - если файл не удалось открыть
*                     2 - если в файле не удалось записать
*/

int writeResult(const std::string& oFileName, int iBulls, int iCows) {
 
   // Открываем файл для записи
   std::ofstream out;
   out.open(oFileName.c_str());
   if (!out.is_open()) {
       return 1;
   }
 
   // Записываем данные в файл
   out << nbulls << " " << ncows << std::endl;
 
   // Закрываем файл и возвращаем код ошибки
   out.close();
   return 0;
}
 
« Последнее редактирование: Март 05, 2014, 10:03 от 8Observer8 » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #98 : Март 05, 2014, 09:48 »

У меня вопрос. Какую букву лучше поставить перед именем "fileName" (см. функцию ниже) . С одной стороны это имя выходного файла, а с другой - входной параметр для функции:
Не надо никаких букв, просто давайте нормальные имена параметрам и переменным.
Это имя результирующего файла.
Записан
OKTA
Гость
« Ответ #99 : Март 05, 2014, 09:54 »

Лично по мне удобна вот такая нотация - один раз определил _In_ и _Out_ и пользуйся на здоровье)
Код:
void func(
  _Out_  int a,
  _In_   int b,
 );
Записан
8Observer8
Гость
« Ответ #100 : Март 05, 2014, 10:14 »

Лично по мне удобна вот такая нотация - один раз определил _In_ и _Out_ и пользуйся на здоровье)
Код:
void func(
  _Out_  int a,
  _In_   int b,
 );

Первый раз такое вижу. И это будет компилироваться? Пожалуйста, напишите маленький примерчик по вызову такой функции Улыбающийся

Не надо никаких букв, просто давайте нормальные имена параметрам и переменным.
Это имя результирующего файла.

Old, мне очень хочется узнать Ваше мнение, куда прижимать значок '&'? И ещё вопрос: в следующей функции уместны ли буквы 'i' и 'o' перед именами:  Bulls и Cows
Код
C++ (Qt)
void bulls_and_cows(int iFirst, int iSecond, int & oBulls, int & oCows);

Лично мне хочеться написать вот так:
Код
C++ (Qt)
void bulls_and_cows(int firstNumber, int secondNumber, int & nBulls, int & nCows);
« Последнее редактирование: Март 05, 2014, 10:24 от 8Observer8 » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #101 : Март 05, 2014, 10:20 »

У меня вопрос. Какую букву лучше поставить перед именем "fileName" (см. функцию ниже) . С одной стороны это имя выходного файла, а с другой - входной параметр для функции:
Все меряется "относительно ф-ции" поэтому "i". Если используется и как вход и как выход то "io". Если файл для записи, то неплохо напр "iOutFileName". Эти соглашения необязательны, но многие их используют, и в этом есть смысл.

А вот возвращать 1 (0) - явный признак что "не профи" Улыбающийся Обязательно должны быть enum или константы или даже #define (что кому нравится) - но никак не числа вбитые в код.
Код
C++ (Qt)
 
if (!out.is_open()) {
return errFileOpen;
Записан
carrygun
Гость
« Ответ #102 : Март 05, 2014, 10:24 »

...куда прижимать значок '&'?

По этому поводу можно почитать вот это.
Записан
OKTA
Гость
« Ответ #103 : Март 05, 2014, 10:25 »

Да все просто! Делаете define и затем используете в объявлении и определении функций) препроцессор потом уберет все эти _In_ & _Out_!

Код:
#define _In_
#define _Out_

void func(
  _Out_  int a,
  _In_   int b,
 );

Удобно опять же на мой взгляд при этом группировать параметры по одному в строке, чтобы удобнее читать было. Вот пример из Windows :
Код:
BOOL WINAPI CryptImportPublicKeyInfoEx2(
  _In_   DWORD dwCertEncodingType,
  _In_   PCERT_PUBLIC_KEY_INFO pInfo,
  _In_   DWORD dwFlags,
  _In_   void *pvAuxInfo,
  _Out_  BCRYPT_KEY_HANDLE *phKey
);
« Последнее редактирование: Март 05, 2014, 10:37 от OKTA » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #104 : Март 05, 2014, 10:47 »

Лично мне хочеться написать вот так:
Так и пишите, не надо следовать каким-то догмам и.т.п. Знать "как делают другие" полезно - но не более того
Цитировать
When strictly following a rule makes your code look bad, feel free to break it
Записан
Страниц: 1 ... 5 6 [7] 8 9 ... 12   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.728 секунд. Запросов: 23.