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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Задача о сумме четных чисел.
сообщение
Сообщение #1





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

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


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


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

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

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


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


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





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

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


Честно говоря, мне не очень понятно, как это выразить через программу... :'(
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


Бывалый
***

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

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


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


--------------------
Если вы хотите чаще встречаться с понравившейся девушкой установите ей Windows'95
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


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

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

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


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

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


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


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


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


Новичок
*

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

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


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


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





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

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


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





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

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


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


Новичок
*

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

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


ет  хорошо smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Профи
****

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

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


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

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

Сообщение отредактировано: Client -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





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