![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
James Montegry |
![]()
Сообщение
#1
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Знаю, что тем о палендроме уже открыто очень много, но в них я не нашел именно того, что мне нужно.
Для начала нужно ввести с клавиатуры число N, которое означает количество чисел в строчке. Ниже, ввести в строчку целые числа(через пробел), среди которых нужно найти самые длинные палиндромы. Количество чисел в строке зависит от N. |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
И что конкретно из этого всего вызывает затруднения? Не можешь ввести N? Или проблема со считыванием после этого N чисел? Или способа проверки числа на "палиндром", выложенного в FAQ-е недостаточно, и специально для тебя надо переписать его еще и здесь? Где затруднения?
|
James Montegry |
![]()
Сообщение
#3
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Цитата Не можешь ввести N? Или проблема со считыванием после этого N чисел? Или способа проверки числа на "палиндром" И первое, и второе, и третее. У меня затруднения с созданием кода, так как я Паскаль не знаю. А что касается Факю, то в них я не нашел ничего, что может подойти именно в моем случае. Как определять палиндром я нашел, но вот как определить его с целого ряда цифр, я не знаю. Цитата специально для тебя надо переписать его еще и здесь? Копипаст - это не сложно, я щитаю. volvo, умоляю о помощи, мне срочно нужно. |
volvo |
![]()
Сообщение
#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 |
![]()
Сообщение
#5
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я все сделал как ты сказал, но прога вместо палиндромов, просто выдает все числа, которые я ввел. Вот код проги:
Код 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. |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Что ты говоришь? А какие ты ввел числа, я что, догадаться должен? У меня пример работает, я вообще не имею привычки непроверенный код выкладывать...
Цитата(Console) Running "g:\programs\pascal n= 4 21 54 85 55 55 |
James Montegry |
![]()
Сообщение
#7
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
n=6
1 2 2 1 0 7 1 2 2 1 0 7 а должно показывать только палиндромы(1 2 2 1) |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Да? С какого перепуга? Числа рассматриваются ПО ОТДЕЛЬНОСТИ!
"1" - это палиндром? Да, попробуй опровергнуть... "2" - то же самое... А может быть, "7" - не палиндром? Семерка что, читается "вперед" и "назад" как-то по-разному? Задание нормально сформулируй (и не дублируй топики - это к добру не приведет, ты, оказывается, уже задавал этот же вопрос здесь: Симметрия чисел в массиве ...) Сообщение отредактировано: volvo - |
James Montegry |
![]()
Сообщение
#9
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нужно найти не числа-палиндромы, а цепочки-палендромы(типо не число 1221, а последовательность, скажем, 4 цифер 1 2 2 1). |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
А теперь перечитай свое первое сообщение... В какой именно строчке фигурирует слово "цепочки", можно узнать?
У тебя написано так: Цитата ввести в строчку целые числа(через пробел), среди которых нужно найти самые длинные палиндромы И что должен понять тот, кто читает тему? Где цепочки-то? |
James Montegry |
![]()
Сообщение
#11
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
извини, я немного туплю. Просто целую ночь над задачей сижу.
|
volvo |
![]()
Сообщение
#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 - |
James Montegry |
![]()
Сообщение
#13
|
![]() l'imbecile divin ^_^ ![]() Группа: Пользователи Сообщений: 17 Пол: Мужской Репутация: ![]() ![]() ![]() |
Большое спасибо. Почему я не могу дать плюсик? Когда я клацаю, ничего не происходит.
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Смотри здесь: Изменения в системе рейтинга
|
Michael_Rybak |
![]()
Сообщение
#15
|
|||
Michael_Rybak ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 046 Пол: Мужской Реальное имя: Michael_Rybak Репутация: ![]() ![]() ![]() |
|
|||
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 5:37 |