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

Односвязный список, запись и чтение из файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ прога при компиляции ругаеться на "unit1.h" http://www.cyberforum.ru/cpp-beginners/thread308854.html
вся проблема в том,что у меня єтого файла нет,так как прога с нета качаная.можно ли его как нить востановить?? #include <vcl.h> #pragma hdrstop #include «Unit1.h» // – #pragma package (smart_init) #pragma resource «*.dfm» #include<math.h>
C++ Подсчитывание количество марок в коллекции День добрый. задали сделать задачу на 2х языках программирования( на паскале и на си). на паскале я сделал, на си не могу( так только начинающий). помогите сделать эту программу на языке СИ. благодарю. ЭВМ используется при разборе коллекции марок. Составить программу, подсчитывающую число марок по спорту, по искусству и прочих. Подсчитать общее количество марок в коллекции. Использовать... http://www.cyberforum.ru/cpp-beginners/thread308139.html
не работают условия кроме sravnenie[i].kozer==1 && sravnenie[j].kozer==1 C++
int sravnenie_kart_v_massive_sravnenie(KARTA *kart,KARTA *sravnenie,int *nsravnenie,int *sravnenie11,int *sravnenie12,int *fsravnenie) {int n,i,j,f1=0,f2=0; n=0; for(i=*sravnenie11;i<9 && f1==1;i=i+2) for(j=*sravnenie12;j<10 && f2==1;j=j+2) if(sravnenie.kozer==5 && sravnenie.kozer==1) {n=n+1; f1=1; f2=1; printf("%d пара карт бита\n",n);
Работа с классами по матрице C++
8. В (0, 1)-матрице подсчитать число изолированных 0-областей, т.е. областей, состоящих из одних нулей. Отметим, что 0-область может состоять не только из одного нулевого элемента. Например, для (0, 1)-матрицы вида А5х5 : 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 1 0 1 1 0 1 0 1 1 0 таких областей будет три, эти области я отмечу 2ками чтобы было понятно 1 2 1 2 2 1 1 1 1 2 2 2 2 1 2
C++ СЛАУ методом Гаусса с поиском главного элемента http://www.cyberforum.ru/cpp-beginners/thread307038.html
Вот наконец написал курсовую. Каряво, грубо, но собственными силами, чем собственно и горжусь) Программа считает СЛАУ методом Гаусса (с поиском главного элемента по строке). Считает все отлично, находит корни и тд. Проблема: препад захотел, что бы в програмулине был ввод с файла. Дело в том, что массивы я использую статические, а везде где не искал в основном описывают ввод/вывод динамических...
C++ нужно составить программу. Всем привет,люди знающие хорошо с++ помогите написать программу. С внешнего устройства (с клавиатуры, из файла) вводятся последовательно числа, количество которых велико и заранее неизвестно. Требуется сохранять и в процессе ввода каждого числа распечатывать не более m последних введенных чисел (в порядке их поступления). Сам пробывал,что-то вообще не получается. Заранее благодарен. подробнее

Показать сообщение отдельно
UKOL
 Аватар для UKOL
112 / 64 / 7
Регистрация: 17.11.2009
Сообщений: 258
31.05.2011, 11:16     Односвязный список, запись и чтение из файла
Здравствуйте уважаемые форумчане.

Имееться реализация односвязного списка из книги Дейтлов "Как программировать на С++"

Нужно сделать запись, чтение и просмотр из файла, т.е. файл использовать как базу данных.
Почему то не могу справиться с этим заданием, прошу вашей помощи. Программа реализует телефонный справочник.

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
// test.cpp
// Тестовая программа для класса List.
#include <iostream>
#include <string.h>
#include <fstream>
#include <cstdlib>
 
using namespace std;
#include "List.h"   // определение класса List
 
// функция для тестирования списка
template <typename T>
void testList(List <T> &listObject, const string &typeName)
{
    cout << "Добро пожаловать в телефонный справочник!\n";
    instructions(); // вывести инструкции
    fstream File_db;
    int choice; // хранит выбор пользователя
    T fio;  // хранит ФИО абонента
    T telephone; // хранит номер телефона абонента
    const int size = 80;
    do //   произвести действия, выбранные пользователем
    {
        cout << "Ваш выбор: ";
        cin >> choice;
 
        switch(choice)
        {
        case 1:     // вставить в начало
            cout << "Введите ФИО абонента: ";
            cin >> fio;
            cout << "Введите телефон абонента: ";
            cin >> telephone;
            listObject.insertAtFront(fio, telephone);
            listObject.print();
            break;
        case 2:     // вставить в конец
            cout << "Введите ФИО абонента: ";
            cin >> fio;
            cout << "Введите телефон абонента: ";
            cin >> telephone;
 
            listObject.insertAtBack(fio, telephone);
            listObject.print();
            break;
        case 3:     // удалить из начала
            if(listObject.removeFromFront(fio, telephone))
                cout << "Абонент " << fio << " с номером " << telephone << " был удален из списка\n";
            listObject.print();
            break;
        case 4:     // удалить из конца
            if(listObject.removeFromBack(fio, telephone))
                cout << "Абонент " << fio << " с номером " << telephone << " был удален из списка\n";
            listObject.print();
            break;
        case 5:     // просмотрть список
            listObject.print();
            break;
        }   // конец switch
    }   while (choice != 6);    // конец do...while
 
    cout << "Досвидания!\n\n";
}   // конец функции testList
 
// вывести инструкции для пользователя программы
void instructions()
{
        cout << "Выберите действие: \n"
             << "   1 для того чтобы вставить в начало списка\n"
             << "   2 для того чтобы вставить в конец списка\n"
             << "   3 для того чтобы удалить из начала списка\n"
             << "   4 для того чтобы удалить с конца списка\n"
             << "   5 для того чтобы просмотреть список\n"
             << "   6 завершить работу со справочником\n";
}   // конец функции instructions
 
int main()
{
    setlocale(LC_ALL, "russian");
 
    // протестировать список значений string
    List <string> charList;
    testList(charList, "char");
 
    return 0;
}   // конец 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
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
// List.h
// Определение шаблона класса List.
#ifndef LIST_H
#define LIST_H
 
#include <iostream>
#include <iomanip>
#include <string>
 
using namespace std;
 
#include "ListNode.h"   // определение класса ListNode
 
template < typename NODETYPE >
class List
{
public:
    List();             // конструктор
    ~List();            // деструктор
    void insertAtFront( const NODETYPE &, const NODETYPE &);  // вставить до
    void insertAtBack( const NODETYPE &, const NODETYPE &); // вставить после
    bool removeFromFront(NODETYPE &, NODETYPE &);       // удалить до
    bool removeFromBack(NODETYPE &, NODETYPE &);        // удалить после
    bool isEmpty() const;                   // проверить список пустой ли
    void print() const;                     // вывести
 
private:
    ListNode < NODETYPE > *firstPtr;    // указатель на первый узел
    ListNode < NODETYPE > *lastPtr;     // указатель на последний узел
 
    // сервисная функция для выделения памяти нового узла
    ListNode <NODETYPE> *getNewNode(const NODETYPE &, const NODETYPE &);
};  // конец класса List
 
// конструктор по умолчанию
template < typename NODETYPE >
List < NODETYPE >::List()
    : firstPtr(0), lastPtr(0)
{
    // пустое тело
}   // конец конструктора List
 
// деструктор
template < typename NODETYPE>
List < NODETYPE >::~List()
{
    if(!isEmpty()) // список не пуст
    {
        //cout << "Destroying nodes ... \n";
 
        ListNode < NODETYPE > *currentPtr = firstPtr;
        ListNode < NODETYPE > *tempPtr;
 
        while(currentPtr != 0)  // удалить оставшиеся узлы
        {
            tempPtr = currentPtr;
            cout << tempPtr->data_fio << " ";
            cout << tempPtr->data_tel << '\n';
            currentPtr = currentPtr->nextPtr;
            delete tempPtr;
        }   // конец while
    } // конец if
 
    //cout << "All nodes destroyed\n\n";
}   // конец конструктора List
 
// вставить узел в начало списка
template < typename NODETYPE >
void List < NODETYPE >::insertAtFront( const NODETYPE &fio, const NODETYPE &telephone)
{
    ListNode < NODETYPE > *newPtr = getNewNode(fio, telephone); // новый узел
 
    if(isEmpty()) //список пуст
    {
        firstPtr = lastPtr = newPtr;    // список имеет всего один узел
    }
    else    // List is not empty
    {
        newPtr->nextPtr = firstPtr;     // новый указывает на предыдущий
        firstPtr = newPtr;              // направить firstPtr на новый узел
    } // конец else
}   // конец функции insertAtFront
 
// вставить узел в конец списка
template < typename NODETYPE>
void List < NODETYPE >::insertAtBack(const NODETYPE &fio, const NODETYPE &telephone)
{
    ListNode < NODETYPE > *newPtr = getNewNode(fio, telephone); // новый узел
 
    if(isEmpty())   // список пуст
        firstPtr = lastPtr = newPtr;    // список имеет всего один узел
    else    // список не пуст
    {
        lastPtr->nextPtr = newPtr;  // обновить бывший последний узел
        lastPtr = newPtr;           // новый последний узел
    }   // конец else
}   // конец функции inserAtBack
 
// удалить узел из начала списка
template < typename NODETYPE >
bool List < NODETYPE >::removeFromFront(NODETYPE &fio, NODETYPE &telephone)
{
    if(isEmpty())   // список пуст
        return false;   // неудачное удаление
    else
    {
        ListNode < NODETYPE > *tempPtr = firstPtr;  // для удаления
 
        if (firstPtr == lastPtr)
            firstPtr = lastPtr = 0; // после удаления узлов нет
        else
            firstPtr = firstPtr->nextPtr;   // направить на бывший 2-й узел
 
        fio = tempPtr->data_fio;                // возвратить удаляемые данные
        telephone = tempPtr->data_tel;
        delete tempPtr; // освободить удаленный первый узел
        return true;    // удачное удаление
    } // конец else
} // конец функции removeFromFront
 
// удалить узел из конца списка
template < typename NODETYPE >
bool List < NODETYPE >::removeFromBack( NODETYPE &fio, NODETYPE &telephone)
{
    if ( isEmpty() ) // список пуст
        return false;   // неудачное удаление
    else
    {
        ListNode < NODETYPE > *tempPtr = lastPtr;   // для удаления
 
        if (firstPtr == lastPtr)    // в списке один элемент
            firstPtr = lastPtr = 0; // после удаления узлов нет
        else
        {
            ListNode < NODETYPE > *currentPtr = firstPtr;
 
            // locate second-to-last element
            while(currentPtr->nextPtr != lastPtr)
                currentPtr = currentPtr->nextPtr;   // перейти к следующему
 
            lastPtr = currentPtr;   // удалить последний узел
            currentPtr->nextPtr = 0;    // теперь это последний узел
        }   // конец else
 
        fio = tempPtr->data_fio;    // возвратить данные бывшего последнего
        telephone = tempPtr->data_tel;
        delete tempPtr; // освободить бывший последний узел
        return true;    // удачное удаление
    } // конец else
}   // конец функции removeFromBack
 
// список пуст?
template <typename NODETYPE >
bool List <NODETYPE>::isEmpty() const
{
    return firstPtr == 0;
}   // конец функции isEmpty
 
// возвратить указатель на вновь выделенный узел
template <typename NODETYPE>
ListNode <NODETYPE> *List <NODETYPE>::getNewNode(
    const NODETYPE &fio, const NODETYPE &telephone)
{
    return new ListNode <NODETYPE> (fio, telephone);
}   // конец функции getNewNode
 
// вывести содержимое списка
template <typename NODETYPE>
void List <NODETYPE>::print() const
{
    if(isEmpty() )  // список пуст
    {
        cout << "Список пуст!\n\n";
        return;
    }   // конец if
 
    ListNode <NODETYPE> *currentPtr = firstPtr;
 
    cout << "Список : \n";
 
    while(currentPtr != 0)  // получить данные элемента
    {
        cout << currentPtr->data_fio << ' ' << currentPtr->data_tel << endl;
        currentPtr = currentPtr->nextPtr;
    }   // конец while
 
    cout << "\n\n";
}   // конец функции print
 
#endif
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
// ListNode.h
// Определение шаблона класса ListNode.
#ifndef LISTNODE_H
#define LISTNODE_H
 
// Опережающее объявление класса List необходимо, чтобы List
// можно было использовать в объявлении дружественности в строке 13
template < typename NODETYPE > class List;
 
template < typename NODETYPE >
class ListNode
{
    friend class List < NODETYPE >; // сделать List другом
 
public:
    ListNode( const NODETYPE &, const NODETYPE &);  // конструктор
    NODETYPE getData() const;       // возвратить данные в узле
private:
    NODETYPE data_fio;              // данные
    NODETYPE data_tel;
    ListNode < NODETYPE> *nextPtr;  // следующий узел в списке
};                                  // конец класса ListNode
 
// конструктор
template < typename NODETYPE >
ListNode < NODETYPE >::ListNode( const NODETYPE &info, const NODETYPE &tele)
    : data_fio(info),  data_tel(tele), nextPtr(0)
{
    // пустое тело
}   // конец конструктора ListNode
 
// возвратить копию данных в узле
template < typename NODETYPE >
NODETYPE ListNode < NODETYPE >::getData() const
{
    return data_fio;
}   // конец функции getData
 
#endif
Вложения
Тип файла: zip list.zip (9.15 Мб, 31 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru