Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 3
1

Вывести все "недопалиндромы" из указанного диапазона

05.10.2016, 21:27. Показов 1210. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задача такая - вывести все "недопалиндромы" из указанного диапазона (от a до b). "недопалиндром" - число которое само не является палиндромов, но сумма его цифр является им. Например, при диапазоне [820;840] "недопалиндромами" являются числа 821 и 830. (Небольшая справка: цифры не являются "недопалиндромами", т.к. в длину 1 символ, поэтому читаются справа на лева и наоборот как бы одинаково).
(об ошибке после кода)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var s,news:string; a,b,i,k:integer; p:array[0..32767] of integer; fin,fout:text;
begin
assign(fin,'input.txt');
assign(fout,'output.txt');
k:=0;
reset(fin);
read(fin,a,b);
close(fin);
for i:=a to b do
begin
s:=inttostr(i);
news:=inttostr(strtoint(s[1])+strtoint(s[2])+strtoint(s[3])+strtoint(s[4])+strtoint(s[5]));
if (news[1]=news[2]) or (news[2]='') then
begin
if (i>9) and (i<100) then
if s[1]<>s[2] then
begin
k:=k+1;
p[k]:=strtoint(s);
end;
if (i>100) and (i<1000)then
if s[1]<>s[3] then
begin
k:=k+1;
p[k]:=strtoint(s);
end;
if (i>1000) and (i<10000)then
if (s[1]<>s[4]) xor (s[2]<>s[3]) then
begin
k:=k+1;
p[k]:=strtoint(s);
end;
if (i>10000) and (i<32768) then
if (s[1]<>s[5]) xor (s[2]<>s[4]) then
begin
k:=k+1;
p[k]:=strtoint(s);
end;
end;
end;
rewrite(fout);
write(p);
close(fout);
end.
В 12й строчке (она самая длинная) выдает: Ошибка времени выполнения: Индекс находился вне границ массива.
Помогите разобраться, что не так. Будет хорошо, если вы еще и укажите что именно переделать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2016, 21:27
Ответы с готовыми решениями:

Запросить с клавиатуры два числа. Вывести на экран из указанного диапазона все числа, у которых нет повторяющихся цифр
Запросить с клавиатуры два числа. Вывести на экран из указанного диапазона все числа, у которых нет...

Получить все числа Армстронга из указанного пользователем диапазона
Получить все числа Армстронга из указанного пользователем диапазона. Натуральное число из n цифр...

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

Вывести все четные и нечетные числа из диапазона диапазона от А до В включительно
Помогите решить: Вывести все четные и нечетные числа из диапазона от А до В включительно. ...

Заданы границы диапазона. Вывести циклом все числа диапазона, удовлетворяющие условию.
Есть задача: 1. Пользователь вводит две границы диапазона, вывести на экран все числа из этого...

7
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
05.10.2016, 23:50 2
Какой-то ужас. Проще заново переписать нормально.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
06.10.2016, 07:38 3
без фишек .Net
выглядит так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Var
  a,b,c,d:longint;
  t:string;
  nb:boolean:=true;
begin
  write('Введите диапазон [a,b]:');
  readln(a,b);
  for a:=a to b do begin
    t:=inttostr(a);
    if t<>ReverseString(t) then begin
      c:=a;d:=0;
      while c>0 do begin d:=d+c mod 10;c:=c div 10;end;
      t:=inttostr(d);
      if t=ReverseString(t) then begin write(' ',a);nb:=false;end;
    end;
  end;  
  if nb then writeln('В указанном диапазоне "недопалиндромов" нет');
end.
Добавлено через 47 минут
Pascal
1
2
3
4
5
6
7
8
9
Var
  a,b:longint;
function Snum(x:string):string:=x.Sum(k->strtoint(k)).ToString;
begin
  write('Введите диапазон [a,b]:');
  readln(a,b);
  writeln(Range(a,b).Select(i->inttostr(i)).Where(x->x<>ReverseString(x)).
  Where(x->Snum(x)=ReverseString(Snum(x))));
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
06.10.2016, 12:41 4
Лучший ответ Сообщение было отмечено Joy как решение

Решение

Joy, что-то твой второй код в WDE не компилируется, говорит "Несколько функций могут быть вызваны". Я бы переписал вот так:
Pascal
1
2
3
4
5
function Palindrom(n : string) : boolean := n = ReverseString(n);
begin
  write('Введите диапазон [a, b]:');
  writeln(Range(ReadLnInteger(),ReadLnInteger()).Select(v -> IntToStr(v)).Where(x -> (not Palindrom(x)) and Palindrom(x.Select(v -> StrToInt(v)).Sum().ToString())));
end.
, незачем два Where подряд делать, два условия запросто объединяются в одном Where
1
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
06.10.2016, 12:58 5
volvo, WDE у них с утра (моего времени) не работал, в нем не проверял.
функция чем-то не понравилась, так проходит
Pascal
1
function Snum(x:string):string:=x.Select(c->strtoint(c)).Sum().ToString;
0
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 3
06.10.2016, 16:06  [ТС] 6
Цитата Сообщение от Joy Посмотреть сообщение
без фишек .Net
выглядит так:
Спасибо за код. Но что значит "без фишек .Net"? Т.е. это программа для PascalABC? Для PascalABC.Net идея этого кода выглядит более сложно? Я просто глупый 9-классник.
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
06.10.2016, 16:28 7
С фишками .Net код занял 5 строк вместо 18. Берите, который 18 строк и разбирайте. .Net рекомендую по MSDE учить
0
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 3
06.10.2016, 18:44  [ТС] 8
Цитата Сообщение от Joy Посмотреть сообщение
С фишками .Net код занял 5 строк вместо 18. Берите, который 18 строк и разбирайте. .Net рекомендую по MSDE учить
Спасибо.
0
06.10.2016, 18:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2016, 18:44
Помогаю со студенческими работами здесь

Пользователь вводит две границы диапазона, вывести на экран все числа из этого диапазона
Пользователь вводит две границы диапазона, вывести на экран все числа из этого диапазона....

Вывести на экран все квартиры из указанного города
Помогите пожалуйста) Составьте программу для решения указанной задачи. Во всех вариантах дан...

Вывести на экраны все книги указанного автора
Дан список, содержащий данные о книгах - фамилия автора и название книги. Вывести на экраны все...

Вывести в одно множество все простые числа из данного диапазона, а в другое - все составные
дано множество натуральных чисел. Составить программу, которая бы выводила в одно множество все...

Нужно вывести все книги указанного ( в edit )автора.
Всем доброго времени суток. Назрел небольшой вопрос, к примеу мы имеем StringGrid, в котором во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru