Функция для перевода цел.числа из 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"); 
}

Объяснение кода листинга программы

  1. Объявлена функция dec2oct, которая принимает целочисленный аргумент dec.
  2. Внутри функции объявлены следующие переменные:
    • k, целочисленная переменная, инициализируется значением 0.
    • buf, массив символов, инициализируется значением {0}.
  3. В цикле do-while происходит перевод десятичного числа в восьмеричное.
    • В каждой итерации цикла, самый старший бит числа dec записывается в соответствующий элемент массива buf.
    • Число dec сдвигается вправо на 3 бита (на 8 в десятичной системе).
    • Значение переменной k увеличивается на 1.
  4. После окончания цикла do-while, в цикле for происходит вывод значения каждого элемента массива buf в консоль.
    • Цикл начинается с k равным 1, а заканчивается, когда k меньше или равно 0.
    • Каждая итерация цикла начинается с вызова функции printf с аргументом buf[k-1] (индекс элемента массива buf, уменьшенный на 1).
  5. В конце функции, после завершения цикла for, вызывается функция printf с аргументом \n, что переводит курсор на новую строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы