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

Реализовать с использованием массива очередь - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
irishka-peyton
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 12
21.10.2010, 17:01     Реализовать с использованием массива очередь #1
13.первое задание
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2) Распечатать полученный массив.
3) Удалить из массива все элементы совпадающие с его минимальным значением.
4) Добавить в начало массива 3 элемента со значением равным среднему арифметическому массива.
5) Распечатать полученный массив.


16.
Реализовать с использованием массива очередь (первый пришел, первый ушел), для чего организовать добавление, удаление элементов в массив и печать массива после каждой операции.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
21.10.2010, 17:54     Реализовать с использованием массива очередь #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
27
28
29
30
31
32
33
34
35
36
37
38
#include <conio.h>
#include <iostream.h>
#include <time.h>
#include <list>
#include <algorithm>
 
int main()
{   
    cout << "enter size massiva: ";
    int min = 32001, summ;
    cin >> summ;
    list <int> mass(summ);
    summ = 0;
    
    srand(time(NULL));
    for(list <int>::iterator i = mass.begin(); i!= mass.end();i++)
    {
        *i = rand()%200;
        cout << *i << ends;
        if(*i < min) min = *i;// определение минимального елемента
        summ+=*i;//поиск среднего значения
    }
    summ = summ/mass.size();
    cout << endl;   
    cout << "************\n";
    cout << "min is: "<< min << endl;
    std::remove(mass.begin(), mass.end(), min);
 
    for(int i = 0;i<3;i++)
        mass.push_front(summ);
 
    for(list <int>::iterator i = mass.begin(); i!= mass.end();i++)
        cout << *i << ends;
    
    _getch();
//  cin.ignore();
    return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
21.10.2010, 18:09     Реализовать с использованием массива очередь #3
IchMors, есть подозрение, что это список, а не массив
IchMors
21.10.2010, 18:10
  #4

Не по теме:

что то теперь оно забралось и в мою душу )))

easybudda
21.10.2010, 18:26
  #5

Не по теме:

Цитата Сообщение от irishka-peyton Посмотреть сообщение
Реализовать с использованием массива очередь
По-моему самый нелепый способ реализовывать очередь - это через массив...

irishka-peyton
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 12
21.10.2010, 18:32  [ТС]     Реализовать с использованием массива очередь #6
согласна,но такое задание у меня другово выхода к сожелению нет((
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.10.2010, 13:04     Реализовать с использованием массива очередь #7
Пожалуйста:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <assert.h>
 
#define MAXSIZ 10
 
typedef struct {
        int data[MAXSIZ];
        int top;
} queue_t;
 
void push(queue_t *q, int value) {
        assert(q != NULL);
 
        if(q->top == MAXSIZ) {
                fprintf(stderr, "queue overflow\n");
                return;
        }
 
        q->data[q->top++] = value;
}
 
void pop(queue_t *q) {
        int i = 0;
        assert(q != NULL);
 
        if(q->top == 0) {
                fprintf(stderr, "queue is empty\n");
                return;
        }
 
        for(i = 0; i < q->top && i < MAXSIZ; ++i)
                q->data[i] = q->data[i+1];
 
        --(q->top);
}
 
int back(queue_t *q) {
        assert(q != NULL);
 
        if(q->top == 0) {
                fprintf(stderr, "queue is empty\n");
                return 0;
        }
 
        return q->data[q->top - 1];
}
 
int front(queue_t *q) {
        assert(q != NULL);
 
        if(q->top == 0) {
                fprintf(stderr, "queue is empty\n");
                return 0;
        }
 
        return q->data[0];
}
 
int empty(queue_t *q) {
        assert(q != NULL);
        return q->top == 0;
}
 
int size(queue_t *q) {
        assert(q != NULL);
        return q->top;
}
 
void create(queue_t *q) {
        int i = 0;
        assert(q != NULL);
 
        q->top = 0;
        for(i = 0; i < MAXSIZ; ++i)
                q->data[i] = 0;
}
 
 
int main() 
{
        int i = 0;
        queue_t q;
 
        create(&q);
 
        for(i = 0; i < 10; ++i)
                push(&q, i + 1);
 
        while(!empty(&q)) {
                printf("%d -> ", front(&q));
                pop(&q);
        }
        printf("\b\b\b   \n");
 
        return 0;
}
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
24.10.2011, 18:06     Реализовать с использованием массива очередь #8
Цитата Сообщение от fasked Посмотреть сообщение
Пожалуйста:
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <assert.h>
 
#define MAXSIZ 10
 
typedef struct {
        int data[MAXSIZ];
        int top;
} queue_t;
 
void push(queue_t *q, int value) {
        assert(q != NULL);
 
        if(q->top == MAXSIZ) {
                fprintf(stderr, "queue overflow\n");
                return;
        }
 
        q->data[q->top++] = value;
}
 
void pop(queue_t *q) {
        int i = 0;
        assert(q != NULL);
 
        if(q->top == 0) {
                fprintf(stderr, "queue is empty\n");
                return;
        }
 
        for(i = 0; i < q->top && i < MAXSIZ; ++i)
                q->data[i] = q->data[i+1];
 
        --(q->top);
}
 
int back(queue_t *q) {
        assert(q != NULL);
 
        if(q->top == 0) {
                fprintf(stderr, "queue is empty\n");
                return 0;
        }
 
        return q->data[q->top - 1];
}
 
int front(queue_t *q) {
        assert(q != NULL);
 
        if(q->top == 0) {
                fprintf(stderr, "queue is empty\n");
                return 0;
        }
 
        return q->data[0];
}
 
int empty(queue_t *q) {
        assert(q != NULL);
        return q->top == 0;
}
 
int size(queue_t *q) {
        assert(q != NULL);
        return q->top;
}
 
void create(queue_t *q) {
        int i = 0;
        assert(q != NULL);
 
        q->top = 0;
        for(i = 0; i < MAXSIZ; ++i)
                q->data[i] = 0;
}
 
 
int main() 
{
        int i = 0;
        queue_t q;
 
        create(&q);
 
        for(i = 0; i < 10; ++i)
                push(&q, i + 1);
 
        while(!empty(&q)) {
                printf("%d -> ", front(&q));
                pop(&q);
        }
        printf("\b\b\b   \n");
 
        return 0;
}
можно Вас попросить написать комментарии к каждой функции! чтобы было легче разобраться! а то я скопировал код запустил он мне выдал числа от 1 до 10 и всё, что бы я не нажал он закрывает программу!
Заранее спасибо!
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.10.2011, 18:42     Реализовать с использованием массива очередь #9
Цитата Сообщение от Ruslanishe Посмотреть сообщение
можно Вас попросить написать комментарии к каждой функции!
Данные queue:
  • MAXSIZ - (константа) максимальное количество элементов в очереди.
  • data - массив данных.
  • top - индекс первого элемента в очереди.
Интерфейс queue:
  • push - положить значение value в очередь q.
    В случае переполнения значение в очередь помещено не будет.
  • pop - извлечь значение из очереди q.
  • back - получить последний элемент из очереди q.
  • front - получить первый элемент из очереди q.
  • empty - возвращает 1, если очередь q пуста и 0 в обратном случае.
  • size - возвращает размер очереди q.
  • create - инициализация очереди q.
На самом деле функции back не должно быть, она не вписывается в понятие FIFO. Функция create избыточна - обнулять массив не обязательно. Да и вообще тут все плохо с обработкой ошибок.
запустил он мне выдал числа от 1 до 10 и всё, что бы я не нажал он закрывает программу!
Так и должно быть.
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
24.10.2011, 18:50     Реализовать с использованием массива очередь #10
Спасибо!!
Тогда получается добавление элементов осуществляется с помощью этой строки!
C
1
2
for(i = 0; i < 10; ++i)
                push(&q, i + 1);
и изменяя MAXSIZ и конечное значение i мы можем получать разное количество элементов!
а изменяя начальное i получать от определённого числа!

а как насчёт удаления?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
24.10.2011, 19:26     Реализовать с использованием массива очередь #11
Цитата Сообщение от Ruslanishe Посмотреть сообщение
а как насчёт удаления?
Написал же, что функция pop.
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
25.10.2011, 07:03     Реализовать с использованием массива очередь #12
Цитата Сообщение от fasked Посмотреть сообщение
Написал же, что функция pop.
Извините меня!!!, но я представлял себе решение этого задания по другому:
допустим мы задали эту очередь а потом идёт выбор добавить или удалить! с последующей печатью после каждого действия!
что-то я не понимаю эти очереди!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
25.10.2011, 09:22     Реализовать с использованием массива очередь #13
Цитата Сообщение от Ruslanishe Посмотреть сообщение
Извините меня!!!, но я представлял себе решение этого задания по другому:
допустим мы задали эту очередь а потом идёт выбор добавить или удалить! с последующей печатью после каждого действия!
что-то я не понимаю эти очереди!
Ну зайдите в магазин, постойте у кассы, понаблюдайте. С одной стороны в неё (в очередь) встают с набором покупок, с другой выходят рассчитавшись. Пока не посчитает кассирша, на сколько набрал тот, кто первым подошёл, стоимость покупок у стоящих за ним неизвестна. При этом в общем случае стоящие в очереди не могут перестраиваться по стоимости покупок или ещё каким-нибудь способом. Первым пришёл - первым вышел. FIFO - First In First Out.
Более сложный случай - двухсторонние очереди. Это, когда с любой стороны можно одного поставить, или одного убрать. Но при этом всё равно что там в середине очереди происходит - тайна...
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.10.2011, 10:57     Реализовать с использованием массива очередь #14
Цитата Сообщение от Ruslanishe Посмотреть сообщение
допустим мы задали эту очередь а потом идёт выбор добавить или удалить! с последующей печатью после каждого действия!
Ну как бы переписывайте код, так чтобы можно было делать выбор и производилась печать после каждого действия. Я в своем примере демонстрировал лишь тот факт, что числа входят в очередь и выходят из очереди в правильном порядке.

Не по теме:

Цитата Сообщение от Ruslanishe Посмотреть сообщение
что-то я не понимаю эти очереди!
Хм... интересно при чем здесь все остальные участники форума.

Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
25.10.2011, 14:39     Реализовать с использованием массива очередь #15
Цитата Сообщение от fasked Посмотреть сообщение
Ну как бы переписывайте код, так чтобы можно было делать выбор и производилась печать после каждого действия. Я в своем примере демонстрировал лишь тот факт, что числа входят в очередь и выходят из очереди в правильном порядке.
Спасибо! вот это я и не мог понять!!
Ну в общем функции остаются те же??? надо будет сделать выбор и в зависимости от выбора вызывать ту или иную функцию??

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Хм... интересно при чем здесь все остальные участники форума.
Конечно же участники не причём просто как тов голове не укладывается)))
Извините за предоставленные неудобства!!!

fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
25.10.2011, 14:42     Реализовать с использованием массива очередь #16
Цитата Сообщение от Ruslanishe Посмотреть сообщение
Ну в общем функции остаются те же??? надо будет сделать выбор и в зависимости от выбора вызывать ту или иную функцию??
У Вас есть интерфейс "очереди". С этим интерфейсом Вы можете делать, что угодно. Грубо говоря, Вам надо переписать функцию main().
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2011, 14:44     Реализовать с использованием массива очередь
Еще ссылки по теме:

Не могу реализовать очередь (модель дозаправки самолетов в воздухе) C++
Реализовать очередь на массиве C++
C++ Реализовать очередь Unemployed на бирже труда

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

Или воспользуйтесь поиском по форуму:
Ruslanishe
25 / 9 / 1
Регистрация: 17.10.2010
Сообщений: 203
25.10.2011, 14:44     Реализовать с использованием массива очередь #17
Цитата Сообщение от fasked Посмотреть сообщение
У Вас есть интерфейс "очереди". С этим интерфейсом Вы можете делать, что угодно. Грубо говоря, Вам надо переписать функцию main().
Вот большое спасибо! с main() - ом разберусь!!
Yandex
Объявления
25.10.2011, 14:44     Реализовать с использованием массива очередь
Ответ Создать тему
Опции темы

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