Решения (задачи 160-179)
Задача 177.
// Преобразует двоичное число в десятичное #include <stdio.h> #include <conio.h> #include "string.h" void main() char bin[16]; // изображение двоичного числа long int dec; // десятичное число int i; // номер разряда двоичного числа int v; // вес i-ro разряда двоичного числа printf("Введите восьмиразрядное двоичное число "); printf("n нажмите Enter"); printf(" › "); scanf("%s", &bin); dec = 0; v = 1; // вес младшего (0-го) разряда двоичного числа for (i = strlen(bin) -1; i >= 0; i– ) if (bin[i] == Ч1) dec += v; v *= 2; // вес следующего разряда } printf("Двоичному числу %s", bin); printf("соответствует десятичное %d", dec); printf("\п Для завершения нажмите Enter"); getch();
Задача 178.
// Преобразует шестнадцатеричное число в десятичное // разобраться с переполнением include <stdio.h> #include <conio.h> #include "string.h" 'Void main() char st[5]; // шестнадцатеричное число unsigned int dec;// десятичное число int v; // вес разряда шестнадцатеричного числа int err =0; // err == 1 – в строке недопустимый символ int i; ntf("Введите шестнадцатеричное "); printf("(не более 4-х знаков) число\п"); printf(" › "); scanf("%s",&st); // преобразуем введенную строку к верхнему регистру strupr(st); dec = 0; v = 1; // вес младшего разряда шестнадцатеричного // числа for (i = strlen(st) -1; i >= 0; i-) { //printf("\n%d\n",v); if (st[i] >= '01 && art til] <= '9') dec += v * (st[i] – 48); // (int)'0'=48, (int)'l'=49 // и т.д .else if (st[i] >= 'A' && st[i] <= 'F') // (int)'A'=65, (int)'B'=66 и т.д. // А обозначает 10, В – 11 и т.д .dec += v * (st[i] – 55); else // недопустимый символ { err = 1; break; } v *= 16; // вес следующего разряда if (!err) { printf("Шестнадцатеричному числу %s ", st); printf("соответствует десятичное %u\n", dec); else ( printf("Строка %s не является ", st); printf("шестнадцатеричным числом\п"); } printf("\п Для завершения нажмите Enter"); getch();
Задача 179.
// Преобразует десятичное число в другую систему счисления (от 2-х до 10-ти) #include <stdio.h> #include <conio.h> void main() int osn, // основание системы счисления n, // исходное число en, // копия исходного числа г; // остаток от деления числа //на основание сист. счисл .char st[17]; // представление числа в заданной // системе счисления int i; printf("Х Введите целое число › "); scanf("%d", &n); printf("Введите основание системы счисления › "); scanf("%d", &osn); en = n; // делим исходное число на основание системы // счисления до тех пор, пока остаток от деления // больше основания системы счисления. // Остаток от деления на каждом щаге – очередная цифра st[16] ='\0'; i = 15; do { г = n % osn; // очередная цифра n = n / osn; // целая часть деления // printf("цифра:%d остаток:%d\n", r,n); st[i-] = г + 48; // преобразование цифры в символ } while (n > 0); // "сдвинем" сформированную строку в начало int j = 0; while(st[i]) st [j++] = st St[j] = '\0'; printf("Десятичному числу %d соответствует ", en); printf("число %s по основанию %d\n", st, osn); printf("Хп Для завершения нажмите Enter"); getch();