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

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

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

 
 Ответить  Открыть новую тему 
> Не правильно решает, Помогите...
сообщение
Сообщение #1


Пионер
**

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

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


Вот написал программу которая находит такие числа на отрезке [2,n] что сумма их цифр не изменится при умножение числа на (число - a)
Тестовые значения n=100,a=1
По идеи должен вывести все числа от 2 до 100, так как сумма их цифр не изменится при умножение на 1...но почему то выдаёт 2,9 (((
Ещё незнаю куда сунуть вот это zp2:=s1*a; так как если внутрь цикла ставить то каждый раз будет умножаться сумма на число (а)

Program otrezok;
Var n,a,i,s1,s2,zp1,zp2,k:integer;
Begin
write('Введите число N ');readln(n);
write('Введите число A ');readln(a);
s1:=0;s2:=0;
For i:=2 to n do
Begin
zp1:=i;
While zp1<>0 do
Begin
s1:=s1+(zp1 mod 10);
zp1:=zp1 div 10;
zp2:=s1*a;
end;
While zp2<>0 do
Begin
s2:=s2+(zp2 mod 10);
zp2:=zp2 div 10;
if s1=s2 then begin write(i, ',');k:=k+1;end;
end;
End;
writeln('Всего таких чисел= ',k);
readln;
End.



Сообщение отредактировано: Artem7 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


У тебя перемешаны строчки. Что-то надо внести внутрь цикла, что-то - наоборот, вынести из цикла.

Смотри:
   for i := 2 to n do
begin
s1 := 0; s2 := 0; { <--- !!! Суммы для каждого i свои, поэтому обнулять их надо здесь }
zp1 := i;
while zp1 <> 0 do
begin
s1 := s1 + (zp1 mod 10);
zp1 := zp1 div 10;
end; { Всё, цикл этим закончился, находить zp2 внутри цикла не надо }

zp2 := s1*a;
while zp2 <> 0 do
begin
s2 := s2 + (zp2 mod 10);
zp2 := zp2 div 10;
end; { Точно так же, как и здесь, проверка равенства - ПОСЛЕ цикла }

if s1 = s2 then
begin
write(i, ','); k := k + 1;
end;
end;
(обнулять k перед началом основного цикла не забывай).

А вообще - у меня зародилось сомнение, что ты делаешь не то, что тебе надо. Задача в чем? Проверить, одинакова ли сумма цифр чисел I и I*A? Тогда zp2 := i*a, при чем тут умножение СУММЫ на A?

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

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

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


Чуток переписал но терь выводит 54 числа вместо 99
Program otrezok;
Var n,a,i,s1,s2,zp1,zp2,k:integer;
Begin
write('Введите число N ');readln(n);
write('Введите число A ');readln(a);
For i:=2 to n do
Begin
zp1:=i;
s1:=0;s2:=0;
While zp1<>0 do
Begin
s1:=s1+(zp1 mod 10);
zp1:=zp1 div 10;
zp2:=s1*a;
end;
While zp2<>0 do
Begin
s2:=s2+(zp2 mod 10);
zp2:=zp2 div 10;
if s1=s2 then begin write(i, ',');k:=k+1;end;
end;
End;
writeln('Всего таких чисел= ',k);
readln;
End.


Добавлено через 6 мин.
Цитата(IUnknown @ 15.03.2012 13:52) *

А вообще - у меня зародилось сомнение, что ты делаешь не то, что тебе надо. Задача в чем? Проверить, одинакова ли сумма цифр чисел I и I*A? Тогда zp2 := i*a, при чем тут умножение СУММЫ на A?


Воо спасибо ошибка была именно в этом,что то когда писал запутался))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Злостный любитель
*****

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

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


Соблюдал бы отступы, не запутался бы.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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