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

Работа с файлами - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
27.03.2010, 21:43     Работа с файлами #1
В радиоателье хранятся квитанции о сданных в ремонт телевизорах. Каждая квитанция содержит марку телевизора, дату приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о невыполненных на текущий момент заказах.

вот чтот вродь этого....тама кусок кода выделен тама компилятор выдает ошибку по поводу типа "char"....а еси использовать "unsigned char" ток када вводишь данные и в этих поджпунктах указываешь больше одного символа...то все перескакивает....вобщем вот такая вот херь...

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
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *fl;
typedef struct
{
char marka[30];
 
char data[10];               \\ВОТ ТУТ ПРОБЛЕМА С ТИПАМИ
char gotovnost[10];
 
} TTel;
TTel tel[30]; // Массив структур
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resc(); // Вывод результата на экран
void Resf(); // Вывод результата в файл
int main()
{
while (true)
{
switch (Menu())
{
case 1: Nnf(); break;
case 2: Newf(); break;
case 3: Spisok(); break;
case 4: Opf(); break;
case 5: Resc(); break;
case 6: Resf(); break;
case 7: return 0;
default: puts("Viberite pravilno!");
}
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
}
}
int Menu() // Меню
{
cout << "VIBERITE:" << endl;
cout << "1. Vvod file name" << endl;
cout << "2. New file" << endl;
cout << "3. Vvesti spisok" << endl;
cout << "4. Open file" << endl;
cout << "5. Vivesti result" << endl;
cout << "6. Vivesti v fail" << endl;
cout << "7. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
void Nnf() // Ввод имени файла
{
cout << "Vvedite file name" << endl;
cin >> name;
}
void Newf() // Создание нового файла
{
if ((fl = fopen(name,"wb")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
void Spisok() // Ввод данных в файла
{
if ((fl = fopen(name,"rb+")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "Vvedite kol-vo televizorov" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Vvedite marky: ";
cin >> tel[i].marka;
cout << "Vvedite datu_priema: ";
cin >> tel[i].data;
cout << "Vvedite sost_gotovnosti: ";
cin >> tel[i].gotovnost;
fwrite (&tel[i], sizeof(TTel), 1, fl);
}
fclose (fl);
}
void Opf() // Открытие бинарного файла
{
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Oshibka pri otkritii" << endl;
exit(1);
}
nst = 0;
TTel std;
while (true)
{
int nwrt = fread (&std, sizeof(TTel), 1, fl);
if (nwrt != 1) break;
tel[nst] = std;
cout << tel[nst].marka << " " << tel[nst].data << " "
<< tel[nst].gotovnost << endl;
nst++;
}
fclose(fl);
}
void Resc() // Вывод результата на экран
{
for (int i=0; i<nst; i++)
if (tel[i].gotovnost == 'OK')
cout << tel[i].marka << tel[i].data << tel[i].gotovnost << endl;
}
void Resf() // Вывод результата в текстовый файл
{
char namet[30];
FILE *ft;
cout << "Vvedite imya faila" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if (tel[i].gotovnost == 'ok')
{
strcpy (s, tel[i].marka);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2010, 21:43     Работа с файлами
Посмотрите здесь:

C++ Работа с файлами
C++ Работа с файлами
C++ Си, работа с файлами
Работа с файлами C++
C++ работа с файлами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
29.03.2010, 12:41  [ТС]     Работа с файлами #2
людииии...помогите плиззззз.(((
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
29.03.2010, 13:18     Работа с файлами #3
В строках 119 и 135 используй функцию strcmp для сравнения строк. И используй двойные кавычки, а не одинарные.
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
29.03.2010, 23:36  [ТС]     Работа с файлами #4
а как сделать сортировку выбором по ключу
C++
1
tel[i].data
???????
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
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *fl;
typedef struct
{
char marka[30];
char data[10];
char gotovnost[10];
 } TTel;
TTel tel[30]; // Массив структур
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resc(); // Вывод результата на экран
void Resf(); // Вывод результата в файл
void S_Vb();
int main()
{
while (true)
{
switch (Menu())
{
case 1: Nnf(); break;
case 2: Newf(); break;
case 3: Spisok(); break;
case 4: Opf(); break;
case 5: Resc(); break;
case 6: Resf(); break;
case 7: S_Vb(); break;
case 8: return 0;
default: puts("Viberite pravilno!");
}
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
}
}
int Menu() // Меню
{
cout << "VIBERITE:" << endl;
cout << "1. Vvod file name" << endl;
cout << "2. New file" << endl;
cout << "3. Vvesti spisok" << endl;
cout << "4. Open file" << endl;
cout << "5. Vivesti result" << endl;
cout << "6. Vivesti v fail" << endl;
cout << "7. Sortirovka Viborom" << endl;
cout << "8. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
void Nnf() // Ввод имени файла
{
cout << "Vvedite file name" << endl;
cin >> name;
}
void Newf() // Создание нового файла
{
if ((fl = fopen(name,"wb")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
void Spisok() // Ввод данных в файла
{
if ((fl = fopen(name,"rb+")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "Vvedite kol-vo televizorov" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Vvedite marky: ";
cin >> tel[i].marka;
cout << "Vvedite datu_priema: ";
cin >> tel[i].data;
cout << "Vvedite sost_gotovnosti: ";
cin >> tel[i].gotovnost;
fwrite (&tel[i], sizeof(TTel), 1, fl);
}
fclose (fl);
}
void Opf() // Открытие бинарного файла
{
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Oshibka pri otkritii" << endl;
exit(1);
}
nst = 0;
TTel std;
while (true)
{
int nwrt = fread (&std, sizeof(TTel), 1, fl);
if (nwrt != 1) break;
tel[nst] = std;
cout << tel[nst].marka << " " << tel[nst].data << " "
<< tel[nst].gotovnost << endl;
nst++;
}
fclose(fl);
}
void Resc() // Вывод результата на экран
{
for (int i=0; i<nst; i++)
if (!strcmp (tel[i].gotovnost, "ne_gotov"))
cout << tel[i].marka << tel[i].data <<tel[i].gotovnost << endl;
}
void Resf() // Вывод результата в текстовый файл
{
char namet[30];
FILE *ft;
cout << "Vvedite imya faila" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if (!strcmp (tel[i].gotovnost, "ne_gotov"))
{
strcpy (s, tel[i].marka);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
 
 
void S_Vb(int tel[], int nst) //вот эт вот не катит....
{ int imin, i, j, t;
for(i = 0; i < nst-1; i++) // Перебор элементов
{
imin = i;
for (j = i+1; j < nst; j++) // Поиск минимального элемента
if (tel[imin] > tel[j])
imin = j;
if (imin != i) { // Перемещение минимального элемента
t = tel[imin];
tel[imin] = tel[i];
tel[i] = t;
}
}
}
Или мот у кого есть целые задачи с примером выполнения сортировки выбором...чтоб понять смысл операторов и функций..Сам то смысл сортировки понятен...(но это блин не яблоки)))))....А то у мне в методичке кусок голого кода....А что к чему не знаю...оч хочется самому до етого додумать...
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 17:59  [ТС]     Работа с файлами #5
Пипл.....есть у кого похожие проги с сортировкой???рабочие
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 18:11     Работа с файлами #6
void S_Vb(int tel[], int nst) //вот эт вот не катит....
Где у тебя прототип этой функции? Где вызов? К тому же эта функция сортирует целочисленный массив, а тебе, как я понимаю, необходимо отсортировать массив структур...
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 20:42  [ТС]     Работа с файлами #7
вот все что у мя на эту тему в методичке...и как вот по этому... сделать то что от мну хотят!?
ЛАБОРАТОРНАЯ РАБОТА №10
СОРТИРОВКА ПО КЛЮЧУ ОДНОМЕРНЫХ МАССИВОВ СТРУКТУР
10.1. Сортировка массивов
Сортировка – упорядочивание элементов массива по возрастанию или убыванию.
10.1.1. Метод пузырька
Последовательно сравниваются рядом стоящие элементы массива и, если условие упорядоченности не выполняется, то эти элементы переставляются. За один цикл в необходимую позицию перемещается один элемент массива и из дальнейшего рассмотрения исключается.
C++
1
2
3
4
5
6
7
8
9
10
void S_Puz(int a[], int n) // Сортировка по возрастанию
{ int i , j, t;
for(i=1; i < n; i++)
for( j=n-1; j >= i; j--) // Перебор элементов
if (a[j-1] > a[j])
{ t = a[j-1]; // Перестановка элементов
a[j-1] = a[j];
a[j] = t;
}
}
10.1.2. Сортировка выбором
В массиве выбирается минимальный элемент, помещается в первую пози-цию и из рассмотрения исключается. Затем аналогичным образом перемещают-ся элементы в оставшейся части массива. Процес повторяется до тех пор, пока все элементы не будут перемещены в необходимые позиции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void S_Vb(int a[], int n)
{ int imin, i, j, t;
for(i = 0; i < n-1; i++) // Перебор элементов
{
imin = i;
for (j = i+1; j < n; j++) // Поиск минимального элемента
if (a[imin] > a[j])
imin = j;
if (imin != i) { // Перемещение минимального элемента
t = a[imin];
a[imin] = a[i];
a[i] = t;
}
}
}
45
10.1.3. Сортировка вставками
Сначала сортируются два первых элемента массива. Затем алгоритм встав-ляет третий элемент в необходимую позицию по отношению к первым двум элементам. После этого четвертый и так далее. Процесс повторяется до тех пор, пока не будут вставлены все элементы.
C++
1
2
3
4
5
6
7
8
9
10
11
void S_Vst (int a[], int n)
{
int i, j, t;
for(i=1; i<n; i++) // Перебор элементов
{
t = a[i]; // Выбор элемента
for(j = i-1; j >= 0 && t < a[j]; j--) // Поиск необходимой позиции
a[j+1] = a[j]; // для втавки элемента
a[j+1] = t; // Вставка элемента
}
}
Добавлено через 1 час 28 минут
Цитата Сообщение от rangerx Посмотреть сообщение
Где у тебя прототип этой функции? Где вызов? К тому же эта функция сортирует целочисленный массив, а тебе, как я понимаю, необходимо отсортировать массив структур...
...ээээ а можно объяснить????
ну я так понимаю....
еси в примере прототипов:
C++
1
2
3
4
// Прототипы функций
int Sum(int, int);
int Sum(int, int, int);
int Sum(int[], int);
то я так понимаю...
C++
1
void S_Vb(int tel[], int nst)
это и есть прототип....
или нуна так:
C++
1
2
S_Vb(int tel[], int nst)
void S_Vb(int tel[], int nst)
??????????
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 21:00     Работа с файлами #8
прототип это то, что у тебя находится в 24-ой строке.
должно быть так
C++
1
void S_Vb(TTel[], int);
в 37-ой строке вызов должен быть таким S_Vb(tel, 30);
И саму функцию соответственно тоже нужно переделать:
C++
1
2
3
4
void S_Vb(TTel tel[], int nst)
{
    // здесь сама сортировка
}
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 21:06  [ТС]     Работа с файлами #9
Цитата Сообщение от rangerx Посмотреть сообщение
прототип это то, что у тебя находится в 24-ой строке.
должно быть так
C++
1
void S_Vb(TTel[], int);
в 37-ой строке вызов должен быть таким S_Vb(tel, 30);
И саму функцию соответсвенно тоже нужно переделать:
C++
1
2
3
4
void S_Vb(TTel tel[], int nst)
{
    // здесь сама сортировка
}
тоесть....во всех ост до 24й строки...тк там пустые скобки по умолчанию тип int!???

Добавлено через 3 минуты
Цитата Сообщение от MustangGT Посмотреть сообщение
S_Vb(tel, 30);
серавно не въеду почему так???? а в ост пустые скобки
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 21:08     Работа с файлами #10
Цитата Сообщение от MustangGT Посмотреть сообщение
тоесть....во всех ост до 24й строки...тк там пустые скобки по умолчанию тип int!???
Пустые скобки потому что функциям не передаются параметры...
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 21:18  [ТС]     Работа с файлами #11
хорошо)))) а теперь как чайнику объясни....почему там не надо было их передавать а щас понадобилось!????

Добавлено через 6 минут
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
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *fl;
typedef struct
{
char marka[30];
char data[10];
char gotovnost[10];
 } TTel;
TTel tel[30]; // Массив структур
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resc(); // Вывод результата на экран
void Resf(); // Вывод результата в файл
void S_Vb(TTel[], int);
int main()
{
while (true)
{
switch (Menu())
{
case 1: Nnf(); break;
case 2: Newf(); break;
case 3: Spisok(); break;
case 4: Opf(); break;
case 5: Resc(); break;
case 6: Resf(); break;
case 7: S_Vb(tel, 30); break;
case 8: return 0;
default: puts("Viberite pravilno!");
}
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
}
}
int Menu() // Меню
{
cout << "VIBERITE:" << endl;
cout << "1. Vvod file name" << endl;
cout << "2. New file" << endl;
cout << "3. Vvesti spisok" << endl;
cout << "4. Open file" << endl;
cout << "5. Vivesti result" << endl;
cout << "6. Vivesti v fail" << endl;
cout << "7. Sortirovka Viborom" << endl;
cout << "8. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
void Nnf() // Ввод имени файла
{
cout << "Vvedite file name" << endl;
cin >> name;
}
void Newf() // Создание нового файла
{
if ((fl = fopen(name,"wb")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
void Spisok() // Ввод данных в файла
{
if ((fl = fopen(name,"rb+")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "Vvedite kol-vo televizorov" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Vvedite marky: ";
cin >> tel[i].marka;
cout << "Vvedite datu_priema: ";
cin >> tel[i].data;
cout << "Vvedite sost_gotovnosti: ";
cin >> tel[i].gotovnost;
fwrite (&tel[i], sizeof(TTel), 1, fl);
}
fclose (fl);
}
void Opf() // Открытие бинарного файла
{
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Oshibka pri otkritii" << endl;
exit(1);
}
nst = 0;
TTel std;
while (true)
{
int nwrt = fread (&std, sizeof(TTel), 1, fl);
if (nwrt != 1) break;
tel[nst] = std;
cout << tel[nst].marka << " " << tel[nst].data << " "
<< tel[nst].gotovnost << endl;
nst++;
}
fclose(fl);
}
void Resc() // Вывод результата на экран
{
for (int i=0; i<nst; i++)
if (!strcmp (tel[i].gotovnost, "ne_gotov"))
cout << tel[i].marka << tel[i].data <<tel[i].gotovnost << endl;
}
void Resf() // Вывод результата в текстовый файл
{
char namet[30];
FILE *ft;
cout << "Vvedite imya faila" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if (!strcmp (tel[i].gotovnost, "ne_gotov"))
{
strcpy (s, tel[i].marka);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
void S_Vb(TTel tel[], int nst)
{ 
int imin, i, j, t;
for(i = 0; i < nst-1; i++) // Перебор элементов
{
imin = i;
for (j = i+1; j < nst; j++) // Поиск минимального элемента
if (tel[imin] > tel[j])
imin = j;
if (imin != i) { // Перемещение минимального элемента
t = tel[imin];
tel[imin] = tel[i];
tel[i] = t;
}
}
}
опять какая-то по*бень с типами........
"--------------------Configuration: Z_10 - Win32 Debug--------------------
Compiling...
Z_10.CPP
F:\КР\Семестр2\ОАиП\Project_5\Z_10.CPP(151) : error C2676: binary '>' : 'TTel' does not define this operator or a conversion to a type acceptable to the predefined operator
F:\КР\Семестр2\ОАиП\Project_5\Z_10.CPP(154) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'TTel' (or there is no acceptable conversion)
F:\КР\Семестр2\ОАиП\Project_5\Z_10.CPP(156) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
Error executing cl.exe.

Z_10.OBJ - 3 error(s), 0 warning(s)

"
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 21:35     Работа с файлами #12
Цитата Сообщение от MustangGT Посмотреть сообщение
хорошо)))) а теперь как чайнику объясни....почему там не надо было их передавать а щас понадобилось!????
Какой смысл от функции сортировки, которая будет сортировать один единственный массив tel? А если захочется объявить ещё один массив tel2? Ты будешь писать вторую функцию сортировки специально для массива tel2? Затем вдруг появится необходимость в массиве tel3... В общем мысль надеюсь ясна
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 22:02  [ТС]     Работа с файлами #13
Цитата Сообщение от rangerx Посмотреть сообщение
Какой смысл от функции сортировки, которая будет сортировать один единственный массив tel? А если захочется объявить ещё один массив tel2? Ты будешь писать вторую функцию сортировки специально для массива tel2? Затем вдруг появится необходимость в массиве tel3... В общем мысль надеюсь ясна
в общих чертах....))))

Добавлено через 22 минуты
и чтоб сразу не отходя от кассы....
я сама скромность)))))


найти в отсортированном массиве структур заданный элемент методами пол-ного перебора и двоичного поиска

Линейный поиск (метод полного перебора)
Метод применяется для неупорядоченных массивов и представляет собой последовательный перебор элементов до обнаружения требуемого ключа или до конца массива, если ключ не обнаружен.
C++
1
2
3
4
5
6
int P_Lin1(int a[ ], int n, int x)
{
for(int i = 0; i < n; i++)
if (a[i] == x) return i;
return -1;
}
Эффективность такого алгоритма пропорциональна количеству элементов.
Единственная возможность улучшить вышеприведенный алгоритм – уменьшить количество проверок на каждом шаге. Для этого вводится вспомо-гательный элемент – барьер, который предохраняет от перехода за пределы массива:
C++
1
2
3
4
5
6
7
8
9
int P_lin2(int a[], int n, int x)
{
a[n+1] = x;
int i = 0;
while (a[i] != x)
i++;
if (i == n+1) return -1;
else return i;
}
Эффективность этого алгоритма в два раза выше предыдущего.
Двоичный (бинарный) поиск
Применяется только для упорядоченных массивов.
Суть метода. Выбирается средний элемент и сравнивается с искомым. Ес-ли искомый элемент меньше среднего, то из рассмотрения исключается правая половина массива, иначе – левая. Процесс повторяется, до тех пор, пока не ос-танется один элемент. Если оставшийся элемент не является искомым, то дела-ется вывод об отсутствии элемента в массиве.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int P_Dv (int a[], int n, int x)
{
int i = 0, j = n-1, m;
while (i<j)
{
m = (i+j)/2; // Вычисление индекса среднего элемента
if (x > a[m]) i = m+1; // Исключение левой половины массива
else j = m; // Исключение правой половины массива
}
if (a[i] == x) return i; // Искомый элемент найден
else return -1; // Искомый элемент не найден
}
ну в общем суть то понятна....но я уверен на 100% опять геморрой будит...так просто это кусок кода в программу не впишешь...(конечно заменив переменные на свои...)
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 22:24     Работа с файлами #14
Цитата Сообщение от MustangGT Посмотреть сообщение
опять какая-то по*бень с типами........
У переменной t быть должен быть тип TTel. 151-ю строку тоже нужно исправить в зависимости от того, как ты собираешься сравнивать структуры(какие поля структуры будут сравниваться между собой). Всё остальное делается по аналогии с этой функцией.
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 22:28  [ТС]     Работа с файлами #15
Цитата Сообщение от rangerx Посмотреть сообщение
У переменной t быть должен быть тип TTel. 151-ю строку тоже нужно исправить в зависимости от того, как ты собираешься сравнивать структуры(какие поля структуры будут сравниваться между собой). Всё остальное делается по аналогии с этой функцией.
а незя кусочками готовых кодов с пояснениями!?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 22:32     Работа с файлами #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void S_Vb(TTel tel[], int nst)
{
    int imin, i, j;
    TTel t;
    for(i = 0; i < nst-1; i++)
    {
        imin = i;
        for (j = i+1; j < nst; j++)
            if ( strcmp(tel[imin].data, tel[j].data) > 0 ) imin = j; // если я прильно понял должно быть так
 
        if (imin != i)
        {
            t = tel[imin];
            tel[imin] = tel[i];
            tel[i] = t;
        }
    }
}
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 22:35  [ТС]     Работа с файлами #17
пасиб конечно....но я хотелбы не тупо слизать готовое....а разобраться....

Добавлено через 2 минуты
епсель....точняк....блин!!! почему в примерах в методичке написанно сравнение
C++
1
for (j = i+1; j < n; j++)
когда нужно через строки "strcmp" чтоб ошибки не вылетали....?????почему так?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
31.03.2010, 23:04     Работа с файлами #18
Цитата Сообщение от MustangGT Посмотреть сообщение
епсель....точняк....блин!!! почему в примерах в методичке написанно сравнение
Потому что в методичке сравниваются целые числа, а не строки. Ответы на подобные вопросы обычно пишут в книгах по С/C++ для начинающих
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
31.03.2010, 23:05  [ТС]     Работа с файлами #19
я блин перед всем этим Lafore перелопатил)))эт автор такой))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2010, 23:02     Работа с файлами
Еще ссылки по теме:

C++ Работа с файлами
C++ Работа с файлами
Работа с файлами C++

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

Или воспользуйтесь поиском по форуму:
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
03.04.2010, 23:02  [ТС]     Работа с файлами #20
появился еще вопросик
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
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
FILE *fl;
typedef struct
{
char marka[30];
int data;
char gotovnost[10];
 } 
 
TTel;
TTel tel[30], t; // Массив структур
char name[20]; // Имя файла
int nst = 0; // Число введенных структур
int x = 0; //ДАТА ДЛЯ ЛИНЕЙНОГО ПОИСКА С БАРЬЕРОМ
int Menu(); // Создание меню
void Nnf(); // Ввод имени файла
void Newf(); // Создание нового файла
void Spisok(); // Формирование файла
void Opf(); // Открытие файла
void Resf(); // Вывод результата в файл
void S_Vb(TTel[], int);
void P_lin2(TTel[], int, int);
//void P_Dv (TTel[], int, int);
void Resc(); // Вывод результата сортировки
void R_s(); //вывод результатов сортировки
int main()
{
while (true)
{
switch (Menu())
{
case 1: Nnf(); break;
case 2: Newf(); break;
case 3: Spisok(); break;
case 4: Opf(); break;
case 5: Resf(); break;
case 6: S_Vb(tel, nst); break;
case 7: P_lin2(tel, nst, x); break;
//case 8: x; P_Dv (tel, nst, 25); break;
case 9: Resc(); break;
case 10: R_s(); break;
case 15: return 0;
default: puts("Viberite pravilno!");
}
puts ("Press any key to continue");
getch (); // Ожидание нажатия любой клавиши
system ("cls"); // Очистка экрана
}
}
int Menu() // Меню
{
cout << "VIBERITE:" << endl;
cout << "1. Vvod file name" << endl;
cout << "2. New file" << endl;
cout << "3. Vvesti spisok" << endl;
cout << "4. Open file" << endl;
cout << "5. Vivesti v fail" << endl;
cout << "6. Sortirovka Viborom" << endl;
cout << "7. Lineynyi poisk" << endl;
cout << "8. Binarnyi poisk" << endl;
cout << "9. Vivesti resultata sortirovki" << endl;
cout << "10. Vivesti resultaty" << endl;
cout << "15. Exit" << endl;
int i;
cin >> i; // Ввод выбранного пункта меню
return i;
}
 
//////////////////////////////////////////////////////////////////////////
void Nnf() // Ввод имени файла
{
cout << "Vvedite file name" << endl;
cin >> name;
}
 
///////////////////////////////////////////////////////////////////////////
void Newf() // Создание нового файла
{
if ((fl = fopen(name,"wb")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "OK" << endl;
fclose(fl);
}
 
/////////////////////////////////////////////////////////////////////////////
void Spisok() // Ввод данных в файла
{
if ((fl = fopen(name,"rb+")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
cout << "Vvedite kol-vo televizorov" << endl;
cin >> nst;
for (int i=0; i<nst; i++)
{
cout << "Vvedite marky: ";
cin >> tel[i].marka;
cout << "Vvedite datu_priema: ";
cin >> tel[i].data;
cout << "Vvedite sost_gotovnosti: ";
cin >> tel[i].gotovnost;
fwrite (&tel[i], sizeof(TTel), 1, fl);
}
fclose (fl);
}
 
/////////////////////////////////////////////////////////////////////////////
void Opf() // Открытие бинарного файла
{
if ((fl = fopen (name,"rb")) == NULL)
{
cout << "Oshibka pri otkritii" << endl;
exit(1);
}
nst = 0;
TTel std;
while (true)
{
int nwrt = fread (&std, sizeof(TTel), 1, fl);
if (nwrt != 1) break;
tel[nst] = std;
cout << tel[nst].marka << " " << tel[nst].data << " "
<< tel[nst].gotovnost << endl;
nst++;
}
fclose(fl);
}
 
/////////////////////////////////////////////////////////////////////////////
void Resc() // // Вывод результата sortirovki
{
for (int i=0; i<nst; i++)
if (!strcmp (tel[i].gotovnost, "ne_gotov"))
cout << tel[i].marka << " " << tel[i].data << " "
<< tel[i].gotovnost << endl;
}
 
/////////////////////////////////////////////////////////////////////////////
void R_s() // Вывод результатов
{
for (int i=0; i<nst; i++)
//if (!strcmp (tel[i].gotovnost, "ne_gotov"))
cout << tel[i].marka << " " << tel[i].data << " "
<< tel[i].gotovnost << endl;
}
 
/////////////////////////////////////////////////////////////////////////////
void Resf() // Вывод результата в текстовый файл
{
char namet[30];
FILE *ft;
cout << "Vvedite imya faila" << endl;
cin >> namet;
if ((ft = fopen (namet,"w")) == NULL)
{
cout << "Oshibka pri sozdanii" << endl;
exit(1);
}
char s[80];
for (int i=0; i<nst; i++)
if (!strcmp (tel[i].gotovnost, "ne_gotov"))
{
strcpy (s, tel[i].marka);
strcat (s, "\n"); // Добавление разделителя строк
fputs (s, ft);
}
fclose(ft);
}
 
/////////////////////////////////////////////////////////////////////
void S_Vb(TTel tel[], int nst)
{
int imin, i, j;
TTel t;
for(i = 0; i < nst-1; i++)
{
imin = i;
for (j = i+1; j < nst; j++)
if (tel[imin].data == tel[j].data) imin = j;
if (imin != i)
{
t = tel[imin];
tel[imin] = tel[i];
tel[i] = t;
}
}
}
 
/////////////////////////////////////////////////////////////////////////
void P_lin2(TTel tel[], int nst, int x)
{
    {
cout << "Vvedite key" << endl;
cin >> x;
}
tel[nst+1] = x;
int i = 0;
while (tel[i].data != x)
i++;
if (i == nst+1) return -1;
else return i;
}
205-я строка ругается....
"error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'int' (or there is no acceptable conversion)"

как сделать чтоб типы одинаковые были!?

Добавлено через 42 минуты
еще ругается на 209 и 210 ю строки на "возвращение значения"
Я так понимаю дело вот в чем
"Если функция не возвращает значения, она описывается как функция типа
void и в данном случае оператор return не ставится."

но блин!!! как иначе????
Yandex
Объявления
03.04.2010, 23:02     Работа с файлами
Ответ Создать тему
Опции темы

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