Маленький вопрос к знатокам Visual C++

12 3
Yaroslav_Adv
На сайте с 27.09.2005
Offline
199
1174

Нужно следующее условие:

Элементы матрицы A(N,M), которые при делении на два дают нечетное число.

Т.е. что-то вроде:

if(A[j]__условие__)

Заранее спасибо.

С уважением, Ярослав Деревягин Веб-агентство "Found (http://found-it.ru)"
psylosss
На сайте с 23.12.2005
Offline
126
#1

(A[j] % 2 == 1)
подойдет? Если нет, то посмотрите точнее, как в C обозначается оператор остатка от деления. Может быть, ^. Но по-моему, все же %

Веб-разработка. Сложные проекты. Проектирование. Проект-менеджмент. Стартапы.
Yaroslav_Adv
На сайте с 27.09.2005
Offline
199
#2

psylosss, нифига не так, но все равно спасибо :)

Так:

if(A[j]/2%2!=0)

psylosss
На сайте с 23.12.2005
Offline
126
#3

Yaroslav_Adv, неверное ваше условие. Мои сомнения были только в обозначении оператора.

По-вашему, если в этой ячейке содержится число 22, то оно будет нечетным.

Делим на 2 (/2)- получаем 11. Остаток от деления 11 на 2 !=0. Число нечетное.

Решение же простое - проверять на ноль остаток от деления на 2. Если ноль, то четное; если не ноль, то нечетное.

Yaroslav_Adv
На сайте с 27.09.2005
Offline
199
#4

psylosss, не знаю, но мое решение точно работает, а Ваше точно не работает.

psylosss
На сайте с 23.12.2005
Offline
126
#5

:) правильное - это то, которое работает! значит, я ошибся

Sadie
На сайте с 11.04.2005
Offline
64
#6
Yaroslav_Adv:
if(A[j]__условие__)

Может, проще вот так:

....

извиняюсь и поправляюсь. если при делении на 2 дают нечетное число:

if( (A[j] & 1) && !(A[j]>>1 & 1)) ... // если проверять, что поделится на 2 без остатка

if( !(A[j]>>1 & 1)) // если неважно, делится ли число на 2 без остатка

Новости без комплексов (http://www.kompleksov.net/) | ЖЖ (http://sad-sadie.livejournal.com/)
Yaroslav_Adv
На сайте с 27.09.2005
Offline
199
#7

Sadie, может быть :) Не знаю :)

Кстати, может кто подскажет, что тут неверно:

Задание:

Напишите программу присвоения переменной значения, равного кол-ву строк матрицы A(N,M), содержащих хотя бы одну нулевую компоненту.

Программа:

#include "stdafx.h"

#include <stdio.h>

main()

{

int s,j,i; int A[3][3];

s=0;

for(i=0;i<3;i++)

{for(j=0;j<3;j++)

{scanf("%d",&A[j]);}}
printf("\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{if(A=0) s=s+1;}
{printf("%d",A[j]);printf(" ");
}}
printf("\n");}
printf("Summa strok s 0: %d\n",s);
}

Эта гадина упорно не хочет работать. В чем ошибся?
Это кому делать нечего и не лень :)

Sadie
На сайте с 11.04.2005
Offline
64
#8
Yaroslav_Adv:
if(A=0)

Сразу бросилось в глаза. Правильно: if( A[j]==0 )...
Или, что то же самое, if( !A[j] )...

Пояснение: если выражение внутри скобок оператора if не является нулем, то оно считается истинным. Иначе - ложным.

psylosss
На сайте с 23.12.2005
Offline
126
#9

числа целые. Значит, достаточно проверить остаток от деления на два. См. мой первый пост :) Sadie, как обозначается в С оператор остатка от деления?

Sadie
На сайте с 11.04.2005
Offline
64
#10
psylosss:
Sadie, как обозначается в С оператор остатка от деления?

%

Но в случае деления на степени двойки (2, 4, 8, 16...) проще и эффекитвнее делать побитовое AND над делимым...

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий