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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2011, 18:52   #21
HeLiO
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 13
По умолчанию

вот мой кривой метод) Сам только учусь искусству програмирования, хотья уже и работаю.. Код рабочий, писался прямо в студии, скомпилировался и заработал сразу. Пользуясь случаем , прошу более опытных "коллег" указать на кривые места в коде, спасибо

Код:
#include "conio.h"
#include "stdio.h"


//0 1 2 3 4 5 6

int minAddSymb(const char* inpM, int inLen, char* outM)
{
	bool symIsFound = false;
	int symmCenterPos = 0;
	int posIn;

	while (symIsFound == false)
	{
		for (symmCenterPos = 0; symmCenterPos < inLen; symmCenterPos++)
		{
			
			if ( (inLen - symmCenterPos - 1) <= (symmCenterPos) )
			{
				for (posIn = symmCenterPos + 1; posIn < inLen; posIn++)
				{
					if (inpM[posIn] != inpM[symmCenterPos - (posIn - symmCenterPos)])
						posIn = inLen;
				}
				if (posIn != inLen + 1)
					return (symmCenterPos - (inLen - symmCenterPos - 1));
			}
			
		}
		symIsFound = true;

	}
	return (inLen);
}



int main()
{
	const char inp_m[] = "abcdcb";
	const char res_mLength = sizeof(inp_m) * 2;
	char res_m[res_mLength];


	int minSymbNum = minAddSymb(inp_m, (res_mLength / 2) - 1, res_m);
	printf("min add len is: %i \n", minSymbNum);

	getch();
	return 1;
}
HeLiO вне форума Ответить с цитированием
Старый 23.10.2011, 19:05   #22
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от HeLiO Посмотреть сообщение
вот мой кривой метод) Сам только учусь искусству програмирования, хотья уже и работаю.. Код рабочий, писался прямо в студии, скомпилировался и заработал сразу. Пользуясь случаем , прошу более опытных "коллег" указать на кривые места в коде, спасибо

Код:
#include "conio.h"
#include "stdio.h"


//0 1 2 3 4 5 6

int minAddSymb(const char* inpM, int inLen, char* outM)
{
	bool symIsFound = false;
	int symmCenterPos = 0;
	int posIn;

	while (symIsFound == false)
	{
		for (symmCenterPos = 0; symmCenterPos < inLen; symmCenterPos++)
		{
			
			if ( (inLen - symmCenterPos - 1) <= (symmCenterPos) )
			{
				for (posIn = symmCenterPos + 1; posIn < inLen; posIn++)
				{
					if (inpM[posIn] != inpM[symmCenterPos - (posIn - symmCenterPos)])
						posIn = inLen;
				}
				if (posIn != inLen + 1)
					return (symmCenterPos - (inLen - symmCenterPos - 1));
			}
			
		}
		symIsFound = true;

	}
	return (inLen);
}



int main()
{
	const char inp_m[] = "abcdcb";
	const char res_mLength = sizeof(inp_m) * 2;
	char res_m[res_mLength];


	int minSymbNum = minAddSymb(inp_m, (res_mLength / 2) - 1, res_m);
	printf("min add len is: %i \n", minSymbNum);

	getch();
	return 1;
}
Как я уже написал выше, это задание к оценке специалиста, как программиста, никакого отношения не имеет! Чтобы было вам понятно, то вполне возможно, что ваша программа делает то, что требуется. Однако с точки зрения именно оценки вас как программиста, она написана очень плохо!
Например, в С++ следует использовать заголовок <cstdio>, а не <stdio.h> Во-вторых, возникает вопрос, а почему вы вообще используете методыиз <cstdio>, а не пользуетесь методами стандартных потоков С++. Далее,бросается в глаза следующее определение

Код:
const char res_mLength = sizeof(inp_m) * 2;
Почему был выбран тип char, а не size_t, который возвращает оператор sizeof?

Я думаю,что если внимательно посмотреть ваш код, то претензий к нему может быть немало! А именно это и определяет квалификацию программиста, то есть его код! Качество кода! А не то, что вы в отличии от кого-нибудь другого знаете какой-то частный алгоритм!
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 23.10.2011 в 19:09.
Сыроежка вне форума Ответить с цитированием
Старый 23.10.2011, 19:33   #23
HeLiO
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Сыроежка Посмотреть сообщение
Как я уже написал выше, это задание к оценке специалиста, как программиста, никакого отношения не имеет! Чтобы было вам понятно, то вполне возможно, что ваша программа делает то, что требуется. Однако с точки зрения именно оценки вас как программиста, она написана очень плохо!
Например, в С++ следует использовать заголовок <cstdio>, а не <stdio.h> Во-вторых, возникает вопрос, а почему вы вообще используете методыиз <cstdio>, а не пользуетесь методами стандартных потоков С++. Далее,бросается в глаза следующее определение

Код:
const char res_mLength = sizeof(inp_m) * 2;
Почему был выбран тип char, а не size_t, который возвращает оператор sizeof?

Я думаю,что если внимательно посмотреть ваш код, то претензий к нему может быть немало! А именно это и определяет квалификацию программиста, то есть его код! Качество кода! А не то, что вы в отличии от кого-нибудь другого знаете какой-то частный алгоритм!
Буду признателен если укажете на другие кривости, а по вышеперечисленным : 1) чем плохо использование парсера printf вместо потоков? 2) Зачем в ДАННОЙ ЗАДАЧЕ нужен массив не из char' ов? Ну и что что sizeof возвращает число типа size_t , это же не повод выделять избыточное кол-во памяти
HeLiO вне форума Ответить с цитированием
Старый 23.10.2011, 20:28   #24
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

HeLiO

Ну и что что sizeof возвращает число типа size_t , это же не повод выделять избыточное кол-во памяти

сделай массив inp_m из более 63 символов, посмотри на результат :D

вот так, из-за мифической экономии нескольких байтов и хитропопых "оптимизаций" рождается индусский код. :lol:
Rififi вне форума Ответить с цитированием
Старый 23.10.2011, 21:22   #25
HeLiO
Пользователь
 
Регистрация: 28.12.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
HeLiO

Ну и что что sizeof возвращает число типа size_t , это же не повод выделять избыточное кол-во памяти

сделай массив inp_m из более 63 символов, посмотри на результат :D

вот так, из-за мифической экономии нескольких байтов и хитропопых "оптимизаций" рождается индусский код. :lol:
Сглупил, не у тому месту начал придираться. Я имел ввиду что зачем вместо char res_m[len] делать массив с большим байтовым размером элементов - короче просто подзапутался. Да, согласен, по незнанию присваиваю результат sizeof во что попало, а оптимизация та что я имел в ввиду она и присутствовала и без неё никуда (это я о хранении символов в типе char). А то что вы подумали просто полный бред согласен, хотя если уж быть честным - тут конечно замечание в точку- вс это гребаное влияние работы по прграммированию МК с её ублюдским уродованием языка ради сохранения пары тактов процессора для производительности. Непредвзято подойдя к записи k = sizeof(что - то) я бы не задумываясь (по крайней мере раньше) посмотрел бы сначала а что sizeof возвращает все таки.
Ну и в продолжении - другая кривизна есть в коде- бросающаяся из темноты в лицо?)
HeLiO вне форума Ответить с цитированием
Старый 24.10.2011, 05:15   #26
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
вот так, из-за мифической экономии нескольких байтов и хитропопых "оптимизаций" рождается индусский код. :lol:
Индусский код никак не связан с оптимизицией и экономией, это просто избыточный бесполезный код, чем больше символов и строк в программе, тем больше зарплата у индуса !
Цитата:
Сообщение от HeLiO Посмотреть сообщение
Код:
	bool symIsFound = false;
	while (symIsFound == false)
	{
		for (...)
		{
		...
		}
		symIsFound = true;
	}
Как мы видим, что при любом раскладе цикл while будет выполняться только 1 раз ! Цикл избыточен, как и переменная symIsFound.
An1ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при каких условиях алгоритм закончит свою работу? незнайка_на_земле Помощь студентам 3 08.03.2011 00:40
Тестовые задания при приеме на работу crazy horse Свободное общение 3 02.07.2010 21:32
Вопрос профессионалам Maxim1 Общие вопросы C/C++ 0 02.06.2010 01:14
К профессионалам kenta Microsoft Office Word 1 12.05.2010 16:51