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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.95
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
#1

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

27.03.2010, 21:43. Просмотров 2473. Ответов 41
Метки нет (Все метки)

В радиоателье хранятся квитанции о сданных в ремонт телевизорах. Каждая квитанция содержит марку телевизора, дату приемки в ремонт, состояние готовности заказа (выполнен, не выполнен). Вывести информацию о невыполненных на текущий момент заказах.

вот чтот вродь этого....тама кусок кода выделен тама компилятор выдает ошибку по поводу типа "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++
в программе не работает удаление... что делать?? #include &quot;stdafx.h&quot; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; ...

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

Работа с файлами - C++
Добрый вечер! Помогите, есть какая - то лажа: код компилится но консоль виснет и в файл ничего не записывается. #include...

Работа с файлами. - C++
Пожалуйста,помогите решить..В субботу экзамен,а я физически не успеваю написать 6 программок..( Создать телефонный справочник для...

Работа с файлами - C++
Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводника, полупроводник,...

Работа с файлами С++ - C++
Есть некий кусок кода, который должен с читать первое значение из файла, увеличить его и затем обратно записать его в файл. int co=0; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MustangGT
1 / 1 / 0
Регистрация: 08.11.2009
Сообщений: 56
29.03.2010, 12:41  [ТС] #2
людииии...помогите плиззззз.(((
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
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-ю строку тоже нужно исправить в зависимости от того, как ты собираешься сравнивать структуры(какие поля структуры будут сравниваться между собой). Всё остальное делается по аналогии с этой функцией.
а незя кусочками готовых кодов с пояснениями!?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2010, 22:28
Привет! Вот еще темы с ответами:

Работа с файлами - C++
Открыть каталог, проверить файлы на обычность, проверить в именах файлов наличие знака $, и если он есть заменить на размер файла. ...

Работа с файлами - C++
На указатель ругается Possibly incorrect assignment Строки в файл записывает, но не выводит. Что не так? #include &lt;fstream.h&gt; ...

Работа с файлами - C++
int main() { int mass; srand(time(NULL)); for (int i = 0; i &lt; 100; i++) mass = rand() % 1000; FILE *file; file =...

Работа с файлами - C++
Обработку символьной строки оформить в виде функции. Сканирование строки и доступк её элементам выполнить ТОЛЬКО сиспользованием команд...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.03.2010, 22:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru