Misha432 0 / 0 / 0 Регистрация: 22.02.2021 Сообщений: 1 |
||||
1 |
||||
Задача на поиск ошибки. Ошибка вроде найдега, но ответ выдает неверный22.02.2021, 22:05. Показов 1658. Ответов 1 Метки cpp, java c++ jni, java для начинающих (Все метки)
Использя режим дебага постарайтесь найти строчку программы, в которой эта ошибка была допущена. В поле ответа введите название переменной, объявленной в строчке с ошибкой. Ошибка вроде найдена, но система пишет что ответ не правильный. Обьясните, пожалуйста, в чем проблема.
0 |
Am I evil? Yes, I am! 16474 / 9094 / 2614 Регистрация: 21.10.2017 Сообщений: 20,799 |
|
23.02.2021, 10:23 |
2 |
int secondPairResult = getMinFromTwo(d, c);
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.02.2021, 10:23 |
Помогаю со студенческими работами здесь Программа выдает неверный (неполный) ответ Программа работает, но выдает неверный ответ Program u2; Программа на Паскале, ответ выдаёт неверный, что не так Почему код выдаёт неверный ответ и что делать? Вот мой код:# put… Сервер выдаёт неправильный ответ, хотя, вроде, всё работает №1 Геннадию интересно, сможет ли слон с поля x1, y1 побить пешку x2, y2 за… Сервер выдаёт неправильный ответ, хотя, вроде, всё работает №2 Друзья Саша и Паша живут на одной улице. Как то раз они договорились порешать… Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 2 |
Где ошибка в моем коде
Я новичок. Я пытался изучить использование необязательного третьего параметра функции sort(). Я попытался применить это для сортировки чисел от 1 до 1000 в соответствии с их количеством делителей в порядке возрастания.
Вот мой код
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct data {
int index;
int divisor;
}a[1001];
bool sortbydivisor (const data &lhs,const data &rhs)
{
return lhs.divisor <rhs.divisor;
}
int number_of_divisors(int n)
{
int r=0;
for (int i=1;i*i<=n;i++)
{
if (n%i==0)
{
if (i*i!=n)
{
r+=2;
}
else
{
r+=1;
}
}
}
return r;
}
int main ()
{
int i,t,x;
for (i=1;i<=1000;i++)
{
a[i].index=i;
a[i].divisor=number_of_divisors(i);
}
sort(a+1,a+10001,sortbydivisor);
scanf("%d",&t);
for (i=1;i<=t;i++)
{
scanf("%d",&x);
printf("Case %d: %dn",i,a[x].index);
}
return 0;
}
После компиляции я не получил никаких ошибок. Но после запуска я получил это предупреждение «программа перестала работать». В онлайн-компиляторах говорится: «Ошибка выполнения» почему?
Заранее спасибо за вашу помощь :).
30 дек. 2013, в 17:16
Поделиться
Источник
Вы указали неверную верхнюю границу, поэтому sort
пытается переместить несуществующие объекты после конца массива. Вы хотите
sort(a+1,a+1001,sortbydivisor); // not 10001
В С++ 11 есть удобные функции библиотеки, чтобы избежать таких ошибок:
sort(std::begin(a) + 1, std::end(a), sortbydivisor);
отметив, что begin
потребности немного bodging за счет индексации один-йоркского. Если вы не можете использовать библиотеку С++ 11, их легко написать:
template <typename T, size_t N> T * begin(T (&a)[N]) {return a;}
template <typename T, size_t N> T * end (T (&a)[N]) {return a+N;}
Mike Seymour
30 дек. 2013, в 14:07
Поделиться
Это трудно понять, но если вы компилируете и запускаете в отладке, вы должны иметь возможность получить стек вызовов, чтобы определить, где ваша программа потерпела неудачу, и которая должна предоставить вам информацию, в которой ваша программа терпит неудачу.
Просто обратите внимание, что вы используете свои индексы непоследовательно (заканчивается на 1000) в вашем цикле инициализации и 10001 в алгоритме сортировки. Это выходит за рамки вашего массива.
TimDave
30 дек. 2013, в 14:20
Поделиться
sort(a+1,a+10001,sortbydivisor);
Глупые опечатки!
Lightness Races in Orbit
30 дек. 2013, в 15:12
Поделиться
Ещё вопросы
- 1Найдите совпадение в строке файла, затем перейдите к следующему файлу
- 0Как игнорировать файлы с заданным префиксом?
- 0загрузить плагин JQuery и JQuery до загрузки HTML
- 0PHP в JavaScript с помощью кнопки «Отправить»
- 1Клонировать массив с оператором распространения и добавить встроенный
- 0Метод uploadStoredFiles не существует в jQuery.fineUploader
- 0Как обернуть группу тегов HTML в содержащий тег, используя JavaScript?
- 1Python, pip: избегайте gcc во время установки
- 0Установка Qt — 5 для windows
- 1Распределить данные из текущей деятельности по фрагментам на ней
- 0Как выбрать первую из этих кнопок?
- 1Развертывание таблиц базы данных в порядке взаимосвязи с ограничениями
- 0Возврат и передача массива для работы в C ++
- 1блоки инициализации в полиморфизме
- 0Ошибка «Необходимо указать поле grant_type» при получении токена Oauth2
- 1Частичное переопределение метода: как?
- 0Гиперссылки в TextBox / ListBox ASP.NET
- 0Как настроить контент для ссылок из вложенной навигации
- 1Есть ли способ получить URI изображения сразу после его удаления из внешнего хранилища?
- 0Преобразование Int в LPCWSTR
- 1Подсчет уникальных значений по группам в двух столбцах
- 1Разобрать данные и представить изображение PNG
- 0Проблемы с Javascript на сайте Squarespace
- 0Показать папку public_html автоматически
- 1pyspark — как я могу удалить все дублирующиеся строки (игнорируя определенные столбцы) и не оставляя после себя пары дубликатов?
- 0Как увеличить центр экрана?
- 0Невозможно связаться с GraphicsMagik
- 0Интеграция программы, написанной на C, с другой, написанной на C ++
- 1Интерфейс не вызывает фрагмент
- 0Fitbit oauth регистрация
- 0Лучший способ отслеживать счетчик на уровне базы данных
- 1Как конвертировать дату в метку времени
- 0Скользящая Div от левого угла к правому углу анимации
- 1java.lang.NoSuchFieldError: имя во время выполнения в спящем проекте
- 1Совместимость с Android + FTDI FT232H
- 1Entity Framework с динамическим Linq
- 1(ASP.NET MVC4 C #) Вставьте UNICODE в SQL Server
- 0как мне эффективно искать до и после элемента для ключевой фразы
- 1C # x509Certificate2 не может быть создан
- 0Как использовать app / Resources / public в Symfony2
- 1Функция d3.queue.await не вызывается
- 0Скрыть / показать веб-часть, щелкнув гиперссылку в карусели Sharepoint 2010
- 1У классификатора нет сопутствующего объекта, и, следовательно, он должен быть инициализирован здесь
- 0Проблема с запросом MySQL — сопоставление нескольких идентификаторов в объединенной таблице
- 0Объединение и сортировка 2 каналов
- 1ContainerRequestFilter JBoss AS 7.1.1 RestEasy 3.0.6. Финал
- 0как получить строку, содержащуюся в div
- 0Div открывается вертикально, когда страница загружается с помощью JavaScript и CSS
- 0шаблон angularjs (из ng-repeat) и пользовательская директива для того же вопроса элемента
- 0Angular SyntaxError: Неожиданный токен}
У Вас несколько проблем с кодом, разной степени проблемности.
Первое, какие-то бесполезные прологи:
{
unique_lock lck(mHandled); // Ждем запуска второго потока
strHandled.wait(lck); // Без проверок, так как заведомо знаем,
}
И strHandled.notify_one();
— убрать. Эти прологи не нужны.
Второе:
Без проверок, так как заведомо знаем, что поток обработчика
единственный
Проверки нужны, т.к. существует spurious wakeup. Т.е. поток можно проснуться не потому, что получил сигнал, а просто потому что. Так что дополнительные проверки нужны всегда.
Третье, у Вас в коде гонка, а значит UB. В первом потоке Вы делаете l.push_back(s);
без защиты мьютекса, что создаёт гонку с вот этой строкой из второго потока: s = l1.back();
. Закрывайте добавление строки в список мьютексом mReady
и уходит.
А вообще, т.к. Вы пытаетесь полностью сериализовать 2 потока, т.е. сделать их последовательно выполнимыми, Вам достаточно одного мьюеткса — не нужно тут два, ресурс-то один.
Четвёртое, и самое главное: если strReady.notify_one();
выполняется и тут же идёт переключение на другой поток, т.е. wait
не успевает отработать, тогда весь код второго потока может успеть отработать, включая strHandled.notify_one();
, что приведёт к тому, что сигнал улетит во вселенную и первый поток никогда не узнает о том, что он был. Расставьте правильно мьютексы, чтобы исключить эту ситуацию, тогда зависания должны прекратиться.
Но чтобы код стал корректным, нужно применить все замечания.
Минимально изменив изначальный код, можно получить что-то такое:
condition_variable strReady, strHandled;
mutex mGuard;
void createList(list<string>& l) {
for(int i = 0; i < ELEMENTS; ++i) {
string s = new_string();
unique_lock lck(mGuard);
l.push_back(s);
cout << "--> String produced" << endl;
strReady.notify_one();
cout << "--> Wait string consumed" << endl;
strHandled.wait(lck);
}
}
void handleList(list<string>& l1, list<string>& l2) {
size_t processed{0};
for(int i = 0; i < ELEMENTS; ++i) {
string s;
{
unique_lock lck(mGuard);
strReady.wait(lck, [&](){ return processed < l1.size(); });
s = l1.back();
++processed;
cout << "<-- String consumed" << endl;
}
strHandled.notify_one();
sort(s.begin(), s.end());
l2.push_back(s);
cout << "<-- Wait string produced" << endl;
}
}
Из очевидных минусов: нет уведомления потока производителя, что потребитель действительно потребил. Из-за этого приходится держать мьютекс и для вывода, и для уведомления, а также нет защиты от «перепроизводства» из-за spurious wakeup, но идея должна быть ясна.
Где ошибка в программе?
Само задание
Напиши программу, которая проверяет достаточно ли средств на карте для оплаты заказа. Сумму заказа и остаток на карте вводит пользователь.
В результате программа выводит сообщение: На вашей карте достаточно средств — False
На проверку отправь программу со значениями: сумма заказа — 678
остаток на карте — 678
Мой код:
sum = int(input("aaa"))
ost = int(input("aa"))
if ost<=sum:
print("На вашей карте достаточно средств - False")
else:
print("PPP")
Не понимаю в чем ошибка
-
Вопрос задан02 дек. 2022
-
190 просмотров
Ошибки нет.
if ost<=sum:
Условие 678<=678
верно.
Пригласить эксперта
Ну вообще, с точки зрения логики (если ost — это остаток), и он меньше, чем сумма заказа (sum) — то денег не должно быть достаточно. Сумма ведь больше, чем остаток на карте
Я бы вот так переписал:
sum = int(input("aaa"))
ost = int(input("aa"))
if ost>=sum:
print("На вашей карте достаточно средств")
else:
print("Недостаточно")
-
Показать ещё
Загружается…
09 июн. 2023, в 10:46
30000 руб./за проект
09 июн. 2023, в 10:27
5000 руб./за проект
09 июн. 2023, в 07:46
50000 руб./за проект
Минуточку внимания
В самостоятельном обучении программированию такое задание: нужно записать программу, которая считает и последовательно выводит на экран значения математических выражений: 3 в степени 5 -8 разделить на -4 остаток от деления 100 на 3. Первый день обучения с 0, не могу понять что неправильно. Вот мой вариант: <?php print_r(3*5); print_r(-8/-4); print_r(100%3); // BEGIN (write your solution here) // END Ошибки я смотрела, но пока ничего в том описании понять не могу. Вообще у вас код на php код на с++ должен выглядеть примерно так include <iostream>include <cmath> //»подключение» библиотеки cmath, чтобы возвести число в степень функцией pow(иначе придется делать цикл)using namespace std; //»подключение» библиотеки std, чтобы использовать вывод на экран через cout int main() { int a,b; a=3; b=5; cout << pow(a,b) << endl; //возведение в степень cout << -8/-4 << endl; //деление -8 на -4 cout << 100%3 << endl; //остаток от деления } автор вопроса выбрал этот ответ лучшим inkasta более года назад Да, все правы). Я изучаю на Хекслет php-основы программирования. Это бесплатный курс для самостоятельного обучения. Начинаю с абсолютного нуля). Плохо еще понимаю термины и различия. Но пришла туда для изучения языка С++. Мне дали задание. В общем, задание я смогла пройти . Просто в скобках между ними и значениями нужны были пробелы. В моем примере их нет. И в первом примере пропущен знак возведения в степень (2 звездочки, у меня — одна). Правильно это выглядит так: <?php print_r( 3 ** 5 ); print_r( -8 / -4 ); print_r( 100 % 3 ); // BEGIN (write your solution here) // END Знаете ответ? |