Advertisement
Guest User

Untitled

a guest
Nov 15th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.50 KB | None | 0 0
  1. #include "pch.h"
  2. #include <stdio.h>
  3. #include <locale.h>
  4. #include <math.h>
  5. #include <conio.h>
  6. #include <windows.h>
  7. #include <iostream>
  8. #include <fstream>
  9.  
  10. using namespace std;
  11.  
  12. int show(char* a, int size)
  13. {
  14.     unsigned char mask = 0x80;
  15.     a = a + size - 1;
  16.     for (int i = size; i > 0; i--, a--)
  17.     {
  18.         for (int j = 0; j < 8; j++)
  19.         {
  20.             if ((mask >> j)&*a)
  21.                 cout<<"1";
  22.             else cout<<"0";
  23.         }
  24.         cout<<" ";
  25.     }
  26.     cout<<"\n";
  27.     return 0;
  28. }
  29.  
  30. int main()
  31. {
  32.     setlocale(LC_ALL, "");
  33.     int i;
  34. vosvrat:
  35.     printf("Выбор:\n");
  36.     printf("1.char\n");
  37.     printf("2.short int;\n");
  38.     printf("3.int;\n");
  39.     printf("4.long int;\n");
  40.     printf("5.float;\n");
  41.     printf("6.double;\n");
  42.     printf("7.long double;\n");
  43.     printf("8.Решето Эратосфена\n");
  44.     printf("Выбрали: ");
  45.     scanf_s("%d", &i);
  46.     printf("\n");
  47.     switch (i)
  48.     {
  49.     case 1:
  50.     {
  51.         char chislo;
  52.         unsigned char mask = 0x1;
  53.         cout<<"Введите число: ";
  54.         scanf_s("%d", &chislo);
  55.         char*add = &chislo;
  56.         if (chislo >= 0)
  57.         {
  58.             cout<<"PK=OK=DK\n";
  59.             show((char*)add, sizeof(chislo));
  60.         }
  61.         else
  62.         {
  63.             cout<<"DK=";
  64.             show((char*)add, sizeof(chislo));
  65.             cout<<"\nOK=";
  66.             chislo -= 1;
  67.             show((char*)add, sizeof(chislo));
  68.             cout<<"\nPK=";
  69.             chislo = (~(chislo)) | (mask << ((sizeof(chislo) * 8) - 1));
  70.             show((char*)add, sizeof(chislo));
  71.         }
  72.     } break;
  73.     case 2:
  74.     {
  75.         short int chislo;
  76.         unsigned char mask = 0x1;
  77.         cout<<"Введите число: ";
  78.         cin >> chislo;//%hd
  79.         short int*add = &chislo;
  80.         if (chislo >= 0)
  81.         {
  82.             cout << "PK=OK=DK\n";
  83.             show((char*)add, sizeof(chislo));
  84.         }
  85.         else
  86.         {
  87.             cout << "DK=";
  88.             show((char*)add, sizeof(chislo));
  89.             cout << "\nOK=";
  90.             chislo -= 1;
  91.             show((char*)add, sizeof(chislo));
  92.             cout << "\nPK=";
  93.             chislo = (~(chislo)) | (mask << ((sizeof(chislo) * 8) - 1));
  94.             show((char*)add, sizeof(chislo));
  95.         }
  96.     }break;
  97.     case 3:
  98.     {
  99.         int chislo;
  100.         unsigned char mask = 0x1;
  101.         cout << "Введите число: ";
  102.         cin >> chislo;
  103.         int*add = &chislo;
  104.         if (chislo >= 0)
  105.         {
  106.             cout << "PK=OK=DK\n";
  107.             show((char*)add, sizeof(chislo));
  108.         }
  109.         else
  110.         {
  111.             cout << "DK=";
  112.             show((char*)add, sizeof(chislo));
  113.             cout << "\nOK=";
  114.             chislo -= 1;
  115.             show((char*)add, sizeof(chislo));
  116.             cout << "\nPK=";
  117.             chislo = (~(chislo)) | (mask << ((sizeof(chislo) * 8) - 1));
  118.             show((char*)add, sizeof(chislo));
  119.         }
  120.     }break;
  121.     case 4:
  122.     {
  123.         long int chislo;
  124.         unsigned char mask = 0x1;
  125.         cout << "Введите число: ";
  126.         cin >> chislo;
  127.         long int*add = &chislo;
  128.         if (chislo >= 0)
  129.         {
  130.             cout << "PK=OK=DK\n";
  131.             show((char*)add, sizeof(chislo));
  132.         }
  133.         else
  134.         {
  135.             printf("DK=");
  136.             show((char*)add, sizeof(chislo));
  137.             cout << "\nOK=";
  138.             chislo -= 1;
  139.             show((char*)add, sizeof(chislo));
  140.             cout << "\nPK=";
  141.             chislo = (~(chislo)) | (mask << ((sizeof(chislo) * 8) - 1));
  142.             show((char*)add, sizeof(chislo));
  143.         }
  144.     }break;
  145.     case 5:
  146.     {
  147.         float chislo;
  148.         cout << "Введите число: ";
  149.         cin >> chislo;
  150.         float*add = &chislo;
  151.         show((char*)add, sizeof(chislo));
  152.     }break;
  153.     case 6:
  154.     {
  155.         double chislo;
  156.         cout << "Введите число: ";
  157.         cin >> chislo;
  158.         double*add = &chislo;
  159.         show((char*)add, sizeof(chislo));
  160.     }break;
  161.     case 7:
  162.     {
  163.         long double chislo;
  164.         printf("Введите число: ");
  165.         scanf_s("%Lf", &chislo);
  166.         long double*add = &chislo;
  167.         show((char*)add, sizeof(chislo));
  168.     }break;
  169.     case 8:
  170.     {
  171.         const int N = 100000;
  172.         unsigned char A[N / 8 + 1];
  173.         for (int i = 0; i < N / 8 + 1; i++) A[i] = 0xff; //заполнение
  174.         for (int i = 2; i < N / 2; i++) //начинаем искать делители/простые числа с двух, тк 0 и 1 не нужно
  175.             if (A[i / 8] & (0x80 >> (i % 8)))
  176.                 for (int j = 2 * i; j <= N; j += i)
  177.                 {
  178.                     A[j / 8] &= ~(0x80 >> (j % 8));
  179.                 }
  180.         A[0] &= 0x3f; //убираем 0 и 1 из простых чисел
  181.         printf("Простые числа выведены в файл file.txt");
  182.         ofstream fout("file.txt");
  183.         for (int i = 0; i < 1000; i++)
  184.         {
  185.             for (int j = 0; j < 100; j++)
  186.                 if (A[(i * 100 + j) / 8] & (0x80 >> ((i * 100 + j) % 8))) fout << " " << i * 100 + j;
  187.             fout << "\n";
  188.         }
  189.         fout.close();
  190.         system("file.txt");
  191.     }break;
  192.     }
  193.     printf("\nЗакончить программу?\n");
  194.     printf("1 - Если да\n");
  195.     printf("0 - Если нет\n");
  196.     int v;
  197.     printf("Выбор: ");
  198.     scanf_s("%d", &v);
  199.     switch (v)
  200.     {
  201.     case 0: {
  202.         printf("\n");
  203.         goto vosvrat; break; }
  204.     case 1: {
  205.         return 0; }
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement