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

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

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

Имеется задача: Ввести двоичный код и перевести его в десятичный. Имеется подсказка для решения задачи: использовать деление и деление с остатком, для "вырывания" отдельных чисел из двоичного кода. Сама формула перевода с двоичного на десятичный уже есть.
Проблема: оно заключается в том чтобы создать цикл. Цикл в котором будут "вырываться" числа из двоичного кода, чтобы преобразовать их в десятичный. Но я не знаю какое условие поставить для завершения цикла. Как поставить условие, чтобы оно прекращалась когда заканчивались числа в двоичном коде?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2012, 17:54
Ответы с готовыми решениями:

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

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

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

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

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
20
Модератор
Эксперт Python
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 18:00 2
А конкретнее можно? В какой форме вводится двоичный код? Пример?
1
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 18:09  [ТС] 3
В какой форме? cin >> a; Как обычно, как и для других любых чисел я использую cin
0
Модератор
Эксперт Python
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 18:33 4
Так что, нужно прочитать п-ть нулей и единиц, а напечатать дес. число?

Добавлено через 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
Миниатюры
Условие для прекращения цикла  
137 / 126 / 14
Регистрация: 03.07.2012
Сообщений: 355
25.07.2012, 18:38 5
Немного по другому сделал.
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
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 18:43 6
Тоже вариант... Но умные люди утверждают, что при выполнении оператора "cin >> str;" можно ввести больше символов, чем строка может принять. Это ведет к неприятностям. Ну, и не очень рационально возводить двойку в степень (можно проще - достаточно умножения на 2 в цикле).
1
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 19:08  [ТС] 7
Спасибо что утруждались!
Но можно ли обойтись без использования строки и типа переменных char? Нужно чтобы было еще проще. Используя только управляющие структуры. Просто я еще не дочитал до функций, массивы, указатели и строки, классы и т.п. Те кто читали книгу "Как программировать на С++" Дейтелов поймут.
Нужна простая программа.
0
Модератор
Эксперт Python
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 19:12 8
Цитата Сообщение от 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
512 / 464 / 81
Регистрация: 07.04.2012
Сообщений: 869
Записей в блоге: 1
25.07.2012, 19:28 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
#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
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 19:40 10
Да, я немного ошибся во втором коде. Правильно вот так:

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
Эксперт С++
4257 / 2231 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 19:49 11
Речь о простом алгоритме зашла, вот алгоритм всего в одну строчку, никаких делений и умножений:

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
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 19:53 12
Цитата Сообщение от Thinker Посмотреть сообщение
(алгоритм всего в одну строчку):
- ввожу 12345, получаю 0
0
Эксперт С++
4257 / 2231 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 19:54 13
Цитата Сообщение от Catstail Посмотреть сообщение
- ввожу 12345, получаю 0
Надо ввести двоичный вид числа и получить десятичный (условие задачи) Функция отслеживает некорректные символы.
0
Модератор
Эксперт Python
28540 / 15408 / 3046
Регистрация: 12.02.2012
Сообщений: 25,238
Записей в блоге: 4
25.07.2012, 19:58 14
Условие-то я знаю... Но 12345 - некорректный ввод, на который программа должна адекватно реагировать. Впрочем, Бог с ним.
0
Эксперт С++
4257 / 2231 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 20:00 15
Согласен. Чтобы обработки не было дальше, начальное условие для рекурсии сразу 0 возвратит, что конечно неверно, зато в одну строчку корректные данные обработаются.
0
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 20:43  [ТС] 16
Это почти то что я хочу. Но я не понял 8-ю строку, а что это за условие?
Я про сообщение #10
0
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
27.07.2012, 15:44  [ТС] 17
объясните 8-ую строку, почему там в скобке "1" стоит?
0
Эксперт С++
4257 / 2231 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 16:32 18
Цитата Сообщение от Kuanish Посмотреть сообщение
объясните 8-ую строку, почему там в скобке "1" стоит?
Это условие задает бесконечный цикл
0
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
27.07.2012, 17:38  [ТС] 19
а как тогда из цикла выйти, чтобы напечатать m?
0
Эксперт С++
4257 / 2231 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 17:46 20
Цитата Сообщение от Kuanish Посмотреть сообщение
а как тогда из цикла выйти, чтобы напечатать m?

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2012, 17:46

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.