На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Перевод чисел в десятичную и восьмеричную системы счисления , Нужно сделать перевод чисел в системы счисления
    Здравствуйте. Помогите, пожалуйста, с заданием:
    Разработать программу для реализации указанных действий над целыми числами без знака (unsigned long). Создать два варианта:
    1) Для чисел, заданных в десятичной системе счисления,
    2) Для чисел, заданных в восьмеричной системе счисления.
    Для реализации 2-го варианта использовать поразрядно-логические операции и операции сдвига.
    Перевести в системы счисления нужно результаты работы программы для следующих заданий:
    1) Для вводимой последовательности целых чисел найти сумму чисел, делящихся на 2 и больших заданного числа p.
    2) Из двух чисел получить новое число путем их соединения (331, 23 -> 33123).
    Сами задания я сделал, мне нужен именно перевод в другие системы счисления.
    Вот мой исходный код:
    ExpandedWrap disabled
      #include <stdio.h>
      #include <conio.h>
       
      int a, b, c, s;
      int p;
       
      int main(void);
      void perevod1();
      void perevod2();
      int zadacha1(int a, int s, int p);
      int zadacha2(int a, int b);
       
      int zadacha1(int p, int a)
      {
          int s = 0;
          printf("\n Vvedite p=");
          scanf("%d",&p);
          printf("\n Vvedite posledovatelnost chisel a, v konce symbol '*'=");
          while (scanf("%d",&a))
              if ((a%2==0) && (a>p)) s = s+a;
          printf("\n s = %d \n",s);  
      }
       
      int zadacha2(int a, int b, int c)
      {
          int n = b, d = 1;
          printf("\n Vvedite a=");
          scanf("%d",&a);
          printf("\n Vvedite b=");
          scanf("%d",&b);
          while(n != 0)
          {
              d *= 10;
              n /= 10;
          }
          return c = a * d + b;
      }
       
      void perevod1()
      {
          unsigned long a1;
          unsigned long b1, c1, c2;
          int k = 1;        
          printf("\n Vvedite chislo a1=");
          scanf("%lo",&a1);
          b1 = 0;
          while (a1)
          {  
              c1 = a1 & 0x7;      
              if (c1 != 0)
              {
                  c1--;
                  c2 = c1 << (k - 1) * 3;    
                  b1 = b1 | c2;                  
              }
              k++;                
              a1 = a1 >> 3;          
          }
          printf("\n novoe chislo = %lo \n",b1);
          getch();    
      }
       
      void perevod2()
      {
          unsigned long a1;
          unsigned long b1, c1, c2;
          int k = 1;        
          printf("\n Vvedite chislo a1=");
          scanf("%lo", &a1);
          b1 = 0;
          while (a1)
          {
              c1 = a1 & 0x7;      
              if (c1 != 0)
              {
                  c1--;
                  c2 = c1 << (k - 1) * 3;    
                  b1 = b1 | c2;                  
              }
              k++;                
              a1 = a1 >> 3;          
         }
         printf("\n novoe chislo = %lo", b1);
         getch();
      }
       
      main ()
      {
          int input;
          printf("\n Viberite punct menu: \n");
          printf("\n 1. Summa chisel, delyashixsya na 2 i bolshix zadannogo chisla p \n");
          printf("\n 2. Novoe chislo, poluchinnoe iz dvux chisel putem ix soedininiya 331, 23 \n");
          printf("\n 3. Exit \n");
          printf("\n Vash vibor:");
          scanf("%d", &input);
          switch(input)
          {
              case 1:
                  zadacha1(p, a);
                  //break;
              case 2:
                  printf("\n Novoe chislo = %d \n", zadacha2(331, 23, c));
                  perevod1();
                  perevod2();
                  break;
              case 3:
                  break;      
          }
      }
      Andrey_2019, задание весьма странное. Дело в том, что перевод из системы счисления обычно имеет смысл в контексте ввода и вывода. Т.е. есть у нас некий unsigned long, ты можешь записать в него хоть 10102, 128, 1010, A16... в итоге все равно получишь одно и тоже фактическое содержимое. Можно реализовать некие арифметические операции прямо над строками (в любой системе счисления), но это не подходит под описание задания. Предлагаю уточнить у своего преподавателя, что конкретно имеется ввиду.
      Сообщение отредактировано: shm -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0197 ]   [ 17 queries used ]   [ Generated: 19.04.24, 23:49 GMT ]