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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.70
bupal
25 / 25 / 3
Регистрация: 30.03.2010
Сообщений: 378
Записей в блоге: 1
#1

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

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

Доброго времени суток!
Столкнулся с такой проблемой: как можно сделать массив 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 16:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Безразмерный массив (C++):

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

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

OpenCL безразмерный буфер видеокарты RADEON HD6870 - C++
Имею проблему при загрузке массивов в буфер видеокарты под OpenCL (не путать с OpenGL). На борту видео всего 1 Гиг, но умудряюсь записать...

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

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать - C++
Добрый Вечер! Написал первую часть программы по этому заданию&quot;Ввести массив А. В массив В перенести все элементы массива А, стоящие правее...

Массив: Как скопировать двумерный массив в другой массив? - C++
Как скопировать двумерный массив в другой массив?

19
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 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
0
bupal
25 / 25 / 3
Регистрация: 30.03.2010
Сообщений: 378
Записей в блоге: 1
19.11.2011, 17:01  [ТС] #3
нет..почему то не получилось..
выдал следующее: "Standart C++ Libraries Out of Range" & & 0
0
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 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*/
0
Bers
Заблокирован
19.11.2011, 17:04 #5
Цитата Сообщение от bupal Посмотреть сообщение
нет..почему то не получилось..
выдал следующее: "Standart C++ Libraries Out of Range" & & 0
телепаты в отпуске.
0
bupal
25 / 25 / 3
Регистрация: 30.03.2010
Сообщений: 378
Записей в блоге: 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
16140 / 10418 / 1551
Регистрация: 24.12.2010
Сообщений: 19,720
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
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];
    }
     ...

Прежде чем использовать инструмент, ознакомься с инструкцией.
0
bupal
25 / 25 / 3
Регистрация: 30.03.2010
Сообщений: 378
Записей в блоге: 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
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/
0
Байт
Эксперт C
16140 / 10418 / 1551
Регистрация: 24.12.2010
Сообщений: 19,720
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
bupal
25 / 25 / 3
Регистрация: 30.03.2010
Сообщений: 378
Записей в блоге: 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
0
Bers
Заблокирован
19.11.2011, 17:38 #13
Цитата Сообщение от bupal Посмотреть сообщение
сделал так
Нужно видеть код
0
bupal
25 / 25 / 3
Регистрация: 30.03.2010
Сообщений: 378
Записей в блоге: 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
Bers
Заблокирован
19.11.2011, 17:43 #15
Цитата Сообщение от bupal Посмотреть сообщение
order.reserve(n);
Итак, ты прочитал инструкцию к применению?
Что делает метод reserve() ?

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

Иногда, когда мальчики начинают совсем тупить, им помогают девочки:
http://alenacpp.blogspot.com/2005/06/vector_30.html
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2011, 17:43
Привет! Вот еще темы с ответами:

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

Безразмерный массив в структуре - C (СИ)
Добрый вечер, уважаемые форумчане. Столкнулся с проблемой при написании безразмерного массива в структуре. Я понимаю, что так делать...

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

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


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
19.11.2011, 17:43
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru