Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 14.08.2020
Сообщений: 53
1

Цикл while

02.09.2020, 20:41. Показов 1269. Ответов 28

Author24 — интернет-сервис помощи студентам
3. Напишите программу, которая по данному натуральному N печатает двоичную форму этого числа.
Подсказка: Использовать алгоритм предыдущей задачи, только с операциями деления на 2.

ввод 123 вывод 1111011

пример :

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
    int a;
    printf("Enter a number: ");
    scanf_s("%d", &a);
    printf("Result: ");
    while (a / 10 != 0)
    {
        printf("%d", a % 10);
        a = a / 10;
    }
    printf("%d", a % 10);
    return 0;
}
на основе этого же примера тот же почти тот же алгоритм но изменил цифры деления на 2


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
    int a;
    printf("Enter a number: ");
    scanf_s("%d", &a);
    printf("Result: ");
    while (a != 0)
    {
        printf("%d", a % 2 );
    
    }
    printf("%d", a % 2);
    return 0;
}

а здесь на консоле при вводе 123 ни те цифры выводит
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2020, 20:41
Ответы с готовыми решениями:

Цикл: Вычислить значение выражения. Как вывести формулу и сделать цикл while?
Последовательно вводятся N целых чисел. Найти минимальное из них. #include&lt;stdio.h&gt; ...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень не использовать...

Вычислить и вывести сумму чётных целых чисел в интервале от 1 до n: 1) цикл «ДО» 2) цикл «ПОКА» 3) цикл «ДЛЯ»
Вычислить и вывести сумму чётных целых чисел в интервале от 1 до n: 1. цикл «ДО» 2. цикл «ПОКА»...

Цикл с предусловием, цикл с постусловием и цикл с параметром
Объясните пожалуйста как делать эти циклы. У меня не получается. Можете сделать как на фото, или на...

28
Модератор
Эксперт по электронике
8477 / 4335 / 1643
Регистрация: 01.02.2015
Сообщений: 13,462
Записей в блоге: 8
02.09.2020, 21:05 2
При делении на основание системы счисления получится младший разряд числа.
Если использовать именно деление, то для вывода в правильном порядке (от старшего к младшему) потребуется сохранять остатки от деления в каком-то буфере - стеке.

Можете попробовать тут рекурсивный вызов подпрограммы - тогда буфером-стеком будет выступать контекст каждого вызова подпрограммы.

Можно сохранять остатки деления в строке в обратном порядке.

Но самое эффективное - сравнение с нулём результата логического И числа n и битовой маски с единственным установленным разрядом.
1
Заблокирован
02.09.2020, 21:06 3

C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(void)
{
  int a, b = 0;
  printf("Enter a number: ");
  scanf("%d", &a);
  printf("Result: ");
  while (a) b = (b << 1) + (a & 1), a >>= 1; // :))))
  while (b) printf("%d", b & 1), b /= 2;
  return 0;
}
1
0 / 0 / 0
Регистрация: 14.08.2020
Сообщений: 53
02.09.2020, 21:10  [ТС] 4
извините ща пока в СИ проходим а не си++
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.09.2020, 21:10 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(void)
{
int a;
printf("Enter a number: ");
scanf_s("%d", &a);
printf("Result: ");
while (a != 0)
{
printf("%d", a % 2 );
 a /= 2;  // Вот это у вас пропущено
}
printf("\n");
return 0;
}
А исходный код (10-чный) вполне дурацкий
ЗЫ. И коды хорошо бы в теги оборачивать. Умеете? Научить?
1
0 / 0 / 0
Регистрация: 14.08.2020
Сообщений: 53
02.09.2020, 21:11  [ТС] 6
ФедосеевПавел, честно не понял что к чему
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.09.2020, 21:13 7
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
При делении на основание системы счисления получится младший разряд числа.
Да, верно. Я это как бы пропустил. тем более код примера совсем дурацкий.
0
ФедосеевПавел
02.09.2020, 21:14
  #8

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
C++
9
  while (a) b = (b << 1) + (a & 1), a >>= 1; // :))))
На что только люди не идут - и комментарии и смайлики и запятые - только чтобы операторных (фигурных) скобок не ставить!
:)

0
Заблокирован
02.09.2020, 21:14 9
Цитата Сообщение от Джей Джей Посмотреть сообщение
извините ща пока в СИ проходим а не си++
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(void)
{
  int a, b = 0;
  printf("Enter a number: ");
  scanf("%d", &a);
  printf("Result: ");
  while (a) b = (b << 1) + (a & 1), a >>= 1; // :))))
  while (b) printf("%d", b & 1), b /= 2;
  return 0;
}
Так норм?

Цикл while
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.09.2020, 21:17 10
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Можно сохранять остатки деления в строке в обратном порядке.
Наверное, это самое разумное. Просто реверснуть строку. А рекурсией, имхо, ТС еще рановато заморачиваться. Хотя придется, конечно, куда он денется?
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Но самое эффективное - сравнение с нулём результата логического И числа n и битовой маски с единственным установленным разрядом.
Это конечно, здорово. Но подходит только для двоичной.
0
Заблокирован
02.09.2020, 21:19 11
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
На что только люди не идут - и комментарии и смайлики и запятые - только чтобы операторных (фигурных) скобок не ставить!
А чо, не работает, штоли?
0
0 / 0 / 0
Регистрация: 14.08.2020
Сообщений: 53
02.09.2020, 21:20  [ТС] 12
Цитата Сообщение от Verevkin Посмотреть сообщение
while (a) b = (b << 1) + (a & 1), a >>= 1; // )))
  while (b) printf("%d", b & 1), b /= 2;

на си можете пожалуйста перевести
0
Заблокирован
02.09.2020, 21:21 13
Цитата Сообщение от Джей Джей Посмотреть сообщение
на си можете пожалуйста перевести
это чистейший си без всяких плюсов.
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
02.09.2020, 21:22 14
Цитата Сообщение от Джей Джей Посмотреть сообщение
на си можете пожалуйста перевести
Сие чистый Си. Кристально чистый. Первородный, как первый грех
0
0 / 0 / 0
Регистрация: 14.08.2020
Сообщений: 53
02.09.2020, 21:23  [ТС] 15
прям как на рынке "это чистый продукт гарантирую"))))))))
0
Модератор
Эксперт по электронике
8477 / 4335 / 1643
Регистрация: 01.02.2015
Сообщений: 13,462
Записей в блоге: 8
02.09.2020, 21:23 16
Цитата Сообщение от Джей Джей Посмотреть сообщение
не понял что к чему
Вот смотрите. Вы в той или иной мере самостоятельно собрали код по выводу десятичных цифр
Вывести цифры числа в обратном порядке
Обратите внимание - в каком порядке выводятся числа при помощи этого кода.

А по условию задачи из актуальной темы, нужно выводить не в обратном, а в правильном порядке.
Но при делении на основание системы вы получите младший разряд и если выведете остаток - то в итоге на экране получите цифры в обратном порядке.
Попробуйте и увидите.

Значит требуется где-то хранить остатки и выводить их не сразу после получения, а только после вывода старших разрядов.
Т.е. как бы "развернуть" вывод остатков от деления.

Это и достигается теми мерами, что я перечислил. А Verevkin привёл и другой подход - реверс исходного числа и вывод уже его алгоритмом от предыдущей задачи.

Собственно, задачи решаются для того, чтобы научиться. Особенно в сентябре. Пробуйте.
1
Заблокирован
02.09.2020, 21:25 17
Кстати, там баг. Надо так:
C
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main(void)
{
  int a, b = 0;
  printf("Enter a number: ");
  scanf("%d", &a);
  printf("Result: ");
  while (a) b = (b << 1) + (a & 1), a >>= 1; // :))))
  do printf("%d", b & 1), b /= 2; while (b); 
  return 0;
}
1
ФедосеевПавел
02.09.2020, 21:26
  #18

Не по теме:

Verevkin, работает.
Уж и поддеть нельзя :)

0
0 / 0 / 0
Регистрация: 14.08.2020
Сообщений: 53
02.09.2020, 21:26  [ТС] 19
конечно я не знаю уместно ли здесь ссылаться на что-нибудь на какую-то доп инфу но есть ли конкретные книги или видео по циклам для понимания сути просто не нашёл подходящего
0
Заблокирован
02.09.2020, 21:30 20
Цитата Сообщение от Джей Джей Посмотреть сообщение
конечно я не знаю уместно ли здесь ссылаться на что-нибудь на какую-то доп инфу
Ссылайся сюда. Не ошибёшься.
0
02.09.2020, 21:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2020, 21:30
Помогаю со студенческими работами здесь

Начать вложенный цикл не с первого элемента и по условию вернуться в основной цикл
Добрый день. На самом деле, проблема чуть шире, чем в названии топика. Есть цикл, в котором идёт...

Цикл: Используя цикл while, выведите на экран для числа 2 его степени от 0 до 20
Используя цикл while, выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в...

Написать в турбо паскале, Цикл с параметром, Цикл, с постусловием, и с предусловием пожалуйста

Цикл: Посчитать среднее арифметическое всех чисел в заданном диапазоне. Цикл while.
Напишите пожалуйста код для данной задачки с помощью цикла while Вывести числа в пользовательском...

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор?
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не...

Цикл do/while. Страница в браузере, уходит в бесконечный цикл и ничего не выводит.
Помогите, страница в браузере, как я понял, уходит в бесконечный цикл и ничего не выводит. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru