Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2013, 19:19   #1
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию Числа Хемминга

Доброго времени суток. Помогите, пожалуйста решить проблему. Суть в следующем: Необходимо найти числа Хемминга в заданном промежутке. Вот мой код:
Код:
//---------------------------------------------------------------------------
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iostream>
#include <math.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{       using namespace std;
        int a,b,c,c1,p,i,j,k;
        cout<<"Vvedite granici intervala ";

        cin>>a;
        cin>>b;
        for (i=a+1;i<b;i++)
        {

           if (i%2==0 || i%3==0 || i%5==0)         
           {
                c=i;                                    
                        //поиск простых множителей числа с
                        for (k=7;k<c/2;k++)        
                        {
                                for (j=2;c<k/2;j++)
                                {
                                        if (k%j!=0) 
                                        {
                                                 p=k; //p - простое число
                                                 k++;
                                        }
                                                 if (c%p!=0)
                                                         {

                                                         }
                                        
                                }
                        }


            }
                 cout<<c;
        cout<<"  ";
        }

        getch();
        return 0;
}
//---------------------------------------------------------------------------
Но он вычисляет лишние значения. Например в промежутке от 1 до 20 он выдает: 2 3 4 5 6 6 8 9 10 10 12 12 14 15 16 16 18 18. Выделенные значения лишние. Как их теперь убрать?
.FROST. вне форума Ответить с цитированием
Старый 31.03.2013, 00:54   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Как вариант, запоминать поледнее выведенное на экран число (N1), и потом его сравнивать с тем числом, которое ты собираешься выводить (N2). Если оно равно, то не меняешь N1, и не выводишь на экран N2. Если оно не равно, то N1=N2, и выводишь N2.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 01.04.2013, 19:51   #3
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Rin Посмотреть сообщение
Как вариант, запоминать поледнее выведенное на экран число (N1), и потом его сравнивать с тем числом, которое ты собираешься выводить (N2). Если оно равно, то не меняешь N1, и не выводишь на экран N2. Если оно не равно, то N1=N2, и выводишь N2.
Можно,в принципе. Но вот число 14,к примеру, вообще не должно выводиться, так как делится на 7.
.FROST. вне форума Ответить с цитированием
Старый 01.04.2013, 21:25   #4
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

.FROST.
А что такое с? Оно у тебя приравнивается к i и периодически выводится. Весь твой код можно записать так [даже дубликатов давать не будет]:
Код:
cin>>a;
cin>>b;
for (i=a+1;i<b;i++)
{
  if (i%2==0 || i%3==0 || i%5==0)         
  {
    cout << i << " ";
  }
}
:-D
FataLL вне форума Ответить с цитированием
Старый 02.04.2013, 18:52   #5
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию

смешного мало.

Сначала из всех i выбираются такие с, которые делятся на 2,3 или 5. Далее необходимо отсеять те числа, которые имеют другие простые делители(7,11,13 и т.д.)
.FROST. вне форума Ответить с цитированием
Старый 02.04.2013, 20:38   #6
FataLL
Форумчанин
 
Аватар для FataLL
 
Регистрация: 29.01.2013
Сообщений: 319
По умолчанию

.FROST.
Ну, так отсеивай! Почему у тебя там такой if одинокий? И, к тому же, не к месту?
FataLL вне форума Ответить с цитированием
Старый 02.04.2013, 22:02   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int
main()
{
    int a, b;
    cin >> a >> b;
    for (int i = a + 1; i != b; ++i) {
        int k = i;
        while (k % 2 == 0) {
            k /= 2;
        }
        while (k % 3 == 0) {
            k /= 3;
        }
        while (k % 5 == 0) {
            k /= 5;
        }
        if (k == 1) {
            cout << i << " ";
        }
    }
    getch();
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 03.04.2013, 15:20   #8
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Можно было бы так же организовать не деление, а умножение, т.к. формула чисел Хемминга = 2^i*3^j*5^k, где i,j и k >=0.
B.D.A - респект.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 05.04.2013, 11:39   #9
RGyaznoff
Новичок
Джуниор
 
Регистрация: 05.04.2013
Сообщений: 1
По умолчанию

Если оно равно, то не меняешь N1, и не выводишь на экран N2. Если оно не равно, то N1=N2, и выводишь N2.
RGyaznoff вне форума Ответить с цитированием
Старый 10.04.2013, 13:43   #10
.FROST.
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 56
По умолчанию

Еще 1 вопрос по этой задаче: Решил сделать через форму, результат выводится в StringGrid, но почему то только последнее число во всех ячейках=(
вот код,подскажите, что не так:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int a, b,i,k,s;
  a=StrToInt(E_A->Text);
 b=StrToInt(E_B->Text);
 s=0;
  for (i = a + 1; i<b; i++)
   {
        k = i;
        while (k % 2 == 0)
	{
            k =k/2;
        }
        while (k % 3 == 0)
	{
            k =k/3;
        }
        while (k % 5 == 0)
	{
            k=k/5;
        }
        if (k == 1)
	{
        s=s+1;
        for (int J=1;J<=s;J++)
        {
           StringGrid1->Cells[0][J-1] = IntToStr(i);
        }
        }
    }
}
.FROST. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
коды ХЕММИНГА Naposaram Помощь студентам 1 11.06.2011 15:58
Код Хемминга Pushik Помощь студентам 1 30.04.2011 17:12
код Хемминга pinch000 Общие вопросы C/C++ 1 19.12.2009 20:41
код Хемминга pinch000 Помощь студентам 0 19.12.2009 18:59
Коды Хемминга =LeonZone= Помощь студентам 1 27.11.2008 13:19