IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> И снова палиндромы
James Montegry
сообщение 11.12.2007 9:13
Сообщение #1


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Знаю, что тем о палендроме уже открыто очень много, но в них я не нашел именно того, что мне нужно.

Для начала нужно ввести с клавиатуры число N, которое означает количество чисел в строчке. Ниже, ввести в строчку целые числа(через пробел), среди которых нужно найти самые длинные палиндромы. Количество чисел в строке зависит от N.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 9:43
Сообщение #2


Гость






И что конкретно из этого всего вызывает затруднения? Не можешь ввести N? Или проблема со считыванием после этого N чисел? Или способа проверки числа на "палиндром", выложенного в FAQ-е недостаточно, и специально для тебя надо переписать его еще и здесь? Где затруднения?
 К началу страницы 
+ Ответить 
James Montegry
сообщение 11.12.2007 9:55
Сообщение #3


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


volvo

Цитата
Не можешь ввести N? Или проблема со считыванием после этого N чисел? Или способа проверки числа на "палиндром"


И первое, и второе, и третее. У меня затруднения с созданием кода, так как я Паскаль не знаю. А что касается Факю, то в них я не нашел ничего, что может подойти именно в моем случае. Как определять палиндром я нашел, но вот как определить его с целого ряда цифр, я не знаю.

Цитата
специально для тебя надо переписать его еще и здесь?

Копипаст - это не сложно, я щитаю.

volvo, умоляю о помощи, мне срочно нужно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 10:11
Сообщение #4


Гость






Цитата
Копипаст - это не сложно, я щитаю.
Я так не считаю, вот в чем дело... Незачем копировать десятки раз одно и то же. Для этого и есть Frequently Asked Questions, чтобы не заниматься сплошным копи-пастом...

Цитата
Как определять палиндром я нашел, но вот как определить его с целого ряда цифр, я не знаю.

По одному числу передавать в функцию:

{ здесь is_palindrom из FAQ-а }

type
PT = ^T;
T = array[1 .. 1] of longint;
var
arr: PT;
n, count, i: integer;
X: longint;
begin
write('n = '); readln(n);
getmem(arr, n * sizeof(longint));
count := 0;
while not eoln do begin
read(X);
if is_palindrom(X) then begin
inc(count); arr^[count] := X;
end;
end;

for i := 1 to count do
writeln(arr^[i]);
freemem(arr, n * sizeof(longint))
end.

Если вместо занесения в массив палиндрома сразу же проверять его длину и заносить в массив только числа максимальной длины - то получишь именно то, что тебе нужно... Пробуй...
 К началу страницы 
+ Ответить 
James Montegry
сообщение 11.12.2007 10:56
Сообщение #5


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Я все сделал как ты сказал, но прога вместо палиндромов, просто выдает все числа, которые я ввел. Вот код проги:

Код
Program symmetry;
function is_palindrom(x: longint):boolean;
var prev, T: longint;
begin
  prev:=x;
  T:=0;
  while x<>0 do begin
    T:=T*10+(x mod 10);
    x:=x div 10;
end;

is_palindrom:=(prev=T)
end;
type
PT=^T;
T=array[1..1] of longint;
var
arr: PT;
n,count,i:integer;
X: longint;
begin
write('n= '); readln(n);
getmem(arr, n * sizeof(longint));
count:=0;
while not eoln do begin
  read(X);
  if is_palindrom(X) then begin
   inc(count); arr^[count]:=X;
  end;
end;

for i:=1 to count do
  writeln(arr^[i]);
freemem(arr,n * sizeof(longint))
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 11:16
Сообщение #6


Гость






Что ты говоришь? А какие ты ввел числа, я что, догадаться должен? У меня пример работает, я вообще не имею привычки непроверенный код выкладывать...

Цитата(Console)
Running "g:\programs\pascal
n= 4
21 54 85 55
55
 К началу страницы 
+ Ответить 
James Montegry
сообщение 11.12.2007 11:42
Сообщение #7


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


n=6
1 2 2 1 0 7
1
2
2
1
0
7
а должно показывать только палиндромы(1 2 2 1)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 11:44
Сообщение #8


Гость






Да? С какого перепуга? Числа рассматриваются ПО ОТДЕЛЬНОСТИ!
"1" - это палиндром? Да, попробуй опровергнуть...
"2" - то же самое...

А может быть, "7" - не палиндром? Семерка что, читается "вперед" и "назад" как-то по-разному?

Задание нормально сформулируй (и не дублируй топики - это к добру не приведет, ты, оказывается, уже задавал этот же вопрос здесь: Симметрия чисел в массиве ...)

Сообщение отредактировано: volvo - 11.12.2007 11:58
 К началу страницы 
+ Ответить 
James Montegry
сообщение 11.12.2007 11:52
Сообщение #9


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +



Нужно найти не числа-палиндромы, а цепочки-палендромы(типо не число 1221, а последовательность, скажем, 4 цифер 1 2 2 1).
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 11:55
Сообщение #10


Гость






А теперь перечитай свое первое сообщение... В какой именно строчке фигурирует слово "цепочки", можно узнать?

У тебя написано так:
Цитата
ввести в строчку целые числа(через пробел), среди которых нужно найти самые длинные палиндромы
И что должен понять тот, кто читает тему? Где цепочки-то?
 К началу страницы 
+ Ответить 
James Montegry
сообщение 11.12.2007 11:56
Сообщение #11


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


извини, я немного туплю. Просто целую ночь над задачей сижу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 12:13
Сообщение #12


Гость






В таком случае (я про задачу), тебе вообще лучше работать со строкой, а не с числами:

function space(s: string): boolean;
begin
space := (s[1] = ' ') and (s[length(s)] = ' ');
end;
function trim(s: string): string;
begin
while (s <> '') and (pos(' ', s) > 0) do
delete(s, pos(' ', s), 1);

trim := s;
end;
function revert(s: string): string;
var
rev: string;
i: integer;
begin
rev := '';
for i := 1 to length(s) do rev := s[i] + rev;
revert := rev;
end;

var
i, j: integer;
s, st, max_s: string;

begin
{
s := '1 2 2 1 0 7';
s := '1 2 2 1 33 21 12 33 1 5';
s := '1 2 2 1 33 21 12 373 1 5';
}
readln(s);

s := ' ' + s + ' ';

max_s := '';
for i := 1 to length(s) - 1 do begin
for j := 1 to length(s) - i do begin
st := copy(s, i, j);
if space(st) and (trim(st) = revert(trim(st))) then begin
if length(max_s) < length(st) then max_s := st;
end;
end;
end;
writeln(max_s);
end.

Тестировалось на закомментированных значениях - вроде выдает правильный результат...

Сообщение отредактировано: volvo - 11.12.2007 12:15
 К началу страницы 
+ Ответить 
James Montegry
сообщение 11.12.2007 12:19
Сообщение #13


l'imbecile divin ^_^
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской

Репутация: -  0  +


Большое спасибо. Почему я не могу дать плюсик? Когда я клацаю, ничего не происходит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2007 12:26
Сообщение #14


Гость






Смотри здесь: Изменения в системе рейтинга
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 11.12.2007 16:41
Сообщение #15


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


М
Плюсик за тебя добавил. Темы не дублируй.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"