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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 23:35   #31
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

В моем понимании, это выглядит как-то так:

Код:
// Функция strcmp сравнивает строки А и В
int WordCmp (const char *A, const char* B){
	//Ставим курсоры на начало строк
	//Пока элемент А и элемент В не равны '\0'
	         //Если символы под одинаковыми индексом в строке А и в строке В равны, то
			//Передвигаем курсоры дальше
			//Символы строк А и В до элемента '\0' равны, возвращаем 0
		//Если символ строки А больше символа строки В, то
		         //Строка А больше строки В, возвращаем 1
		//Если символ строки В больше символа строки А, то
		         //Строка В больше строки А, возвращаем -1
Nekit9401 вне форума Ответить с цитированием
Старый 13.12.2012, 00:02   #32
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Пусть первый символ одинаков в A и в B, второй отличается. Пройдите "руками" по Вашему псевдокоду и посмотрите, что получится.
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 00:20   #33
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Оно?

Код:
// Функция strcmp сравнивает строки А и В
int WordCmp (const char *A, const char* B){
	//Ставим курсоры на начало строк
	//Пока элемент А и элемент В не равны '\0'
	         //Если символы под одинаковыми индексом в строке А и в строке В равны, то
			//Передвигаем курсоры дальше
			//Символы строк А и В до элемента '\0' равны, возвращаем 0
		//В противном случае, то есть, если элемент строки А не равен элементу строки В, выполняем следующие условия
                //Если символ строки А больше символа строки В, то
		         //Строка А больше строки В, возвращаем 1
		//Если символ строки В больше символа строки А, то
		         //Строка В больше строки А, возвращаем -1
Nekit9401 вне форума Ответить с цитированием
Старый 13.12.2012, 00:36   #34
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
//Символы строк А и В до элемента '\0' равны, возвращаем 0
Мне кажется, или в описанной Вами последовательности Вы этот вывод сделаете уже на первой итерации цикла?
Abstraction вне форума Ответить с цитированием
Старый 13.12.2012, 01:00   #35
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Ну значит должно быть так?:

Код:
// Функция strcmp сравнивает строки А и В
int WordCmp (const char *A, const char* B){
	//Ставим курсор на начало строк
	//Пока элемент А и элемент В не равны '\0'
	         //Если символы под одинаковыми индексом в строке А и в строке В не равны, то проверяем следующие условия
		         //Если символ строки А больше символа строки В, то
			          //Строка А больше строки В, возвращаем 1
			//Если символ строки В больше символа строки А, то
			          //Строка В больше строки А, возвращаем -1
		//Иначе выполняем следующее
			//Двигаемся дальше по строкам
			//Символы равны, возвращаем 0
Я уже в конец запутался)
Nekit9401 вне форума Ответить с цитированием
Старый 13.12.2012, 02:28   #36
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Мне кажется, или в описанной Вами последовательности Вы этот вывод сделаете уже на первой итерации цикла?
нефига се ты препод....

Код:
//моя strlen
int mystrlen(const char* str)
{
if(!str) return 0;             //если строки нет, то длина её 0
int len = 0;                   //переменная что отправим
char* s = str;               //создаю новый указатель под строку.. чтобы не портить
while((*s) != '\0') len++; //пока не конец строки инкременируем
return len;                    //возвращаем переменую
}
//моя strcmp
int mystrcmp(const char* str1, const char* str2)
{
int len1 = mystrlen(str1);        //получаю длину строки 1
int len2 = mystrlen(str2);        //получаю длину строки 2
if(len1 == 0) return 0;            //если длина строки 1 равна 0, то вернём 0
if(len2 == 0) return 0;            //если длина строки 2 равна 0, то вернём 0
int dest = len1 - len2;            //разница двух длин
if(dest != 0) return dest;        //если разница не равна 0, что говорит о разности длин, то вернём разность
char* s1 = str1;                   //указатель на строку 1
char* s2 = str2;                   //указатель на строку 2
while((*s1) == (*s2))            //пока их содержимое друг другу сходиться
{                                       //
if(s1 == str1 + len1) return 0; //если мы прошли полный цикл, то строки индейтичны
s1++;                                 //инкременируем
s2++;                                 //инкременируем
}                                       //
return 1;                       //иначе нет.
}
Если помог, тут весы есть , Вам не сложно, а мне приятно.

Последний раз редактировалось Perchik71; 13.12.2012 в 02:32. Причина: так будет правильней... а то вечный цикл.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 02:47   #37
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
нефига се ты препод....
Объясняет все понятно, как мне и нужно, что бы самому вникнуть в написанный мне код. Изучать программирование я начал только с этого года, когда поступил в университет, до этого не изучал его вообще, даже Паскаля в школе у нас не было. Поэтому много чего еще не понимаю, как и то что Вы написали) Поэтому по мне более эффективен метод Abstraction'а))
Nekit9401 вне форума Ответить с цитированием
Старый 13.12.2012, 02:49   #38
Perchik71
С++, Delphi
Форумчанин
 
Аватар для Perchik71
 
Регистрация: 24.11.2012
Сообщений: 495
По умолчанию

Цитата:
Сообщение от Nekit9401 Посмотреть сообщение
Объясняет все понятно, как мне и нужно, что бы самому вникнуть в написанный мне код. Изучать программирование я начал только с этого года, когда поступил в университет, до этого не изучал его вообще, даже Паскаля в школе у нас не было. Поэтому много чего еще не понимаю, как и то что Вы написали) Поэтому по мне более эффективен метод Abstraction'а))
Из меня учитель плохой ххаха
ну попробовать себя в силах тоже нужно было...
он уже байки ушёл
Если помог, тут весы есть , Вам не сложно, а мне приятно.
Perchik71 вне форума Ответить с цитированием
Старый 13.12.2012, 02:55   #39
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Perchik71 Посмотреть сообщение
Из меня учитель плохой ххаха
ну попробовать себя в силах тоже нужно было...
он уже байки ушёл
Ничего, подожду
Nekit9401 вне форума Ответить с цитированием
Старый 13.12.2012, 08:57   #40
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Ну значит должно быть так?:
Смысл отступов в таком псевдокоде - в выделении логических блоков. То есть, написано "если", а следом идёт несколько строчек с большим отступом - значит, эти строки выполняются только при этом "если".
Так вот, когда мы можем сделать вывод, что строки равны? Не на первом символе, не на втором, не на третьем - только когда дойдём по обоим до конца, да так и не обнаружим разницы. То есть, в пределах нашего цикла "пока" возвращать 0 мы не имеем права: всегда есть шанс, что следующий символ разойдётся.
Abstraction вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контрольная работа Supernatural Помощь студентам 6 25.03.2017 17:54
Контрольная работа Vart Microsoft Office Excel 1 20.06.2011 10:13
Контрольная работа KostyaS Помощь студентам 3 21.04.2011 23:44
контрольная работа ГалинаБ Помощь студентам 17 19.01.2011 01:30
контрольная работа Rustem5 Паскаль, Turbo Pascal, PascalABC.NET 10 28.06.2010 16:55