Другие языки программирования и технологии

Помогите, пожалуйста, с информатикой. 10 класс. Надо найти ошибку в программе. Язык паскаль

Уровень C. Натуральное число называется автоморфным, если оно равно последним цифрам своего квадрата. Например, 252 = 625. Напишите программу, которая получает натуральное число N и выводит на экран все автоморфные числа, не превосходящие N.
Пример:
Введите N:
1000
1*1=1
5*5=25
6*6=36
25*25=625
76*76=5776

Программа:
program n_3;
var n,i,m,k:integer;
begin
writeln('введите N'); readln(n);
for i:=1 to n do
begin
m:=i*i;
k:=10;
while (i div 10>0) do k:=k*10;
if m=(m div k)*k+i then writeln(i,'*',i,'=',m);
end;
end.

Эта программа выводит только 1*1=1, 5*5=25, 6*6=36
Условие задачи на олимпиаде 2013-2014 годов.
1. «Автоморфные числа» (10 баллов)
Ваня заметил, что для некоторых чисел справедливо следующее свойство: если возвести число в квадрат, то квадрат числа будет заканчиваться цифрами самого числа. Например, число 25 обладает этим свойством: 252=625 оканчивается на 25. Число 26 не обладает этим свойством: 262=676 не оканчивается на 26. Он даже нашел в Интернете, что такие числа называются автоморфными. Ваня обычно успешно может определять, является число автоморфным или нет, но он хочет проверить себя и просит Вас о помощи. Ваша задача − написать программу, которая позволяла бы определить, является число автоморфным или нет.
Входной файл INPUT.TXT содержит одно целое число (1 ≤ N ≤ 104).
Выходной файл OUTPUT.TXT должен содержать 1, если число является автоморфным, и 0 в противном случае.
Если работать с файлами с входными и выходными данными, решение является таким:
program avto;
var a, b, c, d, code, e: integer;
s, s1: string;
f1, f2: text;
begin
assign(f1,'input.txt');
assign(f2,'output.txt');
reset(f1);
read(f1, a);
b:= sqr(a);
str(b, s);
c:= length(s);
str(a, s1);
d:= length(s1);
e:= c - d;
delete (s, 1, e);
val (s, b, code);
val (s1, a, code);
rewrite(f2);
if a = b then write (f2, '1')
else write (f2, '0');
close(f1);
close(f2);
end.
Андрей Глуховской
Андрей Глуховской
157
Лучший ответ
В 10 классе на информатике паскаль проходят? Я в десятом классе в пайнте кружку рисовал о0
Сергей Анатольевич мне кажется это олимпиадное задание, мы в 10 классе часы программировали
Владимир Бондарь я паскаль в 8 прошла)))
Я не очень знаком с алгоритмом, но что у тебя здесь while (i div 10>0) do k:=k*10; ?
Условие выхода из цикла какое?
i не меняется, значит может произойти зацикливание
Алексей Галанов Решила проблему?
Как-то так надо делать
while (i div 10>0) do
begin
k:=k*10;

здесь где-то i должна поменяться, а иначе зацикливание
end;
var
n, i, m: longint;
s1, s2: string;
l1: integer;

begin
Write('Введите натуральное число: ');
Readln(n);
Writeln('Автоморфные числа: ');
for i := 1 to n do
begin
m := sqr(i);
Str(i, s1);
l1 := Length(s1);
Str(m, s2);
if s1 = Copy(s2, Length(s2) - l1 + 1, l1) then Writeln(i)
end
end.
Попов Юрий думаешь, я не догадалась сразу залезть в инет? нужно проще
Павел Смирнов а для начала можно было просто погуглить http://otvet.mail.ru/question/166512286
program avtomorf;
var
i,n,a:integer;
begin
writeln('Введите число n: ');
readln(n);
i:=10;
for a:= 0 to n do
begin
while i<=a do
i:=i*10;
if (sqr(a) mod i=a) then
writeln(a,'^2=',sqr(a));
end;
end.
мне кажется такое решение самое простое program lab32;
var N,i,p,del,m,c:integer;
check:boolean;
begin
readln(N);
writeln('1*1 = 1');
for i:=1 to N
do begin
del:=1;
check:=false;
p:=i*i;
while((p div del <>0) and (check=false))do begin
c:=p mod del;
if(i=c )then begin
writeln(i,'*',i,' = ',p);
check:=true;
end;
del:=del*10;
end;
end;
end.
G. Igor
G. Igor
161
Если кому-то нужно на С++
#include
using namespace std;
main()
{
setlocale(LC_ALL,"Russian");
int N,i,k;
cout<<"Введите число";
cin>>N;
for(i=0;i<N;i++)
{
k=i*i;
if(k<100 and i==k%10 )
{
cout<<i<<"*"<<i<<"="<<k<100 and i==k%100 )
{
cout<<i<<"*"<<i<<"="<<k<<endl;
}
}
}