Задание :В заданный непустой текст входят только цифры и буквы. Определить, удовлетворяет ли он следующему свойству: Текст является восьмеричной записью числа, кратного 5.
Проблема: Когда набираю числа с текстом, то постоянно пишет какое-то число и Не является. Я не понимаю где неправильно задано условие.
Код: ( написан в My Form)
String^ s;
s = this->textBox1->Text;
String^str="";
int a, b, dec;
a = s->Length;
bool check=true;
for (int i = 0; i < a; i++)
{
if ((s[i] >= '8') && (s[i] <= '9'))
{
label5->Text = "Текст не является\n восьмиричной записью числа";
return;
}
}
for (int i = 0; i < a; i++)
{
if ((s[i] >= '0') && (s[i] <= '7'))
{
b++;
}
}
b--;
for (int i = 0; i < a; i++)
{
if ((s[i] >= '0') && (s[i] <= '7'))
{
dec += (s[i] - '0')*pow(8, b);
b--;
}
}
label4->Text = dec.ToString();
if ((dec % 5)== 0) label5->Text = "Является";
else((dec % 5) != 0); label5->Text = "Не является";
Другие языки программирования и технологии
Посмотрите пожалуйста код.
1. Выражение (s[i] >= '8') && (s[i] <= '9') делает совсем не то, что нужно. Должно быть:
s[i] < '0' || s[i] > '7'
2. Первый цикл проверил, что ВСЕ символы принадлежат диапазону '0'..'7'. Зачем их снова проверять в следующих циклах?
3. Преобразование строки в число делается намного проще - безо всяких вычислений b (и, кстати, цикл для вычисления b не требуется: b == a - 1):
dec = 0;
for (int i = 0; i < a; ++i) { dec = dec * 8 + s[i] - '0'; }
4. После else условие НЕ ставится. Строка else((dec % 5) != 0) - это ошибка:
if (dec % 5== 0) { label5->Text = "Является"; } else { label5->Text = "Не является"; }
5. В задаче НЕ сказано, что нужно напечатать число в десятичном виде. И НЕ сказано, какой длины может быть число - оно вполне может не влезть в int. Так что надо сразу считать делимость на пять - без генерации всего числа. В результате получаем:
dec = 0;
for (int i = 0; i < a; ++i) { dec = (dec * 8 + s[i] - '0') % 5; }
if (dec == 0) { label5->Text = "Является"; } else { label5->Text = "Не является"; }
s[i] < '0' || s[i] > '7'
2. Первый цикл проверил, что ВСЕ символы принадлежат диапазону '0'..'7'. Зачем их снова проверять в следующих циклах?
3. Преобразование строки в число делается намного проще - безо всяких вычислений b (и, кстати, цикл для вычисления b не требуется: b == a - 1):
dec = 0;
for (int i = 0; i < a; ++i) { dec = dec * 8 + s[i] - '0'; }
4. После else условие НЕ ставится. Строка else((dec % 5) != 0) - это ошибка:
if (dec % 5== 0) { label5->Text = "Является"; } else { label5->Text = "Не является"; }
5. В задаче НЕ сказано, что нужно напечатать число в десятичном виде. И НЕ сказано, какой длины может быть число - оно вполне может не влезть в int. Так что надо сразу считать делимость на пять - без генерации всего числа. В результате получаем:
dec = 0;
for (int i = 0; i < a; ++i) { dec = (dec * 8 + s[i] - '0') % 5; }
if (dec == 0) { label5->Text = "Является"; } else { label5->Text = "Не является"; }
Mr. Юрик*
поняла, спасибо большое
Похожие вопросы
- Как посмотреть исходный код .exe файла?
- ПОДСКАЖИТЕ ПОЖАЛУЙСТА код разблокировки баннера билайн
- Выручайте. Составьте пожалуйста код на С++. Задание по практике.
- Посмотрите исходный код страницы.
- Напишите пожалуйста код простейшей программы вычисления значения 2 в степени N.
- JS-программеры! подскажите пожалуйста код для перемещения объекта курсором мыши.
- Проверьте пожалуйста код программы от Visual Studio. Заранее спасибо.
- Подскажите Пожалуйста Коды Для Универсального Пульта Томсон.для Сони?
- Народ, напишите пожалуйста код, задание ниже. Думаю, для тех кто разбирается это на раз-два. Сам не понимаю этого :(
- Проверьте пожалуйста код на С++