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

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

Войти
Регистрация
Восстановить пароль
 
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
#1

Стек и приоритеты - C++

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

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

приоритеты операций - C++
cout &lt;&lt; (5 &lt;&lt;3); что это за знак &lt;&lt; и где можно узнать приоритеты всех (или основных) операций в С++

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

Используя стек, описать функцию проверяющую, является ли стек пустым - C++
Используя стек, описать функцию проверяющую, является ли стек пустым

Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами - C++
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами #include &lt;iostream&gt; #include &lt;stdlib.h&gt; ...

Приоритеты вложенных циклов - C++
Nk=20; for(Ni=0;Ni&lt;Nk;Ni++) { for(i=0;i&lt;size;i++) { for(j=0;j&lt;size;j++) { if(Map==Ni) {

Приоритеты выполнения перегрузок операций - C++
Всем привет. Скажите как себя будет вести программа в следующей ситуации и чем это обусловлено(компилятором или стандартом языка); ...

7
alsav22
5428 / 4823 / 442
Регистрация: 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
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:03  [ТС] #3
Хочется уточнить некоторые вопросы. 1) Предпочтительнее использовать Null или же можно писать с 0? 2)Почему мы не берем адреса при присваивании или в рамках использования указателей членов в классах они берутся автоматически?
0
nonedark2008
933 / 672 / 148
Регистрация: 28.07.2012
Сообщений: 1,837
01.08.2013, 11:08 #4
Цитата Сообщение от Voron55555 Посмотреть сообщение
1) Предпочтительнее использовать Null или же можно писать с 0?
Если есть поддержка C++11, то для указателей желательно использовать nullptr, а для остальных 0 или NULL(тут не важно ведь, если посмотреть то #define NULL 0).
1
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:13  [ТС] #5
nonedark2008 В чем особенность такого объявления?

Добавлено через 2 минуты
Да и вообще, лучше использовать подход создания контейнеров как класс в классе или же использовать STL и не париться?
0
nonedark2008
933 / 672 / 148
Регистрация: 28.07.2012
Сообщений: 1,837
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
Voron55555
0 / 0 / 0
Регистрация: 13.11.2012
Сообщений: 14
01.08.2013, 11:27  [ТС] #7
Благодарю
0
alsav22
5428 / 4823 / 442
Регистрация: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.08.2013, 18:19
Привет! Вот еще темы с ответами:

Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? - C++
Есть у меня пробелы в познаниях, хотел бы их устранить. 1. Что такое стек в самом языке С++ ? 2. В какой памяти он хранится и почему...

Расставить приоритеты операций и вычислить значение заданного выражения (Помогите с задачей) - C++
Расставить приоритеты операций и вычислить значение заданного выражения, используя форматы машинного представления данных и правила...

при работе рекурсивной функции заканчивается стек и программа соответственно; как сделать так, чтобы она писала "стек закончился"? - C++
Сабж g++ 4.5.0

Создание и завершение процессов и потоков. Приоритеты выполнения потоков - C++
Здравствуйте. Буду очень раз если поможете понять,что конкретно нужно сделать в вот этом задании,пока особого представления о...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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