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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Числа Смита, Нестандартное условие задачи
volvo
сообщение 5.11.2010 12:39
Сообщение #21


Гость






Цитата
Дописал, но происходит зацикливание программки...
Следи за руками:

      {Теперь еще проверим,чтобы это из корня кв. было простым числом}

{ Твоя проверка была заменена на вот эти две строки: }
simple := true;
if Sqr(Trunc(Sqrt(number))) <> number then simple:=false;

{Найденное число - это супер-число Смита?}
{Проверяем, чтобы сумма его цифр являлась числом Смита}
if ((SumNumb=SumSubs) and (amount>1) and simple) then SFound:=true;

, ибо зачем ты SSmith проверяешь на полный квадрат - мне непонятно совершенно. Проверять надо number, и ничего другого. Причем, заметь, перед проверкой, изначально, считаем что number - полный квадрат. Если это не так, то simple будет False. У тебя этого не было сделано. (simple = true) в следующем условии я тоже заменил на просто simple, ну не надо делать лишнего.

Я надеюсь, типы всех переменных с Integer на LongInt поменял? Для этого не надо много изменять в программе, достаточно сделать самой первой строкой
Type Integer = LongInt;

 К началу страницы 
+ Ответить 
Relrin
сообщение 5.11.2010 16:36
Сообщение #22


Пионер
**

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

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


Полный код текущей программы

Var
Found,SFound : boolean; {Флаг для цикла}
simple : boolean; {Флаг, используемый при проверке на пр. число}
square : double; {Переменная,в котором хранится число из кв. корня}
number,numb : longint; {Число,с которого начинаем поиск...}
N : longint; {Наше супер-число Смита}
i,j,k : longint; {Счетчики для циклов}
Smith, SSmith : longint; {Искомое супер-число Смита}
SumNumb : longint; {Сумма цифр числа}
SumSubs : longint; {Сумма множителей}
amount : longint; {Кол-во простых множителей}
numSum,numSub : longint; {Переменные для поиска сумм}
factor,pr : longint; {Начальный делитель числа}
s,sfact,sum : longint; {Результат вычислений}

Begin
{ВВОД ЧИСЛА N}
write('Enter your number N: ');
readln(N);
{Поиск супер-числа Смита}
i:=0;
number:=1;
while i<>N do
begin
repeat
SFound:=false;
{Поиск числа Смита}
repeat
inc(number);
Found:=false;
SumNumb:=0;
SumSubs:=0;
numSum:=number;
numSub:=number;
{Подсчет суммы цифр числа}
s:=0;
while numSum<>0 do
begin
inc(s,numSum mod 10);
numSum:=numSum div 10;
end;
SumNumb:=s;
{Подсчет суммы множителей числа}
s:=0;
factor:=2;
amount:=0;
repeat
if (numSub mod factor)=0 then
begin
{Подсчитываем сумму цифр числа (множителя)}
sfact:=0;
numb:=factor;
while numb<>0 do
begin
inc(sfact,numb mod 10);
numb:=numb div 10;
end;
sum:=sfact;
{Подсчитываем сумму множителей}
s:=s+sum;
inc(amount);
numSub:=numSub div factor
end
else inc(factor);
until numSub=1;
SumSubs:=s;
{Найденное число - это число Смита?}
{Проверяем, чтобы сумма его цифр была равна сумме простых множителей}
if ((SumNumb=SumSubs) and (amount>1)) then Found:=true;
until Found=true;
{Поиск супер-чисел Смита, удолетворяющих условиям}
{Подсчет суммы цифр cупер-числа Смита}
s:=0;
numSum:=0;
numSum:=number;
while numSum<>0 do
begin
inc(s,numSum mod 10);
numSum:=numSum div 10;
end;
SSmith:=s;
{Проверка на супер-число Смита}
SumNumb:=0;
SumSubs:=0;
numSum:=SSmith;
numSub:=SSmith;
{Подсчет суммы цифр числа}
s:=0;
while numSum<>0 do
begin
inc(s,numSum mod 10);
numSum:=numSum div 10;
end;
SumNumb:=s;
{Подсчет суммы множителей числа}
s:=0;
factor:=2;
amount:=0;
repeat
if (numSub mod factor)=0 then
begin
{Подсчитываем сумму цифр числа (множителя)}
sfact:=0;
numb:=factor;
while numb<>0 do
begin
inc(sfact,numb mod 10);
numb:=numb div 10;
end;
sum:=sfact;
{Подсчитываем сумму множителей}
s:=s+sum;
inc(amount);
numSub:=numSub div factor
end
else inc(factor);
until numSub=1;
SumSubs:=s;
{Теперь еще проверим,чтобы это из корня кв. было простым числом}
simple:=true;
if Sqr(Trunc(Sqrt(number))) <> number then simple:=false;
{Найденное число - это супер-число Смита?}
{Проверяем, чтобы сумма его цифр являлась числом Смита}
if ((SumNumb=SumSubs) and (amount>1) and (simple=true)) then SFound:=true;
until SFound=true;
inc(i);
end;
Smith:=number;
{ВЫВОД СУПЕР-ЧИСЛА СМИТА}
writeln('Ваше супер-число Смита: ',Smith);
readln;
End.



При любой проверке сейчас выскакивает сообщение вида:
Runtime error 215 at $00401908
$00401908
$00407BD1

Добавлено через 5 мин.
Это во Фри Паскаль. А вот в Турбо Паскаль заработало! smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.11.2010 17:41
Сообщение #23


Гость






Цитата
При любой проверке сейчас выскакивает сообщение вида:
Runtime error 215 at $00401908
$00401908
$00407BD1
"Не верю" (С). Я программу твою правил именно с использованием FPC, так что рассказывать мне, что оно не работает и вылетает - не надо. Вот сейчас взял, скопировал полностью твой код из 22-го поста (FPC 2.4.0, если что) и запустил:

Running "f:\programs\pascal\tst.exe "
Enter your number N: 2
Ваше супер-число Смита: 121

Running "f:\programs\pascal\tst.exe "
Enter your number N: 3
Ваше супер-число Смита: 10201

Running "f:\programs\pascal\tst.exe "
Enter your number N: 4
Ваше супер-число Смита: 36481



Что я делаю не так?
 К началу страницы 
+ Ответить 
Relrin
сообщение 5.11.2010 21:57
Сообщение #24


Пионер
**

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

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


Уже все работает! Большое спасибо! good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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