Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <cmath>
- using namespace std;
- /*void ctrl_c_handler(int signum) {
- printf("\nНе-не-не! Даёшь пиченку!\n");
- }
- void ctrl_z_handler(int signum) {
- printf("\nНе-не-не! Даёшь пиченку!\n");
- }*/
- int main()
- {
- setlocale(LC_ALL, "Russian");
- /*
- char buf[BUFSIZ];
- if (signal(SIGINT, ctrl_c_handler) == SIG_ERR) return 1;
- while (printf("Хачю амерекансую пиченку! ") && fgets(buf, BUFSIZ, stdin) && strcmp("cookie\n", buf));
- if (signal(SIGINT, ctrl_z_handler) == SIG_ERR) return 1;
- while (printf("Хачю амерекансую пиченку! ") && fgets(buf, BUFSIZ, stdin) && strcmp("cookie\n", buf));
- */
- int o = 0;
- int step = 0;
- long double l = 0;
- int x = 0;
- char str[32];
- int y = 0;
- long int OTVET = 0;
- long long int w = pow(10, 10);
- long float q = 0;
- long long int r = 0;
- int k = 0;
- int p = 0;
- int i = 0;
- int sp = 0;
- int j = 0;
- int H = 16;
- int m = 0;
- int N = 0;
- cout « " Введите количество элементов масиива (от 1 до 5) " « endl;
- cin » N;
- while (N < 1 || N > 5) {
- cout « "N выходит за рамки указанные в условии" « endl;
- cout « " Введите количество элементов масиива (от 1 до 5) " « endl;
- cin » N;
- }
- int* a = new int[N]; // [1, 5]
- int* A = new int[N];
- for (i = 0; i < N; i++) {
- cout « " Введите число от 1000 до FFFF " « endl;
- cin » hex » a[i];
- while (a[i] < 4096 || a[i] > 65535) {
- cout « "Число выходит за границы " « endl;
- cout « " Введите число от 1000 до FFFF " « endl;
- cin » hex » a[i];
- }
- // if (a[i] == "^Z")
- A[i] = a[i];
- }
- /*for (i = 0; i < N; i++) {
- while (a[i] > 0) {
- a[i] = a[i] / 10;
- b[i]++;
- }
- }*/
- int** c = new int* [N];
- for (i = 0; i < N; i++) {
- c[i] = new int[H];
- }
- for (i = 0; i < N; i++) {
- for (j = 0; j < H; j++) {
- c[i][j] = 0;
- }
- }
- for (i = 0; i < N; i++) {
- while (a[i] >= 2) {
- for (j = 0; j < H; j++) {
- c[i][j] = a[i] % 2;
- a[i] = a[i] / 2;
- }
- }
- }
- for (i = 0; i < N; i++) {
- for (j = H - 1; j >= 0; j--) {
- cout « c[i][j];
- }
- cout « endl;
- }
- int* g = new int[N];
- for (i = 0; i < N; i++) {
- g[i] = 0;
- }
- for (i = 0; i < N; i++) {
- for (j = H - 1; j >= H - 1; j--) {
- cout « "Знак " « i + 1 « "-го " « " числа " « " " « c[i][j] « ": ";
- g[i] = c[i][j];
- }
- }
- for (i = 0; i < N; i++) {
- cout « "Мантисса " « i + 1 « "-го " « " числа " « " ";
- for (j = H - 7; j >= 0; j--) {
- k = j;
- cout « c[i][j];
- m = m + c[i][j] * pow(2, k);
- }
- cout « " в 2-й СС " « "или " « m « " в 10-й СС";
- cout « endl;
- m = 0;
- }
- for (i = 0; i < N; i++) {
- cout « "Порядок " « i + 1 « "-го " « " числа " « " ";
- for (j = H - 2; j >= H - 6; j--) {
- k = j - 10;
- cout « c[i][j];
- p = p + c[i][j] * pow(2, k);
- }
- cout « " в 2-й СС " « "или " « p « " в 10-й СС";
- cout « endl;
- sp = p - 15;
- /* if ( g[i] > 0) {
- for (i = 0; i < N; i++) {
- for (j = H - 7; j >= 0; j--) {
- w = w + c[i][j] * pow(10, (j + 1));
- }
- w = -((w) * pow(10, sp) / pow(10, H - 6));
- cout « fixed « setprecision(11) « w « endl;
- while (w > -10 && w < 10) {
- w = w * 2;
- if (w > 1 || w < -1) w = w - (int)w;
- }
- cout « fixed « setprecision(11) « (w - (int)w) « endl;
- }
- }
- else {
- for (i = 0; i < N; i++) {
- for (j = H - 7; j >= 0; j--) {
- w = w + pow(10, (j + 1));
- }
- w = ((w ) * pow(10, sp) / pow(10, H - 6));
- cout « fixed « setprecision(11) « w « endl;
- while (w > -10 && w < 10) {
- w = w * 2;
- if (w > 1 || w < -1) w = w - (int)w;
- }
- cout « fixed « setprecision(11) « (w - (int)w) « endl;
- }
- }
- */ if (g[i] != 0) {
- for (i = 0; i < N; i++) {
- for (j = H - 7; j >= 0; j--) {
- w = w + c[i][j] * pow(10, j);
- }
- q = (w / pow(10, 10));
- l = q * pow(10, sp);
- cout.precision(15);
- for (int oo = 0; oo < 10; oo++) {
- OTVET = (int)l % 10;
- r = r + OTVET *
- pow(2, step);
- step++;
- l = l / 10;
- }
- cout « endl « " При переводе исходного числа из шестнадцатеричной СС в формате половинной точности в десятичную СС соотвествует значению " « r « endl;
- /* w = w + pow(10, H - 5);
- w = -(w * pow(10, sp) / pow(10, H - 6));
- cout « w « endl;
- for (i = 0; i < N; i++) {
- for (j = H - 7; j >= 0; j--) {
- p = pow(10, j);
- o = o + ((int)w / pow(10, j)) * pow(2, j - 1);
- w = (int)w % p;
- }
- }
- cout « o « endl;
- */
- }
- }
- else {
- for (i = 0; i < N; i++) {
- for (j = H - 7; j >= 0; j--) {
- w = w + c[i][j] * pow(10, j);
- }
- q = (w / pow(10, 10));
- l = q * pow(10, sp);
- cout.precision(15);
- for (int oo = 0; oo < 10; oo++) {
- OTVET = (int)l % 10;
- r = r + OTVET * pow(2, step);
- step++;
- l = l / 10;
- }
- cout « endl « " При переводе исходного числа из шестнадцатеричной СС в формате половинной точности в десятичную СС соотвествует значению " « r « endl;
- /* w = w + pow(10, H - 5);
- w = ((w * pow(10, sp)) / pow(10, H - 6));
- cout « w « endl;
- for (i = 0; i < N; i++) {
- for (j = H - 7; j >= 0; j--) {
- p = pow(10, j);
- y = (int)w /pow(10, j);
- o = o + y * pow(2, j - 1);
- w = (int)w % p;
- }
- }
- cout « o « endl;
- */
- }
- }
- p = 0;
- }/*
- for (i = 0; i < N; i++) {
- for (j = 0; j < H; j++) {
- g[i][j] = 0;
- }
- }*/
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement