Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/40: Рейтинг темы: голосов - 40, средняя оценка - 4.63
 Аватар для ZeritaGuns
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48

Ввод массива заранее неизвестной длины

12.10.2016, 18:08. Показов 7621. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
int main ()
{   int n; // ввод неизвестного массива
    int*mass = new int [n];
       for (int i = 0; i < n; i++) {
            cout << "Enter the " << i + 1 << " element" << endl;
            cin >> mass[i];
char =q;
cin >> q;
cout << "Вы хотите продолжить ввод чисел массива?" Y-да N-нет" << endl;
if (q='N'){
                n=i+1; // подсчет числа которое определяет размер массива.
cout << n << endl;}
while (q=='Y');
                cout << n << endl;
В целом стоит такая задача:
Массив вводится с клавиатуры, и необходимо вычислить сколько именно чисел ввели в массив, после чего присвоить это значение n. Как подобное можно осуществить, ибо, кажется, я пошла по заведомо ложному пути.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2016, 18:08
Ответы с готовыми решениями:

Ввод массива заранее неизвестной длины
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int arr, a = 0; cout &lt;&lt; &quot;Вводите...

Ввод массива неизвестной длины
Добрый день! Уважаемые знатоки, вопрос скорее всего тривиальный, но тем не менее решения у меня нет. Нужно задать вектор через пробелы...

Ввод динамического массива неизвестной длины
Нужно создать динамический массив целых чисел, размер которого неизвестен, а каждое введенное число должно сразу помещатьмя в массив,...

19
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
12.10.2016, 18:16
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
int n; // <- в n мусор
int*mass = new int [n]; // UB
Совсем не то делаете.
0
 Аватар для fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
12.10.2016, 18:19
ZeritaGuns, нельзя использовать n до ее инициализирования.

Добавлено через 2 минуты
Если вам просто надо определить, сколько элементов введет пользователь, то вот самый примитивный способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
using namespace std;
 
void main() {
 
    setlocale(LC_ALL, "Russian");
    int arr[1000];
    int k = 0; //для подсчета элементов
    char vibor;
 
    for (int i = 0; i < 1000; i++) {
        cout << "Введите элемент массива -> ";
        cin >> arr[i];
        cout << endl;
        k++;
        cout << "Еще? y-да n-нет : ";
        cin >> vibor;
        cout << endl;
        if (vibor == 'n') break;
    }
    
    cout << "В массиве " << k << " элементов" << endl;
    system("pause");
    return;
}
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
12.10.2016, 18:23
Цитата Сообщение от fire_Rising Посмотреть сообщение
C++
1
int arr[1000];
Что будет, если в массив введут больше 1000 элементов?
Допустим,
Вы даже увеличите размер до 1000000 элементов,
что будет, если будет введено больше, чем 1000000?
0
 Аватар для ZeritaGuns
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
12.10.2016, 18:35  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
делаете
Ну, а вы что предлагаете? Просто я совсем уж новичок в этом деле((
0
 Аватар для fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
12.10.2016, 18:37
GbaLog-, понятное дело, что будет плохо, но ТС не будет же туда вбивать больше 1000 элементов) я же написал, самый примитивный способ узнать, сколько элементов вбито
0
 Аватар для ZeritaGuns
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
12.10.2016, 18:39  [ТС]
Цитата Сообщение от fire_Rising Посмотреть сообщение
понятное дело, что будет плохо, но ТС не будет же туда вбивать больше 1000 элементов) я же написал, самый примитивный способ узнать, сколько элементов вбито
Вся фишка в том, что нужно именно n количество элементов без изначального определения, ибо с таким вариантом проги меня уже раз отправили переделывать.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
12.10.2016, 18:43
Цитата Сообщение от fire_Rising Посмотреть сообщение
но ТС не будет же туда вбивать больше 1000 элементов
Конечно не будет,
для этого есть специальные программы-генераторы,
как, например, на олимпиадах по программированию.

Цитата Сообщение от fire_Rising Посмотреть сообщение
я же написал, самый примитивный способ узнать
Это самый глупый способ узнать.
Уж извините за жёсткость, но это так.

Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Ну, а вы что предлагаете?
Предлагаю вектор.
0
 Аватар для ZeritaGuns
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
12.10.2016, 18:49  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
Предлагаю вектор.
Ок... что это и с чем его едят? Какие библиотеки стоит подключать? И вообще как он работает?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
12.10.2016, 18:52
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
что это и с чем его едят?
http://en.cppreference.com/w/cpp/container/vector
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Какие библиотеки стоит подключать?
Стандартную и.. всё.
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
И вообще как он работает?
Просто и без задней мысли.
Выделяет место в памяти на какое-то кол-во элементов,
если кол-ва выделенной памяти не хватает,
то вектор реаллоцирует память
и переносит старые данные в новый кусок памяти.
Подробнее в статье выше.
0
2 / 2 / 2
Регистрация: 08.10.2016
Сообщений: 9
12.10.2016, 18:54
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Ок... что это и с чем его едят? Какие библиотеки стоит подключать? И вообще как он работает?
C++
1
#include <vector>
Вектор можно описать как абстрактную модель динамического массива, который вам и нужен
0
 Аватар для ZeritaGuns
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
12.10.2016, 19:32  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
Выделяет место в памяти на какое-то кол-во элементов,
если кол-ва выделенной памяти не хватает,
то вектор реаллоцирует память
и переносит старые данные в новый кусок памяти.
Подробнее в статье выше.
Спасибо большое))

Добавлено через 26 минут
Цитата Сообщение от ihe Посмотреть сообщение
Вектор можно описать как абстрактную модель динамического массива, который вам и нужен
А без вектора никак не обойтись? Просто есть опасение что опять пошлют нахрен.
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
12.10.2016, 21:46
как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
 
using namespace std;
 
void realloc(int* &mas, int &mas_size)
{
    int* new_mas = new int[++mas_size];
 
    for(int i = 0; i < mas_size; ++i)
        new_mas[i] = mas[i];
 
    delete [] mas;
    mas = new_mas;
}
 
 int _tmain(int argc, _TCHAR* argv[])
{
    const Esc_code = 27;
    const int init_size     = 1;
 
    int* mas        = new int[init_size];
    int mas_size    = init_size;
    int counter     = 0;
 
    int val;
    while(true)
    {
        if(counter == mas_size)
            realloc(mas, mas_size);
 
        cin >> val;
        if(!cin.good())
        {
            mas_size--;
            break;
        }
        mas[counter++] = val;
    }
 
    cout << endl << "mas size: " << mas_size << endl;;
 
    for(int i = 0; i < mas_size; ++i)
        cout << mas[i] << endl;
 
    delete [] mas;
 
    system("pause");
    return 0;
}
ввод останавливается, если в консоль ввести не число
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 08:25
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
В целом стоит такая задача:
Массив вводится с клавиатуры, и необходимо вычислить сколько именно чисел ввели в массив, после чего присвоить это значение n. Как подобное можно осуществить, ибо, кажется, я пошла по заведомо ложному пути.
Уже вторую тему автор и читатели парят друг другу мозги какими-то загадочными массивами. Однако задача
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
вычислить сколько именно чисел ввели в массив
Для этого никаких массивов в программе не нужно, счетчик только.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.10.2016, 09:20
Цитата Сообщение от Mr.X Посмотреть сообщение
Для этого никаких массивов в программе не нужно, счетчик только.
Но это не отменяет этого:
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Массив вводится с клавиатуры,
Значит, по заданию, массив должен существовать.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 09:23
Цитата Сообщение от nd2 Посмотреть сообщение
это не отменяет этого:
Цитата Сообщение от ZeritaGuns
Массив вводится с клавиатуры,

Значит, по заданию, массив должен существовать.
В консоли, а не в программе.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.10.2016, 09:26
Цитата Сообщение от Mr.X Посмотреть сообщение
В консоли, а не в программе.
Это как?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 09:29
Цитата Сообщение от nd2 Посмотреть сообщение
Цитата Сообщение от Mr.X
В консоли, а не в программе.

Это как?
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Массив вводится с клавиатуры
************************
0
 Аватар для fire_Rising
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
13.10.2016, 09:46
Mr.X, если массива не существует, как такового(т.е. в консоли вводим и он там есть строка из чисел), задача ну очень простая, поэтому скорее всего он есть и сделать это надо через вектор
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 09:55
Цитата Сообщение от fire_Rising Посмотреть сообщение
Mr.X, если массива не существует, как такового(т.е. в консоли вводим и он там есть строка из чисел), задача ну очень простая, поэтому скорее всего он есть и сделать это надо через вектор
Ну так и я говорю, что простая. Автор уже сказала, что векторы ей запрещены. Единственно какой-то массив продолжает пытаться в программе организовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.10.2016, 09:55
Помогаю со студенческими работами здесь

Считывание массива неизвестной длины
Имеется набор чисел. Про их количество ничего заранее неизвестно, кроме того, что оно кратно 10. Можно ли как-то сделать прерывание ввода...

Создание массива чисел неизвестной длины
Нужно сделать программу, которая считывает неизвестное наперёд количество чисел в массив. То есть чтобы можно было вводить любое количество...

Функция для ввода массива неизвестной длины
Как реализовать ввод массива неизвестной длины Без использования vector

Возможно ли создать массив неизвестной заранее размерности?
Собственно, сабж в названии. Можно ли получить от пользователя N, где N - размерность массива, создать его и заполнить рандомными числами?...

Открытые функции класса: ввод массива, вывод массива, определение длины вектора
Данные класса: массив N(10). Открытые функции класса: ввод массива, вывод массива, определение длины вектора. Длина массива определяется...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru