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

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

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

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


l'imbecile divin ^_^
*

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

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


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

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


Гость






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


l'imbecile divin ^_^
*

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

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


volvo

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


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

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

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

volvo, умоляю о помощи, мне срочно нужно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.

Если вместо занесения в массив палиндрома сразу же проверять его длину и заносить в массив только числа максимальной длины - то получишь именно то, что тебе нужно... Пробуй...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






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

Цитата(Console)
Running "g:\programs\pascal
n= 4
21 54 85 55
55
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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

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

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

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


l'imbecile divin ^_^
*

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

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



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


Гость






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

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


l'imbecile divin ^_^
*

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

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


извини, я немного туплю. Просто целую ночь над задачей сижу.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


l'imbecile divin ^_^
*

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

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


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


Гость






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


Michael_Rybak
*****

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

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


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

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

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

 





- Текстовая версия 29.03.2024 6:45
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name