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 »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
|