Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [pascal] слово перевертышь, Проверить является ли слово перевертышем 
V
    Опции темы
xF1x
Дата 13.5.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



Всем доброго времени суток! ПОМОГИТЕ решить школьную задачу! ТОЛЬКО ЧТО начали изучать строковый тип и символьный! и только что начали изучать операторы сложения, сравнения копирования,длину строки,удаление,замена,подстрока,числа и строки! вообщем это у нас новая тема! Прошу как можно проще! вот такая задача! Проверить, является ли введеное слово полиндромом(перевертышем) например казак как ни читай оно и будет казак, или шалаш вообщем это слова перевертыши! ЗА РАНЕЕ БЛАГОДАРЕН!
PM MAIL   Вверх
THandle
Дата 13.5.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



http://forum.vingrad.ru/faq/topic-202745.html

Добавлено через 26 секунд
Совсем чуть чуть переделать под Паскаль там...
PM   Вверх
xF1x
Дата 13.5.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



Что то там вообще не понятно! нельзя ли сделать попроще и в одном коде а не в нескольких собирать!
PM MAIL   Вверх
neic
Дата 13.5.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: 5
Всего: 7



xF1x
Чего не понятного-то?

Код

Program polinom;
uses crt;
var text: string;

function IsPalindrome(s : string) : boolean;
var
    i, j : integer;
begin
  i := 1;
  j := length(s);
    ispalindrome := false;
    repeat
        if s[i] <> s[j] then exit;
        i:=i+1;
        j:=j-1;
    until i > j;
    ispalindrome := true;
end;

begin
write('Vvedite text');
read(text);

    if IsPalindrome(text) then
        write('True')
    else
        write('False');
readkey
end.

PM MAIL WWW ICQ Skype   Вверх
xF1x
Дата 14.5.2008, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



В не можешь пояснить следующие строчки а то я вроде такого еще не изучал!
function IsPalindrome
ispalindrome := false;
    repeat
PM MAIL   Вверх
Rodman
Дата 14.5.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



function IsPalindrome - объявление функции IsPalindrome
ispalindrome := false; - фукция возвращает значение через свое имя... т.е. мы присваеваем имени функции значение, а уже функция его далее пепередает
repeat  - цикл с постусловием... удобен если хотябы раз необходимо в цикл зайти!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
THandle
Дата 14.5.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Код

program polindrome;

function IsPalindrome(const s : string) : boolean;
var
  i, j : integer;
begin
  i := 1;
  j := length(s);
  IsPalindrome := false;
  repeat
    if s[i] <> s[j] then
      exit;
    inc(i);
    dec(j)
    until i > j;
  IsPalindrome := true;
end;

var
  s : string;
begin
  write('Enter string: ');
  readln(s);
  if IsPalindrome(s) then
    writeln('Word ' + s + ' - palindrome')
  else
    writeln('Word ' + s + ' - not palindrome');
  readln;
end.



Поясняю:


Код

function IsPalindrome(const s : string) : boolean;


Функция которая будет проверять является ли слово полиндромом или нет.

Теперь, что происходит внутри этой функции:

Код

  i := 1;
  j := length(s);


Присваиваем переменной i единицу, а переменной j - длину переданной в функцию строки.

Код

  IsPalindrome := false;


Присваиваем результату функции false, то есть слово палиндромом не является.

Теперь запускаем цикл:

Код

  repeat
    if s[i] <> s[j] then
      exit;
    inc(i);
    dec(j)
  until i > j;


Идем в нем от начала строки до середины и от конца строки тоже до середины.

Например, возьмем слово топот, которое является палиндромом.
В самом начале переменные i, j равны единице и пяти соответственно.


Теперь смотрим что происходит во время цикла:

1. сравниваются буквы топот.
Они одинаковы поэтому мы не выходим из функции возвращая результат о том, что слово не палиндром, а идем дальше:
i = 1.
j = 5.


2. На этом шаге сикла проверяем буквы: топот.
Они тоже равны. Идем дальше.
i = 2.
j = 4.


3. На этом шаге сравниваем букву топот  ней же самой. Идем дальше.
i = 3.
j = 3.


4. Условием выхода из цикла является:
Код

until i > j;


Посмотрим же чему у нас равны переменные i и j:
i = 4.
j = 2.

Все. Цикл завершен, слово палиндром.
Спокойно присваиваем результату значение true:

Код


IsPalindrome := true;


Если бы в функцию поступило слово, в котором какието противоположные буквы не равны, то мы просто вышли бы из цикла и строчка

Код


IsPalindrome := true;


просто не выполнилась бы, а значит функция вернула бы false что соответствует слову-непалиндрому.

PM   Вверх
xF1x
Дата 14.5.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



Слушай! а нельзя никак по другому сделать? мы счетчик делали i:=i+1 просто мы такого еще не изучали, попроще нельзя?
PM MAIL   Вверх
THandle
Дата 14.5.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Возьмем например слово  папа, которое палиндромом не является:

1. перед выполнением цикла переменным i, j присваиваются следующие значения:
i = 1.
j = 4.

2. Запускаем цикл, сравниваем буквы: папа.
Они не равны, выходим из функции.
Результат выполнения функции - false.



Далее следует стандартная паскалевская программка, с вводом строки smile

Код

var
  s : string;
begin
  write('Enter string: ');
  readln(s);
  if IsPalindrome(s) then
    writeln('Word ' + s + ' - palindrome')
  else
    writeln('Word ' + s + ' - not palindrome');
  readln;
end.



Ну давай уж все объясню, раз начал smile

Код


var
  s : string;


Объявляем переменную s, в которую и будем вводить слово которое будем проверять на палиндромность.
Код


  write('Enter string: ');
  readln(s);


Вводим слово с клавиатуры.

Код

  if IsPalindrome(s) then
    writeln('Word ' + s + ' - palindrome')


Если слово - палиндром то пишем это, иначе сообщаем об обратном:

Код

  else
    writeln('Word ' + s + ' - not palindrome');


И последнее:

Код


readln;


Ждем ввода чего-то с клавиатуры и нажатия клавиши Enter.
Выходим из программы.

Добавлено через 1 минуту и 38 секунд
xF1x, что конкретно не изучали? какие строки не понятны?

Можно и по-другому сделать, но это самый хороший вариант, по моему. Да и самый понятный должен быть.
PM   Вверх
ama_kid
Дата 14.5.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 16
Всего: 95



Цитата(xF1x @  14.5.2008,  10:25 Найти цитируемый пост)
попроще нельзя? 
можно примерно так:
Код
function IsPalindrome(const s:string):boolean;
var
 i:integer;
 n:integer;
begin
 IsPalindrome:=true;
 n:=Length(s);
 for i:=1 to (n div 2) do
  if s[i] <> s[n-i+1] then
   begin
    IsPalindrome:=false;
    exit;
   end;
end;



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
xF1x
Дата 14.5.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



Не понятно что такое  + s + ? а паскаль разве уже знает что IsPalindrome это палиндром!? ты же не задавал его в переменных
PM MAIL   Вверх
THandle
Дата 14.5.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



ama_kid, лично я считаю этот вариант более непонятным smile 

Что такое div? Может человек тоже не знает, если не знает циклов repeat.

Код

s[n-i+1]


Что это за "подозрительные" вычисления, которые куда сложнее прокрутить в голове нежели мой вариант.

В общем у всех вариантов конечно своих недостатков хватает. smile

Добавлено через 1 минуту и 13 секунд
Цитата(xF1x @  14.5.2008,  11:41 Найти цитируемый пост)
Не понятно что такое  + s + ? а паскаль разве уже знает что IsPalindrome это палиндром!? ты же не задавал его в переменных 

Это результат выполненения функции.
PM   Вверх
xF1x
Дата 14.5.2008, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



Вообщем объясняю! мы делали через цикл.потом  через if then.ничего не делили и слово function  у нас не было, repeat тоже не было ,был цикл i:=i+1! нельзя сделать с использованием этой информации?
PM MAIL   Вверх
THandle
Дата 14.5.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Код

program Project1;

var
  s : string;
  i : integer;
  b : boolean;
begin
  write('Enter string: ');
  readln(s);
  b := true;
  for i := 0 to length(s) do
    if s[i + 1] <> s[length(s) - i] then
      begin
        b := false;
        Break;
      end;
  if b then
    writeln('Word ' + s + ' - palindrome')
  else
    writeln('Word ' + s + ' - not palindrome');
  readln;
end.


Добавлено через 34 секунды
Так пойдет?
PM   Вверх
xF1x
Дата 14.5.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 18.3.2008

Репутация: 0
Всего: 0



вот так как надо!!а что такое break?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.