Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.70
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 16:52     Безразмерный массив #1
Доброго времени суток!
Столкнулся с такой проблемой: как можно сделать массив 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";
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 16:52     Безразмерный массив
Посмотрите здесь:

Дан безразмерный массив.Вставить количество символов каждой строки вначало этой же строки. C++
C++ Безразмерный файл забить структурами и осуществить их сортировку
Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька C++
C++ Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив...
C++ Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
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/Cpp/0...20__vector.htm
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 17:01  [ТС]     Безразмерный массив #3
нет..почему то не получилось..
выдал следующее: "Standart C++ Libraries Out of Range" & & 0
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.11.2011, 17:04     Безразмерный массив #4
C++
1
2
3
4
std::vector<int> arr; 
/*это создание пустого вектора, для того чтобы обращаться по индексу вектор должен быть НЕ пустым, 
тобишь надо зарезервировать место(метод reserve), 
но можно просто добавлять элементы в конец через push_back*/
Bers
Заблокирован
19.11.2011, 17:04     Безразмерный массив #5
Цитата Сообщение от bupal Посмотреть сообщение
нет..почему то не получилось..
выдал следующее: "Standart C++ Libraries Out of Range" & & 0
телепаты в отпуске.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 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";
 
}
Байт
 Аватар для Байт
13972 / 8803 / 1226
Регистрация: 24.12.2010
Сообщений: 15,949
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 секунд
Теперь за использование чистого Си приходится извиняться...
Bers
Заблокирован
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];
    }
     ...

Прежде чем использовать инструмент, ознакомься с инструкцией.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 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];
    }
     ...
Как указать размерность массивов?...
Bers
Заблокирован
19.11.2011, 17:23     Безразмерный массив #10
Цитата Сообщение от bupal Посмотреть сообщение
Как указать размерность массивов?...
Прочитать инструкцию к применению.

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

Для совсем тупых:
http://adorning.ru/2010/01/14/c-urok...heskiy-massiv/
Байт
 Аватар для Байт
13972 / 8803 / 1226
Регистрация: 24.12.2010
Сообщений: 15,949
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), память (целый блок, а не ячейка) освобождается
Как-то так.
На плюсах все эти механизмы остаются за кадром, но ИМХО, стоит понять как все это работает.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 17:36  [ТС]     Безразмерный массив #12
Цитата Сообщение от Bers Посмотреть сообщение
Прочитать инструкцию к применению.

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

Для совсем тупых:
http://adorning.ru/2010/01/14/c-urok...heskiy-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
Bers
Заблокирован
19.11.2011, 17:38     Безразмерный массив #13
Цитата Сообщение от bupal Посмотреть сообщение
сделал так
Нужно видеть код
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 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";
 
}
Bers
Заблокирован
19.11.2011, 17:43     Безразмерный массив #15
Цитата Сообщение от bupal Посмотреть сообщение
order.reserve(n);
Итак, ты прочитал инструкцию к применению?
Что делает метод reserve() ?

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

Иногда, когда мальчики начинают совсем тупить, им помогают девочки:
http://alenacpp.blogspot.com/2005/06/vector_30.html
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
19.11.2011, 17:47     Безразмерный массив #16
Си
Выделяете память malloc или calloc, если надо перевыделить память то realloc
Второй вариант
Выделяете заведомо большой массив (то есть такого кол-во элементов в нем никогда не встретиться)
например
C++
1
int arr[1000];
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 17:53  [ТС]     Безразмерный массив #17
Цитата Сообщение от Bers Посмотреть сообщение
Итак, ты прочитал инструкцию к применению?
Что делает метод reserve() ?

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

Иногда, когда мальчики начинают совсем тупить, им помогают девочки:
http://alenacpp.blogspot.com/2005/06/vector_30.html
прочитал...
объявил n как size_t...так в примере показано
только толку нет..
Bers
Заблокирован
19.11.2011, 17:54     Безразмерный массив #18
Цитата Сообщение от bupal Посмотреть сообщение
прочитал...
объявил n как size_t...так в примере показано
только толку нет..
Плохо читал. Читай ещё.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
19.11.2011, 18:37  [ТС]     Безразмерный массив #19
Цитата Сообщение от Bers Посмотреть сообщение
Плохо читал. Читай ещё.
Можно было бы просто написать в чём ошибка и как исправить...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2011, 18:44     Безразмерный массив
Еще ссылки по теме:

C++ Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив.
Массив: Как скопировать двумерный массив в другой массив? C++
C++ Указатель на безразмерный массив

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
19.11.2011, 18:44     Безразмерный массив #20
Цитата Сообщение от bupal Посмотреть сообщение
Можно было бы просто написать в чём ошибка и как исправить...
C++
1
order.resize(n);
Например, ты создаешь обычный массив: int Arr[10];
Ты не можешь записывать по индексу 20. Потому что в массиве тупо нет элемента с таким индексом.

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

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

Вектора позволяют резервировать память, или изначально создаваться с уже заданным количеством элементов. Но я ж не буду тебе все руководство к применению пересказывать.
Обо всем об этом ты можешь почитать в 100500 разных источниках.
Yandex
Объявления
19.11.2011, 18:44     Безразмерный массив
Ответ Создать тему
Опции темы

Текущее время: 19:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru