grekalov
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Доброго времени суток, неделю пытаюсь решить задачу из книги Дейтелов "Как программировать на С". Сама задача: Выведите таблицу, состоящую из десятичного, двоичного, восьмеричного и шестнадцатиричного эквивалентов. Если вы не знакомы с этими системами счисления, но хотите попытаться выполнить это упражнение, сначала прочитайте приложение В. Что по поводу преобразования этих чисел в приложение В: Предположим, что мы хотим преобразовать 10-е число 57 в двоичное. Начнем с того, что выпишем значения позиций двоичной системы в колонки, справа налево, пока не дойдем до позиционного значения, превосходящего наше десятичное число. Эта позиция нам не нужна и мы отбрасываем этот столбец. Таким образом, сначала мы запишем: Позиционные значения: 64 32 16 8 4 2 1 Затем мы отбрасываем столбец с позиционным значением 64 Позиционные значения: 32 16 8 4 2 1 После этого начинается процесс обработки столбцов, с крайнего левого столбца и далее, до крайнего правого. Мы делим 57 на 32, получаем 1 и остаток 25 и т.д. В результате получаем: Позиционные значения: 32 16 8 4 2 1 Значения цифр: 1 1 1 0 0 1. Я конечно понимаю, что уровень у меня никакой, но стараюсь. Вот что до этого изучено по этой книге: Циклы, переменные инт и флоат и все. Т.е. не о каких указатаелях, строках, массивах и т.п. не упоминалось еще. Ну а вот сам код, который у меня получился для 2-х, а вот для остальных никак. # include <stdio.h> int main () { int t_zn = 1, k, j = 0, i = 1, temp ; for (k = 0; k <= 16; k++) { t_zn = k; if (t_zn == 0) { printf ("%11s%10s\n", "Десятичное число", "2 -ое число"); printf ("%11d%14d\n", k, t_zn); } else { temp = t_zn;/*Для расчета остатка от деления для 8-х чисел*/ i = 1; while (i <= t_zn)/* Вычисление позиционных */ { i *= 2; /* значений, кот. не м.б. > введенного числа для 8-х*/ } j = i; j /= 2; printf ("%11d\t\t", k); while (j > 0) { t_zn /= j; /*Результат показывает целочисленное деление для 2-х*/ temp %= j; /*Результат показывает остаток от деления для 2-х*/ printf ("%d", t_zn);/*Печать результата целочисленного деления*/ t_zn = temp; j /= 2; } printf ("\n"); } } return 0; Просьба, подскажите, как добавить например еще для 8-х. Если по-порядку, т.е. вывести сначала для 2-х, затем для 8-х, и для 16-х. То, в принципе ничего сложного. А вот как вывести это в одной таблице, т.е. 10-е, 2-е, 8-е, 16-е - вот над этим уже неделю бьюсь. Хотя в условии не сказано что надо именно так, но думаю имеется ввиду именно это. Подскажите, у кого есть мысли на этот счет. С самого кода прошу громко не смеяться, начинающий я |