1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
||||||
1 | ||||||
Самый простой компилятор09.12.2018, 22:31. Показов 2779. Ответов 20
Метки компилятор (Все метки)
В чём ошибка? Компилятор выдаёт ошибку.
0
|
09.12.2018, 22:31 | |
Ответы с готовыми решениями:
20
Самый самый самый простой пример рекурсии Самый простой односвязный список Самый простой вопрос на сегодня. Самый простой, примитивный морской бой |
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
09.12.2018, 22:35 | 2 |
0
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
||||||
09.12.2018, 23:06 [ТС] | 3 | |||||
Здесь идут сами расчёты. Конвертирование.
Точнее это я так представляю, что ту происходит) Формулы перевода. Добавлено через 24 минуты Актуально. Немного переделал.
0
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
||||||
09.12.2018, 23:14 | 4 | |||||
1
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
09.12.2018, 23:18 | 5 |
Переменные sm, E, tm должны быть целыми, т.к. определяют номер варианта. Сравнение вещественных чисел на равенство очень плохая идея. Константы нигде не используются, они тут вообще нужны в таком случае?
0
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
|
09.12.2018, 23:55 [ТС] | 6 |
Спасибо большое, Antikl.
Код работает. Но вот у меня только введённые числа почему-то не конвертируются. Не знаете причину?
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
09.12.2018, 23:59 | 7 | |||||
Blacit, вы забыли его вывести в конце.
1
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
||||||
10.12.2018, 00:02 [ТС] | 8 | |||||
Спасибо, вывел результат (честно не знал про это)
Сама конвертация не происходит... Извините за такое количество вопросов, стараюсь учиться. Вы выше про константы говорили, предлагаете просто убрать эти 4 строчки? const int M = 100; const int CM = 1; const float F = 30.48; const float Inch = 2.54; Сам код:
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
|
10.12.2018, 00:16 | 9 |
Blacit, или убрать (правда они ни на что не влияют), либо использовать, не зря же вы их писали.
Для начала, научитесь верно выделять код тегами: найдите кнопку языка c++, поскольку у вас это не код для Qt. И сделайте переменные sm, E, tm целочисленными (unsigned int), полагаю дело именно в ошибке сравнения вещественных чисел на равенство. Расскажите о результатах.
0
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
||||||
10.12.2018, 00:36 [ТС] | 10 | |||||
Извините. Я сразу не заметил C++. Теперь через него.
Вот то, что я сделал: 1. переменные sm, E, tm целочисленными (unsigned int) 2. Удалил константы Мои догадки: что-то не так с формулами. Именно в них уже подсчёты неправильные. Потому что конвертирование происходит, но неверное. Код, который получился:
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
10.12.2018, 00:45 | 11 | |||||
Хорошо. Верные догадки. Чтобы уменьшить количество ошибок, пишите комментарии. Вот вам фрагмент с комментариями для всех формул. Заметно, что первая (под номером 0) лишняя и совпадает со второй, остальные поехали вниз, № 16 быть вообще не должно, т.к. всего 4 * 4 действий и нумерация с 0.
Кликните здесь для просмотра всего текста
Еще совет: везде, где вам нужны целые числа, используйте именно целые числа, т.к. вычисление вещественных чисел происходит приблизительно. Связано с тем, что вещественные числа могут быть бесконечными дробями, а для их представления в памяти компьютера выделяется конечное количество памяти. Записать бесконечное число конечным количеством знаков без потерь точности невозможно. Тип double имеет большую точность, нежели float, поэтому предпочтительнее использовать именно его. Тип float используется только в случаях, когда объем памяти критичен.
0
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
||||||
10.12.2018, 01:03 [ТС] | 12 | |||||
То, что сделал:
Удалил float вначале и приписку у всех чисел. Прислушался ко всем Вашим замечаниям. Вставил вначале double. Не могли бы Вы объяснить, нужно у чисел в с плавающей точкой ставить на конце что-то? Код, который работает:
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
10.12.2018, 01:07 | 13 | |||||
Сообщение было отмечено Blacit как решение
Решение
Если избавиться от магических чисел в коде и вернуться к использованию констант, то можно воспользоваться переводом любой из величин в сантиметры, умножая на соответствующую константу. Перевод сантиметров в другую величину будет выполняться с помощью обратного действия - деления. Таким образом, достаточно 3 константы и правильные формулы.
Попробуйте сами разобраться. Если что-то будет непонятно, задавайте вопросы. Готовый код можно подсмотреть под спойлером. Надеюсь, не запутался во множестве строк с формулами, проверьте внимательно. Кликните здесь для просмотра всего текста
Добавлено через 1 минуту Не совсем понял, о чем вы. Объясните подробнее.
1
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
|
10.12.2018, 01:11 [ТС] | 14 |
Можно вопрос как раз по поводу Double, который выше, он актуален.
Хотел бы повысить точность и округление чисел до 10, ну или сотой. Как можно реализовать момент, чтобы пользователь , пытаясь вводить буквы, программа ему выдавала соответствующую ошибку и предлагала попробовать ввести цифры заново. Вот, например, когда используешь тип float, то в конце у чисел должна стоять "f", пример: 12.25f А у типа double такая же должна быть ситуация?
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
10.12.2018, 01:40 | 15 | |||||
Понял, вы о записи чисел в программе. По умолчанию числа с плавающей точкой представляются как double. Суффикс f говорит о том, что вам нужен float, суффикс L у числа с плавающей точкой говорит о том, что нужен long double. Тип long double часто может быть реализован как double (зависит от компилятора и платформы), поэтому широкой популярностью не пользуется.
Небольшой пример для наглядности
Windows XP, MinGW 5.1 Linux x64, gcc 6.3
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
10.12.2018, 02:16 | 16 | |||||
Проверить флаги ошибок, игнорировать ошибочно введенные данные, повторять до тех пор, пока не будет получен правильный ввод.
Пример проверки ввода с повторением
Можно подробнее (желательно на примере)?
0
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
|
10.12.2018, 09:58 [ТС] | 17 |
Конечно, можно.
Например, 1 / 3 = 0.666666 А хотелось, чтобы он округлял до сотой. Спасибо большое за примеры кодов. Обязательно разберусь в них и воспользуюсь.
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
10.12.2018, 13:27 | 18 | |||||
Blacit, полагаю, нужно округление при выводе. Для этого можно задать точность (количество знаков после запятой). Часть настроек форматирования можно посмотреть/изменить через унаследованные методы от класса ios_base, остальные - библиотека <iomanip>. Посмотрите, какие она предоставляет возможности.
0
|
1 / 1 / 0
Регистрация: 18.07.2016
Сообщений: 51
|
||||||
10.12.2018, 20:11 [ТС] | 19 | |||||
Большое спасибо. Пока что остановлюсь на округлении результата. Потому что с флагом ошибок пока что достаточно трудно)
Вот конечный результат. Формулу доделал, перепроверил. У меня вопрос в этом моменте: cout.precision(3); cout << "set precision(3) в скобках пишутся цифры для чего (понятно, что показывает число, до какого округляется), но , если , например, до 3 числа, то цифру "3" прописываем в двух строчках?
0
|
Параллельный Кот
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
|
||||||
10.12.2018, 21:21 | 20 | |||||
Переменные лучше не делать глобальными без явной на то причины. Перенесите их внутрь main, так будет меньше вероятность нарваться на непредвиденные ошибки.
0
|
10.12.2018, 21:21 | |
10.12.2018, 21:21 | |
Помогаю со студенческими работами здесь
20
Самый большой простой делитель числа Самый простой способ создать таблицу Нужно создать самый простой класс (С++) Написать простой компилятор языка C Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |