Реализация динамического массива.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Frairs
Сообщения: 19
Зарегистрирован: 25 фев 2013, 20:04

Здравствуйте. Нужно реализовать динамический массив. Вообщем изначально задание было такое:

Требуется реализовать динамический массив.
Для этого вам нужно создать структуру данных, которая будет хранить размер массива и указатель на его начало, и 4 функции для работы с этим массивом:
1. инициализация массива (выделение памяти указанного размера, инициализация полей структуры),
2. функция, возвращающая значение элемента массива с указанным индексом,
3. функция, записывающая указанное значение в массив по указанному индексу,
4. освобождение памяти.

Это вроде бы сделал. Вот как всё выглядит:

Код: Выделить всё

#include <iostream>
#include <stdlib.h>
using namespace std;
struct aray //описание структуры
{
    int mas;
    int *a;
};
aray k;


char ch; //ввожу символьную переменную для того что бы пользователь смог отвечать на вопросы программы


void initial();

void vivodMass ();

void memory();


int main()
{

     cout << "1 - input array" << endl;
     cout << "2 - output array" << endl;
     cout << "3 - memory cleaning" << endl;

initial();

vivodMass ();

memory();

  return 0;

}




 void initial() //размер массива и ввод массива
    {
            cout << "size of the array" << endl;
            cin >> k.mas;
            k.a = new int [k.mas];
            for (int i=0; i<k.mas; i++)
            {
                cout << "Enter " << i << " the array element" << endl;
                cin >> k.a[i];
            }
           cout << "Completed entry array" << endl;
    cout << endl;
    }

  void vivodMass () // вывод указанных елементов массива
    { int n;
         bool z;
         while (!z)
         {
            cout << "What element of a display? Enter the number of the array." << endl;

            cin >> n;
            cout << "Array" << "[" << n << "]" << " = " << k.a[n] << endl; //выводим запрашивающий элемент массива.
            cout << "Do you want to bring a different element? y and n" << endl;
            cin >> ch;
            if (ch=='y') z=0;
            if (ch=='n') z=1;
            if (((ch!='y')) && ((ch!='n'))) //спрашиваем пользователя хочет ли он выйти или вывести другой элемент.
            {
                cout << "error" << endl;
                exit(0);
            }
        }
    }

void memory() //очистка памяти
{
    cout << "Clear memory? y and n" << endl;
    cin >> ch;

     if (ch=='y')
     {
         delete [] k.a;
         cout << "memory is cleared";
     }
     if (ch=='n')  exit(0);
     if (((ch!='y')) && ((ch!='n')))
            {
                cout << "error" << endl;
                exit(0);
            }

}
всё работает всё прекрасно. Но теперь надо модифицировать программу. Надо добавить функцию которая будит сразу выделять память для массива. То есть, как мне объяснили, если пользователь захочет не с одним массивом работать, а с несколькими то программа должна с этим работать. Как это реализовать я понятия не имею. Типа должна быть функция:

Код: Выделить всё

void init(int N, aray M)
там надо дописать две строчки и всё будит хорошо. Но вот не понимаю как какие то две строчки спасут положение. 1 структура, один массив...как две строчки помогут работать ещё с одним массивом?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Код понятен, а объяснения о том, как нужно модифицировать программу не понятны вообще. Что такое "Надо добавить функцию которая будит сразу выделять память для массива"? Можно поточнее дать постановку задачи? А то получается, что спрашиваешь то, не знаешь сам что, а хочешь, чтобы ещё и ответили.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Frairs
Сообщения: 19
Зарегистрирован: 25 фев 2013, 20:04

Romeo писал(а):Код понятен, а объяснения о том, как нужно модифицировать программу не понятны вообще. Что такое "Надо добавить функцию которая будит сразу выделять память для массива"? Можно поточнее дать постановку задачи? А то получается, что спрашиваешь то, не знаешь сам что, а хочешь, чтобы ещё и ответили.

Хорошо. Как только получу точное задание, создам новую тему.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Не нужно новую тему. Как только будет точное задание - пиши сюда же.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить