0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
1

Упрощение цикла сортировки элементов массивов. Упрощение цикла поиска нужного элемента в массиве

11.05.2019, 20:33. Показов 1347. Ответов 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
/*Опишите, используя структуру, камеры хранения (номер, индекс камеры, заданный буквой). 
Составьте программу, определяющую, есть ли среди камер камера с номером 99. Упорядочите все камеры по возрастанию номеров.*/
 
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
struct Cam
{
    int nom;
    char ind;
};
 
int main()
{
    int i=0, k, s=0, temp = 0, pimp = 0;
    setlocale(0, "");
    cout << "Введите количество камер: ";
    cin >> k;
    Cam* kol = new Cam[k];
    while (i != k)
    {
        cout << "Введите номер камеры: ";
        cin >> kol[i].nom;
        cout << "Введите индекс камеры: ";
        cin >> kol[i].ind;
        i++;
    };
 
    for (int j = 0; j < k - 1; j++)
    {
        for (int i = 0; i < k - j - 1; i++)
        {
            if (kol[i].nom > kol[i + 1].nom)
            {
                temp = kol[i].nom;
                kol[i].nom = kol[i + 1].nom;
                kol[i + 1].nom = temp;
                temp = kol[i].ind;
                kol[i].ind = kol[i + 1].ind;
                kol[i + 1].ind = temp;
            }
        }
    }
    for (int i = 0; i < k; i++)
    {
        cout << kol[i].nom << kol[i].ind << " " << endl;
    }
    for (i = 0; i != k; i++)
        if (kol[i].nom == 99)
        {
            cout << "Найдено" << endl;
            s = 1;
        }
    if (s = 0)
        cout << "Не найдено" << endl;
    system("pause");
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2019, 20:33
Ответы с готовыми решениями:

Упрощение поиска элементов в массиве
к примеру нужно найти совпадения в массиве от части слова начиная с конца слова, я делаю так ...

Упрощение цикла
Здравствуйте. Подскажите, каким образом можно заменить/ускорить данный цикл: for j = 1:4 U2pr...

Упрощение цикла
Требуется упростить содержимое цикла while до цикла if, а также заменить функцию strtok на fprintf:...

Упрощение/корректировка цикла
Здравствуйте Уважаемые, подскажите в таком вопросе, пожалуйста - Есть показания датчиков, WrTop...

5
6574 / 4559 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
11.05.2019, 21:03 2
Цитата Сообщение от llatibro Посмотреть сообщение
if (kol[i].nom > kol[i + 1].nom)
* * * * * * {
* * * * * * * * temp = kol[i].nom;
* * * * * * * * kol[i].nom = kol[i + 1].nom;
* * * * * * * * kol[i + 1].nom = temp;
* * * * * * * * temp = kol[i].ind;
* * * * * * * * kol[i].ind = kol[i + 1].ind;
* * * * * * * * kol[i + 1].ind = temp;
* * * * * * }
Что-то типа
C++
1
2
3
4
    for (int j = k; j > 0 ; --j)
        for (int i = 1; i < j; ++i)
            if (kol[i - 1].nom > kol[i].nom)
                 std::swap(kol[i - 1], kol[i]);
1
0 / 0 / 0
Регистрация: 23.10.2018
Сообщений: 142
12.05.2019, 06:27  [ТС] 3
oleg-m1973, Спасибо) Что-то можете подсказать по поиску нужного элемента в массиве? По-моему мой вариант выглядит очень топорно и можно сделать по-красивее
0
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
12.05.2019, 06:48 4
ну по крайней мере
C++
1
2
 if (s == 0)
        cout << "Не найдено" << endl;
0
6574 / 4559 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
12.05.2019, 07:20 5
Цитата Сообщение от llatibro Посмотреть сообщение
for (i = 0; i != k; i++)
* * * * if (kol[i].nom == 99)
* * * * {
* * * * * * cout << "Найдено" << endl;
* * * * * * s = 1;
* * * * }
* * if (s = 0)
* * * * cout << "Не найдено" << endl;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
inline bool FindCam(const Cam *it, const Cam *end, int nom)
{
    for (; it != end; ++it)
         if (it->nom == nom)
             return true;
    return false;
}
 
 
...........................
main()
{
........................
    if (FindCam(kol, kol + k, 99))
        cout << "Найдено" << endl;
    else
        cout << "Не найдено" << endl;
.....................
}
0
35 / 32 / 20
Регистрация: 26.02.2013
Сообщений: 184
12.05.2019, 07:20 6
Цитата Сообщение от llatibro Посмотреть сообщение
По-моему мой вариант выглядит очень топорно и можно сделать по-красивее
в качестве усовершенствования поиска можно реализовать, например, алгоритм бинарного поиска Двоичный (бинарный) поиск С++
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2019, 07:20
Помогаю со студенческими работами здесь

Упрощение программы посредством цикла
Есть текст: procedure TForm1.RadioGroup1Click(Sender: TObject); begin if...

Упрощение сортировки элементов массива
Этот массив мне нужен для упрощение сортировки элементов массива т.е у меня будут задаваться числа...

составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с постусловием, цикла с предусловием и цикла с параметрами
помогите составить блок-схему алгоритмов для решения задач с использованием трех циклов цикла с...

Cоздать файл OLD.T из элементов типа char с помощью цикла repeat, признак выхода из цикла символ (!)
Построить программу в лазарусе, которая создает файл OLD.T из элементов типа char с помощью цикла...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru