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

Заменить массив структур на динамический список - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Хочу понять некоторые принципы работы SQlite http://www.cyberforum.ru/cpp-beginners/thread403111.html
Пишу серверную часть для игры на с++. Хочу использовать для хранения данных базу SQLite И меня волнуют некоторые вопросы - в частности, сама база данных при открытии помещается в оперативку? Если да, то, допустим у меня база данных игового мира на 10 гигабайт (например массив огромный).Мне нужно извлечь только 1 клетку из массива. Сможет ли SQLite вычислить её положение на жёстком диске и...
C++ Дополнить код. Две последовательности в конец массива. /*Работает по такому принципу: Вводишь элементы, например, 8 9 -4 -5 -4 5 8 -8 -5 4 5. Он переносит наибольшую последовательнось из отрицательных чисел в конец массива, т.е. все правильно. А если будет: 5 7 -5 -8 -4 5 4 -7 -5 -4 5 2 . Что нужно чтобы он этих две последоваельности перенес в конец массива. как?*/ // laba4.cpp : Defines the entry point for the console application. #include... http://www.cyberforum.ru/cpp-beginners/thread403102.html
C++ [C++] Решить за меня 4 задачи
Помогите решить , в субботу последний день зачета. 1)Для действительных значений a и b составить программу решения линейного уравнения ax=b. Если нет решения, напечатать “NO”, а если бесконечно много – “inf”. 2)Длина задана в дюймах (1 дюйм=2,54 см). Перевести ее в метрическую систему, т.е. выразить в метрах, сантиметрах и миллиметрах. Так, например, 21 дюйм = 0 м 53 см 3.4 мм. (Эту...
Переписать за меня программу с C# на С++ C++
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace saod_tree { class Program { static void Main(string args)
C++ Решить уравнение методом простых итераций http://www.cyberforum.ru/cpp-beginners/thread403077.html
Помогите решить уравнение х^4+2*x^3-x-1 на интервале #include <iostream> #include <math.h> using namespace std; //Функция double f (double x) //Функция { return (pow(x, 4.0)+2.0*pow(x, 3.0)-x-1.0);
C++ Протабулировать функцию Нужно написать программу в C++ подробнее

Показать сообщение отдельно
Валентин^_^
10 / 10 / 2
Регистрация: 15.10.2009
Сообщений: 119
09.12.2011, 20:01     Заменить массив структур на динамический список
Всем привет)
Есть задание: описать структуру с именем TRAIN, содержащую следующие поля:
• название пункта назначения;
• номер поезда;
• время отправления.
Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN; записи должны быть упорядочены по номерам поездов;
• вывод на экран информации о поезде, номер которого введён с клавиатуры;
• если таких поездов нет, выдать на дисплей соответствующее сообщение.


Сделать нужно два варианта: используя массив структур и динамические структуры данных.

С массивом-то все просто, код:
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
#include "stdafx.h"
#include <clocale>
#include <iostream>
 
using namespace std;
 
struct Train
{
    char *Destination;
    int TrainNumber;
    char *Time;
};
 
void init_train(Train &train);
void deinit_train(Train &train);
bool add_train(Train train[], int n, Train src);
void sort_train(Train train[], int n);
int search_train(Train train[], int n, int TrainNumber);
 
int main()
{
    setlocale(LC_ALL, "russian");
    const int n = 3;
    Train train[n];
 
    Train buf;
    init_train(buf);
    for(int i = 0; i < n; i++)
    {
        init_train(train[i]);
 
        cout << "Пункт назначения: ";
        cin >> buf.Destination;
        cout << "Номер поезда: ";
        cin >> buf.TrainNumber;
        cout << "Время отправления: ";
        cin >> buf.Time;
 
        if(!add_train(train, n, buf))
            return 0;
    }
    deinit_train(buf);
 
    sort_train(train, n);
 
    int train_number;
    cout << "Введите номер поезда для поиска: ";
    cin >> train_number;
 
    int index = search_train(train, n, train_number);
    if(index != -1) cout << train[index].Destination << " #" << train[index].TrainNumber << ": " << train[index].Time << endl << endl;
    else cout << "Ничего не найдено."; 
 
    for(int i = 0; i < n; i++)
        deinit_train(train[i]);
 
    system("pause");
    return 0;
}
 
void init_train(Train &train)
{
    train.Destination = new char[150];
    train.Destination[0] = '\0';
    train.TrainNumber = -1;
    train.Time = new char[20];
    train.Time[0] = '\0';
}
 
void deinit_train(Train &train)
{
    delete [] train.Destination;
    train.Destination = NULL;
    delete [] train.Time;
    train.Time = NULL;
}
 
bool add_train(Train train[], int n, Train src)
{
    for(int i = 0; i < n; i++)
    {
        if(train[i].TrainNumber == -1)
        {
            strcpy(train[i].Destination, src.Destination);
            train[i].TrainNumber = src.TrainNumber;
            strcpy(train[i].Time, src.Time);
            return true;
        }
    }
    return false;
}
 
void sort_train(Train train[], int n)
{
    Train buf;
    bool change;
    do
    {
        change = false;
        for(int k = 0; k < n - 2; k++)
        {
            if(train[k].TrainNumber > train[k + 1].TrainNumber)
            {
                buf.Destination = train[k].Destination;
                buf.TrainNumber = train[k].TrainNumber;
                buf.Time = train[k].Time;
 
                train[k].Destination = train[k + 1].Destination;
                train[k].TrainNumber = train[k + 1].TrainNumber;
                train[k].Time = train[k + 1].Time;
 
                train[k + 1].Destination = buf.Destination;
                train[k + 1].TrainNumber = buf.TrainNumber;
                train[k + 1].Time = buf.Time;
 
                change = true;
            }
        }
    }
    while(change);
}
 
int search_train(Train train[], int n, int TrainNumber)
{
    for(int i = 0; i < n; i++)
        if(train[i].TrainNumber == TrainNumber)
            return i;
    return -1;
}

А вот используя динамический список что-то не получается, посмотрите плиз, что не правильно делаю..
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
#include "stdafx.h"
#include <clocale>
#include <iostream>
 
using namespace std;
 
struct Train
{
    char *Destination;
    int TrainNumber;
    char *Time;
    Train *next;
};
 
void init_train(Train &train)
{
    train.Destination = new char[150];
    train.TrainNumber = -1;
    train.Time = new char[20];
}
 
void deinit_train(Train &train)
{
    delete [] train.Destination;
    train.Destination = NULL;
    delete [] train.Time;
    train.Time = NULL;
}
 
bool add_train(Train *&head, Train src)
{
    if(head == NULL)
    {
        head = new Train;
        head->Destination = src.Destination;
        head->TrainNumber = src.TrainNumber;
        head->Time = src.Time;
        head->next = NULL;
        return true;
    }
    else
    {
        Train *p = head;
        while(p->next != NULL)
            p = p->next;
        p->next = new Train;
        p->Destination = src.Destination;
        p->TrainNumber = src.TrainNumber;
        p->Time = src.Time;
        p->next->next = NULL;
        return true;
    }
    return false;
}
 
void sort_train(Train *head, int n)
{
    Train *p = head;
    Train *buf = NULL;
    bool change;
    do
    {
        change = false;
        for(int k = 0; k < n; k++)
        {
            if(p->TrainNumber > p->next->TrainNumber)
            {
                buf->next = p->next;
                p->next = p->next->next;
                p->next->next = buf->next;
 
                change = true;
            }
        }
    }
    while(change);
}
 
Train *search_train(Train *head, int TrainNumber)
{
    if(head == NULL) return NULL;
    Train *p = head;
    while(p != NULL && p->TrainNumber != TrainNumber)
        p = p->next;
    return p;
}
 
int main()
{
        setlocale(LC_ALL, "russian");
 
    const int n = 3;
 
    Train *head = NULL;
 
    Train buf;
    init_train(buf);
 
    for(int i = 0; i < n; i++)
    {
        cout << "Пункт назначения: ";
        cin >> buf.Destination;
        cout << "Номер поезда: ";
        cin >> buf.TrainNumber;
        cout << "Время отправления: ";
        cin >> buf.Time;
 
        if(!add_train(head, buf))
            return 0;
    }
 
    sort_train(head, n);
 
    int train_number;
    cout << "Введите номер поезда для поиска: ";
    cin >> train_number;
 
    cout << search_train(head, train_number)->Destination;
 
    system("pause");
        return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru