| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 08-06-2006 19:04 »   | 
								
								 | 
							  
							 
							Привет! скажите пожалуйста: у нас есть массив, как сделать так, что бы размер массива можно было вводить с консоли. Спасибо.
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 08-06-2006 19:33 »   | 
								
								 | 
							  
							 
							Создаеш массив динамически. Или используеш готовые объекты типа vector.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 08-06-2006 19:35 »   | 
								
								 | 
							  
							 
							Finch, я когда-то писал это, потом Windows переустановил и все что на диске С, сгорело. там буквально 5-6 строчек кода. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RXL
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 08-06-2006 19:42 »   | 
								
								 | 
							  
							 
							scraper, не надо писать лишь бы куда. Лучше сделай новую тему.
  Хм. Вводишь в консоле число, создаешь массив по заданному размеру. int array[size]; Или динамически выдели место. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 08-06-2006 20:01 »   | 
								
								 | 
							  
							 
							RXL, Так динамически выделять место под массив? А как потом добавить size в int array[]? Это новый массив нужно динамически создавать? С новым размером? То есть: int size, cif; while(1) {    cout<<"Enter size array: ";    cin>>size;    int array[size] = new int;       for(int i=0; i<10; i++)      {          cout<<"Enter for array "<<i<<" number: ";          cin>>cif;          array[i]=cif;      }    cout<<array; } return 0;
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-06-2006 20:05 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 08-06-2006 20:04 »   | 
								
								 | 
							  
							 
							int array[size]; - так не выйдет, 
  надо только динамически
  int* array= new int[size];
  scraper , код пиши в тегах  [code ]...[/ code] 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 08-06-2006 20:14 »   | 
								
								 | 
							  
							 
							код пиши в тегах  [code ]...[/ code] - как это? int size, cif; while(1) {    cout<<"Enter size array: ";    cin>>size;       int* array= new int[size];--------------------------------------------Так?       for(int i=0; i<10; i++)      {          cout<<"Enter for array "<<i<<" number: ";          cin>>cif;          array[i]=cif;      }    cout<<array; } return 0;
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-06-2006 20:19 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 08-06-2006 20:20 »   | 
								
								 | 
							  
							 
							код пиши в тегах  [code ]...[/ code] - как это?
   - зайди в редактор своего поста, и посмотри, как я это сделал int* array= new int[size];--------------------------------------------Так?
   - а откомпилировать и запустить пробовал? for(int i=0; i<10; i++)
   - надо for(int i=0; i<size; i++)
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 08-06-2006 20:22 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 08-06-2006 20:36 »   | 
								
								 | 
							  
							 
							Я откомпил, работает, но размер массива устанавливается постоянным, то есть тот, который был введен первым, допустим 4. Вот 4 и идет дальше для всех вновь создаваемых, не зависимо что ввести по просьбе строки: cout<<endl<<"Enter size array: "; #include<iostream.h>
  int main() {    int size, cif; while(1) {    	cout<<endl<<"Enter size array: "; 	cin>>size; 	int* array = new int[size]; 	   for(int i=0; i<sizeof(array[size]); i++) 	   { 		   cout<<"Enter for array "<<i<<" number: "; 		   cin>>cif; 		   array[i]=cif; 	   } 	   for(i=0; i<sizeof(array[size]); i++) 	   { 	   cout<<array[i];	           } 	   delete array; 	   } return 0; }  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 08-06-2006 21:07 »   | 
								
								 | 
							  
							 
							Все, справился (туплю). Спасибо*1000000 #include<iostream.h> int main() {    int size, cif; while(1) {       cout<<endl<<"Enter size array: ";    cin>>size;    int* array = new int[size];       for(int i=0; i<size; i++)       {          cout<<"Enter for array "<<i<<" number: ";          cin>>cif;          array=cif;       }       for(i=0; i<size; i++)       {       cout<<array;              }       delete array;       } return 0; }
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 08-06-2006 21:21 »   | 
								
								 | 
							  
							 
							Ооооо.... Батька Так разве работают с массивами?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 08-06-2006 21:27 »   | 
								
								 | 
							  
							 
							sizeof(array[size]) - это гон для динамики. Это работает для статических, и то покажет размер в байтах
  надо с size сравнивать 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Scorp__)
							
								Молодой специалист 
								
								 
								  Offline
								Пол:   
								
								
								
								
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 09-06-2006 09:01 »   | 
								
								 | 
							  
							 
							Если выделяешь память new[] то и освобождать надо delete[], иначе утечки будут. Освободится только первый элемент. int* array = new int[size]; // Какой-то код //.... delete[] array; 
  Вот так. Да и в этом месте должно быть наверное array[i]=cif; // или можно *(array + i)=cif; При выводе также  А то получается, что ты в указатель копируешь введенное число. По идее при освобождении памяти должно выскакивать исключение, при такой работе как у тебя.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 09-06-2006 09:06 от Scorp__) »
								 | 
								
									 
									Записан
								 | 
							  
							 
							- А Вы сами-то верите в привидения?  - Конечно, нет, - ответил лектор и медленно растаял в воздухе. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 09-06-2006 16:28 »   | 
								
								 | 
							  
							 
							Все, все разобрался, спасибо, спасибо...   Скажите: Динамическая память, в железе, где находиться. Как определить размер Динамической памяти? Как происходит адресация в ДП?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 09-06-2006 16:40 »   | 
								
								 | 
							  
							 
							Все, все разобрался, спасибо, спасибо...   Скажите: Динамическая память, в железе, где находиться. Как определить размер Динамической памяти? Как происходит адресация в ДП? находится в озу . Если озу не хватает , то используется виртуальная память - на винте расположена вот тут я делал определение размера озу (железного) 	MEMORYSTATUS memst; 	::GlobalMemoryStatus(&memst);
  	CString csSign; 	DWORD dwdDelta,dwdMemoryLoad; 	CString csper,csmemtaken,csdelta;
  	if(m_dwdLastMem>=m_dwdLogZero){csSign=" ";dwdDelta=m_dwdLastMem-m_dwdLogZero;} 	else{csSign="-";dwdDelta=m_dwdLogZero-m_dwdLastMem;}
  	m_dwdLastMem=memst.dwTotalPhys-memst.dwAvailPhys; 	dwdMemoryLoad=(((float)m_dwdLastMem)*100)/((float)memst.dwTotalPhys);
  	//занято % 	csper.Format("занято озу%3d%%\r\n",dwdMemoryLoad); 	//занято байт 	csmemtaken.Format("   %010d\r\n",m_dwdLastMem); 	csmemtaken.Insert(7,".");
  адресация - как обычно ;  адрес, возвращаемый new  - начало непрерывного участка памяти, выделенного этим оператором  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 09-06-2006 16:44 от Алексей1153 »
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									«  Ответ #15 : 09-06-2006 16:42 »    | 
								
								 | 
							  
							 
							
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							acc15
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 09-06-2006 21:51 »   | 
								
								 | 
							  
							 
							я когда начинал такие вопросы не задавал... 5 баллов =))) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Алексей++
							
								глобальный и пушистый 
								Глобальный модератор
								
								 
								  Offline
								
								Сообщений: 13
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 09-06-2006 22:08 »   | 
								
								 | 
							  
							 
							Finch,  acc15, да ладно вам, человек вникает   )  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							scraper
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 10-06-2006 20:31 »   | 
								
								 | 
							  
							 
							Алексей1153, на винте, в смысле на жестком диске? код на visuale написан? для Borlanda как определить, если в лом, код для создания файла, что должен содержать? То есть пожалуйста, приведи полный код.   Адресация как происходит? И еще, как сделать, чтобы на мой ящик приходила инфа об ответах на форуме?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							acc15
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 11-06-2006 04:07 »   | 
								
								 | 
							  
							 
							1. На винте = на харде = на жестком диске 2. Да, Visual C++ 3. Не понятно, код для создания файла? всмысле exe? это называется makefile... в Visual C++ не используется. Насчет борланда не знаю.  4. Адресация происходит так же как и адресация любой статической памяти, а вообще машина не различает ни статичную ни динамическую память, для неё это просто память, используется страничная адресация (если интересны подробности смотри в книгах), т.е. исп. виртуальные адреса. Да и чисто физически new не выделяет никакой памяти, просто есть неиспользуемые участки памяти которыми управляет диспетчер памяти. 5. Смотри настройки профиля 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						
							Finch
							
								Спокойный 
								Администратор
								
								 
								  Offline
								Пол:   
								
								Пролетал мимо
								
								
								
								
								
							  
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 11-06-2006 13:05 »   | 
								
								 | 
							  
							 
							И еще, как сделать, чтобы на мой ящик приходила инфа об ответах на форуме?
  В шапке этой темы есть ссылка "Извешать об ответе". Жми ее. Если у тебя E-Mail прописан в профиле правильно. Движок форума будет сам отсылать извешения. Я бы порекомендовал взять более менее толковый учебник по С++ и прочитать его досконально с выполнением всех заданий. Тогда многие вопросы просто сами отпадут.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 11-06-2006 13:07 от Finch »
								 | 
								
									 
									Записан
								 | 
							  
							 
							Не будите спашяго дракона.              Джаффар (Коша)  
						 | 
					 
				 
			 |  
		 
	 | 
	 |