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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2013, 10:55   #1
hunter03
Форумчанин
 
Регистрация: 05.05.2009
Сообщений: 244
Восклицание Ошибка в алгоритме. Работа с большими массивами

Добрый день!
помогите найти ошибку в моем алгоритме:
У меня есть массив длинной, например, 100000 элементов.
этот массив обновляется все время по таймеру.
В данном массиве записаны следующие значения (например)
2 3 88 end begin 55 11 ...и т.д.
смысл задания - записать в глобальный массив значения, находящееся между словами begin end.
т.е. по таймеру я сгенерировал первый массив:
0 1 2 end begin 3 4 6
в глобальный массив записал 3 4 6. Генерируется второй массив.(например) 5 10 15 end begin 20 25 30. В глобальный массив нужно дописать
5,10,15, т.е. все элементы до слова end, получив массив 3 4 6 5 10 15 и выгрузить буфферный массив в другой массив и отобразить, и продолжить движение по массиву, найти слово begin и заново начать записывать буфферный массив.

Я попытался это сделать вот так:


Код:
//файл global.h

#ifndef Global_H
#define Global_H
public ref class Global
{
public:
	
	
	static array<Object^>^Frame_que;
	
};
#endif


public ref class Form1 : public System::Windows::Forms::Form
	{
	array<float>^ Frame_buf;//буфферный массив
	public:
	
		Form1(void)
		{
		InitializeComponent();
Frame_buf=gcnew array<float>((324*256)*2);//буфферный массив



private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) 
 {
	 			
//int count=safe_cast<int>(this->timer1->Tag);


int size=(324*256);
int size_frame=(324*256)+3;
float Frame[(324*256)];//массив для отображения кадра

for (int bg=0;bg<size;bg++){
Global::Frame_que[bg]=(rand() % 100);
}
Global::Frame_que[299]="end";
Global::Frame_que[300]="begin";

step:
System::String^ str_end= Convert::ToString(Global::Frame_que[82946]);
System::String^ str_begin= Convert::ToString(Global::Frame_que[0]);
if ((str_begin=="begin")&&(str_end=="end")){//////////если кадр изначально целый

for(int count_q=2; count_q<size+1; count_q++){
	
	Frame[count_q]=Convert::ToDouble(Global::Frame_que[count_q]);
											 }
array_to_bitmap(Frame);
}///////////////////////////////////////////////////////////////////////////////


			else {//если кадр не в данной очереди полностью
				//goto vhod tut
	if (Global::lenght!=0){// если в первой позиции очереди нет контрольной суммы и если
int count_q=0;              //в буффер уже что то записано, то
							
while(count_q<size+1){
	if(Convert::ToString(Global::Frame_que[count_q])!="end") {
	Global::lenght++; 
	//System::Object^ ss=Global::Frame_que[count_q];
	Frame_buf[Global::lenght]=Convert::ToDouble(Global::Frame_que[count_q]);//добавляем в буфер
	}
	else{//если нашли end то выгружаем буффер в массив и отображаем на екране
		for (int i=0;i<Global::lenght;i++){
		Frame[i]=Frame_buf[i];
		
		}//end for
		//очистить буфер
		Global::lenght=0;
		delete []Frame_buf;
		//функция отображения будет тут
		array_to_bitmap(Frame);
		count_q++;
		//goto
		goto step;
	
	}//end else
}//end while


	}//end if
	else{
	int count_q=0;

	while (count_q<size+1){

	if(Convert::ToString(Global::Frame_que[count_q])=="begin"){

					Global::pointer_steck=count_q+1;
					
					for(int steck=Global::pointer_steck; steck<size+1; steck++)
					{
if ((Convert::ToString(Global::Frame_que[steck])!="begin")/*&&(Convert::ToString(Global::Frame_que[steck])!="end")*/)
{                   count_q++;
					Global::lenght++; 
					Frame_buf[Global::lenght]=Convert::ToDouble(Global::Frame_que[steck]);
						}//end if begin/end
else {//если встретили лишний  begin/end то обнуляел счетчик элементов и буффер
count_q++;
Global::lenght=0;
delete []Frame_buf;
break;
}
}//end//for
	
	}//end if begin
	else	
		{
		count_q++;
		}
	}//end while
	
	
	
	}//else
			}//end else


 			 }
помогите найти ошибку в этом коде, никак не получается....
hunter03 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в алгоритме parkito Общие вопросы C/C++ 1 07.12.2011 04:25
Ошибка в алгоритме поиска murzilka6002 Общие вопросы C/C++ 15 24.11.2011 04:57
максимальная скорость работы с большими массивами на C++ 6.0 Anton_uz Общие вопросы C/C++ 2 09.11.2011 23:14
Класс для работы с большими массивами xapiton Visual C++ 24 07.02.2011 18:18
Здравствуйте! Прошу совета по работе с большими массивами значений dgreez Microsoft Office Excel 5 16.12.2009 08:03