0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
1

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

12.10.2016, 18:08. Показов 5990. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2016, 18:08
Ответы с готовыми решениями:

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

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

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

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

19
Любитель чаепитий
3734 / 1793 / 562
Регистрация: 24.08.2014
Сообщений: 5,994
Записей в блоге: 1
12.10.2016, 18:16 2
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
int n; // <- в n мусор
int*mass = new int [n]; // UB
Совсем не то делаете.
0
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
12.10.2016, 18:19 3
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
Любитель чаепитий
3734 / 1793 / 562
Регистрация: 24.08.2014
Сообщений: 5,994
Записей в блоге: 1
12.10.2016, 18:23 4
Цитата Сообщение от fire_Rising Посмотреть сообщение
C++
1
int arr[1000];
Что будет, если в массив введут больше 1000 элементов?
Допустим,
Вы даже увеличите размер до 1000000 элементов,
что будет, если будет введено больше, чем 1000000?
0
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
12.10.2016, 18:35  [ТС] 5
Цитата Сообщение от GbaLog- Посмотреть сообщение
делаете
Ну, а вы что предлагаете? Просто я совсем уж новичок в этом деле((
0
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
12.10.2016, 18:37 6
GbaLog-, понятное дело, что будет плохо, но ТС не будет же туда вбивать больше 1000 элементов) я же написал, самый примитивный способ узнать, сколько элементов вбито
0
0 / 0 / 0
Регистрация: 11.10.2016
Сообщений: 48
12.10.2016, 18:39  [ТС] 7
Цитата Сообщение от fire_Rising Посмотреть сообщение
понятное дело, что будет плохо, но ТС не будет же туда вбивать больше 1000 элементов) я же написал, самый примитивный способ узнать, сколько элементов вбито
Вся фишка в том, что нужно именно n количество элементов без изначального определения, ибо с таким вариантом проги меня уже раз отправили переделывать.
0
Любитель чаепитий
3734 / 1793 / 562
Регистрация: 24.08.2014
Сообщений: 5,994
Записей в блоге: 1
12.10.2016, 18:43 8
Цитата Сообщение от fire_Rising Посмотреть сообщение
но ТС не будет же туда вбивать больше 1000 элементов
Конечно не будет,
для этого есть специальные программы-генераторы,
как, например, на олимпиадах по программированию.

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

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

Добавлено через 26 минут
Цитата Сообщение от ihe Посмотреть сообщение
Вектор можно описать как абстрактную модель динамического массива, который вам и нужен
А без вектора никак не обойтись? Просто есть опасение что опять пошлют нахрен.
0
192 / 128 / 52
Регистрация: 19.01.2010
Сообщений: 518
12.10.2016, 21:46 13
как-то так:
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
Эксперт С++
3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 08:25 14
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
В целом стоит такая задача:
Массив вводится с клавиатуры, и необходимо вычислить сколько именно чисел ввели в массив, после чего присвоить это значение n. Как подобное можно осуществить, ибо, кажется, я пошла по заведомо ложному пути.
Уже вторую тему автор и читатели парят друг другу мозги какими-то загадочными массивами. Однако задача
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
вычислить сколько именно чисел ввели в массив
Для этого никаких массивов в программе не нужно, счетчик только.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
13.10.2016, 09:20 15
Цитата Сообщение от Mr.X Посмотреть сообщение
Для этого никаких массивов в программе не нужно, счетчик только.
Но это не отменяет этого:
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Массив вводится с клавиатуры,
Значит, по заданию, массив должен существовать.
0
Эксперт С++
3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 09:23 16
Цитата Сообщение от nd2 Посмотреть сообщение
это не отменяет этого:
Цитата Сообщение от ZeritaGuns
Массив вводится с клавиатуры,

Значит, по заданию, массив должен существовать.
В консоли, а не в программе.
0
nd2
3431 / 2810 / 1249
Регистрация: 29.01.2016
Сообщений: 9,426
13.10.2016, 09:26 17
Цитата Сообщение от Mr.X Посмотреть сообщение
В консоли, а не в программе.
Это как?
0
Эксперт С++
3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 09:29 18
Цитата Сообщение от nd2 Посмотреть сообщение
Цитата Сообщение от Mr.X
В консоли, а не в программе.

Это как?
Цитата Сообщение от ZeritaGuns Посмотреть сообщение
Массив вводится с клавиатуры
************************
0
10 / 11 / 7
Регистрация: 11.05.2016
Сообщений: 113
13.10.2016, 09:46 19
Mr.X, если массива не существует, как такового(т.е. в консоли вводим и он там есть строка из чисел), задача ну очень простая, поэтому скорее всего он есть и сделать это надо через вектор
0
Эксперт С++
3219 / 1746 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
13.10.2016, 09:55 20
Цитата Сообщение от fire_Rising Посмотреть сообщение
Mr.X, если массива не существует, как такового(т.е. в консоли вводим и он там есть строка из чисел), задача ну очень простая, поэтому скорее всего он есть и сделать это надо через вектор
Ну так и я говорю, что простая. Автор уже сказала, что векторы ей запрещены. Единственно какой-то массив продолжает пытаться в программе организовать.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2016, 09:55
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru