Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/133: Рейтинг темы: голосов - 133, средняя оценка - 4.62
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
1

Безразмерный массив

19.11.2011, 16:52. Показов 25967. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Столкнулся с такой проблемой: как можно сделать массив int не указывая его размерность...тобишь чтоб он сам мог расширяться по мере необходимости..
если быть совсем точным, то его размерность, как я понял, должна соответствовать введённому числу n..
вот код, где st[10],ft[10],wt[10],ta[10],rt[10] имеют максимум 10..но нужно чтоб было любое, введённое число.
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
50
51
52
53
54
#include "stdafx.h"
#include <iostream>
 
 
using namespace std;
 
void main()
{
    int order[10],d=0,k=0,j=0,at[10],t=0,w=0,n=0,ct=0, st[10],ft[10],wt[10],ta[10], i=0,min,flag[10],clk=0;    
    float rt[10];
    cout<<"\n\nEnter No. of Process: ";
    cin>>n;
    cout<<"\nEnter Arrival time and Service Time.. \n";
    for(i=0;i<n;i++)
    {    
        cin>>at[i]>>st[i];
        flag[i]=0;
        ct+=st[i];
    }
    while(clk<ct)  //Creating a Lock to Arrest the Whole Loop. Here, only when Total Clock Time is equal to
        // Current clock time it will exit the loop.
    {
        min=100;       // Assiging a Dummy Value for only first check.
        for(i=0;i<n;i++)
        {
            if(st[i]<min&&flag[i]==0&&at[i]<=clk) // Finding a job which has minimum Service time (comparision)
            {                                     // and checking its Flag and Arrival Time with current Clock.
                min=st[i];
                j=i;                                  // If found we are assigning it.
            }
        }
        order[d]=j;    // Doing calculations....
        flag[j]=1;
        clk+=st[j];
        ft[j]=clk;
        ta[j]=ft[j]-at[j];
        wt[j]=ta[j]-st[j];
        rt[j]=(float)ta[j]/st[j];
        d++;
    }    
    cout<<"\nResults...\n"<<"Order\tAT\tST\tFT\tWT\tTA\tRatio\n";
    for(i=0;i<n;i++)
    {
        k = order[i];
        cout<<i+1<<"\t"<<at[k]<<"\t"<<st[k]<<"\t"<<ft[k]<<"\t"<<wt[k]<<"\t"<<ta[k]<<"\t"<<rt[k]<<"\n";
    }    
    for(i=0;i<n;i++)
    {
        t=ta[i]+t;
        w=wt[i]+w;
    }
    cout<<"\nAverage Turnaround Time is "<<(float)t/n<<" and Wait time is "<<(float)w/n<<"\n";
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2011, 16:52
Ответы с готовыми решениями:

Указатель на безразмерный массив
Есть такое понятие как &quot;безразмерный массив&quot; или &quot;массив неизвестного размера&quot;. В голых сях можно...

Дан безразмерный массив.Вставить количество символов каждой строки вначало этой же строки.
Массив считывается из файла,а в проге указывается как указатель на указатель **.Запуск...

Безразмерный файл забить структурами и осуществить их сортировку
Очень не понятно что в этой задачке от меня требуется)) Текст задачи: Безразмерный файл забить...

Безразмерный массив
Нужен массив в который я могу засунуть столько элементов сколько у меня будет, и я не знаю сколько...

19
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.11.2011, 16:55 2
Цитата Сообщение от bupal Посмотреть сообщение
тобишь чтоб он сам мог расширяться по мере необходимости.
C++
1
2
3
#include <vector>
//...
std::vector<int> arr;
краткое описание - http://cplusplus.com/reference/stl/vector/
примеры - http://www.java2s.com/Tutorial... vector.htm
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 17:01  [ТС] 3
нет..почему то не получилось..
выдал следующее: "Standart C++ Libraries Out of Range" & & 0
0
Каратель
Эксперт С++
6609 / 4028 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
19.11.2011, 17:04 4
C++
1
2
3
4
std::vector<int> arr; 
/*это создание пустого вектора, для того чтобы обращаться по индексу вектор должен быть НЕ пустым, 
тобишь надо зарезервировать место(метод reserve), 
но можно просто добавлять элементы в конец через push_back*/
0
Заблокирован
19.11.2011, 17:04 5
Цитата Сообщение от bupal Посмотреть сообщение
нет..почему то не получилось..
выдал следующее: "Standart C++ Libraries Out of Range" & & 0
телепаты в отпуске.
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 17:09  [ТС] 6
Цитата Сообщение от Bers Посмотреть сообщение
телепаты в отпуске.
Я так сделал...

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
50
51
52
53
54
55
56
#include "stdafx.h"
#include <iostream>
#include <vector>
 
 
using namespace std;
 
void main()
{
    vector<int> order, at, st, ft, wt, ta, flag;
    vector<float> rt;
    int d=0,k=0,j=0,t=0,w=0,n=0,ct=0, i=0,min,clk=0;    
    cout<<"\n\nEnter No. of Process: ";
    cin>>n;
    cout<<"\nEnter Arrival time and Service Time.. \n";
    for(i=0;i<n;i++)
    {    
        cin>>at[i]>>st[i];
        flag[i]=0;
        ct+=st[i];
    }
    while(clk<ct)  //Creating a Lock to Arrest the Whole Loop. Here, only when Total Clock Time is equal to
        // Current clock time it will exit the loop.
    {
        min=100;       // Assiging a Dummy Value for only first check.
        for(i=0;i<n;i++)
        {
            if(st[i]<min&&flag[i]==0&&at[i]<=clk) // Finding a job which has minimum Service time (comparision)
            {                                     // and checking its Flag and Arrival Time with current Clock.
                min=st[i];
                j=i;                                  // If found we are assigning it.
            }
        }
        order[d]=j;    // Doing calculations....
        flag[j]=1;
        clk+=st[j];
        ft[j]=clk;
        ta[j]=ft[j]-at[j];
        wt[j]=ta[j]-st[j];
        rt[j]=(float)ta[j]/st[j];
        d++;
    }    
    cout<<"\nResults...\n"<<"Order\tAT\tST\tFT\tWT\tTA\tRatio\n";
    for(i=0;i<n;i++)
    {
        k = order[i];
        cout<<i+1<<"\t"<<at[k]<<"\t"<<st[k]<<"\t"<<ft[k]<<"\t"<<wt[k]<<"\t"<<ta[k]<<"\t"<<rt[k]<<"\n";
    }    
    for(i=0;i<n;i++)
    {
        t=ta[i]+t;
        w=wt[i]+w;
    }
    cout<<"\nAverage Turnaround Time is "<<(float)t/n<<" and Wait time is "<<(float)w/n<<"\n";
 
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
19.11.2011, 17:15 7
bupal, можно и на чистом Си вот так
C
1
2
3
4
5
int *st, ...
// вводим n
st = (int *) malloc(n*sizeof(int));
....
free(st);
На любителя, конечно

Добавлено через 46 секунд
Теперь за использование чистого Си приходится извиняться...
0
Заблокирован
19.11.2011, 17:16 8
Обрати внимание, вот на этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    ...
   vector<int> order, at, st, ft, wt, ta, flag;
    vector<float> rt;
    int d=0,k=0,j=0,t=0,w=0,n=0,ct=0, i=0,min,clk=0; 
    cout<<"\n\nEnter No. of Process: ";
    cin>>n;
    cout<<"\nEnter Arrival time and Service Time.. \n";
    for(i=0;i<n;i++)
    { 
        cin>>at[i]>>st[i]; //если я ввел цыферку 7, 
                                   //стало быть запись пойдёт в элементы под номером 7
                                   //Твои массивы пусты. в них нет элеметов
                                   //ты считаешь это правильно, 
                                   //пытаться записать в массив, 
                                   //который не может вместить 8 элементов, 
                                   //элемент по 7й позиции?
        flag[i]=0;
        ct+=st[i];
    }
     ...

Прежде чем использовать инструмент, ознакомься с инструкцией.
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 17:20  [ТС] 9
Цитата Сообщение от Байт Посмотреть сообщение
bupal, можно и на чистом Си вот так
C
1
2
3
4
5
int *st, ...
// вводим n
st = (int *) malloc(n*sizeof(int));
....
free(st);
На любителя, конечно

Добавлено через 46 секунд
Теперь за использование чистого Си приходится извиняться...
free(st) - это освобождение ячейки памяти?...
и когда именно нужно её освобождать..?

Добавлено через 3 минуты
Цитата Сообщение от Bers Посмотреть сообщение
Обрати внимание, вот на этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    ...
   vector<int> order, at, st, ft, wt, ta, flag;
    vector<float> rt;
    int d=0,k=0,j=0,t=0,w=0,n=0,ct=0, i=0,min,clk=0; 
    cout<<"\n\nEnter No. of Process: ";
    cin>>n;
    cout<<"\nEnter Arrival time and Service Time.. \n";
    for(i=0;i<n;i++)
    { 
        cin>>at[i]>>st[i]; //если я ввел цыферку 7, 
                                   //стало быть запись пойдёт в элементы под номером 7
                                   //Твои массивы пусты. в них нет элеметов
                                   //ты считаешь это правильно, 
                                   //пытаться записать в массив, 
                                   //который не может вместить 8 элементов, 
                                   //элемент по 7й позиции?
        flag[i]=0;
        ct+=st[i];
    }
     ...
Как указать размерность массивов?...
0
Заблокирован
19.11.2011, 17:23 10
Цитата Сообщение от bupal Посмотреть сообщение
Как указать размерность массивов?...
Прочитать инструкцию к применению.

Для тех, кто ещё не научился пользоваться гуглом:
http://www.cplusplus.com/reference/stl/vector/

Для совсем тупых:
http://adorning.ru/2010/01/14/... iy-massiv/
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
19.11.2011, 17:28 11
Цитата Сообщение от bupal Посмотреть сообщение
free(st) - это освобождение ячейки памяти?...
и когда именно нужно её освобождать..?

Добавлено через 3 минуты
Как указать размерность массивов?...
int *st объявляет указатель.
st = (...) malloc(..) выделяет кучу памяти (шучу, память в куче) чтоб туда поместилось сколько надо целых значений. Ну и работаешь с этим st, как обычным целым массивом (st[0], st[1],... st[i]..st[n-1])
Когда st больше не нужен, говоришь ему free(st), память (целый блок, а не ячейка) освобождается
Как-то так.
На плюсах все эти механизмы остаются за кадром, но ИМХО, стоит понять как все это работает.
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 17:36  [ТС] 12
Цитата Сообщение от Bers Посмотреть сообщение
Прочитать инструкцию к применению.

Для тех, кто ещё не научился пользоваться гуглом:
http://www.cplusplus.com/reference/stl/vector/

Для совсем тупых:
http://adorning.ru/2010/01/14/... iy-massiv/
сделал так
C++
1
2
3
4
5
6
7
8
    order.reserve(n);
    at.reserve(n);
    st.reserve(n);
    ft.reserve(n);
    wt.reserve(n);
    ta.reserve(n);
    flag.reserve(n);
    rt.reserve(n);
ничё не изменилось..по прежнему ошибка сразу после того, как ввожу n
пишет: vector subscript out of range
0
Заблокирован
19.11.2011, 17:38 13
Цитата Сообщение от bupal Посмотреть сообщение
сделал так
Нужно видеть код
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 17:42  [ТС] 14
Цитата Сообщение от Bers Посмотреть сообщение
Нужно видеть код
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "stdafx.h"
#include <iostream>
#include <cassert>
#include <vector>
 
 
using namespace std;
 
void main()
{
    vector<int> order, at, st, ft, wt, ta, flag;
    vector<float> rt;
    int d=0,k=0,j=0,t=0,w=0,n=0,ct=0, i=0,min,clk=0;    
    cout<<"\n\nEnter No. of Process: ";
    cin>>n;
    order.reserve(n);
    at.reserve(n);
    st.reserve(n);
    ft.reserve(n);
    wt.reserve(n);
    ta.reserve(n);
    flag.reserve(n);
    rt.reserve(n);
    cout<<"\nEnter Arrival time and Service Time.. \n";
    for(i=0;i<n;i++)
    {    
        cin>>at[i]>>st[i];
        flag[i]=0;
        ct+=st[i];
    }
    while(clk<ct)  //Creating a Lock to Arrest the Whole Loop. Here, only when Total Clock Time is equal to
        // Current clock time it will exit the loop.
    {
        min=100;       // Assiging a Dummy Value for only first check.
        for(i=0;i<n;i++)
        {
            if(st[i]<min&&flag[i]==0&&at[i]<=clk) // Finding a job which has minimum Service time (comparision)
            {                                     // and checking its Flag and Arrival Time with current Clock.
                min=st[i];
                j=i;                                  // If found we are assigning it.
            }
        }
        order[d]=j;    // Doing calculations....
        flag[j]=1;
        clk+=st[j];
        ft[j]=clk;
        ta[j]=ft[j]-at[j];
        wt[j]=ta[j]-st[j];
        rt[j]=(float)ta[j]/st[j];
        d++;
    }    
    cout<<"\nResults...\n"<<"Order\tAT\tST\tFT\tWT\tTA\tRatio\n";
    for(i=0;i<n;i++)
    {
        k = order[i];
        cout<<i+1<<"\t"<<at[k]<<"\t"<<st[k]<<"\t"<<ft[k]<<"\t"<<wt[k]<<"\t"<<ta[k]<<"\t"<<rt[k]<<"\n";
    }    
    for(i=0;i<n;i++)
    {
        t=ta[i]+t;
        w=wt[i]+w;
    }
    cout<<"\nAverage Turnaround Time is "<<(float)t/n<<" and Wait time is "<<(float)w/n<<"\n";
 
}
0
Заблокирован
19.11.2011, 17:43 15
Цитата Сообщение от bupal Посмотреть сообщение
order.reserve(n);
Итак, ты прочитал инструкцию к применению?
Что делает метод reserve() ?

Предлагаю тебе ещё раз перечитать инструкцию к применению. На этот раз более внимательно.

Иногда, когда мальчики начинают совсем тупить, им помогают девочки:
http://alenacpp.blogspot.com/2... or_30.html
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
19.11.2011, 17:47 16
Си
Выделяете память malloc или calloc, если надо перевыделить память то realloc
Второй вариант
Выделяете заведомо большой массив (то есть такого кол-во элементов в нем никогда не встретиться)
например
C++
1
int arr[1000];
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 17:53  [ТС] 17
Цитата Сообщение от Bers Посмотреть сообщение
Итак, ты прочитал инструкцию к применению?
Что делает метод reserve() ?

Предлагаю тебе ещё раз перечитать инструкцию к применению. На этот раз более внимательно.

Иногда, когда мальчики начинают совсем тупить, им помогают девочки:
http://alenacpp.blogspot.com/2... or_30.html
прочитал...
объявил n как size_t...так в примере показано
только толку нет..
0
Заблокирован
19.11.2011, 17:54 18
Цитата Сообщение от bupal Посмотреть сообщение
прочитал...
объявил n как size_t...так в примере показано
только толку нет..
Плохо читал. Читай ещё.
0
27 / 27 / 8
Регистрация: 30.03.2010
Сообщений: 380
Записей в блоге: 1
19.11.2011, 18:37  [ТС] 19
Цитата Сообщение от Bers Посмотреть сообщение
Плохо читал. Читай ещё.
Можно было бы просто написать в чём ошибка и как исправить...
0
Заблокирован
19.11.2011, 18:44 20
Цитата Сообщение от bupal Посмотреть сообщение
Можно было бы просто написать в чём ошибка и как исправить...
C++
1
order.resize(n);
Например, ты создаешь обычный массив: int Arr[10];
Ты не можешь записывать по индексу 20. Потому что в массиве тупо нет элемента с таким индексом.

Тоже самое и с векторами. Разница лишь в том, что вектора умеют на лету менять количество своих элементов.

Когда ты только создал массив, он у тебя пуст. Прежде чем записать по 7 индексу что либо, тебе нужно сначала заполнить массив. Что бы у него вообще был элемент под таким индексом.

Вектора позволяют резервировать память, или изначально создаваться с уже заданным количеством элементов. Но я ж не буду тебе все руководство к применению пересказывать.
Обо всем об этом ты можешь почитать в 100500 разных источниках.
1
19.11.2011, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2011, 18:44
Помогаю со студенческими работами здесь

Безразмерный массив в VBA
Добрый день, уважаемые коллеги :senor: Подскажите, пожалуйста, кто сталкивался с безразмерными...

Безразмерный массив в структуре
Добрый вечер, уважаемые форумчане. Столкнулся с проблемой при написании безразмерного массива в...

Не создается безразмерный массив char[]
Не получается сделать безразмерный массив char ... int main(void) { struct WORKER ...

Как объявить безразмерный массив?
Как объявить безразмерный массив?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru