Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24

Условие для прекращения цикла

25.07.2012, 17:54. Показов 2479. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется задача: Ввести двоичный код и перевести его в десятичный. Имеется подсказка для решения задачи: использовать деление и деление с остатком, для "вырывания" отдельных чисел из двоичного кода. Сама формула перевода с двоичного на десятичный уже есть.
Проблема: оно заключается в том чтобы создать цикл. Цикл в котором будут "вырываться" числа из двоичного кода, чтобы преобразовать их в десятичный. Но я не знаю какое условие поставить для завершения цикла. Как поставить условие, чтобы оно прекращалась когда заканчивались числа в двоичном коде?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.07.2012, 17:54
Ответы с готовыми решениями:

Условие для цикла С++
Доброго всем времени суток! Помогите пожалуйста человеку который только начал открывать для себя С++ Задача следующая: необходимо...

Составить условие для завершения цикла
Почему не работает цикл do-while на проверку '!='? Если проверку меняю на '==', то все работает. Подскажите, пожалуйста, а то я в...

Нерабочее условие if, для пропуска части цикла
Программа для вычисления формулы Коркорэна, при работе программы в условие после проверки тело условия не выполняется:L:cry: Код: ...

20
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 18:00
А конкретнее можно? В какой форме вводится двоичный код? Пример?
1
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 18:09  [ТС]
В какой форме? cin >> a; Как обычно, как и для других любых чисел я использую cin
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 18:33
Так что, нужно прочитать п-ть нулей и единиц, а напечатать дес. число?

Добавлено через 9 минут
Вот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "conio.h"
#include "iostream.h"
 
int main(int argc, char* argv[])
{
 
    int n=0;
    char c;
 
    while (1)
    {
        c=getch();
        putch(c);
 
        if ((c != 26) &&  (c != 13) && (c != '0') && (c != '1'))
        {
            cout << " Err! " << endl;
            n=0;
        }
 
        if (c == 26) break;
 
        if (c == 13) 
        {
            cout << endl << n << endl;
            n=0;
        }
        if (c == '1')
            n=n*2+1;
        else
            n=n*2;
    }
 
    return 0;
}
Для окончания ввода жми Ctrl-Z
Миниатюры
Условие для прекращения цикла  
0
 Аватар для Intel~lect
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
25.07.2012, 18:38
Немного по другому сделал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
    char str[10];
    int n = 0;
 
    cout << "Введите двоичный код: ";
    cin >> str;
 
    for (int i=0; i<strlen(str); i++)
        n = n + (str[i] - '0') * pow(2, strlen(str) - i - 1);
 
    cout << n << endl;
 
   return 0;
}
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 18:43
Тоже вариант... Но умные люди утверждают, что при выполнении оператора "cin >> str;" можно ввести больше символов, чем строка может принять. Это ведет к неприятностям. Ну, и не очень рационально возводить двойку в степень (можно проще - достаточно умножения на 2 в цикле).
1
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 19:08  [ТС]
Спасибо что утруждались!
Но можно ли обойтись без использования строки и типа переменных char? Нужно чтобы было еще проще. Используя только управляющие структуры. Просто я еще не дочитал до функций, массивы, указатели и строки, классы и т.п. Те кто читали книгу "Как программировать на С++" Дейтелов поймут.
Нужна простая программа.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 19:12
Цитата Сообщение от Kuanish Посмотреть сообщение
Просто я еще не дочитал до функций, массивы, указатели и строки, классы и т.п.
- а в моем решении ничего этого нет...

Цитата Сообщение от Kuanish Посмотреть сообщение
Нужна простая программа.
- и что в ней сложного? Впрочем, без переменных, типа char это сделать можно, но это будет изврат...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "iostream.h"
 
int main(int argc, char* argv[])
{
    int n,m,k;
    cout << "Insert BINARY number" << endl;
    cin >> n;
    m=0;
    while (1)
    {
        k=n%10;
        if (k > 1) 
        {
            cout << "It is not a binary number!" << endl;
            break;
        }
        m=m*2+k;
        n=n/10;
        if (n == 0) break;
    }
    cout << m << endl;
    return 0;
}
0
 Аватар для Schizorb
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
25.07.2012, 19:28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
int bin_to_dec(int value)
{ 
    int res = 0, k = 1;
    
    while(value)
    {
        res += (value % 10) * k; 
        k *= 2;
        value /= 10;
    }    
    
    return res;  
}
 
int main()
{
    int value;
   
    std::cout << "Enter value: ";
    while(std::cin >> value)
    {
        std::cout << "Dec: " << bin_to_dec(value) << "\n\n";
        std::cout << "Enter value: ";
    }
    
    return 0;
}
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 19:40
Да, я немного ошибся во втором коде. Правильно вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(int argc, char* argv[])
{
    int n,m,k,p=1;
    cout << "Insert BINARY number" << endl;
    cin >> n;
    m=0;
    while (1)
    {
        k=n%10;
        if (k > 1) 
        {
            cout << "It is not a binary number!" << endl;
            break;
        }
        m=m+k*p;
        n=n/10;
        p=p*2;
        if (n == 0) break;
    }
    cout << m << endl;
    return 0;
}
1
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 19:49
Речь о простом алгоритме зашла, вот алгоритм всего в одну строчку, никаких делений и умножений:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int to_10_base(char *beg, char *s)
{
   return (beg <= s && (*s == '0' || *s == '1')) ? (*s - '0') + (to_10_base(beg, s - 1) << 1) : 0;
}
 
int main()
{
   char s[100];
   int a = 0;
   fgets(s, 100, stdin);
   a = to_10_base(s, s + strlen(s) - 2);
   printf("%d\n", a);
   return 0;
}
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 19:53
Цитата Сообщение от Thinker Посмотреть сообщение
(алгоритм всего в одну строчку):
- ввожу 12345, получаю 0
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 19:54
Цитата Сообщение от Catstail Посмотреть сообщение
- ввожу 12345, получаю 0
Надо ввести двоичный вид числа и получить десятичный (условие задачи) Функция отслеживает некорректные символы.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38168 / 21103 / 4307
Регистрация: 12.02.2012
Сообщений: 34,691
Записей в блоге: 14
25.07.2012, 19:58
Условие-то я знаю... Но 12345 - некорректный ввод, на который программа должна адекватно реагировать. Впрочем, Бог с ним.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 20:00
Согласен. Чтобы обработки не было дальше, начальное условие для рекурсии сразу 0 возвратит, что конечно неверно, зато в одну строчку корректные данные обработаются.
0
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 20:43  [ТС]
Это почти то что я хочу. Но я не понял 8-ю строку, а что это за условие?
Я про сообщение #10
0
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
27.07.2012, 15:44  [ТС]
объясните 8-ую строку, почему там в скобке "1" стоит?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 16:32
Цитата Сообщение от Kuanish Посмотреть сообщение
объясните 8-ую строку, почему там в скобке "1" стоит?
Это условие задает бесконечный цикл
0
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
27.07.2012, 17:38  [ТС]
а как тогда из цикла выйти, чтобы напечатать m?
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 17:46
Цитата Сообщение от Kuanish Посмотреть сообщение
а как тогда из цикла выйти, чтобы напечатать m?

Не по теме:

с помощью break. Такой вариант не очень одобряется, но все же

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.07.2012, 17:46
Помогаю со студенческими работами здесь

Какое условие поставить на выходе из цикла в методе Рунге Кутта 4 порядка для системы ДУ 1 порядка?
Пока имеется вот такой код для решения системы ДУ 1 порядка, если имеется ошибка исправьте пожалуйста, Вопрос: как мне получить ответ, мне...

Условие цикла while
Не как не соображу как сделать переменную int sh; и потом при диалоге с пользователем проверить что он ввел именно инт а не чар потому...

Не работает условие цикла
Здравствуйте! Есть программа: #include &lt;iostream&gt; using namespace std; main () { setlocale (0,&quot;&quot;); float a, b, d; ...

Сложное условие цикла
Есть txt-файл с числами, каждое новое со след строки. Нужно присвоить этим числам значения переменных &quot;a&quot; и &quot;b&quot; так,...

Объяснить условие цикла while
&lt;#include &lt;fstream&gt; using namespace std; #define FILENAME_1 &quot;file_1.txt&quot; #define FILENAME_2 &quot;file_2.txt&quot; int main() { ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru