Модераторы: volvo877, Snowy, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подчитать сумму цифр числа 
:(
    Опции темы
HAS
Дата 17.3.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Здравствуйте, помогите пожалуйста решить эту задачу на паскале, получается найти 1 и последнюю цифру а остальные никак, думаю что надо циклом пройти по всем цифрам и складывать их, но никак не получается, помогите пожалуйста.

Посчитать сумму цифр числа

Вводится число. Вывести сумму его цифр

Пример входного файла
1571

Пример выходного файла
14

PM MAIL   Вверх
sergejzr
Дата 17.3.2005, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Бери же последнюю, а потом дели число на 10 smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
HAS
Дата 17.3.2005, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Блин ты не можешь кинуть исходник, а то просто pascal не моя стихия, на vb это былобы не проблемно ! smile
PM MAIL   Вверх
sergejzr
Дата 17.3.2005, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Нет паскаль это не моя стихия тоже. А дельфи из за 3 строк ставить влом smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
мимо проходил
Дата 17.3.2005, 20:29 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

const n=10;
var
i,sum:integer;
a:array [1..10] of integer;
begin
sum:=0;

for i:=1 to n do
a[i]:=random(100);
for i:=1 to n do
sum:=sum+a[i];
read(sum);//в дельфи знаю как вывести, а в паскале так вроде

end;

  Вверх
Marriage
Дата 17.3.2005, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 4.5.2004
Где: Таганрог

Репутация: нет
Всего: 2



А разве функций перевода числа в строку и обратно нет ???


--------------------
Praemonitus, praemunitus
PM MAIL ICQ   Вверх
мимо проходил
Дата 17.3.2005, 20:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Бери же последнюю, а потом дели число на 10


smile
  Вверх
Guest
Дата 17.3.2005, 20:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А разве функций перевода числа в строку и обратно нет ???

нет

Цитата
read(sum);


да и вместо read нужно write
  Вверх
HAS
Дата 17.3.2005, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



smile не совсем то что нужно !

Это сообщение отредактировал(а) HAS - 17.3.2005, 21:15
PM MAIL   Вверх
sergejzr
Дата 17.3.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата
Цитата(sergej @ 17.3.2005, )
Бери же последнюю, а потом дели число на 10



--Resize_Images_Alt_Text--


А чего смешного, можно спросить? Ваш код выводит сумму чисел массива. Зацепка только в том, что в таком виде числа обычно не лежат. К нему надо их приводить, а делается это именно делением на 10. Вернее модулом.
Вот код на Си:

Код

int sum(int number)
{
  int sum=0;
   while(number>0)
   {
     sum+=number%10;
     number/=10;
   }
  return sum;
}


Если Вы знаете более оптимальный способ преобразования - поделитесь плиз smile
А то так вообще непонятно, зачем собирать массив в Вашем примере smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
sergejzr
Дата 17.3.2005, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Вот от балды на дельфи smile
Код

function sum(number:Integer):Integer
 var
  sum:Integer;
sum:=0;
 begin
  while(number>0) do 
  begin
      sum:=sum+(number mod 10);
      number:=number/10;
  end;
  Result:=sum;
end;



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
мимо проходил
Дата 17.3.2005, 21:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А то так вообще непонятно, зачем собирать массив в Вашем примере

окей,
Код

var
sum,i:integer;

begin
sum:=0;
for i:=1 to 10 do
sum:=sum+random(100);
caption:=inttostr(sum);
   end;


а представь плиз, свой код в дельфи smile

  Вверх
мимо проходил
Дата 17.3.2005, 21:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(sergej @ 17.3.2005, 21:08)
Вот от балды на дельфи smile
Код

function sum(number:Integer):Integer
 var
  sum:Integer;
 begin
  while(number>0) do 
  begin
      sum:=sum+(number mod 10);
      number:=number/10;
  end;
  Result:=sum;
end;

а ещё говорят здесь телепатов нет smile
  Вверх
мимо проходил
Дата 17.3.2005, 22:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А чего смешного, можно спросить?

а кстати, извини, ни хрена смешного в этом нет, перезанимался я smile
  Вверх
sergejzr
Дата 17.3.2005, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



smile Регистрируйся, мы всегда рады новым лицам smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Fedor
Дата 18.3.2005, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Днепрянин
****


Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32



Код
var
  s:string;
  a:integer;
  t:integer;
  i:integer;
  sum:integer;
begin
  sum:=0;
  readln(a); {ввод числа}
  str(a,s);    {перевод из числа в строку}
  for i:=1 to length(s) do
   begin
     val(s[i],t,err);   {перевод i-того символа строки в число}
     sum:=sum+t;
   end;
  writeln(sum);
end.



--------------------
Мы - Днепряне. Мы всех сильней.
PM ICQ   Вверх
HAS
Дата 18.3.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Спасибо Fedor
PM MAIL   Вверх
Aleche
Дата 18.3.2005, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 4.11.2004
Где: Воронеж

Репутация: нет
Всего: 5



Привет,Has!!!Что-то я не пойму , если пользователь вводит цифры,зачем их в строковый тип переводить и обратно? smile
Код

function summa( n:integer):integer;
var
f:integer;
 begin
      f:=0:
    while n>0 do
   begin
   f:=f+ (nmod10);
    n:=ndiv10;
      end;
  summa:=f;
  end;


А это решение не подходит? smile
PM MAIL ICQ   Вверх
HAS
Дата 18.3.2005, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Тебе тоже,Aleche, спасибо ! smile smile
PM MAIL   Вверх
sergejzr
Дата 18.3.2005, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Aleche, только я не понимаю, чем твой код от моего отличается smile
Код

function sum(number:Integer):Integer
 var
  sum:Integer;
 begin
  while(number>0) do 
  begin
      sum:=sum+(number mod 10);
      number:=number/10;
  end;
  Result:=sum;
end;




--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
HAS
Дата 18.3.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ing
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 1.3.2005
Где: Internet

Репутация: нет
Всего: 2



Все-все спасибо всем !
PM MAIL   Вверх
Pakshin A. S.
Дата 19.3.2005, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



По сумме... немного интереснее вариантик, не как стандарт...
Код

var
 f: text;
 s:string;
 c:char;
 sum:integer;
begin
 Assign(f, 'Demo.txt');
 reset(f);
 readln(f, s);
 Close(f);


 sum:=0;
 while s <> '' do
  begin
   inc(sum, ord(s[1]) - ord('0'));
   Delete(s, 1, 1);
  end;


 writeln(sum);
 readln;
end.

Добавлено @ 13:48
Заодно здесь можно и проверку на правильность вводимых данных сделать... smile smile
PM   Вверх
Aleche
Дата 19.3.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 4.11.2004
Где: Воронеж

Репутация: нет
Всего: 5



sergej.z!!!!!! smile Имени функции присваивается ее подсчитываемое значение!!И ,на мой взгляд , лучше использовать деление div smile А да еще имя функции должно отличаться от работающих в ней переменных!














PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 19.3.2005, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



М-дя... ВСЕ уже поняли, что умеешь управлять цветом и размером, но вот такие сообщения могут вызвать конфликтные ситуации, т. к. лично я думаю, что такое сообщение в жизни было бы произнесего очень повышенным тоном! Немного убавь...
PM   Вверх
Aleche
Дата 19.3.2005, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 4.11.2004
Где: Воронеж

Репутация: нет
Всего: 5



Вот именно, что вcе уже поняли ,СУВ PAKSHIN A.S.!!!А,если, действительно, мое сообщение воспринято в недружелюбной форме, то ничего повышенным я не хотела сказать, просто красный цвет нравится!!! PakshinA.S., не принемай все близко к сердцу !! smile smile
PM MAIL ICQ   Вверх
sergejzr
Дата 19.3.2005, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(Aleche @ 19.3.2005, 12:49)
sergej.z!!!!!! smile Имени функции присваивается ее подсчитываемое значение!!И ,на мой взгляд , лучше использовать деление div smile А да еще имя функции должно отличаться от работающих в ней переменных!

О! это круто! тогда можно так написать:
Код

function sum(number:Integer):Integer
 var
  sum:=0;
 begin
  while(number>0) do 
  begin
      sum:=sum+(number mod 10);
      number:=number div 10;
  end;
 end;



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Pakshin A. S.
Дата 19.3.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



sergej.z Вообще-то говоря, паскалевско-дельфистский компилятор бы выдал ошибку несовместимости типов при использовании "/", т. к. результат этой операции - вещественное число, а присвоение шло к целочесленному... а что? в сях не так? Я всегда использовал функции разбиения на целую часть и остаток... Надо будет еще раз почитать... smile smile smile
PM   Вверх
Zero
Дата 19.3.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(sergej @ 19.3.2005, 15:10)
тогда можно так написать:

Цитата(sergej @ 19.3.2005, 15:10)
var
  sum:=0;

sergej.z я даже не проверяя код, могу сказать что так написать нельзя.
PM MAIL ICQ   Вверх
sergejzr
Дата 21.3.2005, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360



Цитата(Pakshin @ 19.3.2005, 15:51)
sergej.z Вообще-то говоря, паскалевско-дельфистский компилятор бы выдал ошибку несовместимости типов при использовании "/", т. к. результат этой операции - вещественное число, а присвоение шло к целочесленному... а что? в сях не так? Я всегда использовал функции разбиения на целую часть и остаток... Надо будет еще раз почитать... smile smile smile


Нет, в Си надо самому следить. Обычные грабли новичков: 4/5=0 smile Вси надо в таких случаях хотя бы одно число вещ. писать. например 4.0/5.

Насчёт функций, это верно, ведь для получения целого и остатка у процессора одна комманда. То есть и то и другое одновременно вырешивается. Это как раз операторами / и % нельзя использовать smile Приходится два раза одну и тоже операцию выполнять.

Цитата(Zero @ 19.3.2005, 18:50)
sergej.z я даже не проверяя код, могу сказать что так написать нельзя.

Ясный красный smile Просто не удалил var. имелось ввиду, что вообще без локальных переменных обойтись можно.
(А если паскаль инициализирует 0, то и без первой строки smile )
Код

function sum(number:Integer):Integer
 begin
  sum:=0;//Если паскаль инициализирует нулём по умолчанию, то эту строку даже можно удалить :)
  while(number>0) do 
  begin
      sum:=sum+(number mod 10);
      number:=number div 10;
  end;
 end;



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Pakshin A. S.
Дата 21.3.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Вроде не инициализирует... smile
PM   Вверх
Albinos_x
Дата 3.10.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: нет
Всего: 108



вот вариант:
Код

function sum(num:Integer):Integer    
begin    
while (num>0) do    
  begin
      {к результирующиму прибавляем остаток от целочисленного деления на 10}    
      Result:=Result+(num mod 10);
      {убираем крайнее правое число методом целочисленного деления на 10}    
      num:=num div 10;    
  end;        
end;


еще вариант:
Код

function sum(num:Integer):Integer    
var s:string[6];  {строка, т.к. само число типа Integer -32768..32767, то больше 6 символов занимать не может и больше нам не надо}
      inv:byte;        {для получения числа из собственно строки чисел}
      er:integer;    {если произойдёт ошибка превода, то сюда запишется номер ошибочного символа, но у нас он один и будет верным, но без неё нельзя}
begin    
s:=srt(num);        {переводим число в строку}
if s<>'' then          {проверяем не пустая ли строка}
   begin
   if s[1]='-' then     { если первый символ '-', то может возникнуть ошибка перевода}
      delete(s,1,1);   { если так, то удаляем его}
   {открываем цыкл по длине строки}
   for i:=1 to Length(S) do
      begin
     {преобразуем каждый символ в цифру и записываем в in}
      Val(s[i],inv,er);
      {всё суммируем для получения результата}
      Result:=Result+inv;
      end;
   end;        
end;

к сожалению команда ABS не знаю как работает в Паскале, если знаешь, то можно применять её вместо
Код

if s[1]='-' then     
      delete(s,1,1);

да и в первом варианте не помешало бы...

PS:
Код

number:=number/10

на это скорее всего будет ругаться, т.к. при делении может получиться не целочисленное число (делфи даже не откомпилится, в паскале не знаю... ) smile
Добавлено @ 19:21
упс....
предыдущих постов не видел....только первую страницу... smile просмотрел... smile

Это сообщение отредактировал(а) Albinos_x - 3.10.2005, 19:16


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0912 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.