Задача о сумме четных чисел. |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Задача о сумме четных чисел. |
vell |
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
Нам задали 15 задач на Pascalе. Я решила 14, но последняя все никак не получается.
Задача: Дано натуральное число N. Найти сумму четных цифр в данном числе. Если кто знает, как её решать - подскажите, буду очень благодарна. |
APAL |
Сообщение
#2
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Один из вариантов:
Преобразовать число в строковый тип и методом последовательного перебора символов этой строки найти нужную сумму. -------------------- |
vell |
Сообщение
#3
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
Честно говоря, мне не очень понятно, как это выразить через программу... :'(
|
APAL |
Сообщение
#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 - -------------------- |
Ivs |
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 209 Репутация: 0 |
Преобразовывать в строку нежелательно. тем более вы могли этого еще не проходить, задача решается элементарно, если уж ты сделала остальные то эту не составит труда решить, просто, сдесь видимо необходимо немного подумать.
-------------------- Если вы хотите чаще встречаться с понравившейся девушкой установите ей Windows'95
|
APAL |
Сообщение
#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 - -------------------- |
Ivs |
Сообщение
#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
|
APAL |
Сообщение
#8
|
Смотрю... Группа: Пользователи Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: 6 |
Правильно, четность определяется по последней цифре.
Потом делю на 10, тем самым передвигая запятую влево и отбрасывая остаток. Проверяю опять и так до тех пор число не будет менее 1. Програмку проверял - работает. Может я не все варианты оттестировал, но расхождений я не обнаружил. -------------------- |
orko |
Сообщение
#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 - |
orko |
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 29 Репутация: 0 |
mlinn i chego eto ia napisal???
syt pochti takaya ze kak i u Apala.... ne doglyadel i ne podumal mlin...sorry |
___ALex___ |
Сообщение
#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 - |
APAL |
Сообщение
#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 - -------------------- |
Fire_Rage |
Сообщение
#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(Кто не идёт вперёд, идёт назад)
|
Fire_Rage |
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 26 Репутация: 0 |
слушайте, а что с отступами делается?
-------------------- QUI NON PROFICIT, DEFICIT(Кто не идёт вперёд, идёт назад)
|
vell |
Сообщение
#15
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
Спасибо всем. Ваши подсказки мне очень помогли. :)
|
vell |
Сообщение
#16
|
Группа: Пользователи Сообщений: 4 Репутация: 0 |
P.S: я сдала зачет на пять. ;)
|
orko |
Сообщение
#17
|
Новичок Группа: Пользователи Сообщений: 29 Репутация: 0 |
ет хорошо
|
BE@ST |
Сообщение
#18
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Сергей Репутация: 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. помогите плиз в этот код добавить условие: признак завершения число 0 - т.е. если я ввожу 24066 - мне выводило сумму 6 а не 18 !!! |
Client |
Сообщение
#19
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
попробуй так
while (n<>0) and ((n mod 10)<>0) then s:=s+a; сам не пробовал, но вроде должна работь.. Сообщение отредактировано: Client - |
BE@ST |
Сообщение
#20
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Реальное имя: Сергей Репутация: 0 |
попробуй так if ((a mod 2)=0)and(a<10) and ((n mod 10)<>0) then s:=s+a; сам не пробовал, но вроде должна работь.. ввёл 24066 и выдало 10... Добавлено через 10 мин. попробуй так 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... |
Текстовая версия | 22.12.2024 8:02 |