| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 15-06-2006 19:07 »   | 
								
								 | 
							  
							 
							Такая задача на С++:  вводить с консоли символы в массив b[6], и сравнивать посимвольно с символами массива a[6]. Если a[i ]==b[i ], вывести строку подтверждающую это. Иначе, вывести строку, объявляющую об ошибке. Что я и сделал:  char a[6]="12345"; 	char b[6];      	for(int i=0; i<5; i++) 	{         b[i]=getch();
  		if(b[i]!=a[i]) 			cout<<"Try agein!!!"<<endl; 		else 			cout<<"b["<<b[i]<<"] = "<<"a["<<a[i]<<"]"<<endl;
  	} Теперь то же самое сделать на Buildere.  Делаю: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; char *a="Caption"; char *b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)         : TForm(Owner) {} //--------------------------------------------------------------------------- void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) { for(int i=0; i<7; i++) {if(a[i]==Key) StaticText1->Caption = StaticText1->Caption + Key; else ShowMessage("Mistake");} } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) {StaticText2->Caption=a;} //--------------------------------------------------------------------------- Получается: При нажатии на клавиатуру отображаются только символы, содержащиеся в массиве а. Другие нет. Нет проверки на очередность символов, то есть можно вести ‘а’, ‘n’, ‘C’, и они будут отображаться - ‘anC’, хотя не должны, если и-тый элемент не равняется и-тому. Как сделать соответствие консольной проги и Builder-овской?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-12-2007 19:11 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 15-06-2006 19:36 »   | 
								
								 | 
							  
							 
							scraper, В твоём алгртитме есть логическая ошибка. Даже если я введу все символы не содержашиеся в массиве  a, после отработки данного алгоритма массив  b будет содержать введенные мной символы. Или я не понял правильно задание    . Теперь вопрос другой. Ты хочеш данный алгоритм переложить в виндовс приложение? Тогда я примерно прогнозирую работу твоей программы:  a) При нажатии символа '1', выскочит 7 MessageBox с криком "Mistake". Статик будет содержать примерно такую надпись "Caption".  b) При нажатии символа 'C', выскочит 6 MessageBox с криком "Mistake". Статик будет содержать примерно такую надпись "CaptionC".   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-12-2007 18:29 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 15-06-2006 19:46 »   | 
								
								 | 
							  
							 
							Finch, Только что еще раз проверил. Все как описано выше.  Как сделать, что бы символ отображался, только если он должен идти в порядке очереди? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 15-06-2006 20:05 »   | 
								
								 | 
							  
							 
							Меняй алгоритм. Во первых цикл выкини. В описании класса окна добавь переменную i. В FormCreate обнули данную переменную. Ну и теперь в самой функции будет выгледеть так: void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) {    if ((i<7) && (a[i]==Key))    {       StaticText1->Caption = StaticText1->Caption + Key;       i++;    }    else ShowMessage("Mistake"); }
 
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 15-06-2006 20:20 »   | 
								
								 | 
							  
							 
							Finch, Вот честно скажу, ДРУГ, если бы у меня была бы возможность прямо сейчас дать тебе 100 долларов, то дал бы незадумываясь. Спасибо огромное. Очень выручил.
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 18-06-2006 19:55 »   | 
								
								 | 
							  
							 
							Немного непонятно, в консоле и в Buildere одинаково используется С++, но в Buildere не работает то, что работает в консоле.  У Buildera своя логика? Существует система переноса из консольного приложения в Builder?  Примерно то же самое только с двойным условием в цикле for: Имеем массив a[41] из него нужно выводить в StaticText1 по 4 символа после чего вводить символы с клавиатуры. Если символы одинаковы (ввод консоль-символ a[ i ]), то загружаем из массива a[41] следующие 4 символа. В консоле, никаких проблем. Буквально с разбегу: char a[41]="abcdefghijklmnopqrstuwvxyzQWERTYUIOPASDF";     char b[4];     char c[4];     int number=0;     int DoubleNumber=4;         int fo=0;     do{for(int i=number+fo, int j=0; i<DoubleNumber+fo, j<4; i++, j++)     {b[j]=a[i];      cout<<b[j]; }      cout<<endl;      for(i=0; i<4; i++)      {c[i]=getch();      if(c[i]!=b[i])      cout<<"It's mistake. Try press next letter."<<endl;      else      cout<<"c["<<c[i]<<"] = "             <<"b["<<b[i]<<"]"<<endl;}       fo=fo+4;      }while(DoubleNumber<=40); Builder же достал своими капризами:     char *a;     char b[4];     char c[4];     int number;     int DoubleNumber;     int fo;     int i;     int j; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)         : TForm(Owner) {} //--------------------------------------------------------------------------- void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) {for(i=number+fo, j=0; i<DoubleNumber+fo, j<4; i++, j++)    {b[j]=a[i];        StaticText1->Caption=b;}       for(i=0; i<4; i++)    {c[i]=Key;       if(c[i]!=b[i]) 	Shape1->Visible=true;       else         StaticText2->Caption=""; 	StaticText2->Caption = StaticText2->Caption + Key;}      fo=fo+4;} //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) {  a="abcdefghijklmnopqrstuwvxyzQWERTYUIOPASDF";     number=0;     DoubleNumber=4;     fo=0;} Сделать по аналогии с первой задачей не получается     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-12-2007 18:29 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 19-06-2006 12:39 »   | 
								
								 | 
							  
							 
							Ты чуть путаеш понятия. Тут не билдер виноват, а твое не понимание структуры работы системы. Возьмем простой пример.  char *a; ///////////////////////////////////////////////////////////////// void __fastcall TForm1::FormCreate(TObject *Sender) {  a="abcdefghijklmnopqrstuwvxyzQWERTYUIOPASDF"; ///////////////////////////////////////////////////////////////// }
  По идее говоря, на такую конструкцию компилятор должен обругать. Допускаю, что компилятор делает медвежью услугу    , выделил в константной памяти область и поместил туда строку, и возрашает ссылку на данную строку. Вывод, читай учебник. В частности разделы по работе со строками.   for(i=number+fo, j=0; i<DoubleNumber+fo, j<4; i++, j++)    {b[j]=a[i];        StaticText1->Caption=b;} 
  Зачем 4 раза скидывать одно и тоже в Caption. Когда можно скинуть всего один раз? Кстати, в данной конструкции могут быть глюки. Вывод: Читай, что такое нуль-терминальные строки.  Что есть в переменной  c? Кстати в первом примере Будет вечный цикл, так как я лично не вижу прирашения переменной DoubleNumber.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-06-2006 12:46 от Finch »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 19-06-2006 14:27 »   | 
								
								 | 
							  
							 
							Finch,  char *a;/////////////////////////////////////////////////////////////////void __fastcall TForm1::FormCreate(TObject *Sender){  a="abcdefghijklmnopqrstuwvxyzQWERTYUIOPASDF";/////////////////////////////////////////////////////////////////}сдесь я объявляю глобальную переменную, и в Formcreate (при создании формы) она указывает на строку. Зачем 4 раза скидывать одно и тоже в Caption. Когда можно скинуть всего один раз?сдесь я скидываю в StaticText по очереди, по 4 символа, и после работы с ними, скидываю следующие. с вечным циклом (это действительно так) я справлюсь самостоятельно. Как в Builder перенести смысл консольной версии? Чтобы можно было работать с символами "упакованными" в пачки по четыре?    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 19-06-2006 15:12 »   | 
								
								 | 
							  
							 
							Чтоб перевести твой консольный код в оконный код нужно представить, что тебе предоставилась возможность вставить твой код внутри  функции getch(). Вот в чем отличие твоей консольной программы от оконной. Ты сейчас стараешся переводить в лоб. Естественно, что у тебя ничего и не получается. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 20-06-2006 07:48 »   | 
								
								 | 
							  
							 
							Finch, Отталкиваться от: void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) {    if ((i<7) && (a[i]==Key))    {       StaticText1->Caption = StaticText1->Caption + Key;       i++;    }    else ShowMessage("Mistake");} да?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 20-06-2006 12:12 »   | 
								
								 | 
							  
							 
							Разница между консольным приложением и оконным в том, что в консольном приложении ты сам планируеш какое либо событие. В оконном система планирует событие и тебя уведомляет, что произошло онное. Обработчик события от клавиатуры в твоем случае является функция  FormKeyPress. Твоя задача так спроектировать обработчик, чтобы удовлетворял условиям твоей задачи.  Ещё одно, я не даром вчера упоменул про нуль-терминальные строки. Строки в обязательном порядке должны оканчиваться  нулем. Иначе могут быть провисы программы или выскакивать мусор.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 20-06-2006 15:46 »   | 
								
								 | 
							  
							 
							Finch, Понятно.  В моем случае, натолкни меня, пожалуйста.  Написание кода (основная логика) где начинается? Где начало? В чем она состоит? В псевдокоде, на русском, я догадаюсь дальше, если не трудно, напиши, пожалуйста. Требуется в начале навык разработки собственных программ в Buildere, опыт во вермя еды приходит. Что я и делаю...    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 20-06-2006 17:02 »   | 
								
								 | 
							  
							 
							Я так понял, ты совсем не хочеш работать своей головой   Вот код. Писал я его вживую, не проверял, поэтому возможны ошибки. #define MAXLEN 41 char a[MAXLEN]="abcdefghijklmnopqrstuwvxyzQWERTYUIOPASDF"; int fo; char b[5]; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner)         : TForm(Owner) {} //--------------------------------------------------------------------------- void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key) {    if (fo >= MAXLEN) fo=0;                     //проверяем не вышли ли за граници массива a    if ((fo % 4) == 0)                              // проверяем нужно ли выводить следуюшую партию символов. В частности остаток от деления должен быть равен нулю    {        int i;                                                // Формирование 4 символов и отправка в статик        int l;        if ((MAXLEN-fo) > 4) l=4;        else l=MAXLEN-fo;        for (i=0; i<l; i++) b[i]=a[fo+i];        b[i]=0;        StaticText1->Caption=b; 	       }    if(Key != b[fo % 4]) Shape1->Visible=true;          //Проверка, наш ли это символ    else    {   	StaticText2->Caption = StaticText2->Caption + Key;         fo++;    } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) {    fo=0; }
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 22-06-2006 19:09 от Finch »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Scorp__)
							
								Молодой специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 21-06-2006 09:13 »   | 
								
								 | 
							  
							 
							Finch, может человек просто не понимает пока событийного программирования? scraper, смотри, когда ты пишешь программу для консольного исполнения у тебя есть главная нитка - твоя функция main(). Все выполняется в ней.  Когда ты пользуешься Builder'ом все работает немного по другому. Твоя программа теперь построена так: в ней создан бесконечный цикл, в котором принимаются и обрабатываются сообщения от ОС. Конечно, до бесконечного цикла создаются твои формочки. Твоя задача теперь писать обработчики этих сообщений. Builder скрывает от тебя большую часть реализации и предоставляет тебе возможность просто написать, что ты хочешь сделать при создании программы (TForm1::FormCreate()), что сделать при нажатии пользователем клавиши, движении мышью, щелчке на какой-нибудь кнопке. Ты просто откликаешься на действия пользователя, а не "ведешь" его как было в консоли. Черт, совсем разучился объяснять, но надеюсь стало понятнее    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-12-2007 19:14 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							- А Вы сами-то верите в привидения?  - Конечно, нет, - ответил лектор и медленно растаял в воздухе. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 21-06-2006 18:33 »   | 
								
								 | 
							  
							 
							Finch,    Ребята спасибо, я просто загружен сейчас по самое немогу.  В середине июля начну думать своей головой.     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 21-06-2006 19:09 »   | 
								
								 | 
							  
							 
							Finch, Только что обкатал. Все работает. Зря ты на себя грешишь.    P.S.1. Я начал въезжать в Builder. P.S.2. С твоей помощью.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 21-06-2006 19:13 »   | 
								
								 | 
							  
							 
							scraper, А то что его можно маленько оптимизировать. Например можно обойтись без переменной b в глобальных переменных.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 21-06-2006 19:19 »   | 
								
								 | 
							  
							 
							Естественно.  Ты мне помог основной логический макет проги написать.  На его основе я сделаю свой проект.  Конечно немного поправлю и оптимизирую.     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 22-06-2006 13:03 »   | 
								
								 | 
							  
							 
							Finch, пожалуйста, расставь комментарии. Особенно то место, где происходит смена 4 символов в StaticText1 после ввода 4-ого символа в StaticText2.  У нас должно быть так: ввел четвертый символ в StaticText2 и в StaticText1 отобразилась следущая пачка из 4 символов. А у нас смена в StaticText1 происходит после ввода 5-ого символа в StaticText2.
  P.S. Сам все сделаю, просто расставь комментарии где нужно.
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 22-06-2006 19:10 »   | 
								
								 | 
							  
							 
							scraper, Я бросил коменты.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 22-06-2006 19:20 »   | 
								
								 | 
							  
							 
							Ok. Почему у меня получается ввод пятого символа в StaticText2 без смены пачки в StaticText1? Изменяю:  fo++ ставлю после 1-ой строки в FormKeyPress. Работает как мне надо,  только введеные с консоли символы не отображаются в StaticText2. Алгоритм очень хрупкий     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 23-06-2006 14:39 »   | 
								
								 | 
							  
							 
							Напиши точно по действиям, что тебе нужно получить в результате выполнения программы.  Алгоритм очень хрупкий    Ты еше не видел, как программируют настояшие асы. Я только учусь программировать на уровне фола.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #22 : 23-06-2006 19:02 »    | 
								
								 | 
							  
							 
							Finch, справился я                       а кричал просто сперепугу                      шас все доделаю и похвастаюсь (2-3 дня)    )  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |