Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
25 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 11

Очередь из разнитипных элементов

02.11.2011, 17:00. Показов 1052. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, задаче не хочет выводить метод speek(). Ошибка у меня в int main()после того как я объявила указатель на очередь
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
/*
  Создать очередь из разнотипных элементов-животных, образованных от одного базового класса  Animal. 
  Испольpовать замещение метода  Speek() в каждом подклассе. Продемонстрировать работу очереди в main.
*/
#include<iostream>
#include<math.h>
using namespace std;
 
class Animal
{   protected:  int age;
public: virtual void Speek () {cout<<"0";};
            int GetAge (void){return age;};
            void SetAge (int a) {age=a;}; 
};
class Dog:public Animal { public: void Speek() {cout<<"Gav-Gav"<<endl;};};
class Cat:public Animal { public: void Speek() {cout<<"May"<<endl;};};
class Syslik:public Animal { public: void Speek() {cout<<"Sam golos!"<<endl;};};
 
 
class AnimalQueue 
{private: int rloc;  int sloc; 
          Animal *q ; 
          unsigned int size;
public: AnimalQueue(int s){size = s; q = new *Animal[size]; if (!q){cout<<"no free memory"<<endl; return;}; rloc = sloc = 0;}; //конструктор
        void qput (Animal x)  //постановка в очередь
            { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
              q[sloc++]=x; 
              return;
            };
        //Animal qget (void)  //выдача элемента
        //  { if (sloc == rloc) {Animal m; m.SetAge(-1); cout<<"ochered pusta"<<endl; return m;}
        //    return q[rloc++];
        //  };
        ~AnimalQueue(){delete []q;};
};
 
 
int   main()
{  //Animal *p;
    Dog Reks, Djessi;
    Cat Mursik, Myrka;
    Syslik Fenya, AntonDm;
 
    Reks.SetAge(2);
    Djessi.SetAge(5);
    Mursik.SetAge(1);
    Myrka.SetAge(3);
    Fenya.SetAge(5);
    AntonDm.SetAge(4);
    //cout<<"  "<<Reks.GetAge()<<endl;
    //p = &Reks;
    //p -> Speek();
    //p = &Mursik;
    //p -> Speek();
    //p = &Fenya;
    //p -> Speek();
 
    AnimalQueue *A; // объявили указатель на очередь 
    int n; n=10;
    A = new AnimalQueue(n);
    if (!A){cout<<"memory pusta"<<endl; return 1;}else
    {   A->qput(Reks);
        A->qput(Djessi);
        A->qput(Mursik);
        A->qput(Myrka);
        A->qput(Fenya);
        A->qput(AntonDm);
    };
     for (int i=0; i<n; i++)
    {   if (A[i].GetAge()!=-1){
        A[i]->Speek();
        cout<<x.GetAge()<<endl;     
     };};
return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2011, 17:00
Ответы с готовыми решениями:

Сформировать односвязную очередь из элементов, которые входят в очередь Q1, но не входят в очередь Q2
Составить программу обработки динамической структуры данных: сформировать односвязную очередь Q из элементов, которые входят в очередь Q1,...

Дана очередь с вещественными числами, упорядоченными по убыванию. Добавить в очередь среднее арифметическое элементов
Дана очередь с вещественными числами, упорядоченными по убыванию. Добавить в очередь среднее арифметическое элементов очереди, не...

Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q,
Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q, кратных числу 3.

6
385 / 229 / 12
Регистрация: 06.07.2011
Сообщений: 512
02.11.2011, 17:15
что за ошибка? у меня выдает совершенно другие строки.
и откуда такая дурная манера писать операторы в строчку. это мало того, что не читаемо, так еще и ошибки от компилятора отыскивать сложнее.
и зачем после каждой закрывающей фигурной скобки точку с запятой ставить?
0
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
02.11.2011, 17:46
C++
1
  A[i]->Speek();
Что???? У вас указатель А - это не указатель на массив животных.
Самое просто - перенсти Animal *q в паблик. Тогда
C++
1
  A[i]->Speek();
заменится на
C++
1
  A->q[i].Speek();
0
25 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 11
02.11.2011, 18:32  [ТС]
Упс. Я там не тот код малость выложила... Тот я пробовала править...
Код вот этот.
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
/*
  Создать очередь из разнотипных элементов-животных, образованных от одного базового класса  Animal. 
  Испольpовать замещение метода  Speek() в каждом подклассе. Продемонстрировать работу очереди в main.
*/
#include<iostream>
using namespace std;
 
class Animal
{   protected:  int age;
public: virtual void Speek () {cout<<"0";};
            int GetAge (void){return age;};
            void SetAge (int a) {age=a;}; 
};
class Dog:public Animal { public: void Speek() {cout<<"Gav-Gav"<<endl;};};
class Cat:public Animal { public: void Speek() {cout<<"May"<<endl;};};
class Syslik:public Animal { public: void Speek() {cout<<"Sam golos!"<<endl;};};
 
class AnimalQueue 
{public:  int rloc;  
          int sloc; 
          Animal *q ; 
          unsigned int size;
public: AnimalQueue(int s){size = s; q = new Animal[size]; if (!q){cout<<"no free memory"<<endl; return;}; rloc = sloc = 0;}; //конструктор
        void qput (Animal x)  //постановка в очередь
            { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
              q[sloc++]=x; 
              return;
            };
        Animal qget (void)  //выдача элемента
            { if (sloc == rloc) {Animal m; m.SetAge(-1); cout<<"ochered pusta"<<endl; return m;}
              return q[rloc++];
            };
        ~AnimalQueue() {delete []q;};
};
 
int   main()
{  //Animal *p;
    Dog Reks, Djessi;
    Cat Mursik, Myrka;
    Syslik Fenya, Anton;
    
    Reks.SetAge(2);
    Djessi.SetAge(5);
    Mursik.SetAge(1);
    Myrka.SetAge(3);
    Fenya.SetAge(5);
    Anton.SetAge(4);
    //p = &Reks;
    //p -> Speek();
    //p = &Mursik;
    //p -> Speek();
    //p = &Fenya;
    //p -> Speek();
 
    AnimalQueue *A; // объявили указатель на очередь 
    int n; n=10;
    A = new AnimalQueue(n);
    if (!A){cout<<"memory pusta"<<endl; return 1;}else
    {   A->qput(Reks);
        A->qput(Djessi);
        A->qput(Mursik);
        A->qput(Myrka);
        A->qput(Fenya);
        A->qput(Anton);
    };
    Animal x;
    for (int i=0; i<n; i++)
    {   x=A->qget();
        if (x.GetAge()!=-1){
            x.Speek();
            cout<<x.GetAge()<<endl;     
        };
    };
 
return 0;
}
0
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
02.11.2011, 18:50
C++
1
2
3
4
5
void qput (Animal x)  //постановка в очередь
                        { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
                          q[sloc++]=x;
                          return;
                        };
Функция на входе все объекты переделывает в класс Animal. Нужно указатели использовать.
0
25 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 11
02.11.2011, 18:57  [ТС]
я не знаю как сделать...
0
60 / 60 / 10
Регистрация: 27.10.2011
Сообщений: 185
02.11.2011, 22:04
You are welcome...
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
#include<iostream>
using namespace std;
 
class Animal
{       protected:  int age;
public: virtual void Speek () {cout<<"0";};
                        int GetAge (void){return age;};
                        void SetAge (int a) {age=a;}; 
};
class Dog:public Animal { public: void Speek() {cout<<"Gav-Gav"<<endl;};};
class Cat:public Animal { public: void Speek() {cout<<"May"<<endl;};};
class Syslik:public Animal { public: void Speek() {cout<<"Sam golos!"<<endl;};};
 
class AnimalQueue
{public:  int rloc;  
                  int sloc;
                  Animal **q ;
                  unsigned int size;
public: AnimalQueue(int s){size = s; q = new Animal*[size]; if (!q){cout<<"no free memory"<<endl; return;}; rloc = sloc = 0;}; //конструктор
                void qput (Animal *x)  //постановка в очередь
                        { if (sloc == size) {cout<<endl<<"ochered polna"<<endl; return;};
                          q[sloc++]=x;
                          return;
                        };
                Animal* qget (void)  //выдача элемента
                        { if (sloc == rloc) {cout<<"ochered pusta"<<endl; return 0;}
                          return q[rloc++];
                        };
                ~AnimalQueue() {delete []q;};
};
 
int   main()
{  //Animal *p;
        Dog Reks, Djessi;
        Cat Mursik, Myrka;
        Syslik Fenya, Anton;
        
        Reks.SetAge(2);
        Djessi.SetAge(5);
        Mursik.SetAge(1);
        Myrka.SetAge(3);
        Fenya.SetAge(5);
        Anton.SetAge(4);
        Anton.Speek();
        //p = &Reks;
        //p -> Speek();
        //p = &Mursik;
        //p -> Speek();
        //p = &Fenya;
        //p -> Speek();
 
        AnimalQueue *A; // объявили указатель на очередь 
        int n; n=10;
        A = new AnimalQueue(n);
        if (!A){cout<<"memory pusta"<<endl; return 1;}else
        {       A->qput(&Reks);
                A->qput(&Djessi);
                A->qput(&Mursik);
                A->qput(&Myrka);
                A->qput(&Fenya);
                A->qput(&Anton);
        };
        Animal *x;
        for (int i=0; i<n; i++)
        {   x=A->qget();
            if (!x)
            {
                continue;
            }
                if (x->GetAge()!=-1){
                        x->Speek();
                        cout<<x->GetAge()<<endl;
                };
        };
return 0;
}
Только по-хорошему нужно объекты динамически создавать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2011, 22:04
Помогаю со студенческими работами здесь

Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q,
Сформировать очередь, содержащую целые числа. Построить новую очередь, состоящую из элементов первоначальной очереди Q, кратных числу 3

Добавление элементов в очередь
Помогите реализовать добавление элементов в структуру-очередь (что бы добавить новый элемент нужно просканировать очередь по указателю...

Очередь из разнородных элементов
Есть такая задача: Моделировать очередь (руками), в качестве элементов которой могут использоваться числа и слова. Операции: добавление...

Очередь элементов (FIFO)
Нужно создать программу демонстрации работы очереди(FIFO) на примере автомобилей которая будет включать в себя функции: Push – (номер,...

Очередь добавление / удаление элементов
#include &lt;iostream&gt; using namespace std; struct nod{ string nr; nod *leg; }; nod*v,*sf; int n; void Pune (nod...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru