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

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

Войти
Регистрация
Восстановить пароль
 
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
#1

Списки - C++

25.10.2011, 21:57. Просмотров 307. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Помогите пожалуйста с программой....
Надо вывести список поездов , а потом вывести поезда которые отправляются в определенное время(к примеру: надо вывести поезда которые отправляются в 20.00) .
Заранее спасибо.


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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
// Lab3_9999.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <string.h>
 
 
using namespace std;
 
const  int str_size = 256;
 
struct nodes{
        char station[str_size];
        double time;
        double distance;
        int number;
        nodes* next;
};
 
class my_list{
        public:
                void insert(char* str); //Вставляет запись за текущей.
                void insert1(double* distim);
                void insert2(int* num);
                void del_next();                //Удаляет запись за текущей.
                void go_next();                 //Переходит к следующей записи.
                void go_first();                //Переходит к первой записи.
                const char* show();             //возвращает указатель на хранимые данные.
                int  size();                    //Возвращает количество элементов в списке.
                void screen();
 
                my_list();
                ~my_list();
        private:
                nodes*  head;                   //начало списка.
                nodes*  position;               //активная (текущая) запись.
                int     count;                  //количество элементов списка.
                
                void free();                    //удаляет все элементы, освобождает память
};
 
 
 
my_list::my_list(){
        head = NULL;
        count = 0;
        go_first();
}
 
my_list::~my_list(){
        free();
}
 
//public:
 
void my_list::insert(char* str){
//Вставляет запись за текущей.
        nodes* new_node = new nodes;
        strcpy(new_node->station,str);
        if(position != NULL){
                new_node->next = position->next;
                position->next = new_node;
        }else{
                new_node->next = new_node;
                position = head = new_node;
        }
        count++;
}
 
void my_list::insert1(double* distim){
//Вставляет запись за текущей.
        nodes* new_node = new nodes;
        new_node->time;
        new_node->distance;
        if(position != NULL){
                new_node->next = position->next;
                position->next = new_node;
        }else{
                new_node->next = new_node;
                position = head = new_node;
        }
        count++;
}
 
 
 
void my_list::insert2(int* num){
//Вставляет запись за текущей.
        nodes* new_node = new nodes;
        new_node->number;
        if(position != NULL){
                new_node->next = position->next;
                position->next = new_node;
        }else{
                new_node->next = new_node;
                position = head = new_node;
        }
        count++;
}
 
void my_list::del_next(){
//Удаляет запись за текущей.
        if (position != NULL){
                nodes* tmp = position->next;
                position->next = position->next->next;
                
                        if(tmp == head) head = tmp->next;
                delete tmp;
        }
        count--;
}
 
void my_list::go_next(){
//Переходит к следующей записи.
        if (position != NULL)
                position = position->next;
}
 
void my_list::go_first(){
//Переходит к первой записи.
        position = head;
}
 
const char* my_list::show(){
//возвращает указатель на хранимые данные.
        if(position != NULL)
                return position->station;
        else
                return NULL;
}
 
void my_list::screen()
{
    if(position != NULL)
        cout << position->number << "  " << position->time << " " << position->distance << endl;
    else
        cout << NULL << endl;
}
 
int my_list::size(){
//Возвращает количество элементов в списке.
        return count;
}
 
// private:
 
void my_list::free(){
//удаляет все элементы, освобождает память
        go_first();
        while(head->next != head) del_next();
        del_next(); 
}
 
 
 
 
 
 
int main()
{
        char name1[] = "Kiev";
        char name2[] = "Odessa";
        char name3[] = "Zaporojie";
        char name4[] = "Moskva";
        int number1[] = {5};
        int number2[] = {10};
        int number3[] = {20};
        int number4[] = {100};
        double time1 = 15.50;
        double time2 = 15.50;
        double time3 = 10.00;
        double time4 = 20.00;
        double dist1 = 150.00;
        double dist2 = 200.00;
        double dist3 = 250.00;
        double dist4 = 300.00;
        //создание списка студентов:
        my_list student_list;
        
    //добавляем записи в список.
        student_list.insert(name1); student_list.insert2(number1);
        student_list.insert(name2); student_list.insert2(number2);
        student_list.insert(name3); student_list.insert2(number3);
        student_list.insert(name4); student_list.insert2(number4);
 
        //вывод списка на консоль:
        student_list.go_first();
        for(int i = 1;i<=student_list.size();i++){
                std::cout<<student_list.show()<<std::endl;
                student_list.go_next();
        }
 
        //удаление первого элемента из трех:
        student_list.go_first();
        student_list.go_next();
        student_list.go_next();
        student_list.del_next();
        
        //вывод отредактированного списка на консоль:
        student_list.go_first();        
        for(int i = 1;i<=student_list.size();i++){
                std::cout<<student_list.show()<<std::endl;
                student_list.go_next();
        }
        
    system("pause");
    return 0;
}
[IMG]http://s017.***********/i437/1110/a2/f80ed06d117e.jpg[/IMG]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2011, 21:57     Списки
Посмотрите здесь:

Списки в С++ - C++
#include&lt;iostream.h&gt; #include &quot;time_1.h&quot; #include&lt;time.h&gt; #include&lt;windows.h&gt; char* Rus (const char* text); class List { ...

Списки - C++
Разработать ниже приведенную иерархию классов с объявлением объектов конечного производного класса с помощью конструкорив по умолчанию и...

Списки - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; struct list { int data; list *next; }; int...

списки С++ - C++
необходимо создать очередь(итеративный метод) с постановкой эл-ов в начало списка помогите плизз!!!! заранее спасибо:)

C++ списки - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;list&gt; using namespace std; int main(void) { list&lt; int &gt; l,...

Списки - C++
Даны 2 списка( из файлов) в третий список поместить те элементы из списка 1, для которых в списке 2 найдутся меньшие элементы! Прошу помочь...

Списки - C++
Здравствуйте, не могу в написать программу, обеспечивающую работу с двунаправленным нециклическим списком, где можно добавлять/удалять...

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

С++ списки - C++
драствуйте помиоогите решить програму :списки Построить список согласно заданной входной последовательности чисел, показывая динамику его...

Списки - C++
Составить функцию, подсчитывающую количество слов списка, которые начинаются и оканчиваются одной и той же литерой. Используя данную...

списки - C++
Организуйте помещение вводимых чисел в список, так чтобы получился список, упорядоченный по возрастанию помогите,пожалуйста,прошу...

Списки - C++
Помогите пожалуйста с задачей: В списке L найти такой элемент &quot;y&quot; (если существует), что &quot;y&quot; больше всех предыдущих и меньше всех...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
26.10.2011, 02:59     Списки #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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "stdafx.h"
#include <iostream>
#include <time.h>
#include <string>
 
using namespace std;
 
class poezd
{
    string name;
    int distance;
    double time_c;
    static int count;
public:
    poezd(const string &, int, double);
    void show();
    void addlist();
    static void find(int);
    static void showlist();
    static int getcount(){return count;}
    static poezd *head;
    poezd *next;
 
};
 
poezd::poezd(const string &o,int d, double t)
{
    name = o;
    distance = d;
    time_c = t;
    count ++;
}
 
 
void poezd::addlist()
{
if (!head) 
{
    head = this;
    this->next = NULL;
}
else
{
poezd * q=head;
 
if (q->next==NULL)
{
q->next=this;
this->next=NULL;
}
else
{
while (q->next!=NULL)
{
q=q->next;
};
q->next=this;
this->next=NULL;
};
}
}
 
void poezd::showlist()
{
    poezd *p = head;
    while(p!=NULL)
    {
        cout<<"Station: "<<p->name<<endl;
        cout<<"Distance: "<<p->distance<<endl;
        cout<<"Time: "<<p->time_c<<endl;
        cout<<endl;
        p = p->next;
 
    }
}
 
void poezd::find(int t)
{
    poezd *p = head;
    while(p!=NULL)
    {
        if(t<p->time_c)
        {
        cout<<"Station: "<<p->name<<endl;
        cout<<"Distance: "<<p->distance<<endl;
        cout<<"Time: "<<p->time_c<<endl;
        cout<<endl;
        }
        p = p->next;
 
    }
}
 
poezd *poezd::head = NULL;
int poezd::count = 0;
 
 
int main()
{
    
    poezd b("Varkuta",100500,20.00);
    poezd c("Moskva",12323,19.54);
    poezd d("Poland",123444,13.12);
    b.addlist();
    c.addlist();
    d.addlist();
    poezd::showlist();
    cout<<endl;
    cout<<poezd::getcount();
    cout<<endl;
    poezd::find(14.00);
    system("pause");
    return 0;
}
Или обязательно так как у Вас?
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
26.10.2011, 10:19     Списки #3
Sick2, не проще. это не грамотно. список есть список. это АТД. а поезд вполне конкретная сущность, которая не является списком. Оба кода конечно не грамотные. Но ваш неграмотен еще и в том, что список это сущность, которая должна состоять из узлов, а не как у вас.
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
26.10.2011, 14:46  [ТС]     Списки #4
спасибо огромное )

я первый раз делал иначе

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Lab3_Pravilnya.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
 
template <class Station, class Number, class Time, class Distance> class List
{
    struct Element
    {
        Station station;
        Time time;
        Distance distance;
        Number number;
        Element *next;        // указатель на следующий элемент списка
    };
 
    Element *pHead;           // указатель на первый элемент списка
    Element *pPrev;           // указатель на последний элемент списка
    int countElem;            // количество элементов в списке
 
  public:
  /*void best(List list)
  {
       if(list[0]->staff > list[1]->staff)
        cout << "The best is " << list[0]->name << endl;
  else cout << "The best is " << list[1]->name << endl;
  }*/
      void del(List){
//Удаляет запись за текущей.
         Element *temp=pHead;
double n = 15.50;
while(temp)
{
if (time == 15.50)
cout << " Time is " << time << endl;
else
cout << "Error" << endl;
 
temp=temp->next;
}
        countElem--;
}
 
    List(int)
    {
        pHead = NULL;
        pPrev = NULL;
        countElem = 0;
    }
 
    ~List()
    {
        while(pHead != NULL)
        {
            Element *pTemp = pHead;
            pHead = pHead->next;
            delete pTemp;
        }
    }
 
 
    void  add_front(Station station, Number number, Time time, Distance distance)
    {
        Element *temp = new Element;
        temp->next = pHead;
        pHead = temp;
        if(pPrev == NULL)
            pPrev = pHead;
        pHead->station = station;
        pHead->number = number;
        pHead->time = time;
        pHead->distance = distance;
        ++countElem;
    }
 
    void add_back(Station station, Number number, Time time, Distance distance)
    {
        Element *temp = new Element;
 
        if(pHead == NULL)
            pHead = temp;
        else
            pPrev->next = temp;
 
        temp->station = station;
        temp->next = NULL;
        pPrev = temp;
        countElem++;
    }
 
    void print()
    {
        Element *pTemp = pHead;
 
        while(pTemp != NULL)
        {
            cout << pTemp->station << ' ' << pTemp->number << ' ' << pTemp->time << ' ' << pTemp->distance << endl;
            pTemp = pTemp->next;
        }
 
 
    }
 
 
    bool IsEmpty()
    {
        if(countElem == 0)
            return true;
        else
            return false;
    }
 
};
 
int main(int argc, char* argv[])
{
     List <char*, int, double, double> list(4);
     list.add_front("Kiev", 5, 15.50, 150.5 );
     list.add_front("Odessa", 10, 15.50, 350.50 );
     list.add_front("Harkov", 100, 16.40, 500.00);
     list.add_front("Moskva", 200, 12.30, 1200.00);
     list.add_front("Zaporojie", 300, 17.40, 200.00);
     list.del();
     list.print();
     //list.best(list);
 
 
     system("pause");
    return 0;
}
Yandex
Объявления
26.10.2011, 14:46     Списки
Ответ Создать тему
Опции темы

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