Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> последовательности Аршона 
:(
    Опции темы
4aineG
  Дата 28.9.2008, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



здравствуйте! пытаюсь решить задачу про последовательности Аршона, но чето не выходит. Вы вообще слышали о таком задании?
вобщем выделяется массив с регулированной длиной он заполняется определенными символами, например (0,1,2). нужно заполнить так, чтобы любые 2 последовательности были разные. примерный порядок заполнения сначала 0, 00-не подходит, меняем 01, 010- подходит, 0101-не подходит, меняем 0102 и т.д.
Код

#include <iostream>
using namespace std;

class Sequence
{

private:

    int *PutArsh;
    int length;

public:

    Sequence(int ln)
    {
        length = ln;
        PutArsh = new int[length];
        int i;
        for(i=0; i<length; i++)
            PutArsh[i]=0;
    }

    bool GoodPosition(int PutElem, int Index)
    {
        int Sum = 0;
        int temp;
        for (int i=0; i<Index; i++)
            temp = PutArsh[Index-1];
        if (PutElem != temp)
        {
            for (int j=Index; j<0; j--)
            {
                if (PutArsh[j] == PutArsh[Index/2-j])
                    Sum++;
            }
            if (Sum != Index/2)
                return true;
            else
                return false;
        }
        else
            return false;
    }

    void AddArshElement()
    {
        int i = 1;
        while (i>0 && i < length)
        {
            if (GoodPosition(PutArsh[i], i))
                i++;
            else
            {
                if (PutArsh[i] < 2)
                    PutArsh[i]++;
                else
                {
                    PutArsh[i]=0;
                    i--;
                }
            }
        }
        for (int i=0; i<length; i++)
        cout << PutArsh[i] << " ";
        cout << endl;
    }

    ~Sequence()
    {
        delete [] PutArsh;
    }

};

#pragma once
#include "Sequence.h"
int main()
{
    int length;
    cout << "Enter length: ";
    cin >> length;
    cout << endl;
    Sequence seq(length);
    cout << "Arshon's sequence: " << endl;
    seq.AddArshElement();

    return 0;
}

в итоге почему то заполняет все 0-ми
PM MAIL   Вверх
Fin
Дата 28.9.2008, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


Профиль
Группа: Участник
Сообщений: 687
Регистрация: 4.1.2006

Репутация: нет
Всего: 10



Честно говоря, я не совсем понял задание, поэтому покажу только шедевры: 
Функция bool GoodPosition(int PutElem, int Index)
Код

 for (int i=0; i<Index; i++)
            temp = PutArsh[Index-1];

А зачем вообше нужен цикл?

Код

for (int j=Index; j<0; j--)
            {
                if (PutArsh[j] == PutArsh[Index/2-j])
                    Sum++;
            }

Я здраво предпологаю, что Index это положительное число от 1 и до lenght. Первое условие j присваивается Index и повторять пока J меньше нуля. Т.е. у тебя цикл вообше не будет работать. Вторая ошибка PutArsh[Index/2-j] При j = Index, у тебя получается отрицательный индекс массива.
Код

if (Sum != Index/2)
                return true;
            else
                return false;

Мне тут не совсем понятно значение условия. Если Index не равен нулю, а такое не может быть по условию, то всегда будет возврашаться true,


--------------------
Пролетал мимо.
PM MAIL   Вверх
4aineG
Дата 8.10.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 7.8.2008

Репутация: нет
Всего: нет



я немного переделал но у меня работает только до 8 элемента... Дайте пожалуйста совет как лучше сделать

Код

#include <iostream>
using namespace std;

class Sequence
{

private:

    int *PutArsh;
    int length;

public:

    Sequence(int ln)
    {
        length = ln;
        PutArsh = new int[length];
        int i;
        for(i=0; i<length; i++)
            PutArsh[i]=0;
    }

    bool GoodPosition(int PutElem, int Index)
    {
        int Sum = 0;
        int temp;
        temp = PutArsh[Index-1];
        if (PutElem != temp)
        {
            if(Index%2 != 0)
            {
                for (int j=Index; j>Index/2; j--)
                {
                    if (PutArsh[j] == PutArsh[j-(Index/2+1)])
                        Sum++;
            }
            if (Sum != (Index+1)/2)
                return true;
            else
                return false;
            }
            else
                return true;
        }
        else
            return false;
    }

    void AddArshElement()
    {
        int i = 1;
        while (i>0 && i < length)
        {
            if (GoodPosition(PutArsh[i], i))
                i++;
            else
            {
                if (PutArsh[i] < 2)
                    PutArsh[i]++;
                else 
                {
                    PutArsh[i]=0;
                    i--;
                }
                
            }
        }
        for (int i=0; i<length; i++)
        cout << PutArsh[i] << " ";
        cout << endl;
    }

    ~Sequence()
    {
        delete [] PutArsh;
    }

};


// Main.cpp

#pragma once
#include "Sequence.h"
int main()
{
    int length;
    cout << "Enter length: ";
    cin >> length;
    cout << endl;
    Sequence seq(length);
    cout << "Arshon's sequence: " << endl;
    seq.AddArshElement();

    return 0;
}


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0447 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.