Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
#1

Проверить, является ли введенное число шестнадцатеричным

17.04.2015, 18:02. Просмотров 690. Ответов 17
Метки нет (Все метки)

Всем добрый день! Суть задачи:
Составить программу, которая проверяет , является ли введенное число шестнадцатеричным(количество символов не более 6) ..

Я написал код, который успешно выполняет условие задачи. Но я не могу разобраться с ограничением в 6 символов. Я организовал ввод через цикл, но например если ввести больше 6 чисел, то он просто возьмёт первые 6, а мне нужно, чтобы программа выдавала сообщение типа "Вы ввели более 6 символов , повторить ввод? y/n" . Подскажите советом, спасибо!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
char stroka[255];
int z, i=0, n, x=0,sim=0;
cout<<" Введите строку >> \t \n";
//-----------------------------
for(int sim=0; sim<=5;sim++){
cin>>stroka[sim];}
n=strlen(stroka);
while (i<n) 
{
z=stroka[i];
for (int f=48; f<58; f++)
{ if (z==f) x++; }
for (int g=65; g<71; g++)
{ if (z==g) x++; }
i++;
if (x!=i) cout<<stroka<<" не шестнадцетеричное число  ";
else cout<<stroka<<" - шестнадцетеричное число  ";
system("pause");
return 0;
}
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2015, 18:02
Ответы с готовыми решениями:

Проверить является ли введенное число простым
Сделал программу. Считающую простые числа. По заданию мне нужно сделать их с...

Проверить, является ли введенное число палиндромом
Проверьте, является ли введенное число палиндромом. Например, 12321, 2442 -...

Проверить, является ли введенное с клавиатуры число простым
помогите составить программу в С++ с использованием цикла for Составить...

Проверить является ли введенное число точным квадратом
Помогите пожалуйста Проверить введенное число точным квадратом. с помощью...

Проверить, является ли введенное пользователем целое число четным
1.Разработать программный модуль для решения следующей задачи, используя...

17
LaHaH
20 / 20 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
17.04.2015, 18:35 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <string>
 
using namespace std;
 
bool IsHex(string str)
{
    for (int i = 0; i < str.size(); i++)
    {
        if ((str[i]>'f')||
            (str[i]<'0')||
            ((str[i]>'9') && (str[i]<'A')) ||
            ((str[i]>'F') && (str[i]<'a'))) return false;
 
    }
    return true;
}
 
void main()
{
    setlocale(0,"rus");
    char isContinue='y';
    while ('y'==isContinue)
    {
        cout<<"Введите число"<<endl;
        string stroka;
        cin>>stroka;
        if (stroka.size()>6 || !IsHex(stroka))
        {
            cout<<stroka<<"-не шестнадцетеричное число"<<endl;
            cout<<"Повторить ввод(y/n)?"<<endl;
            cin>>isContinue;
        }
        else 
        {
            cout<<stroka<<"-шестнадцетеричное число"<<endl;
            cout<<"Повторить ввод(y/n)?"<<endl;
            cin>>isContinue;    
        }
    }
    cout<<"Всего хорошего!"<<endl;
}
как-то так.
0
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
17.04.2015, 20:06  [ТС] #3
Очень хороший вариант, спасибо! Но программа по прежнему не выдаёт сообщение, если число более 6 символов.
0
LaHaH
20 / 20 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
18.04.2015, 12:13 #4
Лучший ответ Сообщение было отмечено Boscow как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <string>
 
using namespace std;
 
bool IsHex(string str)
{
    for (int i = 0; i < str.size(); i++)
    {
        if ((str[i]>'f')||
            (str[i]<'0')||
            ((str[i]>'9') && (str[i]<'A')) ||
            ((str[i]>'F') && (str[i]<'a'))) return false;
 
    }
    return true;
}
 
void main()
{
    setlocale(0,"rus");
    char isContinue='y';
    while ('y'==isContinue)
    {
        cout<<"Введите число"<<endl;
        string stroka;
        cin>>stroka;
        if (stroka.size()>6)
        {
            cout<<"Вы ввели более 6 символов!"<<endl;
            cout<<"Повторить ввод(y/n)?"<<endl;
            cin>>isContinue;
        }
        else if (!IsHex(stroka))
        {
            cout<<stroka<<"-не шестнадцетеричное число"<<endl;
            cout<<"Повторить ввод(y/n)?"<<endl;
            cin>>isContinue;
        }
        else 
        {
            cout<<stroka<<"-шестнадцетеричное число"<<endl;
            cout<<"Повторить ввод(y/n)?"<<endl;
            cin>>isContinue;    
        }
    }
    cout<<"Всего хорошего!"<<endl;
}
0
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
19.04.2015, 18:28  [ТС] #5
Спасибо!

Добавлено через 8 минут
Можете пояснить строчку "cin>>isContinue" . И что за инструмент bool?

Спасибо!
0
maks242
47 / 21 / 11
Регистрация: 01.11.2013
Сообщений: 255
Завершенные тесты: 6
19.04.2015, 19:11 #6
Boscow,
C++
1
 char isContinue='y';
Это ввод символа на место isContinue;
C++
1
cin>> isContinue;
bool это тип переменной которая имеет значение либо true либо false
0
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
20.04.2015, 13:10  [ТС] #7
То есть за место "isContinue" можно ввести что угодно? Это не функция?
0
LaHaH
20 / 20 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
20.04.2015, 18:34 #8
Вместо isContinue, можно подставить любое условие выхода из цикла.
0
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
21.04.2015, 15:48  [ТС] #9
Я просто не пойму почему перед Continue стоит is, я не в одном своём справочнике не нашёл пояснение к этому. Поясните чайнику )
0
Почтальон
Модератор
620 / 556 / 115
Регистрация: 22.03.2015
Сообщений: 3,809
Завершенные тесты: 2
21.04.2015, 15:54 #10
Цитата Сообщение от Boscow Посмотреть сообщение
я не в одном своём справочнике не нашёл пояснение к этому. Поясните чайнику )
Правильно, и не найдете, потому что это переменная.
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25962 / 17408 / 6904
Регистрация: 22.10.2011
Сообщений: 30,647
Записей в блоге: 6
21.04.2015, 15:56 #11
Почему ты назвал себя Boscow? Я ни в одном справочнике этому объяснения не нашел. Может это дело программиста, как называть переменную, и справочники тут ни при чем?
1
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
21.04.2015, 15:56  [ТС] #12
Я просто пытаюсь разобраться. Получается "isContinue" это просто переменная и она обозначена y(игриком)? То есть за место неё я могу написать "CtoZaxochy"?
0
HighPredator
5679 / 1998 / 721
Регистрация: 10.12.2010
Сообщений: 5,750
Записей в блоге: 3
21.04.2015, 16:01 #13
Альт способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <cstdio>
#include <iostream>
#include <string>
 
bool IsHex(const char* const str)
{
  bool res = true;
 
  unsigned int tmp = 0;
 
  if (strlen(str) > 6) res = false;
  else
  {
    if (sscanf(str, "%x", &tmp) != 1) res = false;
  }
 
  return res;
}
 
int main()
{
  std::string s;
  std::cin>>s;
 
  if (IsHex(s.c_str()))
  {
    std::cout<<"Is a hex"<<std::endl;
  }
  else
  {
    std::cout<<"Is not a hex"<<std::endl;
  }
 
  return 0;
}
1
LaHaH
20 / 20 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
21.04.2015, 16:10 #14
Лучший ответ Сообщение было отмечено Boscow как решение

Решение

Boscow, т.к. я так же как и Вы, только изучаю программирование, я пытаюсь сразу выработать правильный стиль написания кода, для того, что бы его было легче читать и понимать.
C++
1
while('y'==isContinue)
по мнению автора книги, которую я читаю, считается хорошим стилем.
Может это и не совсем удачное описание переменной, но я же только учусь
0
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
21.04.2015, 16:16  [ТС] #15
А можете пояснить как работает это ?
C++
1
while('y'==isContinue)
Запутался что за что обозначается?
Спасибо , замучил уже я всех. Я вот Купил Самоучитель Шилдта , штудирую .
0
HighPredator
5679 / 1998 / 721
Регистрация: 10.12.2010
Сообщений: 5,750
Записей в блоге: 3
21.04.2015, 16:29 #16
LaHaH, это хороший стиль, да. И вы правильно делаете, что пытаетесь его применять, но в данном случае вы это сделали крайне плохо. Данная группа английских глаголов бинарная:
to be/not to be -> is/is not, are/are not и т.п.
can/can not
Поэтому переменные/функции, имеющие их в качестве "префикса", делают логическими.

C++
1
2
3
4
5
6
bool canContinue = true;
// ..
while (canContinue)
{
  //.. code
}
C++
1
2
3
4
5
bool IsCharAnAsterisc(const char a)
{
  if (a == '*') return true;
  else return false;
}
C++
1
2
3
4
5
bool AreNumbersEqual(const int a, const int b)
{
  if (a == b) return true;
  else return false;
}
Добавлено через 3 минуты
Цитата Сообщение от Boscow Посмотреть сообщение
как работает это ?
Точно также как
C++
1
while (isContinue == 'y')
. То есть. Цикл работает пока переменная имеет значение в виде символа 'y'
1
LaHaH
20 / 20 / 26
Регистрация: 17.03.2015
Сообщений: 119
Завершенные тесты: 2
21.04.2015, 16:31 #17
Boscow, isContinue- переменная типа char(спасибо КЭП!) которая занимает в памяти 1 байт(или 8 бит).
Что это значит?
Это значит что МАКСИМАЛЬНОЕ число которое можно записать в эту переменную равно 255 если оно без знаковое или от -128 до 127 если оно знаковое(при попытке записать больше, число обнулится и пойдет по кругу).
Согласно таблице ascii символ 'y' запишется в переменную isContinue как 121, а символ 'n' как 110.
Ну, а дальше просто, пока isContinue будет равно 121, программа будет просить пользователя ввести число для проверки на шестнадцатеричность.

Надеюсь я ответил на Ваш вопрос.

Добавлено через 1 минуту
HighPredator, спасибо большое за поправку, постараюсь её учесть в будущих программах!
1
Boscow
0 / 0 / 0
Регистрация: 17.04.2015
Сообщений: 8
21.04.2015, 16:32  [ТС] #18
Всё, спасибо! Я понял! То есть в этом цикле не важен сам "У", а его код в таблице, до которого работает цикл Вроде догнал.
0
21.04.2015, 16:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2015, 16:32

Проверить является ли введенное слово или число палиндромом
Требуется написать функцию, которая проверяет введенное слово или число, на то...

Проверить, является ли введенное с клавиатуры число числом Мерсена
Проверить, является ли введенное с клавиатуры число числом Мерсена. Простое...

Проверить является ли введенное число суммой двух простых чисел
Проверить является ли введенное число суммой двух простых чисел


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru