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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
#1

задача на C++ - C++

18.12.2011, 17:17. Просмотров 955. Ответов 17
Метки нет (Все метки)

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


Заранее спасибо.

Добавлено через 44 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int main()
{
    srand((unsigned)time(NULL));
    int k=256;
    int x = rand()%k-1; 
    cout<<x<< " "; //âûâîäèì
     
    for(int i = sizeof(int)*2 - 1; i >= 0; i--)
      cout <<((x >> i) & 1) <<' ';
    
return 0;
}
вывод в двоичной форме...
с остальным запара...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2011, 17:17     задача на C++
Посмотрите здесь:

Задача: В некотором государстве ввели компьютерный паспорт гражданина.(задача) - Pascal
Доброго времени суток,форумчане. Хотелось бы попросить помощи в решении одной задачи от умных голов. Задача: В некотором...

Задача на k-тую цифру последовательности, задача на схему Горнера. - Pascal
Ну, собственно опять прошу помощи... Задача 1: Определить k-тую цифру последовательности 1234567891011121314…, в которой выписаны подряд...

Задача на перебор вариантов. Задача Л.Эйлера. Про чиновника - PascalABC.NET
Задача Л.Эйлера. Некий чиновник купил лошадей и быков на сумму 1770 талеров. За каждую лошадь он уплатил по 31 талеру, а за каждого быка по...

Первая смешанная задача для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье - Дифференциальные уравнения
Решить первую смешанную задачу для волнового уравнения на отрезке (задача о колебаниях ограниченной струны) методом Фурье ...

Задача о размещении весов по ящикам (задача о рюкзаках) - Delphi
Есть упорядоченный по невозрастанию набор весов предметов w1..wn, которые необходимо распределить по ящикам способным выдержать вес V,...

Задача на файл и задача на создание очереди - Pascal
1 Дан символьный файл, содержащий, по крайней мере, один символ пробела. Удалить из файла все символы, предшествующие пробелу 2 ...

Задача Дам или задача Восьми - Алгоритмы
помогите найти ошибку в алгоритме. не находит ответ подозреваю ошибку в k, i, j package com.company; import java.util.Arrays;...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dima_c8
4 / 4 / 0
Регистрация: 17.12.2011
Сообщений: 148
18.12.2011, 17:33     задача на C++ #2
Я думаю что здесь нужно использовать инструкцыю "if"или "switch" но вполне возможно что я ошыбаюсь 50на50
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 17:37  [ТС]     задача на C++ #3
я больше к while склоняюсь

пока число не станет кратным 1000 (то есть 8)
сдвигать по битово в право
потом заменить числа 000 на 0110
и сбросить самый старший единичный бит
и все это скорее всего в цикле, на случай если у нас будет две последовательности 000
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 18:15  [ТС]     задача на C++ #4
циклический сдвиг вправо

C++
1
2
3
4
5
6
7
int shl(int a, int s) 
  {
     if (a>>7==0)
        return ((a<<s) | (a>>7-s)) & (~(1<<7));
     else
       return ((a<<s) | (a>>7-s)) | (1<<7);
  }
не хочет правда компилироваться
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 18:50     задача на C++ #5
Что должно быть на выходе при num = 1000000b? 101100110b? Или 100110110b?
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 19:03  [ТС]     задача на C++ #6
она должна искать нули слева столько раз пока все последовательности 000 не исчезнут
то есть:
1 000 000 0 -> 1 0110 000 0 ->0110 000 0-> 0110 0110 0-> 11001100
число генерируются случайно в диапазоне от 0 до 255. (то есть 8 бит)
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 19:16     задача на C++ #7
Вот на 2-й случай
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
#include <stdio.h>
 
int func(int num)
{
    int out = 0;
    int order = 0;
    while(num)
    {
        if((num & 0x7) == 0)
        {
            num <<= 1;
            num |= 0x6;
        }
        out |= ((num & 1) << order);
        num >>= 1;
        ++order;
    }
    return out;
}
 
int main(void)
{
    int a;
    scanf("%d", &a);
    printf("%d", func(a));
    return 0;
}
Добавлено через 13 минут
А почему не сначала ищем нули?
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 19:21  [ТС]     задача на C++ #8
если вместо ввода а с клавиатуры, вставлять код генерации случайного числа - не компилируется.
да и сам код довольно странно реагирует на числа.
или он в десятиричной выводит?

А почему не сначала ищем нули?
в условиях нет на счет этого ничего

сообразил с кодом. благодарю!

что на счет случайных чисел?
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 19:25     задача на C++ #9
Имхо, задание составлено некорректно. Не указано, с какой стороны искать нули. Не сказано, как искать нули. Вот как минимум 4 случая
0000 0100 0000
0000 1000 0110
0001 0011 0110

0000 0100 0000
0000 1000 0110
0001 0110 0110

0000 0100 0000
0000 1011 0000
0001 0110 1100

0000 0100 0000
0000 1011 0000
0001 0110 0110
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 19:29  [ТС]     задача на C++ #10
00 000 1 000 000

я думаю всё-таки это оптимальный вариант
когда всё берется за один раз
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
18.12.2011, 19:34     задача на C++ #11
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
36
37
38
39
40
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <string>
 
int main( int argc, char *argv[] ) 
{
    int k = 256, x;
 
    std::string str, 
        str2 = "000", 
        str3 = "0110";
    std::string::size_type pos = 0;
 
    srand((unsigned)time(NULL));
 
    x = rand()%k-1; 
    std::cout << x << std::endl;
 
    char buf[2] = { 0 };
    for(int i = sizeof(int)*2 - 1; i >= 0; i--)
    {
        itoa(((x >> i) & 1), buf, 10);
        str.append(buf);
    }
 
    std::cout << std::endl << str << std::endl;
 
    pos = str.find(str2);
    while ( pos != std::string::npos )
    {
        str.erase(pos, str2.size());
        str.insert(pos, str3);
        str.erase(0, 1);
        pos = str.find(str2);
    }
    std::cout << str << std::endl;
 
    return 0;
}
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 19:34  [ТС]     задача на C++ #12
insolent спасибо, но не пойдет такой код
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.12.2011, 19:36     задача на C++ #13
Ну и мы получим 102, или 0110 0110, если отбросить биты больше 8-го
Прототип примерно такой.
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 <stdio.h>
 
int func(int num)
{
    int out = 0;
    int order = 0;
    while(order < 8)
    {
        if((num & 0x7) == 0)
        {
            /*printf("find 3 zero out = %d num = %d order = %d\n", out, num, order);*/
            out |= (0x6 << order);
            order += 4;
            num >>= 3;
            /*printf("end out = %d num = %d order = %d\n", out, num, order);*/
        }
        else
        {
            /*printf("out = %d num = %d order = %d\n", out, num, order);*/
            out |= ((num & 1) << order);
            num >>= 1;
            ++order;
            /*printf("end out = %d num = %d order = %d\n", out, num, order);*/
        }
    }
    return out;
}
 
int main(void)
{
    int a;
    scanf("%d", &a);
    printf("%d", func(a));
    return 0;
}
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
18.12.2011, 19:38     задача на C++ #14
Sibar, чего не подойдет? Нужно на С?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2011, 19:41     задача на C++
Еще ссылки по теме:

Задача линейного программирования, транспортная задача - Методы оптимизации
Всем привет. сижу на экзамене, помогите пожалуйста решить,сроно!!! заранее спасибо.


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

Или воспользуйтесь поиском по форуму:
Sibar
4 / 4 / 0
Регистрация: 09.02.2011
Сообщений: 26
18.12.2011, 19:41  [ТС]     задача на C++ #15
int main(void)
{
int a;
scanf("%d", &a);
printf("%d", func(a));
return 0;
}
Все прекрасно работает, но надо чтобы число случайным образом генерировалось. И нужно отобразить в двоичной системе.

как то так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int main()
{
        srand((unsigned)time(NULL));
        int k=256;
        int x = rand()%k-1; 
        cout<<x<< " "; //выводим
     
    for(int i = sizeof(int)*2 - 1; i >= 0; i--)
      cout <<((x >> i) & 1) <<' ';
    scanf("%d", &x);
    printf("%d", func(x));
return 0;
}
Yandex
Объявления
18.12.2011, 19:41     задача на C++
Ответ Создать тему
Опции темы

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