Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
1

Стек и приоритеты

01.08.2013, 02:20. Показов 1443. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ошибок при компиляции не возникает, но при проверке не выдает адресов элементов и их данных. Прошу прояснить недочеты и логические ошибки в моем прототипе. Заранее благодарю ответивших. Среда Dev.
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
#include <iostream>
class Trem{
      public:
      int Ch;
      bool Log;
      Trem *next;
      Trem(int d, bool t){Ch=d; Log=t;}
      };
class Steck{
      public:
      Trem *Beg;
      Trem *End;
      Steck(int d, bool t){
                Trem *p=new Trem(d,t);
                Beg=&(*p); 
                End=&(*p);
                }
      void push(int d, bool t){
           Trem *p=new Trem(d,t);
           (*End).next=&(*p);
           End=&(*p);
           }
      void pop(){
           Trem *p=&(*Beg);
           Beg=&(*Beg->next);
           delete p;
           }
      };
int main(){
     int n,r;
     bool er;
     std::cout<<"vvedite chislo el\n";
     std::cin>>n;
     Steck Dat(0,true);
     for(int i=0;i<n;i++){
             std::cout<<"vvedite int & bool dlya "<<i<<" elementa\n";
             std::cin>>r;
             std::cout<<"\n";
             std::cin>>er;
     Dat.push(r,er);
     }
     Trem *uk=&(*Dat.Beg);
     for(int i=0;i<n+1;i++) std::cout<<(*uk).Ch<<"&"<<(*uk).Log<<"\n";
     system("pause");
     for(int i=0;i<n+1;i++) Dat.pop();
     return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2013, 02:20
Ответы с готовыми решениями:

Приоритеты
Почему не работает приоритет на загрузку с DVD диска?

приоритеты.
Здраствуйте. Столкнулся вот с какой проблемой. Добавляю на форму компонент &quot;Panel: TPanel&quot;....

Расставить приоритеты ж/д
У меня один хард, когда переустанавливал винду поделил его на 2 неравные части. &quot;С:&quot;- винда и все с...

Приоритеты операций
Почему в таблице приоритета операций постфиксный инкремент(декремент) имеет приоритет 2, если...

7
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2013, 03:02 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
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
#include <iostream>
 
class Trem
{
      public:
      int Ch;
      bool Log;
      Trem *next;
      
      Trem(int d, bool t)
      {
          Ch  = d; 
          Log = t;
      }
};
 
class Steck
{
   public:
      Trem *End;
      
      Steck()
      {
           End = NULL;
      }
      
      void push(int d, bool t)
      {
           Trem *p = new Trem(d, t);
           p ->next = End;
           End = p;
      }
      
      void pop()
      {
            Trem *p = End;
            End = End ->next;
            delete p;
      }
};
 
int main()
{
     int n, r;
     bool er;
     std::cout << "vvedite chislo el\n";
     std::cin >> n;
     Steck Dat;
     for(int i = 0; i < n; i++)
     {
             std::cout << "vvedite int & bool dlya " << i << " elementa\n";
             std::cin >> r;
             std::cout << "\n";
             std::cin >> er;
             
             Dat.push(r, er);
     }
     
     Trem *uk = Dat.End;
     while (uk != NULL)
     {
        std::cout << uk ->Ch << "&" << uk ->Log << "\n";
        uk = uk ->next;
     }
     
     while (Dat.End != NULL)
     {
        Dat.pop();
     }
     
     system("pause");
     return 0;
}
1
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:03  [ТС] 3
Хочется уточнить некоторые вопросы. 1) Предпочтительнее использовать Null или же можно писать с 0? 2)Почему мы не берем адреса при присваивании или в рамках использования указателей членов в классах они берутся автоматически?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 11:08 4
Цитата Сообщение от Voron55555 Посмотреть сообщение
1) Предпочтительнее использовать Null или же можно писать с 0?
Если есть поддержка C++11, то для указателей желательно использовать nullptr, а для остальных 0 или NULL(тут не важно ведь, если посмотреть то #define NULL 0).
1
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:13  [ТС] 5
nonedark2008 В чем особенность такого объявления?

Добавлено через 2 минуты
Да и вообще, лучше использовать подход создания контейнеров как класс в классе или же использовать STL и не париться?
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
01.08.2013, 11:21 6
Voron55555,
1) Если у тебя класс с конструкторами, один из которых принимает int, а другой например void *. Вам хочется вызвать второй констурктор и пишется MyClass(NULL), но в таком случае вызовется первый конструктор, т.к. NULL - это тот же самый 0, что есть число.
2) А #define NULL 0 пошло еще из далекого языка C. Думаю, что это просто для удобства, чтобы как-то различать некоторые моменты в коде.

Добавлено через 4 минуты
Цитата Сообщение от Voron55555 Посмотреть сообщение
Да и вообще, лучше использовать подход создания контейнеров как класс в классе или же использовать STL и не париться?
Зависит от задачи. Если проблема оптимизации программы не стоит ребром, то STL сгодится - не придется рожать велосипед. Если же производительность программы важна, то лучше уже писать что-то свое под конкретный случай для лучшей производительности, либо искать специальные библиотеки на этот случай.
ИМХО. Юзабилити и производительность плохо совместимы... STL жертвует производительностью ради удобства использования.
1
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:27  [ТС] 7
Благодарю
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.08.2013, 18:19 8
Цитата Сообщение от Voron55555 Посмотреть сообщение
2)Почему мы не берем адреса при присваивании или в рамках использования указателей членов в классах они берутся автоматически?
Вы, например, пишите:
C++
1
2
3
4
5
6
Trem *Beg;
...
Trem *p = new Trem(d, t);
...
Beg = &(*p); 
...
Beg и p указатели одного типа. Для того, чтобы присвоить значение однго указателя (адрес, который в нём содержится) другому, достаточно написать (как и для других переменных):
C++
1
Beg = p;
Вы делает тоже самое, только длинным путём: в переменную Beg (указатель) записывается адрес того, что содержится по адресу, который содержится в указателе p.
0
01.08.2013, 18:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.08.2013, 18:19
Помогаю со студенческими работами здесь

Приоритеты операций
Есть такой вот пример: Console.WriteLine(&quot;Enter please x: &quot;); int x =...

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

Приоритеты в GPSS
Здравствуйте! Я написал модель, но никак не могу правильно поставить приоритеты (( Помогите...

приоритеты операций
Интересную ошибку нахожу в книгах по части приоритетов операций в C++: например здесь и здесь...


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

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