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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 17:24   #1
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
Печаль C++. в зависимости от проверки элемента на равенство должен выводится правильный ответ

Нужно чтобы делалась проверка элемента на равенство,и в зависимости от этого выводился правильный ответ. Крутил так и эдак,не получилось.

Коротко что и для чего. Имеется функция,которая в зависимости от комбинации должна будет вернуть требуемое значение.
Вызывается каждый раз заново. вот что должно быть!

Если 1 и 0 то в массив выход заносим 1 и 0
Если 0 и 1 то в массив выход заносим 0 и 1
Если 1 и 1 то в массив выход заносим 5 и 5
Если 0 и 0 то в массив выход заносим значения предыдущих двух элементов.

Например:

1 1 - 5 5
1 0 - 1 0
0 1 - 0 1
0 0 - 0 1
1 1 - 5 5
0 0 - 5 5

почему-то когда присваиваю скажем там входному элементу массива (vhod_mas[2]) то все равно не работает и выводит два 0.

1 1 - 5 5
0 0 - 0 0
0 0 - 0 0

Код:
void Trigger::GetOut()
{
	
if (vhod_mas[0]==1 && vhod_mas[1]==0)
{
vihod_mas[0]=1;
vihod_mas[1]=0;
}
if (vhod_mas[0]==0 && vhod_mas[1]==1)
{
vihod_mas[0]=0;
vihod_mas[1]=1;
}
if (vhod_mas[0]==1 && vhod_mas[1]==1)
{
vihod_mas[0]=5;
vihod_mas[1]=5;
}
if (vhod_mas[0]==0 && vhod_mas[1]==0)
{
?:(:(:(:(:(
}
}
Си занимаюсь немного,поэтому не могу понять что и куда. Я понимаю то этот элемент надо хранить в памяти, но когда я отслеживал значение там было несколько миллионов
phantom4eg вне форума Ответить с цитированием
Старый 23.05.2010, 20:57   #2
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
По умолчанию

Ни у кого нет мыслей?
phantom4eg вне форума Ответить с цитированием
Старый 23.05.2010, 21:07   #3
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

А если входная пара (0,0) оказалась первой в последовательности вызовов? Что нужно занести в выходной массив по условию?

Added 19:44 CET
Отвечая сам себе, как я понимаю, в этом случае ответственность за содержимое vihod_mas[] должна лежать на вызывающей программе.
Код:
#include <stdio.h>
 
void foo( char* vhod_mas, char* vihod_mas ) {

/* 
 * Проверку входных комбинаций типа (-1,3) я сознательно не делал
 */

   char sFoo = vhod_mas[0] + vhod_mas[1];
   if ( sFoo == 1 ) {
      vihod_mas[0] = vhod_mas[0];
      vihod_mas[1] = vhod_mas[1];
   } else if ( sFoo == 2 ) {
      vihod_mas[0] = 5;
      vihod_mas[1] = 5;
   }

}


void main() {

   char vhod_mas[2];
   char vihod_mas[2] = {-1,-1};

   vhod_mas[0] = 0; vhod_mas[1] = 0; 
   foo( vhod_mas, vihod_mas );
   printf( "%3d%3d\n", vihod_mas[0], vihod_mas[1] );

   vhod_mas[0] = 1; vhod_mas[1] = 0; 
   foo( vhod_mas, vihod_mas );
   printf( "%3d%3d\n", vihod_mas[0], vihod_mas[1] );

   vhod_mas[0] = 0; vhod_mas[1] = 0; 
   foo( vhod_mas, vihod_mas );
   printf( "%3d%3d\n", vihod_mas[0], vihod_mas[1] );

   vhod_mas[0] = 0; vhod_mas[1] = 1; 
   foo( vhod_mas, vihod_mas );
   printf( "%3d%3d\n", vihod_mas[0], vihod_mas[1] );

   vhod_mas[0] = 1; vhod_mas[1] = 1; 
   foo( vhod_mas, vihod_mas );
   printf( "%3d%3d\n", vihod_mas[0], vihod_mas[1] );

   vhod_mas[0] = 0; vhod_mas[1] = 0; 
   foo( vhod_mas, vihod_mas );
   printf( "%3d%3d\n", vihod_mas[0], vihod_mas[1] );

}

Последний раз редактировалось Vago; 23.05.2010 в 21:44.
Vago вне форума Ответить с цитированием
Старый 23.05.2010, 21:37   #4
justso
Инженеришка
Форумчанин
 
Аватар для justso
 
Регистрация: 18.05.2010
Сообщений: 147
По умолчанию

Я бы сделала массив побольше скажем что то типа:

vhod_massiv[100]

и потом
for (i = 0; i<100; i = i+2)
считать vhod_massiv[i] - каким ты там способом вводишь, сам доделай
считать vhod_massiv[i+1]

и потом уже твои функции по типу
if (vhod_massiv[i] == 1 && vhod_massiv[i+1] == 1) и так далее

и в последнем
if (vhod_massiv[i] == 0 && vhod_massiv[i+1] == 0) и так далее
vhod_massiv[i] = vhod_massiv[i-2]
vhod_massiv[i+1] = vhod_massiv[i-1]


А вот тоже насчет того если в первом прогоне будет 0 0 то что писать надо?



Ой пардон уже не актуально...
Ацко 342512564: Если по делу - то в случае острой необходимости. Если просто так - то в любое время.

Последний раз редактировалось justso; 23.05.2010 в 21:49.
justso вне форума Ответить с цитированием
Старый 23.05.2010, 23:46   #5
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
По умолчанию

Видно я плохо обьяснил

Смысл в том, что когда у меня на триггер подается 0 0 он должен сохранить состояние,которое было до подачи на входы 0 0, если изначально 0 0 то в программе в самом начале уже вбиты значения
phantom4eg вне форума Ответить с цитированием
Старый 23.05.2010, 23:47   #6
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
По умолчанию

вот код:
Код:
    #include <iostream.h>
    #include <typeinfo.h>
    #include <iomanip.h>


    class Element
    {
    	protected:
        	char *signal;
         int vhod;
         int vihod;
    	public:
        	   Element (char *n=NULL);
            virtual ~Element () {} ;
            void setsignal(char *n);
    };

    class Combination : public Element
    {
    	protected:
        	int *vhod_mas;
        	int *vihod_mas;
      public:
        	   Combination(char *n=NULL, int =0, int =0);
            Combination (const Combination &v);
            void SetIn ();
            void GetIn (int );
            virtual void GetOut ();
            virtual ~Combination() {};

    };

class Trigger : public Combination
    {
      public:
        	   Trigger();
            Trigger (const Trigger &v);
            void tablica ();
            virtual void GetOut ();
            void GetOut_();
            virtual ~Trigger() {};
    };

class Registr 
    {
    	protected:
         Trigger mas[10];
         bool set;
         bool reset;
         char *signal;
         int razr;
      public:
        	   Registr();
            void setsignal(char *n);
            void GetOut (int);
            void SetIn ();
            virtual ~Registr() {};

    };


//    Element

void Element::setsignal(char *n)
{
	 if (signal)
		delete[] signal;
    if (n)
    {
	   signal = new char[strlen(n)+1];
    	strcpy(signal, n);
    }
    else
    	signal = NULL;
}

Element::Element (char *n)
	{
     signal = NULL;
     vhod=0;
     vihod=0;
     setsignal(n);
   }


//    Combination


Combination::Combination(char *n, int in, int out)
{
	setsignal(n);
   vhod = in;
   vihod = out;
   vhod_mas = new int [vhod];
   vihod_mas = new int [vihod];
   for (int i=0; i<vhod; i++)
     vhod_mas[i]=0;
   for (int i=0; i<vihod; i++)
     vihod_mas[i]=0;
}

void Combination::SetIn()
{
   cout<<endl;
	cout << "ystanovka vhodov " << signal << "\n";
   for (int i=0; i<vhod; i++)
     {
      cout <<i+1<<" ";
      cin>>vhod_mas[i];
     }

}

void Combination::GetIn(int i)
{
   cout<<endl;
	cout << "ystanovka vhodov " << signal << "\n";
   cout <<i<<" "<<vhod_mas[i]<<endl;}


void Combination::GetOut()
{
   cout<<endl;
	cout << "znachenie na vihode " << signal << "\n";
   for (int i=0; i<vhod; i++)
     if (vhod_mas[i]!=1)
         {
          cout <<"vihod:   0"<<endl;
          vihod_mas[0]=0;
          return;
         }
  cout <<"vihod:   1"<<endl;
  vihod_mas[0]=1;
}

Combination::Combination (const Combination &v)
{
 setsignal (v.signal);
   vhod = v.vhod;
   vihod = v.vihod;
   vhod_mas = new int [vhod];
   vihod_mas = new int [vihod];
   for (int i=0; i<vhod; i++)
     vhod_mas[i]=v.vhod_mas[i];
   for (int i=0; i<vihod; i++)
     vihod_mas[i]=v.vihod_mas[i];
}

//    Trigger

Trigger::Trigger ()
{
	setsignal("triger");
   vhod = 2;
   vihod = 2;
   vhod_mas = new int [vhod];
   vihod_mas = new int [vihod];
   for (int i=0; i<vhod; i++)
     vhod_mas[i]=0;
     vihod_mas[0]=0;
     vihod_mas[1]=1;
}

Trigger::Trigger (const Trigger &v)
{
   vhod = 2;
   vihod = 2;
   vhod_mas = new int [vhod];
   vihod_mas = new int [vihod];
   for (int i=0; i<vhod; i++)
     vhod_mas[i]=v.vhod_mas[i];
     vihod_mas[0]=v.vihod_mas[0];
     vihod_mas[1]=v.vihod_mas[0];
}

void Trigger::tablica ()
{
 cout<<endl;
 cout<<"-------RS-------"<<endl;
 cout<<" S  R  Q  -Q "<<endl;
 cout<<" 0  0  Q  -Q "<<endl;
 cout<<" 1  0  1   0 "<<endl;
 cout<<" 0  1  0   1 "<<endl;
 cout<<" 1  1  x   x "<<endl;
 cout<<"tekywie dannie"<<endl;
 for (int i=0; i<2; i++)
    cout<<" "<<vhod_mas[i]<<" ";
 for (int i=0; i<2; i++)
    cout<<" "<<vihod_mas[i]<<" ";
}

//na vihod
void Trigger::GetOut()
{
	
if (vhod_mas[0]==1 && vhod_mas[1]==0)
{
vihod_mas[0]=1;
vihod_mas[1]=0;
}
if (vhod_mas[0]==0 && vhod_mas[1]==1)
{
vihod_mas[0]=0;
vihod_mas[1]=1;
}
if (vhod_mas[0]==1 && vhod_mas[1]==1)
{
vihod_mas[0]=5;
vihod_mas[1]=5;
}
if (vhod_mas[0]==0 && vhod_mas[1]==0)
{
vihod_mas[0]=vhod_mas[2];
}
}

void Trigger::GetOut_()
{
 cout<<" "<<vihod_mas[0];
}

//  Registr
phantom4eg вне форума Ответить с цитированием
Старый 23.05.2010, 23:48   #7
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
По умолчанию

Продолжение
Код:
void Registr::setsignal(char *n)
{
	 if (signal)
		delete[] signal;
    if (n)
    {
	   signal = new char[strlen(n)+1];
    	strcpy(signal, n);
    }
    else
    	signal = NULL;
}

Registr::Registr ()
{
 set=false;
 reset=false;
}

void Registr::SetIn ()
{
 for (int i=0; i<2; i++)
    {
     cout<<"# "<<i+1;
     mas[i].SetIn();
     mas[i].GetOut();
     cout<<endl;
    }
}

void Registr::GetOut (int k)
{
 cout<<"znachenie na vihode "<<k+1<<" ";
 mas[k].GetOut_();
 cout<<endl;
}



void main()
{
    int  a;
//triger
   cout<<"TRIGER"<<endl;
   Trigger trig;
   trig.tablica();
   trig.SetIn();
   trig.GetOut();
   trig.tablica();
   cout<<endl<<endl;

//registr
  cout<<"REGISTR"<<endl;
  Registr reg;
  reg.SetIn();
 cout<<"znachenie na vihodah: "<<endl;
 for (int i=0; i<2; i++)
  reg.GetOut(i);
   cout<<endl;

    cin>>a;
}
phantom4eg вне форума Ответить с цитированием
Старый 24.05.2010, 02:04   #8
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
По умолчанию

Походу это будет "удачный топик" showthread.php?t=99666
phantom4eg вне форума Ответить с цитированием
Старый 24.05.2010, 11:05   #9
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Напроектировано, конечно, от души!!.. )

1. Вообще не трогайте выход при (R,S) = (0,0)!!

По бОльшим или меньшим мелочам (смотрел только класс Trigger ) ...

2.1. Зачем нужна инициализация vhod_mas[] в конструкторе? Она-то ничего не портит, но... нелогично как-то...
2.2. GetOut_() возвращает информацию только о vihod_mas[0]. А vihod_mas[1] ?
2.3. Вообще-то, логичным было бы vihod_mas[] менять уже в SetIn() (через последующий вызов какого-то private-метода, например). Новый вход подали? Подали. Триггер должен тут же поменять состояние? Насколько я помню - должен. А по GetOut() только получали бы значения выходов.
Vago вне форума Ответить с цитированием
Старый 24.05.2010, 22:41   #10
phantom4eg
Пользователь
 
Регистрация: 04.03.2009
Сообщений: 39
По умолчанию

Уже разобрался во всем сам
спасибо всем за помощь, тему можно закрывать!
phantom4eg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файл, выводит не правильный ответ. Telec Общие вопросы C/C++ 7 11.05.2010 19:30
Моя БД нарушает гендерное равенство. kapitel_bc@ukr.net Microsoft Office Access 9 08.03.2010 13:52
Равенство трех переменных k1r1ch Общие вопросы C/C++ 3 23.02.2010 20:54
Равенство по цвету snakezx Microsoft Office Excel 1 30.03.2009 12:11