0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 17
1

Необходимо создать связной список с записью в файл и восстановлением из файла

13.03.2014, 12:40. Показов 1223. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Народ выручайте. В задании необходимо создать связной список с записью в файл и восстановлением из файла. Со списком я более-менее разобрался, но я не пойму по КАКОМУ принципу происходит чтение/запись и каким образом это прикрутить. Подскажите зашиваюсь времени в обрез.
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
#include <iostream>
#include <stdio.h>
#include <string>
#include <locale>
 
 
using namespace std;
 
class STATE
{
    public:
    char countryName [128];
    char countryCapital [128];
    char countryLang [128];
    char countryPolitical [128];
    char countryMoney [128];
    char countryPopulation [128];
    char countryArea [128];
    char moneyTodollar [128];
 
    STATE* eNext;               // указатель на следующий элемент
};
 
STATE* eFirst=0;            //в начале список пуст
 
void addLast (STATE* eLast)     //функция добавления в конец списка
{
    
    eLast -> eNext=0;            // переходим на следующий элемент
    if (eFirst == 0)            // если первый элемент равен 0 (список пуст)
    {
        eFirst = eLast;         //присваеваем указателю на 1й элемент, значение на текущий элемент
        return;
    }
    
    STATE* eCurrent = eFirst;           // иначе задаем временный указатель на начало
    while (eCurrent -> eNext)           // пока не дойдем до последнего элемента
    {
        eCurrent = eCurrent -> eNext;            // цикл перехода с текущего на следующий элемент
    }
    eCurrent -> eNext = eLast;            //для последнего элемента следующим делаем тот, что передали в функцию
}
 
 
STATE* getData ()                          // функция возврата указателя на элемент для добавления
{
    
    STATE* eLast = new STATE;           //создаем новый элемент
    
    cout << "Название страны - " ;
    cin >> eLast -> countryName;
    
        if ((stricmp (eLast -> countryName, "end") == 0))           // при вводе "end"
        {                                                           
            delete eLast;                                          // удаляем элемент
            return 0;
        }
 
    cout << "Столица - ";                             // ВВОД ДАННЫХ В СПИСОК                      
    cin >> eLast -> countryCapital;
    
    cout << "Язык - ";
    cin >> eLast -> countryLang;
    
    cout << "Госстрой - ";
    cin >> eLast -> countryPolitical;
    
    cout << "Денежная единица - ";
    cin >> eLast -> countryMoney;
    
    cout << "Численность наседения млн.чел.- ";
    cin >> eLast -> countryPopulation;
    
    cout << "Площадь территории кв.км.- ";
    cin >> eLast -> countryArea;
    
    cout << "Курс валют за 1$ - ";
    cin >> eLast -> moneyTodollar;    
    
    eLast -> eNext = 0;              // данных больше нет
    return eLast;
}
 
 
 
void showData (STATE* eLast)            // функция вывода данных на экран
{
 
    cout << eLast -> countryCapital
         <<"/ "
         << eLast -> countryLang 
         <<"/ "
         << eLast -> countryPolitical 
         <<"/ "
         << eLast -> countryMoney
         <<"/ "
         << eLast -> countryPopulation
         <<"/ "
         << eLast -> countryArea
         <<"/ "
         << eLast -> moneyTodollar
         <<" for 1$/" << endl;
}
 
int main (int argc, char* eArgc[])
{
    
    setlocale (LC_ALL, "Russian");
 
    cout << "Enter data" << endl 
         << "Enter 'end' for close" <<"\n \n" << endl;
         
    STATE* eLast;                               // указатель на элемент списка
    while (eLast = getData())               // пока не будет введена команда "end"
    {
        addLast (eLast);                    // добавление элементов в конец списка
    }
    cout << "ГОСУДАРСТВО:" <<"\n"<< endl;
    eLast = eFirst;                       // определяем начало списка
    while (eLast)
    {
        showData (eLast);               // вывод содержимого списка по полям каждого элемента
        eLast = eLast -> eNext;         // переход на следующий элемент
    }
    system ("PAUSE");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2014, 12:40
Ответы с готовыми решениями:

Создать связной список с добавлением числа перед заданным
Помогите пожалуйста Мне нужно зделать связной список с додаванием числа перед заданым есть...

Перед выполнением задания необходимо создать в рабочей папке файл SIMP.FOR. Создать командный файл с именем _E
Перед выполнением задания необходимо создать в рабочей папке файл SIMP.FOR. Создать командный файл...

Необходимо создать список, элемент которого может быть список
Всем доброго времени суток! Стоит следующая задача: необходимо создать список, элемент которого...

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

3
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
13.03.2014, 13:09 2
C++
1
2
#include <ifstream>
#include <fstream>
Дальше..
C++
1
2
3
4
5
6
int main() {
 
ifstream input; // инпут функция.
ofstream output; // оутпут функция.
input.open("file.txt");
output.open("output.txt");
чтение из файла:

C++
1
2
3
4
5
6
7
8
9
10
int NUM_OF_FILE = 0;
 
while(!input.eof()) {
string str;
getline(input, str);
//NUM_OF_FILE++; // подсчитать кол-во чисел в файле
//cout << str << endl; // показать инпут дату(прямо в консоли)
//output << str << endl; // отпутить данные из файла в output.txt
}
// cout << NUM_OF_FILE << endl; // показать кол-во чисел в файле.
C++
1
 }
1
0 / 0 / 0
Регистрация: 11.02.2014
Сообщений: 17
15.03.2014, 15:09  [ТС] 3
Esecman, спс за наводку. По самим командам вроде как все понятно, понятно как написать две програмки одну для чтения, другую для записи файла. Но я не пойму как прикрутить чтение/запись файла в свою программу. По какому принципу?
Т.е. допустим для записи данных в файл после строки
C++
1
cin >>  eLast -> countryName;
добавить
C++
1
input >> countryName;
Или я неправильно понял?
0
39 / 27 / 12
Регистрация: 31.12.2013
Сообщений: 329
15.03.2014, 20:27 4
Лучший ответ Сообщение было отмечено SARS как решение

Решение

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
#include <iostream>
#include <fstream>
 
using namespace std;
 
void read_file() {
       
  ofstream output;
  output.open("output.txt"); // êóäà îóòïóòèòü
  FILE* file;
  file = fopen("data.txt", "r"); // ÷òåíèå, ôëàã "r"
  float i = 0;
  int NUM_OF_FILE = 0;
  
  if(!file) {
  perror("File not found!");
  }
  else {
  while(!feof(file)) {
  fscanf(file, "%f", &i);
  NUM_OF_FILE++;
  cout << i << endl; // ÷òåíèå èç ôàéëà è âûâîä
  output << i << endl; // îóòïóòèì ýòîò âûâîä â ôàéë output.txt
  }
  cout << "The number of integers in the file is " << NUM_OF_FILE << endl; // ïîêàçàòü êîëè÷åñòâî ÷èñåë â ôàéëå(input);
  }  
}
 
int main () {
 
  read_file();
  system("pause");
  return 0;
}
Добавлено через 5 минут
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
void read_file() {
       
  ifstream input;
  ofstream output;
  
  input.open("data.txt"); // âõîä
  output.open("output.txt"); // êóäà îóòïóòèòü
  
  int i = 0;
  float n[i];
  int NUM_OF_FILE = 0;
  
  if(!input) {
  perror("File not found!");
  }
  
  else {
       
  while(!input.eof()) {
  input >> n[i];
  output << n[i] << endl;
  NUM_OF_FILE++;
  }
  
  }
  
  cout << "The number of integers in the file is " << NUM_OF_FILE << endl;
}
 
int main () {
 
  read_file();
  system("pause");
  return 0;
}
Или вот этот пример, немного меньше кода, тут вариант записи в массив и оутпут
1
15.03.2014, 20:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2014, 20:27
Помогаю со студенческими работами здесь

Создать новый текстовый файл, содержащий список ip без повторений из исходного файла
Дан текстовый файл со статистикой посещения сайта за неделю. Имеется 10 строк(10 посещений)....

Создать скрипт с записью данных в файл
Привет всем! Помогите разобораться Необходимо: Создать скрипт, который находит все файлы в...

Связной список в Си++
Помогите организовать связной список. Здание:Организовать связной список, хранящий фамилии по...

Связной список
Вывод не работает, помогите найти проблему и можно как-нибудь через freopen осуществить ввод? ...

Связной список и сортировка
Помогите написать прогу: Реализующую связный список с информацией о сотрудниках и отображающую...

Построить связной список
Построить связной список, содержащий в качестве данных информацию о студентах: № зачетной книжки,...


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

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

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