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

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

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

 
 Ответить  Открыть новую тему 
> Разложение числа на цифры, ПЛЗ посмотрите сначала прежде чем в фак посылать
kr3v3tkus
сообщение 17.12.2005 22:27
Сообщение #1


Пионер
**

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

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


Посмотрите пожалста задачу, я уже в поиске искал. но там выдаёт такое разбивание числа типа 6=5+1 или сумма чисел в массиве, а мне надо типа 605=6+0+5. Вся трудность в том, что я не знаю как применить свойство мода и дива для множества чисел sad.gif я знаю, что чтобы получить например 2 из 123
нужно сделать (123 div 10) mod 10, но если у нас есть такое число - 1234, то ведь надо например для 1 делать просто div 1000, для 2 и див и мод ну и т.д.
Помогите или пошлите в пример плз unsure.gif

Составить программу нахождения среднего арифметического значения цифр заданного натурального числа N (1<N<1000000000).

Код
program lol;
var n:longint;
      k,s:integer;
begin
k:=1;
s:=0;
z:=n;
writeln('vvesti 4islo');
readln(n);
writeln;
if (n>1)and(n<1000000000) then  {'условие для n'}
  begin

    while z>=10 do  {'здесь идёт вычисление из скольки цифр состоит число'}
      begin
        z:=z div 10;
        k:=k+1;
      end;

  begin  {' !!! а здесь надо найти сумму состовляющих число цифр'}
    while i<=k do

  end;

  end;
else writeln('neprav1ln1y argyment');
readln;
end.


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2005 22:34
Сообщение #2


Гость






А ты сразу сумму цифр найти не можешь?
  while n <> 0 do begin
s := s + (n mod 10);
n := n div 10;
end;
 К началу страницы 
+ Ответить 
kr3v3tkus
сообщение 17.12.2005 23:02
Сообщение #3


Пионер
**

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

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


volvo
так а ведь если число например 9значное(123456789)
1 s:=0+23456789
n:=12345678
получается так например для 1го
а мне надо типа
1 s:=0+1
n:=2
2 s:=1+2
n:=3
типа это надо, или ты имееш ввиду както связать это с тем где находится количество цифр в числе?


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alex7
сообщение 17.12.2005 23:19
Сообщение #4


Пионер
**

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

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


Цитата
Составить программу нахождения среднего арифметического значения цифр заданного натурального числа N (1<N<1000000000).

Значит скажем так.
Есть у меня такая(ну, почти) работающая програма, но написано очень коряво, ибо давно и на тупую голову. yes2.gif
Если чо поймешь, то можешь взять с нее куски:
Код
program suma_cifr_4isel_ta_porivnyannya_sum;
var n1,s1,n2,s2:longint;
    a1,a2:byte;
label xxx1, sp1, xxx2, sp2;
begin
     writeln ('Rozrahunok sum cifr dvoh 4isel ta porivnyannya');
     repeat
     write ('Vvedit" 4isla A,B (4erez probil) - ');
     readln (n1,n2);
     if (n1<0) or (n2<0) then writeln ('Dani vvedeno nepravilno');
     until (n1>=0) and (n2>=0);
     s1:=0;
         xxx1: begin
         a1:=n1 mod 10;
         s1:=s1+a1;
         n1:=n1 div 10;
         if n1>10 then goto xxx1;
         if n1<10 then goto sp1;
         sp1:
         s1:=s1+n1;
         writeln;
         writeln('Suma cifr 4isla A = ',s1);
         end;
     s2:=0;
         xxx2: begin
         a2:=n2 mod 10;
         s2:=s2+a2;
         n2:=n2 div 10;
         if n2>10 then goto xxx2;
         if n2<10 then goto sp2;
         sp2:
         s2:=s2+n2;
         writeln('Suma cifr 4isla B = ',s2);
         end;
         writeln;
         write ('  Porivnyannya:');
         if s1-s2<0 then write (' A < B') else
         if s1-s2=0 then write (' A = B') else
         write (' A > B');
         readln
end.

Главнгое чо хочу сказать, так это то что
Код
while z>=10 do  {'здесь идёт вычисление из скольки цифр состоит число'}
      begin
        z:=z div 10;
        k:=k+1;
      end;

по моему не правиьно организовано, см. мою прогу→ там я использу. mod 10 чтобы получить последнюю цифру числа.
-=еще раз извиняюсь за корявую програму- нету времени щас переделывать=-
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.12.2005 23:19
Сообщение #5


Гость






Ты нормально задание написать можешь? Что тебе надо, конкретно? Ты писал про сумму цифр числа, я привел тебе фрагмент программы, который эту сумму находит, теперь ты опять что-то начинаешь придумывать...

Сумма цифр числа n = 1234567 равна 28 и ничему другому... Если тебе нужно не это, то будь добр привести пример входного и выходного значения (с объяснением)... Телепатов здесь нет.
 К началу страницы 
+ Ответить 
kr3v3tkus
сообщение 17.12.2005 23:41
Сообщение #6


Пионер
**

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

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


2 volvo
Цитата
Сумма цифр числа n = 1234567 равна 28 и ничему другому

нуда мне это и нужно
Цитата
а мне надо типа 605=6+0+5

извини, я просто не понял применится ли
Код
while n <> 0 do begin
s := s + (n mod 10);
n := n div 10;
end;

к числу 1234567? ну если трассировать то ведь вроде получается так
1 s:=s+(n mod 10) {s=0+1234567 mod 10 => s=0+234567}
n:= n div 10 {s=123456}
так? извини конечно если я ошибаюс smile.gif голова уже пухнет smile.gif

2 Alex7
сенка, конечно туманно, но ща попробую раскурочить smile.gif


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kr3v3tkus
сообщение 18.12.2005 0:01
Сообщение #7


Пионер
**

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

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


2 volvo
ёёёё блин пардон , фсё крыша летит wacko.gif ёлки палки пол дня думал ))) мне почемуто казалось, что
оно находит не 1 цифру а несколько )
сори я ваще касячу (


--------------------
Цитата
          .     .
           \__/
          (**)
(>:=:=:~~ 
  ^ ^ ^ ^ 

Креветка присваивания :DDD
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Alex7
сообщение 18.12.2005 10:14
Сообщение #8


Пионер
**

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

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


Цитата
1 s:=s+(n mod 10) {s=0+1234567 mod 10 => s=0+234567}

Не так.
Вот так:
1 s:=s+(n mod 10) {s=0+1234567 mod 10 => s=0+7} 

Т.Е. mod тебе выдает в результате ту цифру, которая не поделилась нацело на 10(на 10 могут нацело делится числя больше 10, а так, как у нас большое число, то его младшая цифра- единичная не делится, вот ее и получаем).
Выполняя циклично этоту операцию ты получишь сумму цифр твоего числа, только тебе нужео запоминать значение n, чтобы в следушем цикле уже модить меньшее число(уже без последней цифры) и т.д.
Короче
Код
while n <> 0 do begin
s := s + (n mod 10);
n := n div 10;
end;

Очень правильное и оптимаьное решение.

Думаю как находить среднее значение тебе не нужно писать, сам не балбесс lol.gif , тем более уже утро... good.gif

Сообщение отредактировано: volvo - 3.11.2006 22:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Анастасия
сообщение 23.10.2006 23:04
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 41
Пол: Женский
Реальное имя: Анастасия

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


Это по поводу нахождения количества цифр, суммы цифр и переворачивания цифр. Получается так у меня:
Код

program kkk;
uses crt;
var i,t,s,k,m:integer;u:string;
BEGIN
clrscr;
writeln('vvedi chislo ');
readln(u);{!!!! -вот что надо читать - сразу строковую величину в цифрах}
s:=0; {kolichestvo zifr}
t:=0; {suma zifr}
for i:=1 to length(u) do
begin
s:=s+1;val(copy(u,i,1),k,m);
t:=t+k;
end;
writeln( 'kolichestvo zifr = ', s);
writeln( 'suma  zifr = ', t);
write('perevernutoe chislo  = ');
for i:=length(u) downto 1 do
begin
write(copy(u,i,1));
end;
end.

Хотя и понимаю , что не логично вводить цифру строкой.

Сообщение отредактировано: Анастасия - 23.10.2006 23:24
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 23.10.2006 23:25
Сообщение #10


Гость






Цитата
Может нельзя моим способом решать...
Нельзя, конечно... Ты же читаешь число, а все лидирующие нули просто удаляются и не принимаются в расчет. Если хочешь, вводя 009 получать "перевертыш" равный 900, тебе надо вводить информацию сразу в виде строки...

Кстати, ты на дату смотрела? Теме, извини, скоро ГОД...

Что, закрывать темы что-ли, чтобы некрофилии не было?
 К началу страницы 
+ Ответить 

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

 



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