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

Лабораторная по структурам и указателям - C++

Восстановить пароль Регистрация
 
nesstar
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
17.04.2010, 21:31     Лабораторная по структурам и указателям #1
Доброго времени суток. Скорее моя проблема в чем то простом для Вас(сам я никогда до этого не имел дела с С++ ) . После C# мне не понятно как работать здесь с памятью, знаю только что функция не может вернуть массив, попытался выкрутиться с помощью указателя - ошибка выполнения ... Задача такова - определить структуру для сохранения информации об успеваемости студентов первокурсников в течении зимней сессии, в которой студенты сдали 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
 struct student 
  {
      string name;
      unsigned num,math,phys,biol,chem;
  };
 struct student Create()
 {
     struct student x;
     cout << "Iput Name: ";
     cin >> x.name;
     cout << "\nInput number: ";
     cin >> x.num;
     cout << "\nInput mark of mathematics: ";
     cin >> x.math;
     cout << "\nInput mark of physics: ";
     cin >> x.phys;
     cout << "\nInput mark of biology: ";
     cin >> x.biol;
     cout << "\nInput mark of chemistry: ";
     cin >> x.chem;
     return x;   
 }
 struct student*  CreateGroup()
  {
        
      unsigned n;
      cout << "Input n: ";
      cin >> n;
      
      struct student *group;
      group = (struct student*) calloc(n,sizeof(struct student));
      for (int i=0;i<n;i++)
       {
             *(group+i)=Create(); // Тут и выбивает ошибку 
       }
      
      return group ;      
  }
  void faund(struct student* group )
  {
       system("PAUSE");
       struct student *flag = group;
       for (int i=0;i<sizeof(group);i++)
       {
           if (((*(group+i)).math+(*(group+i)).phys+(*(group+i)).biol+(*(group+i)).chem)<((*(group + i+1)).math+
           (*(group + i+1)).phys + (*(group + i+1)).biol+(*(group + i+1)).chem))
           flag = (group+i);
       }
       cout << "The best student is "<< (*flag).name;
  }
 main()
  {
      faund(CreateGroup());
      system("PAUSE");
  }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2010, 21:31     Лабораторная по структурам и указателям
Посмотрите здесь:

C++ Вопрос по указателям
C++ Вопрос по указателям
C++ Поясните по указателям
C++ обращения к указателям
C++ дайте задание по структурам и указателям
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
17.04.2010, 23:49     Лабораторная по структурам и указателям #2
Цитата Сообщение от nesstar Посмотреть сообщение
Доброго времени суток. Скорее моя проблема в чем то простом для Вас(сам я никогда до этого не имел дела с С++ ) . После C# мне не понятно как работать здесь с памятью, знаю только что функция не может вернуть массив, попытался выкрутиться с помощью указателя - ошибка выполнения ... Задача такова - определить структуру для сохранения информации об успеваемости студентов первокурсников в течении зимней сессии, в которой студенты сдали 4 экзамена. Написать функцию, которая возвращает имя студента с наилучшей средней успеваемостью.
структура объявляется 1 раз перед функцие мейн и все, потом писать "struct student" не надо, достаточно написать "student x" (теперь переменная х у нас структурированного типа

покажу как я делал лабораторные со структурами:
C++
1
2
3
4
5
6
7
8
struct pokupatel//создание структуры
{
    string family;
    string name;
    string fathership;
    unsigned int nomer;
    double schet;
};
далее записывал данные, полученные с клавиатуры в контейнер (вектор) и возвращал его
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
vector<pokupatel> read(int n)//создание структурированного вектора типа "покупатель" с клавиатуры
//n-число покупателей, задаваемых в мейне
{
    vector<pokupatel> f1;
    for(int i=0;i<n;i++)
    {
        pokupatel temp;//переменная структурированного типа
        cout<<"Введите фамилию покупателя: ";
        cin>>temp.family;
        cout<<"Введите имя покупателя: ";
        cin>>temp.name;
        cout<<"Введите отчество покупателя: ";
        cin>>temp.fathership;
        cout<<"Введите номер кридитки: ";
        cin>>temp.nomer;
        cout<<"Введите счет покупателя: ";
        cin>>temp.schet;
        f1.push_back(temp);
    }
    return f1; 
}
почти также создавать структурированный вектор можно из файла (открываешь файл и также поэлементо загрузаешь в какую нить переменную и записываешь в вектор)

для вывода вектора использовал вот эту функцию
C++
1
2
3
4
5
6
7
void Display(const vector <student> &f1)//передаем в функцию дисплей вектор структ. типа по ссылке
{
        int n=f1.size();
        for (int i=0; i< n; i++)
        cout<<i+1 <<" -й элемент структуры\n"<< f1[i].family << "\n" << f1[i].name;
        cout<<f1[i].fathership <<"\n"<<f1[i].nomer<<'\n'<< f1[i].schet<<endl;
}
ну вот как то так=) могу целую лабу скинуть, если надо
nesstar
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
18.04.2010, 02:36  [ТС]     Лабораторная по структурам и указателям #3
могу целую лабу скинуть, если надо
был бы признателен ))) у меня возникла трудность с етим "вектором" в мейне(как именно его использовать ?).


Это решение проблемы с массивом но у меня задание ещо и указатели сюда тулить (((
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
18.04.2010, 10:06     Лабораторная по структурам и указателям #4
лабораторная работа №11
Постановка задачи;
1. Написать функцию для формирования вектора из элементов структурного типа. Структурный тип определен в варианте. Данные получить из заранее подготовленного файла In.txt, содержащего не менее 15 записей в соответствующем формате.
2. Написать функцию для вывода вектора на экран и вывести вектор, полученный в результате вы-полнения задания 1 на экран. Функция вывода должна сообщать количество элементов в векторе и нумеровать записи, начиная с 1.
3. Написать функцию поиска элементов вектора, удовлетворяющих заданным условиям. Элементы первого вектора, удовлетворяющие условию отбора, записать в новый вектор и вывести его на эк-ран.
4. Написать функцию для вывода вектора в файл и вывести в файл Search.txt результаты поиска. В качестве параметров функция должна принимать вектор и имя файла. Имя файла должно представ-лять собой массив символов (char[])
5. Написать функцию для обработки вектора в соответствии с заданием своего варианта. Преобра-зовать первый вектор и результаты вывести в файл Out.txt. Преобразовать второй вектор и вывес-ти результаты на экран.
Вариант №10
struct pupil
{
string name;
int age;
float rating
};
параметр для поиска:Ученики, у которых фамилия или имя начинается с указанных буквосочетаний
Задание для обработки вектора структур: Удалить самого старшего ученика
программа создает по адресу c:\\in.txt файла с именами,фамилиями и случайными числами как в структуре
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
210
211
212
213
214
215
216
217
218
219
220
221
222
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <ctime>
using namespace std;
struct pupil
{
    string name;
    int age; 
    float rating;
};
void file(char file1[])//создание файла с именами, фамилиями и случайными возрастом и рейтингом
{
    string len;
    ofstream f1;                            
    f1.open(file1);                 
    if (f1.is_open()) 
    {
        for(int i=0; i<15; i++)
        {
            switch(i)
            {
            case 0: len="Pavel Petrov";break;
            case 1: len="Ivan Eremin";break;
            case 2: len="Egor Ivanov";break;
            case 3: len="Afanasiy Malikov";break;
            case 4: len="Valeriy Mitin";break;
            case 5: len="William Baldwin";break;
            case 6: len="Robert Cecil";break;
            case 7: len="Ralph Dennis";break;
            case 8: len="Richard Godfrey";break;
            case 9: len="John Johnes";break;
            case 10: len="James Bond";break;
            case 11: len="Peter Henry";break;
            case 12:len="Nikole Owen";break;
            case 13: len="Amanda Reynolds";break;
            case 14: len="Megan Fox";
            }
            if (i==14)
            {
                f1<<len<<endl;
                f1<<rand()%10+15<<endl;
                f1<<rand()%100;
            }
            else 
            {
                f1<<len<<endl;
                f1<<rand()%10+15<<endl;
                f1<<rand()%100<<endl;
            }
        }
    }
    f1.close();
}
vector<pupil> Read(char file1[])//функция для формирования вектора из элементов структурного типа
{
    vector<pupil> V1;
    ifstream f2(file1);
    if (f2.is_open())
    {
        while (!f2.eof())
            {
                pupil temp;
                string str, str1;
                f2>> str;
                str+=" ";
                f2>>str1;
                str+=str1;
                temp.name=str;
                f2 >> temp.age;
                f2 >> temp.rating;
                V1.push_back(temp);
            }
    }
   f2.close();
   return V1;
}
void Display(const vector<pupil> &V)//вывод вектора струкутрного типа на экран
{
    cout << "\n=================================================\n";
    int n=V.size();
    for (int i=0; i< n; i++)
        cout<<i+1<<".name: "<<V[i].name<<"\n  age: "<< V[i].age<<"\n  rating: "<<V[i].rating<<endl;  
    cout << "Общее количество: " << n << endl;
}
vector<pupil> poisk(const vector<pupil> &V, string str)//функция поиска элементов вектора 
{
    vector<pupil> V1;
    int n=V.size();
    for(int i=0;i<n;i++)
    {
        string s=V[i].name;
        string::size_type found=s.find(str,0);
        if( found != string::npos) 
        {
            pupil temp;
            temp.name=V[i].name;
            temp.age=V[i].age;
            temp.rating=V[i].rating;
            V1.push_back(temp);
        } 
        
    }
   return V1;
}
 
void in_file(char file2[], vector<pupil> &V1)//элементы, которые были найдены, записываются в файл Search
{
    ofstream f1(file2);
    if (f1)
    {
        int n=V1.size();
        for(int i=0; i<n; i++)
        {
            f1<<V1[i].name;
            f1<<endl;
            f1<<V1[i].age;
            f1<<endl;
            f1<<V1[i].rating;
            f1<<endl;
        }
    }
    f1.close();
}
void obrabotka1(vector<pupil> &V,char file3[])//функция для обработки вектора 1
{
    ofstream f3(file3);
    if (f3)
    {
        int n=V.size();
        int t;
        vector<int> Age;
        for(int i=0;i<n;i++)
        {
            t=V[i].age;
            Age.push_back(t);
        }
        sort( Age.begin(), Age.end() );//сортировка вектора
        int m=Age.size();
        t=Age[m-1];
        for(int i=0; i<n;i++)
        {
            if (t==V[i].age)
            {
                f3<<V[i].name;
                f3<<endl;
                f3<<V[i].age;
                f3<<endl;
                f3<<V[i].rating;
                f3<<endl;
                V.erase(V.begin()+i, V.begin()+i+1);//удаление старшего ученика
                n--;
                i--;
            }
        }
    }
    f3.close();
}
void obrabotka2(vector<pupil> &V1)//функция для обработки вектора 1
{
        int n=V1.size();
        int t;
        vector<int> Age;
        for(int i=0;i<n;i++)
        {
            t=V1[i].age;
            Age.push_back(t);
        }
        sort( Age.begin(), Age.end() );//сортировка вектора
        int m=Age.size();
        t=Age[m-1];
        for(int i=0; i<n;i++)
        {
            if (t==V1[i].age)
            {
                V1.erase(V1.begin()+i, V1.begin()+i+1);//удаление старшего ученика
                n--;
                i--;
            }
        }
}
int main()
{
    setlocale(0, "russian");
    srand((unsigned)time(0));
    string str;
    char file1[] = "c:/in.txt", file2[] = "c:/Search.txt", file3[] = "c:/Out.txt";
    file(file1);//создание файла с именами, фамилиями и случайными возрастом и рейтингом
    vector <pupil> V=Read(file1);//функция для формирования вектора из элементов структурного типа
    Display(V);//вывод вектора струкутрного типа на экран
    cout<<"\nПараметр для поиска:\nУченики, у которых фамилия или имя начинается с указанных буквосочетаний";
    cout<<"\nУкажите буквосочитания: ";
    cin>>str;
    vector<pupil> V1=poisk(V, str);//функция поиска элементов вектора 
    int n=V1.size();
    if (n>0)
        Display(V1);//вывод вектора струкутрного типа на экран
    else 
        cout<<"\nИскомое буквосочитание не найдено\n";
    in_file(file2,V1);// функция для вывода вектора в файл 
    
    //Удалить самого старшего ученика
    obrabotka1(V,file3);//функция для обработки вектора 1
    n=V1.size();
    if (n==0)
        cout<<"\nВектор пуст. Из него нечего удалять\n";
    else 
    {
        obrabotka2(V1);//функция для обработки вектора 2
        n=V1.size();
        if(n==0)
            cout<<"\nПреобразованный вектор пуст\n";
        else 
            Display(V1);
    }
    cout<<endl;
 
system("pause");
return 0;
}
тут и комменты прилагаются=)

лабораторная работа №16
работа с бинарными файлами
Нужно:
1. Написать функцию для заполнения вектора структурированными данными.
2. Написать функцию для создания двоичного файла со структурированными данными (параметры функции – вектор структур и имя файла).
3. Написать функцию для вывода содержимого двоичного файла на экран (параметр функции – имя файла)
4. Написать функцию для удаления из файла данных в соответствии с вариантом. Предусмотреть возможность записи удаляемых элементов в другой файл – текстовый. Для этого использовать функцию с параметрами по умолчанию: если указано имя файла, куда следует заносить удаляемую информацию, то удаляемые данные заносятся в указанный файл, в противном случае удалять бесследно. Значением функции является число удалённых элементов, параметрами – имена файлов.
5. Вывести измененный двоичный файл на экран.
6. Добавить в файл данные в соответствии с вариантом (написать соответствующую функцию).
7. Вывести измененный файл на экран.
8. Написать функцию, выполняющую замену указанной записи (в зависимости от варианта параметром является номер записи или признак записи, подлежащей замене)
9. Вывести измененный файл на экран.
вариант №8
Структура "Покупатель":
- фамилия, имя, отчество;
- номер кредитной карточки
- состояние счёта (в рублях)
Уаление:
Удалить записи, в которых на счету менее 500 рублей.
Добавление:
Добавить N элементов с номером К в конец файла
Замена:
Заменить все записи с номером кредитки меньше указанного на последнюю запись
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <ctime>
using namespace std;
struct pokupatel
{
    string family;
    string name;
    string fathership;
    unsigned int nomer;
    double schet;
};
void createfile(char file1[])//создание файла с именами, фамилиями и случайными номерами кридитных карточек и счетами
{
    string len;
    ofstream f1;                            
    f1.open(file1);                 
    if (f1.is_open()) 
    {
        for(int i=0; i<15; i++)
        {
            switch(i)
            {
            case 0: len="Petrov Pavel Pavlovich";break;
            case 1: len="Eremin Ivan Ivanovich";break;
            case 2: len="Ivanov Egor Vasilich";break;
            case 3: len="Malikov Afanasiy Alanovich";break;
            case 4: len="Mitin Valeriy Timurovich";break;
            case 5: len="Baldwin William Egorovich";break;
            case 6: len="Cecil Robert Eduardovich";break;
            case 7: len="Dennis Ralph Antonovich";break;
            case 8: len="Godfrey Richard Petrovich";break;
            case 9: len="Johnes John Mihaylovich";break;
            case 10: len="Bond James Sergeevich";break;
            case 11: len="Henry Peter Dmitrievich";break;
            case 12:len="Owen Nikole Rinatovich";break;
            case 13: len="Reynolds Amanda Petrovna";break;
            case 14: len="Fox Megan Zaharovna";
            }
            f1<<len<<endl;
            f1<<rand()%100000+99999<<endl;
            if (i==14)
                f1<<rand()%1000;
            else 
                f1<<rand()%1000<<endl;
        }
    }
    f1.close();
}
vector<pokupatel> createvec1(char file1[])//функция для формирования вектора из элементов структурного типа из файла
{
    vector<pokupatel> V1;
    ifstream f2(file1);
    if(!f2.fail())
    {
        while (!f2.eof())
            {
                pokupatel temp;             
                f2 >> temp.family;
                f2 >> temp.name;
                f2 >> temp.fathership;
                f2 >> temp.nomer;
                f2 >> temp.schet;
                V1.push_back(temp);
            }
    }
    else 
        cout << "Файла из которого производится чтение не существует!";
    f2.close();
    return V1;
}
vector<pokupatel> read(int n)//создание структурированного вектора с клавиатуры
{
    vector<pokupatel> f1;
    for(int i=0;i<n;i++)
    {
        pokupatel temp;
        cout<<"Введите фамилию покупателя: ";
        cin>>temp.family;
        cout<<"Введите имя покупателя: ";
        cin>>temp.name;
        cout<<"Введите отчество покупателя: ";
        cin>>temp.fathership;
        cout<<"Введите номер кридитки: ";
        cin>>temp.nomer;
        cout<<"Введите счет покупателя: ";
        cin>>temp.schet;
        f1.push_back(temp);
    }
    return f1; 
}
void infile(char file2[], const vector<pokupatel> &v1)//создание бинарного файла из вектора
{
    ofstream f3(file2, std::ios::binary);//открываем файл для записи
    int n=v1.size();
    if(f3.is_open())
    { 
        for(int i = 0; i < n; i++) // выводим массив в файл поэлементно
        {
            f3.write((char *)&v1[i].family, sizeof(string));
            f3.write((char *)&v1[i].name, sizeof(string));
            f3.write((char *)&v1[i].fathership, sizeof(string) );
            f3.write((char *)&v1[i].nomer, sizeof(unsigned int) );
            f3.write((char *)&v1[i].schet, sizeof(double) );
        }
        f3.close();
    } 
}
void outbin (char file2[])// открываем бинарный файл для чтения и выводим его 
{
    cout<<"===================================================\n";
    ifstream f3(file2,std::ios::binary);
    if (f3)
    {
        pokupatel temp;
        int i=1;
        while (!f3.eof())
        {           
            f3.read((char*)& (temp.family),sizeof(temp.family));
            f3.read((char*)& (temp.name),sizeof(temp.name));
            f3.read((char*)& (temp.fathership),sizeof(temp.fathership));
            f3.read((char*)& (temp.nomer),sizeof(temp.nomer));
            f3.read((char*)& (temp.schet),sizeof(temp.schet));  if (f3.eof()) break;
            cout<<i<<". ФИО: "<<temp.family<<" "<< temp.name<<" "<<temp.fathership<<"\n  Номер: "<<temp.nomer<<"\n  Счет: "<<temp.schet<<" rub"<<endl;              
            i++;
        }
            cout << "Общее количество: " << i-1 << endl;
    }
    f3.close(); 
}
vector <pokupatel> vecofbin (char file2[])//создаем вектор из бинарного файла
{
    vector<pokupatel> x1;
    ifstream f4(file2,std::ios::binary);
    if (f4)
    {
        pokupatel temp;
        while (!f4.eof())
        {           
            f4.read((char*)& (temp.family),sizeof(temp.family));
            f4.read((char*)& (temp.name),sizeof(temp.name));
            f4.read((char*)& (temp.fathership),sizeof(temp.fathership));
            f4.read((char*)& (temp.nomer),sizeof(temp.nomer));
            f4.read((char*)& (temp.schet),sizeof(temp.schet));
            if (f4.eof()) 
                break;
            x1.push_back(temp);
            }
    }
    f4.close(); 
    return x1;
}
 
int delofbin(char file2[])//функция, которая удаляет элементы бинарного файла, у которых на счете меньше 500р 
{
    vector<pokupatel> x1 = vecofbin(file2);//создаем структурированный вектор из бинарного файла
    int n=x1.size(), h=0;
    for(int i=0; i<n;i++)
    {
        if (x1[i].schet<500)
        {
            x1.erase(x1.begin()+i,x1.begin()+i+1);
            n--;
            i--;
            h++;
        }
    }
    infile(file2,x1);//создание бинарного файла из вектора
    return h;
}
int delofbin(char file2[],char file3[])//функция, которая удаляет элементы бинарного файла, у которых на счете меньше 500р  и записывает их в текстовый файл 
{
    vector<pokupatel> x1 = vecofbin(file2);//создаем структурированный вектор из бинарного файла
    int h=0;
    ofstream g1(file3);
    if (g1)
    {
        int n=x1.size();
        for(int i=0; i<n;i++)
        {
            if (x1[i].schet<500)
            {
                g1<<x1[i].family<<" "<<x1[i].name<<" "<<x1[i].fathership<<endl;
                g1<<x1[i].nomer<<endl;
                g1<<x1[i].schet<<endl;
                x1.erase(x1.begin()+i,x1.begin()+i+1);
                n--;
                i--;
                h++;
            }
        }
    }
    g1.close();
    infile(file2,x1);//создание бинарного файла из вектора
    return h;
}
void dobinbin(int q, char file2[]) //добавление покупателей в бинарный файл
{
    vector<pokupatel> r1 = vecofbin(file2);//создаем структурированный вектор из бинарного файла
    pokupatel temp;
    for(int i=0;i<q; i++)
    {
        cout<<"Введите фамилию покупателя: ";
        cin>>temp.family;
        cout<<"Введите имя покупателя: ";
        cin>>temp.name;
        cout<<"Введите отчество покупателя: ";
        cin>>temp.fathership;
        cout<<"Введите номер кредитки покупателя: ";
        cin>>temp.nomer;
        cout<<"Введите счет покупателя: ";
        cin>>temp.schet;
        r1.push_back(temp);
    }
    infile(file2,r1);//создание бинарного файла из вектора
}
int zamena(unsigned int z, char file2[])//замена элементов на последнюю запись
{
    vector<pokupatel> v1 = vecofbin(file2);//создаем структурированный вектор из бинарного файла
    pokupatel lastzap;
    int n=v1.size();
    lastzap=v1[n-1];//переменной "ластзап" присваиваем значение последней записи в векторе
    int h=0; 
    for(int i=0; i<n-1;i++)
    {
        if (v1[i].nomer < z)//если меньше зед, то заменить на последнюю запись
        {
            v1[i]=lastzap;
            h++;
        }
    }
    infile(file2,v1);//создание бинарного файла из вектора
    return h;
}
int main()
{
    setlocale (0,"Russian");
    srand((unsigned)time(0));
    cout<<"Лабораторная работа №16 Вариант №8\n";
    cout<<"===========================================================\n";
    char file1[] = "c:/file.txt", file2[] = "c:/binfile.bin", file3[] = "c:/del.txt";
    vector<pokupatel> v1;
    int q;
    cout<<"Методы заполнения вектора структурированными данными:\n1-из файла\n2-с клавиатуры\nВвод: ";
    cin>>q;
    
    switch(q)
    {
    case 1:
        {
            createfile(file1);//создание файла с фио покупателей, случайными номерами кридитных карточек и счетами
            v1=createvec1(file1);//функция для формирования вектора из элементов структурного типа из файла
        }break;
    case 2:
        {
            int n;
            cout<<"Задайте количество покупаетелей: ";
            cin>>n;
            v1=read(n);//создание структурированного вектора с клавиатуры
        }
        break;
    default: cout<<"Выбран неверный метод\n";
        system("pause");
        return 0;
    }
    infile(file2,v1);//создание бинарного файла из вектора
    cout<<"Исходный бинарный файл:\n";
    outbin(file2);// открываем бинарный файл для чтения и выводим его   
    cout<<"===========================================================\n";
    cout<<"Задание удаления:\nУдалить записи, в которых на счету менее 500 рублей\n";
    cout<<"1-удалить бесследно\n2-записать в текстовый файл\n0-выход\nВвод: ";
    cin>>q;
    int y=0;
    switch(q)
    {
    case 0: break;
    case 1: y=delofbin(file2);break;
    case 2: y=delofbin(file2, file3);break;
    default: break;
    }
    cout<<"Бинарный файл после удаления:\n";
    outbin(file2);// открываем бинарный файл для чтения и выводим его 
    cout<<"Количество удаленных покупателей: "<<y<<endl;
    cout<<"=========================================================\n";
    cout<<"Задание добавления:\nДобавить N элементов в конец файла\n";
    cout<<"Введите количество покупателей, которых следует добавить: ";
    cin>>q;
    dobinbin(q,file2);//добавление покупателей в бинарный файл
    cout<<"Бинарный файл после добавления:\n";
    outbin(file2);// открываем бинарный файл для чтения и выводим его
    cout<<"=========================================================\n";
    cout<<"Заменить все записи с номером кридитной карточки меньше указанного на последнюю запись\n";
    cout<<"Введите номер: ";
    unsigned int z;
    cin>>z;
    q=zamena(z, file2);//замена элементов на последнюю запись
    cout<<"Бинарный файл после замены:\n";
    outbin(file2);// открываем бинарный файл для чтения и выводим его
    cout<<"Количество замененых покупаетелей: "<<q<<endl;
system("pause");
return 0;
}
Добавлено через 12 минут
Цитата Сообщение от nesstar Посмотреть сообщение
у меня возникла трудность с етим "вектором" в мейне(как именно его использовать ?).
вот в функции формирующая вектор
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vector<pupil> Read(char file1[])
{
        vector<pupil> V1;
        ifstream f2(file1);
        if (f2.is_open())
        {
                while (!f2.eof())
                        {
                                pupil temp;
                                string str, str1;
                                f2>> str;
                                str+=" ";
                                f2>>str1;
                                str+=str1;//склеиваю имя и фамилию в одно целое
                                temp.name=str;//и это целое присваиваю переменной temp.name
                                f2 >> temp.age;
                                f2 >> temp.rating;
                                V1.push_back(temp);
                        }
        }
   f2.close();
   return V1;
}
return V1;- возвращаем этот вектор, т.е в мейне нужно писать следующее:
C++
1
2
vector <pupil> V=Read(file1);//объявляем любой вектор структурированного типа и присваиваем ему значение функции, т.е значение V1 из функции
//получилось как бы так "v=v1"
если какие вопросы по векторам или вообще по чему нибудь еще вот сайт добротный его я юзаю
http://www.cppreference.com/wiki/ru/stl/vector/start
nesstar
0 / 0 / 0
Регистрация: 16.01.2010
Сообщений: 3
19.04.2010, 00:38  [ТС]     Лабораторная по структурам и указателям #5
спасибо, очень полезная инфа (не только вектор), лаба вроди работает.
А вот с указателями таки никак, легендарный выстрел в ногу не покорен ((.
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
19.04.2010, 07:44     Лабораторная по структурам и указателям #6
ты имеешь ввиду итератор??
вот инфа о нем http://www.cppreference.com/wiki/ru/stl/iterators
"Итераторы призваны предоставлять доступ к членам контейнеров, они могут быть использованы способом, похожим на манипуляции указателями. Например, можно использовать итератор для прохода по всем элементам вектора." Первые два предложение оттуда
еще полазь поищи в инете=/

пример использования итератора:
C++
1
2
3
4
5
6
7
8
9
vector<int> f1;
for(int i=0; i<10;i++)
     f1.push_back(i);
 
vector<int>::iterator iter;//объявляем итератор целочисленного типа и именем iter
for (iter=f1.begin(); iter!=f1.end(); iter++) //присваиваем итератору начальное значение вектора f1
//пока итератор не будет равен концу вектора f1 цикл будет продолжаться
//и счетчик, увеличиваем итератор после на 1 единицу, чтоб он прочитал значение следующего значения в векторе f1
      f2.push_back(*iter);//итератора представляет собой массив, значит мы перед именем ставим * и вставляем его значение в в-р f2
вывод вектора с помощью итератора:
C++
1
2
3
4
5
6
vector<int> f1;
for(int i=0; i<10;i++)
     f1.push_back(i);
vector<int>::iterator iter;//объявляем итератор целочисленного типа и именем iter
for (iter=f1.begin(); iter!=f1.end(); iter++) 
      cout<<*iter<<" ";
ну вот как то так=)

Добавлено через 3 минуты
для структур использовать итератор я не пытался, но думаю должно быть все примерно также
C++
1
2
3
//доступ к элементам структуры
*iter.name
*iter.family
Yandex
Объявления
19.04.2010, 07:44     Лабораторная по структурам и указателям
Ответ Создать тему
Опции темы

Текущее время: 00:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru