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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2015, 23:02   #1
slalomshop
 
Регистрация: 27.09.2015
Сообщений: 6
По умолчанию Помогите пож-та, не могу найти ошибку

Задание вот такое. Составить программу на языке Си. Выделить шестнадцатеричные целые числа без знака и напечатать шестнадцатеричную сумму их нечетных цифр.
У меня получился вот такой код, но не правильно считает сумму. Помогите найти ошибку и исправить задание.

Код:
#include <stdio.h>
#include <ctype.h>

#define COUNT_FROM_LEFT 1

typedef enum { IN, OUT, SKIP } state;

int is_space(int c)

{
	return c == ' ' || c == '\t' || c == ',' || c == '\n';
}

int is_digit(int c)

{
	return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f');
}

int get_sum(int digitNum, int sumOdd, int sumEven)

{
	return COUNT_FROM_LEFT ? sumOdd : (digitNum % 2 ? sumEven : sumOdd);
}

int get_num(int c)

{
	return (c <= '9') ? c - '0' : (c - 'a') + 10;
}

int main()

{
	state st = OUT;

	int c;

	int digitNum = 1;

	int sumOdd = 0;

	int sumEven = 0;

	int totalSum = 0;

	int numberLen = 0;


	while ((c = getchar()) != EOF) 

	{

		c = tolower(c);



		switch (st) 

		{

		case OUT: 

			if (is_digit(c))

			{

				st = IN;

				sumEven = sumOdd = 0;

				digitNum = 1;

			}

			else if (!is_space(c))

			{

				st = SKIP;

			}

			break;

		case IN:

			if (is_space(c)) 

			{

				st = OUT;

				totalSum += get_sum(digitNum, sumOdd, sumEven);

			}

			else if (!is_digit(c))

			{

				st = SKIP;

			}

			break;

		case SKIP:

			if (is_space(c))

				st = OUT;

			break;

		}



		if (st == IN && is_digit(c))

		{

			int d = get_num(c);

			if (digitNum % 2 == 0)

				sumEven += d;

			else

				sumOdd += d;

			digitNum++;

		}

	}

	if (st == IN) totalSum += get_sum(digitNum, sumOdd, sumEven);

	printf("%X\n", totalSum);

	//getchar();

	return 0;

}

Последний раз редактировалось Вадим Мошев; 19.12.2015 в 00:06.
slalomshop вне форума Ответить с цитированием
Старый 19.12.2015, 10:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка могу такую идею подкинуть:
Код:
	char *s="0fkdk8kjadu8b",hex[2]={0};
	int sum=0,m,i,k=0;
	for(i=0;s[i];i++){
		if(k==2) {
			sscanf(&hex[0],"%2X",&m);sum+=m;k=0;printf("%d ",m);i--;
		} else {
			if(s[i]>='0' && s[i]<='9' || s[i]>='a' && s[i]<='f') hex[k++]=s[i]; else k=0;
		}
	}
	printf("%d",sum); getchar();
	return 0;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.12.2015, 14:49   #3
slalomshop
 
Регистрация: 27.09.2015
Сообщений: 6
По умолчанию

Большое спасибо, постараюсь разобраться.
slalomshop вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите! где ошибка? первая программа на Delphi. ошибку найти не могу... Ростик123 Помощь студентам 10 22.05.2014 07:44
Помогите, не могу найти ошибку Kapl9 C++ Builder 2 22.09.2013 21:13
Не могу найти ошибку. Помогите, пожалуйста! Evgesha Помощь студентам 3 15.03.2009 14:04
Помогите. Не могу найти ошибку Ximer Паскаль, Turbo Pascal, PascalABC.NET 3 15.02.2009 23:32
Помогите пож найти ошибки в программе и дописать ее до конца rm2003 Помощь студентам 1 02.10.2008 21:24