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

Программа вычисляющая номер позиции первого символа 0 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 15:47     Программа вычисляющая номер позиции первого символа 0 #1
Доброго времени суток
Требуется написать такую программу:
Используя тип unsigned long int, выполнить с двоичным представлением числового значения указанное действие:
Вычислить номер позиции первого символа 0 среди значащих разрядов числового значения при использовании нумерации слева (справа)

Если не трудно, с комментариями. Буду очень благодарен

Чуть не забыл - желательно написать программу, не используя циклов

Добавлено через 56 минут
Проще говоря, вводится двоичное число х, а программа ищет номер позиции первого значащего нуля в ней
И это надо сделать без использования циклов

Надеюсь, что к вечеру кто-нибудь сможет помочь
Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2013, 15:47     Программа вычисляющая номер позиции первого символа 0
Посмотрите здесь:

Программа, вычисляющая сумму элементов массива, расположенных после первого элемента. C++
C++ Нужно вычислить номер позиции первого значащего символа
Программа вычисляющая функцию C++
C++ Поиск позиции символа в строке
C++ Найти порядковый номер слова максимальной длины в строке и номер позиции, с которой оно начинается
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 16:41     Программа вычисляющая номер позиции первого символа 0 #2
Без циклов? Мсье знает толк в извращениях.
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 17:25  [ТС]     Программа вычисляющая номер позиции первого символа 0 #3
Nekto, препод такой)
Проблема в том, что лекцию у нас отменили
Поэтому с практикой по этой теме возникли сложности

Добавлено через 41 минуту
Если совсем лень писать без циклов, подкиньте хоть вариант программы с циклом)
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 17:30     Программа вычисляющая номер позиции первого символа 0 #4
Дай пример входящих данных и результата.
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 17:32  [ТС]     Программа вычисляющая номер позиции первого символа 0 #5
Введите х:
10010011

Результат: 2 (первый значащий ноль стоит на 2-ой позиции (слева)
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
15.09.2013, 17:33     Программа вычисляющая номер позиции первого символа 0 #6
Самый левый значащий ноль:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main()
{
    unsigned int k=0xF0F0;
    int pos0=0,pos=0;
    do
    {
        if(k&1)
            pos0=pos;
        k>>=1;
        pos++;
    }while(k);
    std::cout<<pos0<<std::endl;
    system("pause");
    return 0;
}
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 17:39  [ТС]     Программа вычисляющая номер позиции первого символа 0 #7
zss, такой код мне просто выводит на экран число 16, и всё. (Visual Studio 2008 Express)
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
15.09.2013, 17:42     Программа вычисляющая номер позиции первого символа 0 #8
Цитата Сообщение от rycena Посмотреть сообщение
Введите х:
10010011

Результат: 2 (первый значащий ноль стоит на 2-ой позиции (слева)
Число вводится в двоичном виде? Как тогда оно связано с unsigned long int?
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
15.09.2013, 17:45     Программа вычисляющая номер позиции первого символа 0 #9
рекурсию, нужно использовать рекурсию... и не нужно циклов.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
15.09.2013, 17:47     Программа вычисляющая номер позиции первого символа 0 #10
Цитата Сообщение от rycena Посмотреть сообщение
zss, такой код мне просто выводит на экран число 16, и всё
А что еще надо выводить?
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 17:48  [ТС]     Программа вычисляющая номер позиции первого символа 0 #11
Nekto, а, да, мой косяк. Тогда, получается, в десятичном должно вводиться

нам тупо дали переписать задание, которое я описал в первом посте, да и всё, никаких примеров программы не дали
Без лекции по побитовым операциям и т.д. первокурснику написать эту программу весьма проблематично

zss, ну она даже не запрашивает число на ввод
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
15.09.2013, 17:51     Программа вычисляющая номер позиции первого символа 0 #12
Цитата Сообщение от rycena Посмотреть сообщение
ну она даже не запрашивает число на ввод
не думаю, что для Вас сложно добавить строки
C++
1
2
cout<<"Введите k:";
cin>>k;
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
15.09.2013, 17:52     Программа вычисляющая номер позиции первого символа 0 #13
ну на тебе без цикла
число десятичное но вводится как двоичное (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
cin>>n;
if(n%10==0)
  cout<<"pos 1";
n/=10;
if(n%10==0)
  cout<<"pos 2";
n/=10;
if(n%10==0)
  cout<<"pos 3";
n/=10;
if(n%10==0)
  cout<<"pos 4";
n/=10;
if(n%10==0)
  cout<<"pos 5";
n/=10;
if(n%10==0)
  cout<<"pos 6";
n/=10;
if(n%10==0)
  cout<<"pos 7";
n/=10;
if(n%10==0)
  cout<<"pos 8";
развернутый цикл называется
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,171
Завершенные тесты: 1
15.09.2013, 17:58     Программа вычисляющая номер позиции первого символа 0 #14
ValeryS, Автору надо искать позиции ДВОИЧНЫХ нулей, а не десятичных.
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 18:04  [ТС]     Программа вычисляющая номер позиции первого символа 0 #15
zss,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <iostream>
int main()
{
    unsigned long int k=0xF0F0;
    int pos0=0,pos=0;
    do
    {
        printf ("vvedite k:");
            scanf ("%f" ,k);
 
        if(k&1)
            pos0=pos;
        k>>=1;
        pos++;
    }while(k);
    std::cout<<pos0<<std::endl;
    system("pause");
    return 0;
}
Ошибка приложения. Память не может быть written
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
15.09.2013, 18:08     Программа вычисляющая номер позиции первого символа 0 #16
Цитата Сообщение от zss Посмотреть сообщение
ValeryS, Автору надо искать позиции ДВОИЧНЫХ нулей, а не десятичных.
а как число вводится?
я же написал число десятичное но вводится как двоичное
например 10010
если число вводится как десятичное
например 125
то еще проще
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cin>>n;
if(n&0x01==0)
  cout<<"pos 1";
if(n&0x02==0)
  cout<<"pos 2";
if(n&0x04==0)
  cout<<"pos 3";
if(n&0x08==0)
  cout<<"pos 4";
if(n&0x10==0)
  cout<<"pos 5";
if(n&0x20==0)
  cout<<"pos 6";
if(n&0x40==0)
  cout<<"pos 7";
if(n&0x80==0)
  cout<<"pos 8";
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 18:14  [ТС]     Программа вычисляющая номер позиции первого символа 0 #17
ValeryS,

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
#include <stdio.h>
#include <iostream>
int main()
{
unsigned long int n;
   scanf ("%f" ,n);
if(n&0x01==0)
  printf ("pos 1");
if(n&0x02==0)
  printf ("pos 2");
if(n&0x04==0)
  printf ("pos 3");
if(n&0x08==0)
  printf ("pos 4");
if(n&0x10==0)
  printf ("pos 5");
if(n&0x20==0)
  printf ("pos 6");
if(n&0x40==0)
  printf ("pos 7");
if(n&0x80==0)
  printf ("pos 8");
    return 0;
}
Запрашивает число на ввод и ничего не выводит в качестве результата
Catstail
Модератор
 Аватар для Catstail
21452 / 10237 / 1667
Регистрация: 12.02.2012
Сообщений: 17,114
15.09.2013, 18:14     Программа вычисляющая номер позиции первого символа 0 #18
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 <iostream.h>
 
int Sz(int n, int p=1)
{
    if (n <= 1) return p;
    return Sz((n / 2),(p+1));
}
 
int Lz(int n, int z, int w)
{
    if (n == 0) return w;
    if ((n % 2) == 0) w=z;
    return Lz(n/2,z+1,w);
}
 
int main(int argc, char* argv[])
{
    int n,r;
    cout << "Enter number ";
    cin >> n;
    r=Lz(n,0,-1);
    if (r < 0)
        cout << "There is no zero in binary representation!" << endl;
    else
        cout << Sz(n)-r << endl;
    return 0;
}
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
15.09.2013, 18:27     Программа вычисляющая номер позиции первого символа 0 #19
Цитата Сообщение от rycena Посмотреть сообщение
unsigned long int n;
* *scanf ("%f" ,n);
а ты чаво вводишь то?
у тебя переменная целочисленная да еще длинная а вводишь ты плавающую
да и код то "доработать напильником" надо
эти условия для байта только
для int должно заканчиваться
C++
1
if(n&0x80000000)
да и предусмотреть обход более нижних веток нужно иначе при 0 все ветки сработают
я же только идею показал "развернутый цикл"
вон тебе другую идею кинули Catstail, рекурсия называется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.09.2013, 18:35     Программа вычисляющая номер позиции первого символа 0
Еще ссылки по теме:

C++ Определить последнее вхождение символа “р” в строке и вывести строку, начиная с первого символа и до последнего “р” в строке
Программа вычисляющая площадь кольца C++
C++ Программа вычисляющая значения функции у

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

Или воспользуйтесь поиском по форуму:
rycena
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 9
15.09.2013, 18:35  [ТС]     Программа вычисляющая номер позиции первого символа 0 #20
Catstail, Работает, спасибо

А можете прокомментировать основные моменты? С моим опытом в программировании на си, близким к нулевому, тут мало что понятно
Да еще и надо как-то потом переписать это без использования циклов
Yandex
Объявления
15.09.2013, 18:35     Программа вычисляющая номер позиции первого символа 0
Ответ Создать тему
Опции темы

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