Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Kuanish
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 17:54     Условие для прекращения цикла #1
Имеется задача: Ввести двоичный код и перевести его в десятичный. Имеется подсказка для решения задачи: использовать деление и деление с остатком, для "вырывания" отдельных чисел из двоичного кода. Сама формула перевода с двоичного на десятичный уже есть.
Проблема: оно заключается в том чтобы создать цикл. Цикл в котором будут "вырываться" числа из двоичного кода, чтобы преобразовать их в десятичный. Но я не знаю какое условие поставить для завершения цикла. Как поставить условие, чтобы оно прекращалась когда заканчивались числа в двоичном коде?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2012, 17:54     Условие для прекращения цикла
Посмотрите здесь:

C++ Условие цикла while
Условие для цикла С++ C++
Составить условие для завершения цикла C++
Условие выполнения цикла C++
Условие цикла Иф,неправильная работа иф C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
25.07.2012, 18:00     Условие для прекращения цикла #2
А конкретнее можно? В какой форме вводится двоичный код? Пример?
Kuanish
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 18:09  [ТС]     Условие для прекращения цикла #3
В какой форме? cin >> a; Как обычно, как и для других любых чисел я использую cin
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
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
Миниатюры
Условие для прекращения цикла  
Intel~lect
 Аватар для Intel~lect
135 / 124 / 2
Регистрация: 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;
}
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
25.07.2012, 18:43     Условие для прекращения цикла #6
Тоже вариант... Но умные люди утверждают, что при выполнении оператора "cin >> str;" можно ввести больше символов, чем строка может принять. Это ведет к неприятностям. Ну, и не очень рационально возводить двойку в степень (можно проще - достаточно умножения на 2 в цикле).
Kuanish
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 19:08  [ТС]     Условие для прекращения цикла #7
Спасибо что утруждались!
Но можно ли обойтись без использования строки и типа переменных char? Нужно чтобы было еще проще. Используя только управляющие структуры. Просто я еще не дочитал до функций, массивы, указатели и строки, классы и т.п. Те кто читали книгу "Как программировать на С++" Дейтелов поймут.
Нужна простая программа.
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
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;
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 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;
}
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
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;
}
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 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;
}
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
25.07.2012, 19:53     Условие для прекращения цикла #12
Цитата Сообщение от Thinker Посмотреть сообщение
(алгоритм всего в одну строчку):
- ввожу 12345, получаю 0
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 19:54     Условие для прекращения цикла #13
Цитата Сообщение от Catstail Посмотреть сообщение
- ввожу 12345, получаю 0
Надо ввести двоичный вид числа и получить десятичный (условие задачи) Функция отслеживает некорректные символы.
Catstail
Модератор
 Аватар для Catstail
21490 / 10243 / 1668
Регистрация: 12.02.2012
Сообщений: 17,124
25.07.2012, 19:58     Условие для прекращения цикла #14
Условие-то я знаю... Но 12345 - некорректный ввод, на который программа должна адекватно реагировать. Впрочем, Бог с ним.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.07.2012, 20:00     Условие для прекращения цикла #15
Согласен. Чтобы обработки не было дальше, начальное условие для рекурсии сразу 0 возвратит, что конечно неверно, зато в одну строчку корректные данные обработаются.
Kuanish
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
25.07.2012, 20:43  [ТС]     Условие для прекращения цикла #16
Это почти то что я хочу. Но я не понял 8-ю строку, а что это за условие?
Я про сообщение #10
Kuanish
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
27.07.2012, 15:44  [ТС]     Условие для прекращения цикла #17
объясните 8-ую строку, почему там в скобке "1" стоит?
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 16:32     Условие для прекращения цикла #18
Цитата Сообщение от Kuanish Посмотреть сообщение
объясните 8-ую строку, почему там в скобке "1" стоит?
Это условие задает бесконечный цикл
Kuanish
0 / 0 / 0
Регистрация: 16.07.2012
Сообщений: 24
27.07.2012, 17:38  [ТС]     Условие для прекращения цикла #19
а как тогда из цикла выйти, чтобы напечатать m?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2012, 17:46     Условие для прекращения цикла
Еще ссылки по теме:

Условие прерывания цикла C++
C++ Не работает условие цикла
Не выполняется условие вложенного цикла C++

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

Или воспользуйтесь поиском по форуму:
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.07.2012, 17:46     Условие для прекращения цикла #20
Цитата Сообщение от Kuanish Посмотреть сообщение
а как тогда из цикла выйти, чтобы напечатать m?

Не по теме:

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

Yandex
Объявления
27.07.2012, 17:46     Условие для прекращения цикла
Ответ Создать тему
Опции темы

Текущее время: 14:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru