| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 «  : 09-09-2003 05:57 »   | 
								
								 | 
							  
							 
							Еще необходимо убрать 4 первых и 4 последних значения. Способ двумя циклами не совсем подходит. 1 цикл собираем данные. 2 цикл ищем мин,макс,средн.
  Кто предложит оптимальнее? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							NetRaider
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 09-09-2003 06:12 »   | 
								
								 | 
							  
							 
							Что значит неизвестной длины ? Понятно что может быть произвольное кол-во элементов, но некое завершающее значение присутствует ? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Sommer
							
								Молодой специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 09-09-2003 06:31 »   | 
								
								 | 
							  
							 
							Aleck D.Shadow,  ээээээээээ ну можно в первом же цикле и инфу собирать и искать нужные нам значения...
  и мне тоже непонятно как у массива не известна длина... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							когда-нибудь, я верю, ты будешь ехать по этому городу и поймёшь, что хочешь увидеть меня за рулём мчащейся по соседней полосе машины.  но тогда меня уже не будет в этом городе  forever yours. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 09-09-2003 06:33 »   | 
								
								 | 
							  
							 
							Да, конечно! Но мы это узнаем только после сбора данных. Т.е. 1 цикл. 2 цикл снова пробегаем по тем же данным но уже с известным числом. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sh_m
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 09-09-2003 06:35 »   | 
								
								 | 
							  
							 
							И зачем два цикла? Массив двумерный? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 09-09-2003 06:35 »   | 
								
								 | 
							  
							 
							Читайте ограничение в том что нужно убрать первые Н и последние К значений! Среднее особенно! 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 09-09-2003 06:39 »   | 
								
								 | 
							  
							 
							Зачем нужен 2 цикл? Для того что бы посчитать Мин,Макс,Средн. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sh_m
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 09-09-2003 06:46 »   | 
								
								 | 
							  
							 
							Зачем нужен 2 цикл? Для того что бы посчитать Мин,Макс,Средн. И все равно. Все можно сделать одним циклом. Нужно только завести дополнительные переменные (максимум, минимум, количество элементов, общая сумма, значения четырех первых и четырех последних). Не очень ясно всетаки в каком виде задается массив.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 09-09-2003 06:47 »   | 
								
								 | 
							  
							 
							Задай нам параметры в коде для массива - скажем функция получает указатель идлину или еще что-то - я тебе напишу поиск.... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 09-09-2003 06:53 »   | 
								
								 | 
							  
							 
							To sh_m: Дак ведь если же будет необходимо обрезать больше чем 4 например 120. При этом первые еще более менее понятно как сохранить.А вот последние их каждый раз придется двигать до достижения конца. Тогда эффективность сильно упадет. Или я ошибаюсь. То Гром: длина заведомо неизвестна. Если бы была известна то и вопроса бы не возникло.     
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sh_m
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 09-09-2003 07:00 »   | 
								
								 | 
							  
							 
							To sh_m: Дак ведь если же будет необходимо обрезать больше чем 4 например 120. При этом первые еще более менее понятно как сохранить.А вот последние их каждый раз придется двигать до достижения конца. Тогда эффективность сильно упадет.  Если и количество обрезаемыых элементов нежесткое, то можно хранить их сумму, ну и текущие значения первого и последнего  в "обрезке". Дописал позже.Это я уже запутался: все равно нужно хранить всю заднюю "обрезку".  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 09-09-2003 07:01 »   | 
								
								 | 
							  
							 
							Ты эта.... Не бывает массива с неизвестной длиной - тогда это связный список - но смысл не меняется совершенно.. Поэтому и спрашиваю - работы минут на 10 писать.... Распиши саму задачу какие данные откуда и как приходят, что у тебя есть реально - чего нет - .... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 09-09-2003 07:10 »   | 
								
								 | 
							  
							 
							 Если и количество обрезаемыых элементов нежесткое, то можно хранить их сумму, ну и текущие значения первого и последнего в "обрезке".
 
 А что это даст. Как вычислить макс, мин?  Ты эта....  Не бывает массива с неизвестной длиной - тогда это связный список - но смысл не меняется совершенно..  Поэтому и спрашиваю - работы минут на 10 писать....  Распиши саму задачу какие данные откуда и как приходят, что у тебя есть реально - чего нет - ....
 
 Короче говоря, у меня есть поток данных: 0 0 0 2 0 2 0 2 0 3 0 4 0 5 1 0 0 3 2 0 1 0 1 0 2 0 2 0 2 0 0 0 2 0 0 3 Необходимо скалькулировать данные в каждом столбце, отбросив 0. При этом обрезать начальные Н и конечные К значения. Конечно, в этом массиве мы знаем скоко данных ( их 9 ) а сколько данных в каждом столбце мы не знаем. Вот такая ситуация.    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sh_m
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 09-09-2003 07:11 »   | 
								
								 | 
							  
							 
							Ты эта.... Не бывает массива с неизвестной длиной - тогда это связный список - но смысл не меняется совершенно.. Поэтому и спрашиваю - работы минут на 10 писать.... Распиши саму задачу какие данные откуда и как приходят, что у тебя есть реально - чего нет - .... Может это не готовый массив? А просто поступают значения, которые нужно обрабатывать "на лету".  Ну тогда тем более нужно делать все одним циклом.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sh_m
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 09-09-2003 07:17 »   | 
								
								 | 
							  
							 
							А что это даст. Как вычислить макс, мин?
  С передней "обрезкой" думаю вопросов нет, просто отбрасываешь значения до достижения нужного количества. А что касается задней, то число нужно обрабатывать не сразу после поступления, а когда оно "вытолкнется" из буфера для задней "обрезки".  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 09-09-2003 07:28 »   | 
								
								 | 
							  
							 
							sh_m : "а когда оно "вытолкнется" из буфера для задней "обрезки"." Я хочу заметить, что "вытолкнется" это означает нужно будет двигать циклом. Например, 120 значений нужно обрезать, с каждой итерацией нужно пробежать 120 значений и подвинуть на один. Так ? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							sh_m
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 09-09-2003 07:48 »   | 
								
								 | 
							  
							 
							sh_m : "а когда оно "вытолкнется" из буфера для задней "обрезки"." Я хочу заметить, что "вытолкнется" это означает нужно будет двигать циклом. Например, 120 значений нужно обрезать, с каждой итерацией нужно пробежать 120 значений и подвинуть на один. Так ? Верно, но этот процесс можно оптимизировать сам по себе. Например не двигать весь массив, а манипулировать только индексами. Как именно, я сейчас ответить затрудняюсь, но  Гром тут упоминал связные списки, по-моему оно как раз из этой серии.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							SlavaI
							
								Главный специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 09-09-2003 07:52 »   | 
								
								 | 
							  
							 
							 При этом обрезать начальные Н и конечные К значения. 
 
 C начальными вроде проблем нет- и так ясно, а для конечных создай стек(попросту массив) из K значений и запихивай на каждом шаге туда. Когда массив закончится, то то что в стеке и есть то что надо отбросить.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							SlavaI
							
								Главный специалист 
								
								 
								  Offline
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 09-09-2003 07:58 »   | 
								
								 | 
							  
							 
							Я до сих пор не пойму какой макс мин ты имеешь в виду? Убрать K максимальных элементов? Если да, то отдельный массив на K элементов решает эту проблему- суй туда последние K максимальных элементов, найти их не трудно, когда данные последовательно идут- это элементы, которые больше наименьшего, находящегося в массиве. Если убрать последние K элементов- тоже отдельный массив на K элементов поможет. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 09-09-2003 08:27 »   | 
								
								 | 
							  
							 
							для вычисления среднего совсем не обязательно знать количество значений в массиве просто считать на каждом шаге n -   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							NetRaider
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 09-09-2003 08:36 »   | 
								
								 | 
							  
							 
							Вот классик, позволяющий находить мин, макс. и среднее значения в массиве "неизвестной длины" #include <iostream> #include <vector>
  template<typename T> class min_max_average { 	T min, max, total; 	std::vector<T> array;
  public:
  	min_max_average<T>():total(0){} 	~min_max_average<T>()| array.clear(); }
  	T get_min() const { return min; } 	T get_max() const {	return max; } 	T get_average() const { return (total/get_count());} 	T get_count() const { return array.size();}
  	min_max_average<T>& operator << (const T& value) 	{ 		array.push_back(value);
  		if(total == 0) { 			total = min = max = value; 			return *this; 		} 	 		total += value; 		if(value < min)	{ min = value; return *this; } 		if(value > max) { max = value; return *this; } 		return *this; 	} };
  int main(int argc, char* argv[]) { 	min_max_average<int> a;
  	a << 45 << 2 << 12 << 54 << 71 << 13 << 21 << 0 ;
  	std::cout << "Max: "	<< a.get_max()		<< std::endl; 	std::cout << "Min: "	<< a.get_min()		<< std::endl; 	std::cout << "Average: "<< a.get_average()	<< std::endl; 	std::cout << "Count: "	<< a.get_count()	<< std::endl;
  	return 0; }
  Про "обрезание": всегда должны удаляться 4 элемента или возможно другое кол-во ? Удаленные элементы должны участвовать в нахождении мин, макс. и среднего значения или нет ?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-11-2007 18:13 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 09-09-2003 08:47 »   | 
								
								 | 
							  
							 
							2NetRaider - резонные вопросы про участие обрезаемых значений в расчетах. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #22 : 09-09-2003 08:50 »   | 
								
								 | 
							  
							 
							и есть ли смысл в классе делать этот массив воочию, достаточно количества отрезаемых элементов по моему 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #23 : 09-09-2003 09:20 »   | 
								
								 | 
							  
							 
							По моему все езе проще - при наличии связного списка - или любого признака конца массива - ставится ограничение - т.е. проверка стартовая что массив не меньше 4+4+1 - удаляемые элементы и один как минимум для наличия среднего. Затем имеем 1 массив 4 элемента = MININT для минимальных. 1 массив 4 элемента MAXINT где MAXINT & MININT в данном случае максимальное и минимальное числов в массиве int если там другие значения - то и заполнять по типу. Соответственно массив минимальных значений заполняется MAXINT а максимальных MININT После чего идет перебор элементов int i =0; do{ Условие проверки в максимальных элементах если нет места в массиве максимальных переходим в массив минимальных элементов Если нет места - ничего не делаем.
  }while (признак конца массива);
 
  В массивах МАХ и MIN держим не только сами элементы а структуру  typedef struct __MAXMIN {     int Element;     unsigned long index_in_base_array; } После пробега остануться заполненными массивы мин и макс элементов, параллельно идет вычисление среднего тоже. Как только пробег закончен вырезаем - вырезание при доступе по индексу можно проводить 100 путями - есть целая теория сдвигов или оптимизаций массивов, кстати применяемая в оптимизациях SQL баз данных Если же массив пременной лины то наверняка есть связные ссылки - ибо это связный список - тогда удаление и перенос элементов сводятся к переписыванию ссылок и освобождению памяти.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 19-11-2007 18:15 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #24 : 09-09-2003 09:31 »   | 
								
								 | 
							  
							 
							Слава, я тебя понял. Это решит проблему среднего. А максимум и минимум значения в массиве как!? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Pu
							
								Большой босс 
								
								 
								  Offline
								
								78
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #25 : 09-09-2003 09:31 »   | 
								
								 | 
							  
							 
							а если дпнные просто из потока например с RS порта и неизвестно когда закончатся? Не мне вариант с шаблоном очень понравился Щас пытаюсь присобачить к одной своей проге     , только у меня вопрос с вычислением минимаксов не стоит . просто слэйв прогоняет через себя поток и ищет свой адрес.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Насколько я опытен? Достаточно, чтобы понимать, что дураков нельзя заставить думать по–другому, но недостаточно, чтобы отказаться от попыток это сделать. (с) Артур Джонс 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #26 : 09-09-2003 09:39 »   | 
								
								 | 
							  
							 
							Так. Pu и NetRaider, Вы хоть выше читаете или мне каждый раз переписывать одно и тоже.
  Насчет выделения среднего по предложенной схеме Pu  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Гром
							
								Птычк. Тьфу, птычник... Вот! 
								Готовлюсь к пенсии
								
								  
								  Offline
								Пол:   
								Бодрый птах
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #27 : 09-09-2003 09:42 »   | 
								
								 | 
							  
							 
							Погодь я еще подумаю.... но ты насчет мин и макс - посмотри написанное... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							А птичку нашу прошу не обижать!!! 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #28 : 09-09-2003 09:46 »   | 
								
								 | 
							  
							 
							 2NetRaider - резонные вопросы про участие обрезаемых значений в расчетах.
 
 Да уж. Зачем спрашивается обрезать?  Прошу прощения если грубовато!  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Aleck D.Shadow
							
						 | 
						
							
								  | 
								
									
									 « Ответ #29 : 09-09-2003 09:51 »   | 
								
								 | 
							  
							 
							Грому: Это ж сколько пространства надо на поддержку массивов макс и мин? И опять же проблема со средним.    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |