Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/55: Рейтинг темы: голосов - 55, средняя оценка - 4.78
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335

Как перечислить элементы массива в условии - if

14.02.2020, 22:00. Показов 10980. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добра, братья по цеху!
Снова прошу подсказать где - РЫТЬ.
Передо мной 3 книжки, тока подскажите пожалуйста в какой теме может быть хоть намек, я не нахожу!

Как красиво перечислить элементы массива в условии - if
Если подобное вообще реально конечно
C++
1
2
3
4
int size=4;
char mass[size][5] = {"b2","d20","m14","s9",};
 
if (ch==mass[0])
один элемент то, могу сравнить, а как сделать так, чтобы - ch сравнивался с каждым элементом массива?

простой способ, не вполне устравивает! длинно слишком ...
C++
1
if (ch=="b2"||ch=="d20"||ch=="m14"||ch=="s9")
ЗАРАНЕЕ БЛАГОДАРЕН ЗА ПОДСКАЗКУ КАКАУЮ ТЕМУ СМОТРЕТЬ!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2020, 22:00
Ответы с готовыми решениями:

перечислить конкретные элементы массива без цикла
Возможно ли перечислить элементы массива что-то вроде от 0 до n?

перечислить элементы массива D в массив E и подсчитать в них количество положительных чисел.
А. дан D(50) и -1<x<=1 перечислить элементы массива D в массив E и подсчитать в них количество положительных чисел. Б. дан D(10,10) ...

Как перечислить элементы множества?
Всем привет. По какой формуле решаются такие примеры? B={x: x∈Z; 4x2+3x-1≤0} Спасибо!

23
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
14.02.2020, 22:10
Лучший ответ Сообщение было отмечено R_U_S_V как решение

Решение

Для перебора элементов используются циклы. Переменная цикла (в данном случае i) используется как индекс элемента массива
C++
1
2
3
4
5
for (int i = 0; i < size; ++i)
{
    if (ch == mass[i]) {}
 
}
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
14.02.2020, 22:18  [ТС]
Спасибо большое!
не пашет кнопка - спасибо (второй день уже)... не могу поставить плюсик)
что это может быть?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
14.02.2020, 22:32
Цитата Сообщение от R_U_S_V Посмотреть сообщение
ch==mass[0]
Только имейте в виду, что если ch - не std::string, а массив символов (или указатель на char), то сравниваться будут не строки, а указатели. Чтобы сравнить строки, в этом случае нужна функция strcmp.

PS. какие интересные у вас значения в массиве

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <algorithm>
#include <cstring>
 
bool any_of_cstring(char const * ch, std::initializer_list<char const *> lst)
{
    auto cmp = [ch](char const * v) { return std::strcmp(ch, v) == 0; };
    return std::any_of(lst.begin(), lst.end(), cmp);
}
 
int main()
{
    char const * ch = "s9";
    
    if(any_of_cstring(ch, {"b2", "d20", "m14", "s9"}))
    {
        //.....
    }
}
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
14.02.2020, 22:32  [ТС]
Да, примитивный морской бой решил начеркать, вот и значения такие, это кородинаты)))
Но пока они строчные, а схема вообще в автокаде начерчена, вот сижу разбираюсь, судя по всему сидеть мне долго)))

Кнопка - ПЛЮС так и не работает , в 2-х браузерах уже прообовал, как благодарить ...
0
14.02.2020, 22:37

Не по теме:

Цитата Сообщение от R_U_S_V Посмотреть сообщение
это кородинаты
А, ну тогда ладно :)
Мне это кое-что другое напомнило.

0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
14.02.2020, 22:38  [ТС]
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
14.02.2020, 23:16  [ТС]
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
int bombs = 0;  // в эту переменную записываем количество обнаруженных бомб (для старта, даем ей значение = 0)
int ship = 0;   // в эту переменную записываем количество обнаруженных кораблей, точнее клеток! занимаемых кораблями (для старта, даем ей значение = 0)
string ch;
 
 
char mass[4][5] = {"b2","d20","m14","s9",};                                                                            // массив для однопалубных кораблей
char mass_2[17][5] = {"e7","e8","c12","d12","e12","f12","f17","g17","h17","n3","o3","e8","n9","n10","n11","r18","r19",};  // массив для остальных кораблей
char mass_3[8][5] = {"b5","b16","g2","i13","j6","m19","r1","t6"};                                                         // массив для бомб
 
do
{
    cout << "\n введи координаты: "; cin >> ch; // просим ввести координаты
 
    for(int i=0; i<4; i++)
    {
    if (ch==mass[i])
    {
    cout << " вы потопили однопалубный корабль! ";
    ship ++;
    }
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    for(int j=0; j<17; j++)
    {
    if (ch==mass_2[j])
    {
    cout << " один из кораблей ранен! ";
    ship ++;
    }
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    for(int a=0; a<8; a++)
    {
    if (ch==mass_3[a])
    {
    cout << " *вы подорвали бомбу* ";
    bombs ++;
    }
    }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
} while (bombs!=8 && ship!=20);
Вот пока так осилил только))
Код скопировал в ПОДВАЛ, буду разбираться потихоньку БЛАГОДАРЮ!
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
14.02.2020, 23:34
R_U_S_V, раз уж Вы пользуетесь строками почему бы не записать:

C++
1
string mass[4] = { "b2","d20","m14","s9" };
и аналогично mass_2 и mass_3
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
15.02.2020, 09:03  [ТС]
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Иными словами, уходим от двумерного массива!?
Если да, то это круто, упрощает запись и работу!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,178
15.02.2020, 09:33
Цитата Сообщение от R_U_S_V Посмотреть сообщение
Иными словами, уходим от двумерного массива!?
Никуда мы ни от чего не "уходим". В вашем исходном коде используется двумерный массив символов, он же - одномерный массив строк. Является ли массив двухмерным или одномерным - лишь вопрос произвольной интерпретации.
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
15.02.2020, 10:25  [ТС]
Я видимо не полностью понимаю!

ведь если так
C++
1
char mass[4][5] = {"b2","d20","m14","s9"};
то я могу обратиться к цифре 2 так - cout << mass[1][1]; (ну если уж нужно, вдруг...)


а если так
C++
1
string mass[4] = {"b2","d20","m14","s9"};
то я могу обратиться только к отдельной строке! А не посимвольно...
например - cout << mass[1];

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

ЛИБО Я НЕ ПОНИМАЮ...

Кнопка - СПАСИБО, снова мертвая!!!!!!
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12922 / 6789 / 1818
Регистрация: 18.10.2014
Сообщений: 17,178
15.02.2020, 10:49
Цитата Сообщение от R_U_S_V Посмотреть сообщение
то я могу обратиться только к отдельной строке! А не посимвольно...
например - cout << mass[1];

Пробовали? Попробуйте и в этом варианте cout << mass[1][1]. Расскажите о результатах.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
15.02.2020, 10:52  [ТС]
Ок! Спасибо! Вернусь вечером...
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
15.02.2020, 18:48  [ТС]
Да! Спасибо не знал этого!

C++
1
2
3
4
5
char mass_1[3][4] = {"a12","b23","c33"};
cout << mass_1[1][1]<<"\n";
 
string mass_2[3] = {"a12","b23","c33"};
cout << mass_2[1][1];
0
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
08.03.2020, 20:54  [ТС]
Всех с праздником! Если есть кто на связи, вот попросил бы аудит моего формашлепства сделать, имеет право на жизнь такой код ?...
Сравнивает введенное число с числами в массиве
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int size_arr = 3;                                   
int array[size_arr] = {12, 22, 54};     
int i, a;
 
while(1)
{
    cout << "\n\n - enter numder: ";
    cin >> a;
 
       for (i=0; i<size_arr; ++i)
       {
        if (a == array[i])
            {
            cout << "\n есть такое число! "; break;
            }
       }
        if (a != array[i])
            {
            cout << "\n нет такого числа! ";
            }
}
Вот так, почемуто не получилось! не видит число 22 и 54 в массиве!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while(1)
{
    cout << "\n\n - enter numder: ";
    cin >> a;
 
       for (i=0; i<size_arr; ++i)
       {
        if (a == array[i])
            {cout << "\n есть такое число! "; break;}
        else
            {cout << "\n нет такого числа! "; break;}
       }
}
0
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
08.03.2020, 21:37
Лучший ответ Сообщение было отмечено R_U_S_V как решение

Решение

Приветствую, R_U_S_V, По поводу первого кода. Имеют место 2 ошибки: (1) синтаксическая и (2) времени исполнения.
1. В строке 1 нужно записать:
C++
1
const int size_arr = 3;
или
C++
1
constexpr int size_arr = 3;
т.к. статический массив в качестве размера должен принимать константу.
2. В строке 17 индекс i может выходить за пределы размера массива. Это будет происходить всякий раз, когда введенное Вами число не присутствует в массиве.
Это условие (строка 17) лучше записать так:
C++
1
if (i == size_arr)
тогда значение i, равное размеру массива, само будет играть роль флага, сигнализирующего о том, что введенное число в массиве не найдено.
1
10 / 9 / 1
Регистрация: 25.12.2019
Сообщений: 335
08.03.2020, 21:44  [ТС]
Благодарю за отклик! Анализирую поправки! У меня уникальный случай, мне на это надо мноооого времени)))
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.03.2020, 21:52
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, num, k=0;
    cout << "n="; cin >> n;
 
    int *a = new int[n];
 
    for (int i = 0; i < n; i++)
    {
        a[i]=rand()%9 + 1;
        cout << a[i] << " ";
    }  
    
    cout << "\nNumber="; cin >> num;
 
    for (int i = 0; i < n; i++)       
        if (a[i]==num) {k=1;cout << "YES\n"; break;}
            
    if(!k) cout << "NO\n";            
    
    delete[]a;
system("pause");
return 0;
}
R_U_S_V, для новой задачи создавайте новую тему
1
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
08.03.2020, 21:52
Второй код, при поставленной Вами задаче, будет работать некорректно, т.к. при сравнении введенного числа с первым же элементом массива (в случае, если они окажутся неравны), программа по ветке else выйдет из цикла for и проигнорирует оставшиеся элементы. То, что у Вас и получилось, судя по описанию.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.03.2020, 21:52
Помогаю со студенческими работами здесь

поменять местами элементы массива при условии
Ниже представлен мой код,в комментариях написал как работает программа. Работает правильно-из одного массива записывает в другой все...

Все элементы массива, предшествующие максимальному, установить равными минимуму (при определенном условии)
Задание:Дан массив из 15 целых чисел. Если минимальный эле- мент меньше максимального в 2 раза, то все элементы, предшест- вующие...

Найти максимальный элемент массива и его номера, при условии, что все элементы различны
Дан массив целых чисел.Найты максимальный элемент массива и его номера, при условии, что все элементы различны;

Как найти для этих условии 2 парных чисел а и b при котором выполняется все условии?
Мой пример кода был таким данный момент но не работал. В экране пустота. Ничего не выводится. Где у меня ошибка? Чего исправит? static...

Перечислить элементы множества
Перечислить все элементы множества. Задание 24 http://i055.***********/1004/14/c819485bbbfb.jpg Заранее спасибо!!


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru