Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Массивы - ввод с консоли  (Прочитано 25526 раз)
0 Пользователей и 1 Гость смотрят эту тему.
scraper
Гость
« : 08-06-2006 19:04 » 

Привет! скажите пожалуйста:
у нас есть массив, как сделать так, что бы размер массива можно было вводить с консоли.
Спасибо.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 08-06-2006 19:33 » 

Создаеш массив динамически. Или используеш готовые объекты типа vector.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
scraper
Гость
« Ответ #2 : 08-06-2006 19:35 » 

Finch, я когда-то писал это, потом Windows переустановил и все что на диске С, сгорело.
там буквально 5-6 строчек кода.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #10 : 08-06-2006 21:21 » 

Ооооо.... Батька
Код:
array=cif;
Так разве работают с массивами?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 08-06-2006 21:27 » 

sizeof(array[size]) - это гон для динамики. Это работает для статических, и то покажет размер в байтах

надо с size сравнивать
Записан

Scorp__)
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 09-06-2006 09:01 » 

Если выделяешь память new[] то и освобождать надо delete[], иначе утечки будут. Освободится только первый элемент.
Код:
int* array = new int[size];
// Какой-то код
//....
delete[] array;
Вот так.

Да и в этом месте
Код:
array=cif;
должно быть наверное
Код:
array[i]=cif;
// или можно *(array + i)=cif;

При выводе также
Код:
cout<<array[i];

А то получается, что ты в указатель копируешь введенное число. По идее при освобождении памяти должно выскакивать исключение, при такой работе как у тебя.
« Последнее редактирование: 09-06-2006 09:06 от Scorp__) » Записан

- А Вы сами-то верите в привидения?
- Конечно, нет, - ответил лектор и медленно растаял в воздухе.
scraper
Гость
« Ответ #13 : 09-06-2006 16:28 » 

Все, все разобрался, спасибо, спасибо... Улыбаюсь
Скажите:
Динамическая память, в железе, где находиться.
Как определить размер Динамической памяти?
Как происходит адресация в ДП?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #15 : 09-06-2006 16:42 » 

scraperУлыбаюсь) Улыбаюсь) Улыбаюсь) Улыбаюсь) Улыбаюсь)
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
acc15
Гость
« Ответ #16 : 09-06-2006 21:51 » 

я когда начинал такие вопросы не задавал...
5 баллов =)))
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #20 : 11-06-2006 13:05 » new

Цитата
И еще, как сделать, чтобы на мой ящик приходила инфа об ответах на форуме?
В шапке этой темы есть ссылка "Извешать об ответе". Жми ее. Если у тебя E-Mail прописан в профиле правильно. Движок форума будет сам отсылать извешения.

Я бы порекомендовал взять более менее толковый учебник по С++ и прочитать его досконально с выполнением всех заданий. Тогда многие вопросы просто сами отпадут.
« Последнее редактирование: 11-06-2006 13:07 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines