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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Числа Смита, Нестандартное условие задачи
сообщение
Сообщение #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;

 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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



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


Пионер
**

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

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


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

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

 





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