Функция для перевода цел.числа из dec в oct - C (СИ)
Формулировка задачи:
Написал функцию для перевода, вроде бы переводит, а результат не смог вывести. Укажите на ошибки. Потому что чую, что где-то накосячил сильно.
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <math.h>
void d2o(int dec)
{
char s[]="01234567";
char oct;
int i,j;
if (dec==0)
oct='0';
else
{
oct=' ';
i=0;
while((1<<((i+1)*3))<=dec) //8^(I + 1)
i++;
for(j=0; j<i; j++)
{
oct=oct+s[(dec>>((i-j)*3))+1]; //DEC DIV 8^(I - J)
dec=dec&((1<<((i-j)*3))-1); //DEC MOD 8^(I - J)
}
}
}
int main(int argc, char* argv[])
{
int z;
printf("vvedi chislo: ");
scanf("%d",&z);
d2o(z);
getch();
return 0;
}Решение задачи: «Функция для перевода цел.числа из dec в oct»
textual
Листинг программы
void dec2oct (unsigned int dec)
{
int k=0;
char buf[12]={0};
do{
buf[k]=dec&0x07;
dec>>=3;//dec/=8;
k++;
}while(dec);
for(;k>0;k--)
printf("%d",buf[k-1]);
printf("\n");
}
Объяснение кода листинга программы
- Объявлена функция dec2oct, которая принимает целочисленный аргумент dec.
- Внутри функции объявлены следующие переменные:
- k, целочисленная переменная, инициализируется значением 0.
- buf, массив символов, инициализируется значением {0}.
- В цикле do-while происходит перевод десятичного числа в восьмеричное.
- В каждой итерации цикла, самый старший бит числа dec записывается в соответствующий элемент массива buf.
- Число dec сдвигается вправо на 3 бита (на 8 в десятичной системе).
- Значение переменной k увеличивается на 1.
- После окончания цикла do-while, в цикле for происходит вывод значения каждого элемента массива buf в консоль.
- Цикл начинается с k равным 1, а заканчивается, когда k меньше или равно 0.
- Каждая итерация цикла начинается с вызова функции printf с аргументом buf[k-1] (индекс элемента массива buf, уменьшенный на 1).
- В конце функции, после завершения цикла for, вызывается функция printf с аргументом
\n, что переводит курсор на новую строку.