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