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

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

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

> Задача о сумме четных чисел.
vell
сообщение 30.09.2003 16:05
Сообщение #1





Группа: Пользователи
Сообщений: 4

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


Нам задали 15 задач на Pascalе. Я решила 14, но последняя все никак не получается. sad.gif
Задача: Дано натуральное число N. Найти сумму четных цифр в данном числе.
Если кто знает, как её решать - подскажите, буду очень благодарна.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
APAL
сообщение 30.09.2003 16:29
Сообщение #2


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


Один из вариантов:
Преобразовать число в строковый тип и методом последовательного перебора символов этой строки найти нужную сумму.


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vell
сообщение 30.09.2003 18:12
Сообщение #3





Группа: Пользователи
Сообщений: 4

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


Честно говоря, мне не очень понятно, как это выразить через программу... :'(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 1.10.2003 7:44
Сообщение #4


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


Есть в TP такая функция преобразования числа в строку:

Код
function IntToStr(I: Longint): String;
{ Convert any integer type to a string }
var
S: string[11];
begin
Str(I, S);
IntToStr := S;
end;
begin
Writeln(IntToStr(-5322));
Readln;
end.


А дальше только перебирать посимвольно и используя CASE..OF.. считать сумму.

Попробуй сам продолжить..

Сообщение отредактировано: volvo - 17.12.2004 14:42


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ivs
сообщение 1.10.2003 13:38
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 209

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


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


--------------------
Если вы хотите чаще встречаться с понравившейся девушкой установите ей Windows'95
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 1.10.2003 15:28
Сообщение #6


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


Можно еще вот так:

Код
Var
 N,S  : LongInt;
Begin
 S:=0;
 N:=1234567;
 Repeat
   If not Odd(N) then S:=S+(N mod 10);
   N:=N div 10;
 Until N<1;
 Writeln(s);
End.


Сообщение отредактировано: volvo - 17.12.2004 14:43


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ivs
сообщение 1.10.2003 18:06
Сообщение #7


Бывалый
***

Группа: Пользователи
Сообщений: 209

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


Цитата
Можно еще вот так:

Код
Var
 N,S  : LongInt;
Begin
 S:=0;
 N:=1234567;
 Repeat
   If not Odd(N) then S:=S+(N mod 10);
   N:=N div 10;
 Until N<1;
 Writeln(s);
End.


Ты проверяешь на четность само число, а надо цифру.


--------------------
Если вы хотите чаще встречаться с понравившейся девушкой установите ей Windows'95
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 2.10.2003 7:06
Сообщение #8


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


Правильно, четность определяется по последней цифре.
Потом делю на 10, тем самым передвигая запятую влево и отбрасывая остаток. Проверяю опять и так до тех пор число не будет менее 1.
Програмку проверял - работает.

Может я не все варианты оттестировал, но расхождений я не обнаружил.


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
orko
сообщение 2.10.2003 16:19
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 29

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


a mozno ety zadachy reshit tak???
vrode rabotaet no chet mne ne nravitsya v nei >:(

Код
uses crt;
var s,a,n:integer;
begin clrscr;
writeln('vvedite naturalnoe chislo');
readln(n);
s:=0;
while (n<>0)do begin
a:=n mod 10;
n:=n div 10;
if (((a mod 2)=0)and(a<10)) then s:=s+a;
end;
writeln('summa cifr... =',abs(s));
readln;
end.


Сообщение отредактировано: volvo - 17.12.2004 14:44
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
orko
сообщение 2.10.2003 16:21
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 29

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


mlinn i chego eto ia napisal???
syt pochti takaya ze kak i u Apala....
ne doglyadel i ne podumal mlin...sorry smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
___ALex___
сообщение 2.10.2003 17:08
Сообщение #11


Бывалый
***

Группа: Пользователи
Сообщений: 282

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


Код
function SumEvenDigits(N: Integer): Byte;
const
HashTable: Array[0..9] of Byte = (0, 0, 2, 0, 4, 0, 6, 0, 8, 0);
begin

Result := 0;
repeat
 Inc(Result, HashTable[N mod 10]);
 N := N div 10;
until N = 0

end;


Сообщение отредактировано: volvo - 17.12.2004 14:44
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
APAL
сообщение 3.10.2003 15:04
Сообщение #12


Смотрю...
*****

Группа: Модераторы
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


Какие-то ошибки

Вот результат работы данного кода:

123456
46
222
6
123
2
1234
6
12345
6
123456
46
654321
91

Сам код проги (на основе идеи ___Alex____):

Код
Uses Crt;
Var
 k : Longint;
function SumEvenDigits(N: Integer): Byte;
Var Result : LongInt;
const
HashTable: Array[0..9] of Byte = (0, 0, 2, 0, 4, 0, 6, 0, 8, 0);
begin

 Result := 0;
  repeat
    Inc(Result, HashTable[N mod 10]);
      N := N div 10;
  until N = 0;
 SumEvenDigits:=Result;
end;
Begin
ClrScr;
Repeat
Read(k);Writeln('  ',SumEvenDigits(k));
Until k=0;
end.


Сообщение отредактировано: volvo - 17.12.2004 14:45


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fire_Rage
сообщение 8.10.2003 3:43
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 26

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


А это-рекурсия.

Код
uses crt;
var i,g:integer;

function symma(i:integer):integer;
var t:integer;
begin
 if i=0 then symma=0
          else  begin
                    t:=i mod 10;
                    if t mod 2 =0 then symma:=symma(i div 10)+t
                                        else symma:=symma(i div 10);
                  end;
end;

begin
 clrscr;
 readln(i);
 g:=symma(i);
 writeln(g);
end.


Сообщение отредактировано: volvo - 17.12.2004 14:46


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Fire_Rage
сообщение 8.10.2003 3:44
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 26

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


слушайте, а что с отступами делается?


--------------------
QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vell
сообщение 23.10.2003 14:33
Сообщение #15





Группа: Пользователи
Сообщений: 4

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


smile.gif Спасибо всем. Ваши подсказки мне очень помогли.  :)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
vell
сообщение 23.10.2003 14:35
Сообщение #16





Группа: Пользователи
Сообщений: 4

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


P.S: я сдала зачет на пять.  ;)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
orko
сообщение 25.10.2003 21:56
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 29

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


ет  хорошо smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
BE@ST
сообщение 17.11.2007 21:04
Сообщение #18





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

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


Цитата(orko @ 2.10.2003 15:19) *
a mozno ety zadachy reshit tak???
vrode rabotaet no chet mne ne nravitsya v nei >:(

Код
uses crt;
var s,a,n:integer;
begin clrscr;
writeln('vvedite naturalnoe chislo');
readln(n);
s:=0;
while (n<>0)do begin
a:=n mod 10;
n:=n div 10;
if (((a mod 2)=0)and(a<10)) then s:=s+a;
end;
writeln('summa cifr... =',abs(s));
readln;
end.




помогите плиз в этот код добавить условие: признак завершения число 0 - т.е. если я ввожу 24066 - мне выводило сумму 6 а не 18 !!!

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 17.11.2007 21:21
Сообщение #19


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


попробуй так
while (n<>0) and ((n mod 10)<>0) then s:=s+a;

сам не пробовал, но вроде должна работь..

Сообщение отредактировано: Client - 17.11.2007 21:33
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
BE@ST
сообщение 17.11.2007 21:33
Сообщение #20





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

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


Цитата(Client @ 17.11.2007 20:21) *
попробуй так
if ((a mod 2)=0)and(a<10) and ((n mod 10)<>0) then s:=s+a;

сам не пробовал, но вроде должна работь..




ввёл 24066 и выдало 10...



Добавлено через 10 мин.
Цитата(Client @ 17.11.2007 20:21) *
попробуй так
while (n<>0) and ((n mod 10)<>0) then s:=s+a;

сам не пробовал, но вроде должна работь..


так оно берёт числа справа а не слева ...

Код


uses crt;
var s,a,n:integer;
begin clrscr;
writeln('vvedite naturalnoe chislo');
readln(n);
s:=0;
while (n<>0) and ((n mod 10)<>0) do begin
a:=n mod 10;
n:=n div 10;
if (((a mod 2)=0)and(a<10)) then s:=s+a;
end;
writeln('summa cifr... =',abs(s));
readln;
end.


получилось 12...

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

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

 



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