Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
1

Двоичный поиск по полю средний бал

09.03.2016, 20:12. Показов 561. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Надо найти запись у которого средний бал 3.2
вот код к которому надо применить двоичный поиск, можно сделать не через функции
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
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
struct structura
{
char fam[20];
int god;
float sball;
 
 
}; structura zap;
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
   structura mas[10];
   int n;
   cout<<"Введите количество записей: ";
   cin>>n;
   for (int i=0;i<n;i++)
   {
     cin.get();
     cout<<"Введите фамилию: ";
     cin.getline(mas[i].fam,20);
     cout<<"Введите год рождения: ";
     cin>>mas[i].god;
     cout<<"Введите средний бал: ";
     cin>>mas[i].sball;
     cout<<endl;
 
   }
   cout<<"Вывод записей: "<<endl;
   for (int i=0;i<n;i++)
     {
       cout<<i+1<<"\t"<<mas[i].fam<<"\t"<<mas[i].god<<"\t"<<mas[i].sball<<endl;
     }
 
     float temp;
     for (int i=0;i<n-1;i++)
        for (int j=0;j<n-i;j++)
     if (mas[j].sball<mas[j+1].sball)
     {
       temp=mas[j].sball;
       mas[j].sball=mas[j+1].sball;
       mas[j+1].sball=temp;
     }
     cout<<endl;
     cout<<"Отсортированные записи по убыванию среднего бала: "<<endl;
     for (int j=0;j<n;j++)
     {
         cout<<j+1<<"\t"<<mas[j].fam<<"\t"<<mas[j].god<<"\t"<<mas[j].sball<<endl;
 
     }
    
   system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2016, 20:12
Ответы с готовыми решениями:

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

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

Рассчитать средний бал каждого ученика и средний бал по каждому предмету
Подскажите как решать плз! 1)Написать программу создающую на диске файл следующей структуры:...

Вывести фамилии студентов, средний бал которых больше, чем общий средний балл
Вычислить средний балл всех студентов по всем предметам. Вывести фамилии студентов,средний бал...

5
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
11.03.2016, 20:04  [ТС] 2
Помогите мне разобрать двочный поиск, я его не сильно понял

Добавлено через 2 минуты
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
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
struct structura
{
char fam[20];
int god;
float sball;
 
 
}; structura zap;
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
   structura mas[10];
   int n;
 
   cout<<"Введите количество записей: ";
   cin>>n;
   for (int i=0;i<n;i++)
   {
     cin.get();
     cout<<"Введите фамилию: ";
     cin.getline(mas[i].fam,20);
     cout<<"Введите год рождения: ";
     cin>>mas[i].god;
     cout<<"Введите средний бал: ";
     cin>>mas[i].sball;
     cout<<endl;
 
   }
   cout<<"Вывод записей: "<<endl;
   for (int i=0;i<n;i++)
     {
       cout<<i+1<<"\t"<<mas[i].fam<<"\t"<<mas[i].god<<"\t"<<mas[i].sball<<endl;
     }
 
     float temp;
     for (int i=0;i<n-1;i++)
        for (int j=0;j<n-i;j++)
     if (mas[j].sball<mas[j+1].sball)
     {
       temp=mas[j].sball;
       mas[j].sball=mas[j+1].sball;
       mas[j+1].sball=temp;
     }
     cout<<endl;
int j;
     cout<<"Отсортированные записи по убыванию среднего бала: "<<endl;
     for (j=0;j<n;j++)
     {
         cout<<j+1<<"\t"<<mas[j].fam<<"\t"<<mas[j].god<<"\t"<<mas[j].sball<<endl;
 
 
     }
 
int average_index = 0, // переменная для хранения индекса среднего элемента массива
        first_index   = 0, // индекс первого элемента в массиве
        last_index    = n-1; // индекс последнего элемента в массиве
//--------------------------------------------------------
      // float search_value  = 3.2; // искомое (ключевое) значение
mas[j].sball=3.2;
//--------------------------------------------------------
 
 
 
 
   if (last_index == -1) cout << "\narray is empty" << endl; // массив пуст
 
    while (first_index < last_index)
    {
        average_index = first_index + (last_index - first_index) / 2; // меняем индекс среднего значения
    //    search_value <= mas[average_index]?last_index = average_index : first_index = average_index + 1;    // найден ключевой элемент или нет
   if (mas[j].sball<average_index) first_index=average_index-1;
   else if (mas[j].sball>average_index) last_index=average_index+1;
 }
    if ((mas[last_index].sball==mas[j].sball)==1)
        cout << "\nvalue is found" << "\nindex = " << last_index << endl;
    else
        cout << "\nvalue is not found" << endl;
 
  // system("pause");
    return 0;
}
У меня поиск работает когда я ввожу только одну запись, как исправить чтоб он работал когда я введу больше 1 записи?
0
52 / 52 / 24
Регистрация: 24.12.2011
Сообщений: 133
11.03.2016, 21:48 3
C++
1
2
3
4
5
6
7
8
9
// float search_value  = 3.2; // искомое (ключевое) значение
mas[j].sball=3.2;
 
while (first_index < last_index)
{
    average_index = first_index + (last_index - first_index) / 2; // меняем индекс среднего значения
    if (mas[j].sball<average_index) first_index=average_index-1;
    else if (mas[j].sball>average_index) last_index=average_index+1;
}
Ты вот здесь много чего напутал:
1) какое ты вообще значение ищешь в массиве? в какой переменной оно лежит?
2) j здесь быть вообще не должно, его нужно заменить на average_index
3) сравнивать элемент массива с индексом неправильно, нужно сравнивать его с искомым значением

Суть алгоритма такая:
1) вычисляешь average index (формула у тебя вроде правильная)
2) сравниваешь элемент массива с индексом average_index с искомым значением
если элемент больше, то last_index = average_index
если элемент меньше, то first_index = average_index
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
11.03.2016, 22:57  [ТС] 4
ищу значение среднего бала, работает только с одной записью, когда больше одной программа зависает и нельзя выйти из программы
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
12.03.2016, 23:44  [ТС] 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
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
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
struct structura
{
char fam[20];
int god;
float sball;
 
 
}; structura zap;
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
   structura mas[10];
   int n;
int average_index = 0, // переменная для хранения индекса среднего элемента массива
        first_index   = 0, // индекс первого элемента в массиве
        last_index    = n-1; // индекс последнего элемента в массиве
//--------------------------------------------------------
      // float search_value  = 3.2; // искомое (ключевое) значение
float search_value=3.2;
 
   cout<<"Введите количество записей: ";
   cin>>n;
   for (int i=0;i<n;i++)
   {
     cin.get();
     cout<<"Введите фамилию: ";
     cin.getline(mas[i].fam,20);
     cout<<"Введите год рождения: ";
     cin>>mas[i].god;
     cout<<"Введите средний бал: ";
     cin>>mas[i].sball;
     cout<<endl;
 
   }
   cout<<"Вывод записей: "<<endl;
   for (int i=0;i<n;i++)
     {
       cout<<i+1<<"\t"<<mas[i].fam<<"\t"<<mas[i].god<<"\t"<<mas[i].sball<<endl;
     }
 
     float temp;
     for (int i=0;i<n-1;i++)
        for (int j=0;j<n-i;j++)
     if (mas[j].sball<mas[j+1].sball)
     {
       temp=mas[j].sball;
       mas[j].sball=mas[j+1].sball;
       mas[j+1].sball=temp;
     }
     cout<<endl;
int j;
     cout<<"Отсортированные записи по убыванию среднего бала: "<<endl;
     for (j=0;j<n;j++)
     {
         cout<<j+1<<"\t"<<mas[j].fam<<"\t"<<mas[j].god<<"\t"<<mas[j].sball<<endl;
 
 }
 cin>>search_value;
 if (last_index == -1) cout << "\narray is empty" << endl; // массив пуст
 
    while (first_index <= last_index)
    {
        average_index = (last_index + first_index) / 2; // меняем индекс среднего значения
      //search_value <= mas[average_index].sball?last_index = average_index : first_index = average_index + 1;    // найден ключевой элемент или нет
   if (search_value<mas[average_index].sball) first_index=average_index+1;
   else if (search_value>mas[average_index].sball) last_index=average_index-1;
   else return average_index;
 
 
     }
 
 
if (mas[last_index].sball==search_value)
        cout << "\nvalue is found" << "\nindex = " << last_index << endl;
    else
 
 
        cout << "\nvalue is not found" << endl;
//--------------------------------------------------------
 
//cout<<"Enter search key: "<<endl;
//cin>>search_value;
 
 
 
 
 system("pause");
    return 0;
}
0
13 / 13 / 10
Регистрация: 25.05.2015
Сообщений: 554
15.03.2016, 19:31  [ТС] 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
#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;
struct structura
{
char fam[20];
int god;
float sball;
 
 
}; structura zap;
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
   structura mas[10];
   int n;
 
 
   cout<<"Введите количество записей: ";
   cin>>n;
   for (int i=0;i<n;i++)
   {
     cin.get();
     cout<<"Введите фамилию: ";
     cin.getline(mas[i].fam,20);
     cout<<"Введите год рождения: ";
     cin>>mas[i].god;
     cout<<"Введите средний бал: ";
     cin>>mas[i].sball;
     cout<<endl;
 
   }
   cout<<"Вывод записей: "<<endl;
   for (int i=0;i<n;i++)
     {
       cout<<i+1<<"\t"<<mas[i].fam<<"\t"<<mas[i].god<<"\t"<<mas[i].sball<<endl;
     }
 
     float temp;
     for (int i=0;i<n-1;i++)
        for (int j=0;j<n-i;j++)
     if (mas[j].sball<mas[j+1].sball)
     {
       temp=mas[j].sball;
       mas[j].sball=mas[j+1].sball;
       mas[j+1].sball=temp;
     }
     cout<<endl;
 
     cout<<"Отсортированные записи по убыванию среднего бала: "<<endl;
     for (int j=0;j<n;j++)
     {
         cout<<j+1<<"\t"<<mas[j].fam<<"\t"<<mas[j].god<<"\t"<<mas[j].sball<<endl;
 
 }
 int average_index = 0, // переменная для хранения индекса среднего элемента массива
        first_index   = 0, // индекс первого элемента в массиве
    searchkey=-1,
        last_index    = n; // индекс последнего элемента в массиве
//--------------------------------------------------------
      // float search_value  = 3.2; // искомое (ключевое) значение
float key=3.2;
 cout<<"Enter key: "<<endl;
 cin>>key;
    while (first_index <= last_index)
    {
        average_index = first_index + (last_index - first_index) / 2; // меняем индекс среднего значения
   if (key==mas[average_index].sball)
   {
       searchkey=average_index;
       break;
   }
if (key<mas[average_index].sball)
    last_index=average_index-1;
else
    first_index=average_index+1;
    }
if (searchkey==-1)
  cout<<"Элемент не найден!"<<endl;
else
    cout<<"Элемент найден "<<key<<"\n "<<mas[average_index].fam<<"\t"<<mas[average_index].god<<"\t"<<mas[average_index].sball<<endl;
 
 system("pause");
    return 0;
 
}
0
15.03.2016, 19:31
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.03.2016, 19:31
Помогаю со студенческими работами здесь

Расчитать средний бал каждого по всем предметам и вывести фио учеников чей средний балл выше
Здравствуйте я пытался написать програму код будет ниже нужно сделать чтобы он с клавы в файл читал...

средний бал
есть Поля Математика, Физика, История. В них занесены оценки. Как вычислить средний бал для поля...

Средний бал студентов
1.Вывести номер зачётки тех студентов, успеваемость которых выше средней 2.Отсортировать в порядке...

Посчитать средний бал
Ребят, помогите, пожалуйста, составить формулу для расчета среднего балла. - оценка по...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru