Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.6.75] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. Помогите, пожалуйста, с заданием:
Разработать программу для реализации указанных действий над целыми числами без знака (unsigned long). Создать два варианта: 1) Для чисел, заданных в десятичной системе счисления, 2) Для чисел, заданных в восьмеричной системе счисления. Для реализации 2-го варианта использовать поразрядно-логические операции и операции сдвига. Перевести в системы счисления нужно результаты работы программы для следующих заданий: 1) Для вводимой последовательности целых чисел найти сумму чисел, делящихся на 2 и больших заданного числа p. 2) Из двух чисел получить новое число путем их соединения (331, 23 -> 33123). Сами задания я сделал, мне нужен именно перевод в другие системы счисления. Вот мой исходный код: #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; } } |
Сообщ.
#2
,
|
|
|
Andrey_2019, задание весьма странное. Дело в том, что перевод из системы счисления обычно имеет смысл в контексте ввода и вывода. Т.е. есть у нас некий unsigned long, ты можешь записать в него хоть 10102, 128, 1010, A16... в итоге все равно получишь одно и тоже фактическое содержимое. Можно реализовать некие арифметические операции прямо над строками (в любой системе счисления), но это не подходит под описание задания. Предлагаю уточнить у своего преподавателя, что конкретно имеется ввиду.
|