Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/26: Рейтинг темы: голосов - 26, средняя оценка - 4.85
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214

Найти значение lg (x) от каждого элемента и переставить на 1 место элемент, значение функции от которого максимально

02.03.2021, 21:11. Показов 5393. Ответов 24
Метки c++ (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Есть такое задание:
Дан массив целых чисел. Решить заданную согласно варианта задачу и
переставить найденный элемент обоими методами поиска (линейным и
бинарным) в начало списка. Для упорядочивания массива использовать
пузырьковую сортировку.

Найти значение lg (x) от каждого элемента и переставить на 1 место элемент,
значение функции от которого максимально.

В общем-то, столкнулась с такой проблемой, не знаю, что делать с отрицательными числами. Десятичный логарифм от отрицательного числа не берётся, не совсем понимаю, как осуществить это с отрицательными числами.

Вот код, что написала:
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    int i;
    float arr[256];
    float max;
    float b;
 
    setlocale(LC_ALL, "RUSSIAN");
 
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
       
        cin >> arr[i];
        max = log10(arr[0]);
    }
    
    for (int i = 0; i < n; i++)
    {
        if (arr[i] <= 0)
        {
            cout << "Отрицательное, логарифм неопределён!" << " \n";
        }
        else
        {
 
            cout << "Логарифм от положительного числа" << log10(arr[i]) << ", " << "\n";
            max = arr[0];
            for (int i = 0; i < n; ++i) 
            {
               if ((log10(arr[i]) > log10(max)))
               {
                  max = arr[i];
               }
            }
        }
        cout << "\n";
    } 
    cout << "Элемент с максимальным логарифмом  " << max;
     //сортировка пузырьком
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n-1; j++)
        {
            if (arr[j] < arr[j + 1])
            {   b = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = b;
            }
        }
    }
    cout << endl << "Отсортированный массив: ";
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}
Добавлено через 29 минут
Добавила ещё линейный поиск в программу, чтобы находил позицию введённого числа, но по заданию нужно, чтобы он автоматом находил максимальное, попробовала поиграться с max, но что-то не выходит
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    int i;
    float arr[256];
    float arr2[256];
    float max;
    float b;
    int k;
    int h = 0;
 
    setlocale(LC_ALL, "RUSSIAN");
 
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
 
    for (int i = 0; i < n; i++)
    {
        cin >> arr[i];
        max = log10(arr[0]);
    }
 
    cout << "Введите ключ: ";
    cin >> k;
 
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == k)
        {
            arr2[h++] = i;
        }
    }
 
    if (h != 0)
    {
        for (int i = 0; i < h; i++)
        {
            cout << "Ключ " << k << " находится в ячейке: " << arr2[i] << endl;
        }
    }
    else
    {
        cout << "Не нашли ключ " << k << " в массиве" << endl;
    }
    
    for (int i = 0; i < n; i++)
    {
        if (arr[i] <= 0)
        {
            cout << "Отрицательное, логарифм неопределён!" << " \n";
        }
        else
        {
 
            cout << "Логарифм от положительного числа" << log10(arr[i]) << ", " << "\n";
            
            for (int i = 0; i < n; ++i) 
            {
               if ((log10(arr[i]) > log10(max)))
               {
                  max = arr[i];
               }
            }
        }
        cout << "\n";
    } 
    cout << "Элемент с максимальным логарифмом  " << max;
     //сортировка пузырьком
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n-1; j++)
        {
            if (arr[j] < arr[j + 1])
            {   
                b = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = b;
            }
        }
    }
    cout << endl << "Отсортированный массив: ";
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.03.2021, 21:11
Ответы с готовыми решениями:

Для каждого столбца заданной матрицы Т(5,3) найти и напечатать элемент, значение которого максимально
Составить программу в системе Mathcad для заданной матрицы. Для каждого столбца заданной матрицы Т(5,3) найти и напечатать элемент,...

Найти максимальный элемент массива среди каждого третьего, значение которого превышает значение m
Всем привет. Нужно сдать индивидуальную работу на Си. У меня постоянно находят в ней ошибки. Уже не знаю, что делать. Если кто-то поможет...

Вставить в массив на первое место элемент, значение которого меньше минимального элемента
Вставить в массив на первое место элемент, значение которого меньше минимального элемента массива, раздвинув сам массив. #include...

24
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.03.2021, 21:41  [ТС]
Студворк — интернет-сервис помощи студентам
oleg-m1973, Я ввожу в линейный поиск 50, он выводит позицию, ввожу в бинарный 50, пишет, что не найден элемент
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.03.2021, 21:42
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Я ввожу в линейный поиск 50, он выводит позицию, ввожу в бинарный 50, пишет, что не найден элемент
Это сделала?
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Тогда и в бинарном поиске надо поменять условия на противоположные
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.03.2021, 21:44  [ТС]
oleg-m1973, Всё, вроде, ищет правильно теперь, спасибо огромное за помощь Вроде, всё поправила
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <cmath>
 
using namespace std;
 
int main()
{
    int i;
    int arr[256];
    int arr2[256];
    float max;
    float b;
    int k;
    int h = 0;
    int bin;
 
    setlocale(LC_ALL, "RUSSIAN");
 
    int n;
    cout << "Введите размерность массива: ";
    cin >> n;
 
    for (int i = 0; i < n; )
    {
        cin >> arr[i];
        if (arr[i] > 0)
            i++;
        else
            cout << "Ввод отрицательного числа невозможен, повторите попытку!" << std::endl;
    }
    max = arr[0];
    cout << "Введите число для поиска: ";
    cin >> k;
 
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == k)
        {
            cout << "Индекс элемента " << k << " в массиве, осуществлённый путём линейного поиска равен: " << i << endl;
        }
    }
 
    
    for (int i = 0; i < n; i++)
    {
        if (arr[i] <= 0)
        {
            cout << "Отрицательное, логарифм неопределён!" << " \n";
        }
        else
        {
 
            cout << "Логарифм от положительного числа: " << log10(arr[i]) << "\n";
            
            for (int i = 0; i < n; ++i) 
            {
               if ((log10(arr[i]) > log10(max)))
               {
                  max = arr[i];
               }
            }
        }
        cout << "\n";
    } 
    cout << "Элемент с максимальным логарифмом: " << max << endl;
     //сортировка пузырьком
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n-1; j++)
        {
            if (arr[j] < arr[j + 1])
            {   
                b = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = b;
            }
        }
    }
 
    cout << endl << "Отсортированный массив: ";
    for (int i = 0; i < n; i++)
    {
        cout << arr[i] << " ";
    }
    cout << "\n";
 
    bool flag = false;
    int l = 0;
    int r = n - 1;
    int mid;
 
    cout << "Введите ключ для бинарного поиска: ";
    cin >> bin;
 
    while ((l <= r) && (flag != true))
    {
        mid = (l + r) / 2;
 
        if (arr[mid] == bin)
        {
            flag = true;
        }
        if (arr[mid] < bin)
        {
            r = mid - 1;
        }
        else
        {
            l = mid + 1;
        }
    }
    if (flag)
    {
        cout << "Индекс элемента " << bin << " в отсортированном массиве равен: " << mid;
    }
    else
    {
        cout << "Элемент не найден!";
    }
    cout << endl;
    system("pause");
    return 0;
}
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
03.03.2021, 21:53
Лучший ответ Сообщение было отмечено ANGELin04ka как решение

Решение

Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Всё, вроде, ищет правильно теперь, спасибо огромное за помощь Вроде, всё поправила
C++
1
2
3
4
5
6
7
8
9
   while (l <= r)
    {
        mid = (l + r) / 2;
 
        if (arr[mid] == bin)
        {
            flag = true;
            break;
        }
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
03.03.2021, 21:55  [ТС]
oleg-m1973, Всё отлично ищет, спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2021, 21:55

В каждом столбце матрицы найти элемент, значение которого максимально отличается от среднего арифметического
Дана матрица действительных чисел размером 8х10. В каждом столбце определить значение и номер элемента, значение которого в наибольшей...

Вывести значение каждого третьего элемента последовательности, значение которого кратно трем
Входные данные: Во входном потоке в первой строке через пробел перечислены значения элементов целочисленной последовательности....

Найти значение максимального элемента и номер последнего элемента, значение которого равно максимальному
Помогите

Найти среднее арифметическое из каждого столбца и поставить это значение на место элемента находящегося на главной диагонали в новом массиве
Задача:Дана квадратная матрица.Найти среднее арифметическое из каждого столбца и поставить это значение на место элемента находящегося на...

Найти значение t, при котором значение функции максимально
Момент времени t, в который будет достигнута максимальная скорость точки, если уравнение движения точки дано в виде: x=2*sin(pi/2*t+pi/4)о ...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru