Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Программа перевода числа из 2-ой системы счисления в 16-ую.
В этом примере перевод выполняется по таблице, в которой каждой четверке двоичных цифр соответствует одна шестнадцатеричная. В программе используется структура TableString, описывающая одну строку таблицы. #include <iostream> #include <iomanip> #include <math.h> #include <conio.h> #include <string> #include <ctype.h> #include <windows.h> using namespace std;
struct TableString { char hex; // 16-ая цифра char bin[5]; // строка, содержащая четверку 2-х цифр (строка заканчивается ‘\0’) };
int main() { if(SetConsoleCP(1251)==0) { cerr<<"Fialed to set codepage!"<<endl; } if(SetConsoleOutputCP(1251)==0) { cerr<<"Failed to set OUTPUT page!"<<endl; } char ch; // используется для посимвольного ввода int n=0, k=0; // счетчики символов char hex[21]; // 16-е число char bin[81]; // 2-е число char zero[81]; // строка, в начале которой будет записан ‘0’ char tmp[5]; // сюда будет копироваться четверка двоичных цифр из строки bin strcpy(zero,"0"); // записываем ноль в начало строки cout<<"Введите 2-ое число: \n"; while ((ch=_getch())!= '\r') // пока не нажата клавиша <Enter> { if ((ch=='0'||ch=='1') && k < 79) // если введена 2-я цифра { cout<<ch; bin[k++]=ch; // Выводим ее на экран и записываем в строку } else if (ch == '\b' && k > 0) // стирание последнего введенного символа { cout<<"\b \b"; k--; } } //end while bin[k]=0; hex[n]=0; cout << endl; //делаем длину строки кратной 4: while(strlen(bin)%4) { strcpy(bin,strcat(zero,bin)); /* складываем строку, содержащую ‘0’, с bin, затем полученную сумму копируем в bin, в результате в начало bin добавляется ‘0’ */ strcpy(zero,"0"); /* восстанавливаем zero, она должна содержать только 1 ноль*/ } Cout << bin << endl; // проверим, что получилось // Перевод: TableString table[16] = { {'0', "0000"}, /* обратите внимание на то, как инициа// лизируется массив структур */ {'1', "0001"}, {'2', "0010"}, {'3', "0011"}, {'4', "0100"}, {'5', "0101"}, {'6', "0110"}, {'7', "0111"}, {'8', "1000"}, {'9', "1001"}, {'A', "1010"}, {'B', "1011"}, {'C', "1100"}, {'D', "1101"}, {'E', "1110"}, {'F', "1111"} }; // проходим по 2-му числу, обрабатывая по 4 цифры: for (int i=0; i<strlen(bin); i+=4) { strncpy(tmp,bin+i,4); // копируем очередные 4 цифры в tmp tmp[4] = '\0'; // strncpy() признак конца строки не записывает for (int j=0; j<16; j++) // выполняем поиск в таблице if (!strcmp(table[j].bin,tmp)) // если strcmp() вернула 0, значит tmp совпала с i-ой строкой таблицы { hex[n++]=table[j].hex; /* копируем 16-ю цифру из таблицы в строку hex */ break; } } hex[n] = '\0'; cout<<"Соответствующее 16-ое число = \n"; cout<<hex<<endl; _getch(); return 0; }
Date: 2016-08-30; view: 306; Нарушение авторских прав |