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

Нулевые элементы - C++

Восстановить пароль Регистрация
 
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
03.04.2013, 08:34     Нулевые элементы #1
Вот чем дело, допустим у нас есть 10 интов и надо определить есть ли нулевые, мы можем сделать так:
C++
1
2
3
4
flag=0;
if(!first) flag=1;
if(!second) flag=1;
...
а можем так
C++
1
2
if(!(first && srcond && third &&....))
flag=1;
но если на м надо определить из 10....20..100 интов кол-во нулевых мы опять же можем сделать так:
C++
1
2
3
4
count=0;
if(!first) count++;
if(!second)  count++;
...
и у меня возник закономерно вопрос, можно их конечно ввечвти в массив и сделать так:
C++
1
2
3
count=0;
for(i=0,i<kol_vo,i++)
if(!a[i]) count++;
вопрос собственно вот в чем можно ли это сделать только через логические операции?
что то вроде
C++
1
2
3
a=first ||second ||.....
или
a=first&& second &&...
как я понимаю оба варианта не подходят, в первый подходит чтоб узнать есть ли ненулевые второй есть ли нулевые,
но почему-то мне кажется есть какой то путь делать такую проверну только через логические операторы...
может есть идеи*?
п.сы. а еще может кто знает хорошую статейку про логические операции( какие то нетривиальные приложения к ним)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2013, 08:34     Нулевые элементы
Посмотрите здесь:

C++ Нулевые элементы в начало
одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их порядок в начало массива, а нулевые элементы в конец массива in c++ C++
Все отрицательные элементы массива уменьшить в двое, а все нулевые элементы заменить на... C++
Заменить первые два нулевые элементы заданного вектора В на два первых НЕ нулевые элементы этого вектора C++
C++ Заменить первых 2 нулевые элементы заданного вектора соответственно на первых 2 не нулевые элементы этого вектора
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
03.04.2013, 09:14     Нулевые элементы #2
лилиэн, что за наркоманство? Зачем в одну кучу мешать инты и булеаны?
Естественно, если у вас есть неопределенное количество переменных, нужно создавать какой-либо массив, а не руками постоянно лезть в код и дописывать строчки. Вон, к примеру, как вы с циклом привели код.

Цитата Сообщение от лилиэн Посмотреть сообщение
в первый подходит чтоб узнать есть ли ненулевые второй есть ли нулевые,
Вы определитесь что вам нужно: узнать есть ли нулевые, или узнать есть ли не нулевые? Или узнать есть ли те и те? Опять же цикл с count-м подходит очень хорошо:[*]count == kol_vo - Только одни нули.[*]count < kol_vo - Есть и нули и не нули.[*]count == 0 - Нулей нет совсем.
В общем виде: количество нулей == count, количество не нулей == kol_vo-count.

Цитата Сообщение от лилиэн Посмотреть сообщение
но почему-то мне кажется есть какой то путь делать такую проверну только через логические операторы...
Вот ваш же путь через логический оператор:
C++
1
if(!a[i])
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11828 / 6807 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
03.04.2013, 09:20     Нулевые элементы #3
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main(){
    const int size=10;
    int arr[size]={0,0,4,3,0,1,6,5,9,0};
    int count=0;
    for(int i=0;i<size;++i)
        count+=!arr[i];
    std::cout<<"Count: "<<count<<std::endl;
    return 0;
}
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,293
Завершенные тесты: 1
03.04.2013, 09:36     Нулевые элементы #4
лилиэн, то что вы делаете, называется http://lurkmore.to/%D0%98%D0%BD%D0%B...BA.D0.BE.D0.B4
лилиэн
6 / 6 / 0
Регистрация: 22.11.2012
Сообщений: 95
03.04.2013, 14:40  [ТС]     Нулевые элементы #5
Цитата Сообщение от alexcoder Посмотреть сообщение
лилиэн, то что вы делаете, называется http://lurkmore.to/%D0%98%D0%BD%D0%B...BA.D0.BE.D0.B4
увидела сайт сразу поняла ....
дело не в том что у меня наркоманство или что то в этом роде,наш препод сказал что все те пути что представила выше это конечно хорошо и правильно но есть очень элегантный путь чисто через логические операторы .... но я все что могла перерыла, и не понимаю о чем он говорит вообще(((

пы.сы мне как раз индусский вариант нужен что бы препод успокоился...
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
03.04.2013, 16:22     Нулевые элементы #6
Хм. Занятно. На сколько я понимаю вашего преподавателя, он хочет чтобы вы поняли что
int iX; bool bX; Результат if
0 false true
1 true true
!0 && !1 true OR false false
То есть что можно иногда заменять логические выражения целочисленными значениями.
Но как из этого теперь программку состряпать?
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
#include <iostream.h>
int main(int argc, char* argv[])
{
const int n = 4;
int iX[n] = {0, 0, 1, 2};
bool bX = false;
 
cout << "==" << endl;
for(int i=0; i<n; i++)
  {if(iX[i] == bX) cout << "TRuE" << endl;
   else cout << "FALsE" << endl;}
 
cout << "||" << endl;
for(int i=0; i<n; i++)
  {if(iX[i] || bX) cout << "TRuE" << endl;
   else cout << "FALsE" << endl;}
 
cout << "&&" << endl;
for(int i=0; i<n; i++)
  {if(iX[i] && bX) cout << "TRuE" << endl;
   else cout << "FALsE" << endl;}
 
cin.ignore();
 
return 0;
}

То есть в общем виде вам нужно среди неопределенного количества целочисленных переменных найти нулевые используя только логические операторы, да?
Так вон самое элегантное решение вам уже Croessmah предложил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2013, 19:07     Нулевые элементы
Еще ссылки по теме:

Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы C++
C++ Перенести в начало массива нулевые элементы
C++ Сжать массив, выбросив нулевые элементы

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

Или воспользуйтесь поиском по форуму:
ru_LAN
11 / 11 / 0
Регистрация: 13.11.2011
Сообщений: 265
03.04.2013, 19:07     Нулевые элементы #7
alexcoder, скорее индусский чем китайский.
Yandex
Объявления
03.04.2013, 19:07     Нулевые элементы
Ответ Создать тему
Опции темы

Текущее время: 02:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru