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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2013, 22:24   #1
Димон##
Новичок
Джуниор
 
Регистрация: 03.12.2013
Сообщений: 2
По умолчанию Задача про битовые переходы в Си

Возникла проблема при написании программы. Может кто-нибудь напишет или подскажет как её написать, а то язык Си пока не очень хорошо знаю.
Вводится последовательность не более 10 строк символов не длиннее 37 символов. Допустимые символы в строке: "0", "1" и "." - разделитель битовой группы. Окончание входного потока - ввод строки, начинающейся с символа "!". Максимальное количе-ство строк равно 8. Для каждой входной строки нужно выделить битовую группу, а для каждой битовой группы определить ее дли-ну и количество переходов "0" -> "1" и "1" -> "0". Cформировать также статистическую информацию. Примерный вид выходной информации:
Входной текст:
(входные строки без лишних разделителей)
Введено К строк, всего N символов,
минимальная длина строки М1 символов,
максимальная длина строки М2 символов.
Для строки номер 1:
Битовая группа Номер 1: (последовательность "0" и "1")
длина = С1
переходов "0" -> "1" = N1
переходов "1" -> "0" = N2 ...
Битовая группа Номер 10: (последовательность "0" и "1")
длина = С10
переходов "0" -> "1" = N10
переходов "1" -> "0" = N20
Всего 10 групп,
минимальная длина группы М11 символов.
максимальная длина группы М12 символов.
Для строки номер К: (вывод аналогичен приведенному выше)
Димон## вне форума Ответить с цитированием
Старый 04.12.2013, 00:57   #2
_Freak_
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 25
По умолчанию

Вот:
Код:
#include <stdio.h>
#include <string.h>

#define MAXBINGROUPLEN 37
#define MAXNUMOFGROUPS 10


size_t count_of(const char* tpl, const char* str)
{
	size_t count = 0;
	size_t stride = strlen(tpl);

	while (str = strstr(str, tpl)) {
		++count;
		str += stride;
	}

	return count;
}

void remove_separators(char* str)
{
	char *_i1, *_i2;

	while (str = strchr(str, '.'))	{
		_i1 = str;
		_i2 = str + 1;
		while (*_i1++ = *_i2++)
			;
	}
}


int main(int argc, const char* argv)
{
	char buffer[MAXBINGROUPLEN];
	size_t length;
	size_t actlen;
	size_t group = 0;

	typedef struct
	{
		char bitgroup[MAXBINGROUPLEN];
		size_t bitcount;
		size_t numdirconv; /* 0 -> 1 */
		size_t numrevconv; /* 1 -> 0 */
	} Report;


	size_t maxlen = 0;
	size_t minlen = MAXBINGROUPLEN - 1;
	size_t totallen = 0;
	Report reports[MAXNUMOFGROUPS];

	
	while (group < MAXNUMOFGROUPS) {
		do {
			printf("Enter bits for group #%u or '!' --> ", group);
			length = strlen(gets(buffer));

			if (buffer[0] == '!') {
				goto PRINT_REPORT;
			}

		} while (length != strspn(buffer, "01."));

		remove_separators(buffer);

		actlen = strspn(buffer, "01");

		if (actlen > maxlen) {
			maxlen = actlen;
		}

		if (actlen < minlen) {
			minlen = actlen;
		}

		totallen += actlen;

		

		strcpy(reports[group].bitgroup, buffer);

		reports[group].bitcount = actlen;
		reports[group].numdirconv = count_of("01", buffer);
		reports[group].numrevconv = count_of("10", buffer);

		++group;
	}

PRINT_REPORT:

	printf("\nTotal %u lines, %u symbols\n", group, totallen);
	printf("Min line length: %u\n", minlen);
	printf("Max line length: %u\n\n", maxlen);

	for (size_t i = 0; i < group; i++) {
		printf("Bit group #%u: %s\n", i, reports[i].bitgroup);
		printf("\tLength: %u\n", reports[i].bitcount);
		printf("\tConv. '0'->'1': %u\n", reports[i].numdirconv);
		printf("\tConv. '1'->'0': %u\n\n", reports[i].numrevconv);
	}

	system("pause");

	return 0;
}
P.s.: Правда я один раз использовал оператор goto, чтобы выйти из цикла
_Freak_ вне форума Ответить с цитированием
Старый 06.12.2013, 22:01   #3
Димон##
Новичок
Джуниор
 
Регистрация: 03.12.2013
Сообщений: 2
По умолчанию

Вот это строчка не понятна: for (size_t i = 0; i < group; i++); size_t i это что, можете подсказать?
Димон## вне форума Ответить с цитированием
Старый 07.12.2013, 00:09   #4
_Freak_
Пользователь
 
Регистрация: 26.03.2013
Сообщений: 25
По умолчанию

size_t - это беззнаковый целый тип
_Freak_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача Стефана(фазовые переходы) Andriy_Drozhko Помощь студентам 0 14.05.2013 13:34
Условные переходы (if) 803 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2013 17:51
Переходы в галерее Elefanter WordPress и другие CMS 2 08.06.2010 21:22
Условные переходы серг Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 15.04.2010 22:24
Задача про деревья. WhyBeNormal Паскаль, Turbo Pascal, PascalABC.NET 0 21.12.2008 23:51