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

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

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

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

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

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

Я буду сравнивать первый и последний символы строки, и если они равны, буду двигаться к центру. Если же они не равны, значит слово не является полиндромом, и я буду возвращать значение - 0.
Nekit9401 вне форума Ответить с цитированием
Старый 12.12.2012, 10:24   #22
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
//Функция возвращает 1, если A - строка-палиндром и 0 в противном случае
//ПРЕДУСЛОВИЕ: A - нуль-терминированная (содержащая '\0' на конце) строка
int Palindrom (const char* A){
  //Ставим курсор на первый символ строки
  //Ставим второй курсор на последний символ строки
  //Пока <что? как мы поймём, что дальше идти не надо?>
    //Если символ под первым курсором не равен символу под вторым,
      //Облом. Возвращаем 0.
    //Сдвигаем курсоры
  
  //Раз мы закончили с "пока" - всё, проблем в слове нет, возвращаем 1.
}
Abstraction вне форума Ответить с цитированием
Старый 12.12.2012, 12:18   #23
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Готово)

Код:
//Функция возвращает 1, если A - строка-палиндром и 0 в противном случае
//ПРЕДУСЛОВИЕ: A - нуль-терминированная (содержащая '\0' на конце) строка
int Palindrom (const char* A){
  //Ставим курсор на первый символ строки
  int i=0;
  //Ставим второй курсор на последний символ строки
  int j='\0'-1;
  //Пока <что? как мы поймём, что дальше идти не надо?>
    while(i<j){
	//Если символ под первым курсором не равен символу под вторым,
        if(A[i]!=A[j])
		//Облом. Возвращаем 0.
                return 0;
	//Сдвигаем курсоры
        i++,j--;
	}
  //Раз мы закончили с "пока" - всё, проблем в слове нет, возвращаем 1.
  return 1;
}
Nekit9401 вне форума Ответить с цитированием
Старый 12.12.2012, 12:34   #24
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Код:
  //Ставим второй курсор на последний символ строки
  int j='\0'-1;
Если бы всё было так просто... '\0' - константа (т.н. символьный литерал), обыкновенный char. Обратите внимание, что Ваше выражение вообще не включает A - то есть, его значение будет одинаково при любой строке. По сути, нам требуется пройти по нашей строке, считая символы, пока не встретится '\0'... но, к счастью, для этого не потребуется писать много кода.

В таких случаях полезно знать, какие функции предлагают нам стандартные библиотеки. Встречайте: strlen() (и вообще советую запомнить этот сайт, он полезный). Эта функция принимает на вход C-строку и возвращает её длину (обратите внимание, что длина строки из 3 символов равна 3, а индекс последнего символа перед нуль-терминатором равен 2).
У неё есть предусловие: строка должна содержать нуль-терминатор, иначе strlen не отвечает за последствия. По счастью, в нашей функции мы имеем право считать, что A именно такая - в силу выставленного нами предусловия.
Воспользуйтесь strlen и исправьте инициализацию второго курсора.
Abstraction вне форума Ответить с цитированием
Старый 12.12.2012, 12:44   #25
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Понял, вот)

Код:
//Функция возвращает 1, если A - строка-палиндром и 0 в противном случае
//ПРЕДУСЛОВИЕ: A - нуль-терминированная (содержащая '\0' на конце) строка
int Palindrom (const char* A){
  //Ставим курсор на первый символ строки
  int i=0;
  //Ставим второй курсор на последний символ строки
  int j=strlen(A)-1;
  //Пока <что? как мы поймём, что дальше идти не надо?>
    while(i<j){
	//Если символ под первым курсором не равен символу под вторым,
        if(A[i]!=A[j])
		//Облом. Возвращаем 0.
        return 0;
	//Сдвигаем курсоры
    i++,j--;
	}
  //Раз мы закончили с "пока" - всё, проблем в слове нет, возвращаем 1.
  return 1;
}
Nekit9401 вне форума Ответить с цитированием
Старый 12.12.2012, 12:51   #26
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Так, что там дальше было...
Цитата:
3. Определить собственный вариант с именем WordCmp стандартной функции с именем strcmp.
Ну, заголовок нам уже дали, описание поведения тоже (но всё-таки напишите их).
Как Вы собираетесь проводить сравнение? Попробуйте написать в виде комментариев.
Abstraction вне форума Ответить с цитированием
Старый 12.12.2012, 19:51   #27
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Попробовал написать сразу функцию:

Код:
// Функция strcmp сравнивает строки А и В
int WordCmp (const char *A, const char* B){
	//Если строки равны, возвращаем 0
	if (strcmp(A,B)==0)
		return 0;
	//Если строка А больше строки В, возвращаем 1
	if (strcmp(A,B)==1)
		return 1;
	//Если строка В больше строки А, возвращаем -1
	if (strcmp(A,B)==-1)
		return -1;
}
Наверное было лишним после каждого условия возвращать значение, да?)

Последний раз редактировалось Nekit9401; 12.12.2012 в 19:54.
Nekit9401 вне форума Ответить с цитированием
Старый 12.12.2012, 21:54   #28
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Боюсь, Вы неверно поняли условие. Вам нужно написать свою реализацию, а значит, самой strcmp пользоваться нельзя.
Abstraction вне форума Ответить с цитированием
Старый 12.12.2012, 22:47   #29
Nekit9401
Пользователь
 
Аватар для Nekit9401
 
Регистрация: 11.12.2012
Сообщений: 56
По умолчанию

Это значит, что надо сравнивать строки посимвольно, но не могу разобраться, как именно это надо делать.
Nekit9401 вне форума Ответить с цитированием
Старый 12.12.2012, 23:02   #30
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