Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2011, 18:47   #1
Assemblerman
Новичок
Джуниор
 
Регистрация: 18.08.2011
Сообщений: 6
Радость Определение четности/нечетности

В качестве практики решил написать программу,определяющую четность или нечетность числа.однозначные числа определяются без проблем.
Однозначные числа:
Код:
// bool.cpp : main project file.

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>

int main()
{
	int n;
	n=0;
	n=getchar();
	if(n&0x01)
	printf("Nechet\n");
	else
	printf("chet");
	getch();
	
}
А вот при определении трехзначных и более чисел возникли проблемы.
Многозначные числа:
Код:
// bool.cpp : main project file.

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#define end -1



int main()
{
	int n,c;
	n=0;
	c=0;
	while(n=getchar() != end)
		c=c+n;
	if(c&0x01)
	printf("Nechet\n");
	else
	printf("chet");
	getch();
	
}
Assemblerman вне форума Ответить с цитированием
Старый 18.08.2011, 18:54   #2
VadikV
Форумчанин
 
Аватар для VadikV
 
Регистрация: 08.01.2011
Сообщений: 226
По умолчанию

Код:
if(n % 2)
	printf("Nechet\n");
	else
	printf("chet");
хотя какая разница сколько разрядов??? проверям самый младший и все
математика.... если делится на 2 - четное. если младший бит ==1 - не четное. все то же самое, как и для однозначных
icq 223-630-454
e-mail vysotskiy@list.ru
сайт http://www.big-library.net/
VadikV вне форума Ответить с цитированием
Старый 18.08.2011, 18:57   #3
Assemblerman
Новичок
Джуниор
 
Регистрация: 18.08.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от VadikV Посмотреть сообщение
Код:
if(n % 2)
	printf("Nechet\n");
	else
	printf("chet");
хотя какая разница сколько разрядов??? проверям самый младший и все
математика.... если делится на 2 - четное. если младший бит ==1 - не четное. все то же самое, как и для однозначных
Спасибо за совет,однако этот способ срабатывает только для однозначных,у меня так.

Последний раз редактировалось Assemblerman; 18.08.2011 в 19:01.
Assemblerman вне форума Ответить с цитированием
Старый 18.08.2011, 19:04   #4
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

я в си не силен.
Консольное приложение?
getchar - возвращает число??? или все же код символа?

while(n=getchar() != end)
c=c+n;

это точно не будет работать верно.
допустим вы вводите "111"
что вы получите в переменой с ? ))
Русский язык не мой конёк

Последний раз редактировалось Stilet; 19.08.2011 в 21:03.
Neobrat вне форума Ответить с цитированием
Старый 18.08.2011, 19:17   #5
Assemblerman
Новичок
Джуниор
 
Регистрация: 18.08.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Neobrat Посмотреть сообщение
while(n=getchar() != end)
c=c+n;

это точно не будет работать верно.
допустим вы вводите "111"
что вы получите в переменой с ? ))
Уже вводилПолучил "Chet"))Я об этом задумывался,что возможно я получаю код числа,а не само число.Поэтому и бред получается,я же ,по сути,выполняю "Логическое И" с кодом символа.Верно?
Assemblerman вне форума Ответить с цитированием
Старый 18.08.2011, 19:21   #6
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

нет. вы сделали не правильный вывод..

while(n=getchar() != end)
c=c+n;
на входе 123
1.
С=0
n=1
результат
с=1
2.
С=1
n=2
результат
с=3
3.
С=3
n=3
результат
с=6

6 <> 123


добавлено
а вот как раз проверка if(c&0x01) верна.
(если я правильно понял, вы смотрите установлен ли в переменой с младший бит)
Русский язык не мой конёк

Последний раз редактировалось Neobrat; 18.08.2011 в 19:23.
Neobrat вне форума Ответить с цитированием
Старый 18.08.2011, 19:29   #7
Assemblerman
Новичок
Джуниор
 
Регистрация: 18.08.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Neobrat Посмотреть сообщение
нет. вы сделали не правильный вывод..

while(n=getchar() != end)
c=c+n;
на входе 123
1.
С=0
n=1
результат
с=1
2.
С=1
n=2
результат
с=3
3.
С=3
n=3
результат
с=6

6 <> 123


добавлено
а вот как раз проверка if(c&0x01) верна.
(если я правильно понял, вы смотрите установлен ли в переменой с младший бит)
Да,я проверяю младший бит.Я вас понял,сказать по правде я задумывался об этом,ведь функция getchar обрабатывает символы по-очереди,но меня "переубедил" один факт...на 111 он мне выдает "chet"
Assemblerman вне форума Ответить с цитированием
Старый 18.08.2011, 19:34   #8
Neobrat
Форумчанин
 
Регистрация: 10.12.2007
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Assemblerman Посмотреть сообщение
но меня "переубедил" один факт...на 111 он мне выдает "chet"
и это разве правильный результат?
когда 111 стало считаться четным? ))

и еще подумайте, так уж вам необходимо получить в переменой такой же число что и ввели, для проверки четности!? ))
Русский язык не мой конёк
Neobrat вне форума Ответить с цитированием
Старый 18.08.2011, 19:37   #9
Assemblerman
Новичок
Джуниор
 
Регистрация: 18.08.2011
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Neobrat Посмотреть сообщение
и это разве правильный результат?
когда 111 стало считаться четным? ))

и еще подумайте, так уж вам необходимо получить в переменой такой же число что и ввели, для проверки четности!? ))
Я ж про это!)))Сумма цифр 111 дает нечетность,а он пишет четность.Честно сказать нет,но ради практики,Я постоянно проверяю усвоенный материал,на взаимодействие с вводом-выводом.

Написал наконец код.Оказывается надо было обрабатывать массив,а потом только переводить его в число функцией atoi()
Код:
// bool.cpp : main project file.

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define eof -1
#define maxline 100


int getline(char s[], int lim)
{
	int i,c;
	for(i=0;i<lim-1 && (c=getchar()) != eof && c!= '\n';i++)
		s[i]=c;
	s[i]='\0';
	i++;
	return(i);
}	
 int main()
{	
	int x;
	char s[maxline];
	for(x=0;x<maxline;x++)
		s[x]=0;
	x=0;
	getline(s,maxline);
	x= atoi (s);	
	if(x&0x01)
	printf("Nechet\n");
	else
	printf("chet");
	getch();
}
Вот эта может и трехзначные и двухзначные определять.

Последний раз редактировалось Stilet; 19.08.2011 в 21:05.
Assemblerman вне форума Ответить с цитированием
Старый 19.08.2011, 17:15   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
#include <stdio.h>

int main() {
  int n;
  scanf("%d", &n);
  if (n & 1 == 0) // n % 2 == 0
    puts("Chet");
  else
    puts("Nechet");

  return 0;
}
getchar возвращает код символа (от 48 до 57 для цифр)

Последний раз редактировалось netrino; 19.08.2011 в 17:18.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка четности (используя Т триггер) snevar Помощь студентам 2 10.11.2010 14:24
Проверка четности, логические элементы snevar Помощь студентам 7 28.10.2010 21:14
Pascal. Сортировка по четности индексов массива. quba123 Помощь студентам 1 18.12.2009 00:05
Определение IP IvanLex HTML и CSS 6 28.03.2008 07:46
Определение IP IvanLex Общие вопросы по Java, Java SE, Kotlin 1 19.02.2008 09:12