Страница 1 из 1

Дано целое число (вводит пользователь), определить сумму его цифр, являющихся простым

Добавлено: 23 июн 2008, 11:28
Azura
Дано целое число (вводит пользователь), определить сумму его цифр, являющихся простыми числами.

Помогите, пожалуйста, решить задачку! Очень нужно! Желательно на Pascal и C++.

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 12:00
BBB
Простяе числа, меньшие 10 (т.е. те, которые являются цифрами) - это 2,3,5,7.
Либо:
1) брать остаток числа от деления на 10 (N mod 10), смотреть на принадлежность к [2,3,5,7], если принадлежить, то суммировать. Затем цисло делить целочисленно на 10 (N div 10) и, если результат больше 0, то читать сие предложение с начала.
Либо:
2) преобразовать число к строке (ф-я Str), затем перебирать по порядку символы строки, смотреть их принадлежность к ['2','3','5','7']. Если да, то преобразовать символ обратно в числи и суммировать.

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 12:28
Azura
BBB писал(а):Простяе числа, меньшие 10 (т.е. те, которые являются цифрами) - это 2,3,5,7.
Либо:
1) брать остаток числа от деления на 10 (N mod 10), смотреть на принадлежность к [2,3,5,7], если принадлежить, то суммировать. Затем цисло делить целочисленно на 10 (N div 10) и, если результат больше 0, то читать сие предложение с начала.
Либо:
2) преобразовать число к строке (ф-я Str), затем перебирать по порядку символы строки, смотреть их принадлежность к ['2','3','5','7']. Если да, то преобразовать символ обратно в числи и суммировать.

Спасибо большое, но не могли бы вы написать это в виде программы? Или исправить эту:

Код: Выделить всё

program prosto_chisla;
uses crt;
var n,i,symma,k,x:integer;
    p,pdel: Integer;
    numb: integer;
Function Prost (k:integer): boolean;
Begin
Prost:=true;
for i:=2 to x div 2 do
  if x mod i=0 then
    begin Prost:=false;
    end;
End;
Begin
clrscr;
 symma:=0;
 pdel:=0;
   Write('‚ўҐ¤ЁвҐ зЁб«® n: ');
   Readln(numb);
  {Val(numb, p, Code);
   if Code<>0 then Writeln('‚ўҐ¤Ґ*® *ҐўҐа*®Ґ зЁб«®: ',Code) Else Writeln('Ok!');
  until Code = 0;}
k:=0;
  while numb>0 do
    begin
    i:=numb mod 10;
    numb:=numb div 10;
    end;
 for i:=2 to (n-1) do begin
                    if n mod i = 0 then pdel:=pdel+1;
                                     end;
                    if pdel=1 then symma:=symma+i;
                    if pdel=1 then Write(i,' ');
                                     pdel:=0;

Writeln;
Writeln(symma);
readln;
{write('‡**®ў®(y/n)? ');
Readln(yn);
until yn='n';}
end.

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 13:48
BHy4ok
Вводимое число сделал типа "String", я думаю не будут предираться. Если же все таки будут вопросы, то либо сделай защиту от дурака на ввод чисел или-же просто как было предложено выше ставь тип "integer" и затем просто переводи его в строку. (str(x,s));
[syntax='Pascal']
uses
Crt;
var
i,j,k,p:integer;
n:string;
ch:set of char=['2','3','5','7']; // Простые числа
begin
ClrScr;
k:=0;
write('Vvedite chislo-> ');
readln(n);
for I := 1 to length(n) do
if n in ch then // Ищем простое число
begin
val(n,p,j); // Если число найдено, то переводим его в тип "integer"
k:=k+p; // Суммируем найденное число с уже имеющейся суммой предыдущих чисел.
end;
writeln;
writeln('summa prostih chisel = ',k); // Выводим сумму всех простых чисел на экран
readln;
end.
[/syntax]

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 13:56
somewhere
Зачем здесь массив А?

Или исправить эту.

Добавлено: 23 июн 2008, 14:02
BBB
Azura писал(а):Или исправить эту:

Код: Выделить всё

program prosto_chisla;
uses crt;
var n,i,symma,k,x:integer;
    p,pdel: Integer;
    numb: longint;

Begin
 clrscr;
 symma:=0;
   Write('‚ўҐ¤ЁвҐ зЁб«® n: ');
   Readln(numb);

  while numb>0 do
    begin
      i:=numb mod 10;
      numb:=numb div 10;
      if (i in [2, 3, 5 ,7]) then symma:=symma+i;
   end;
Writeln;
Writeln(symma);
readln;
end.

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 14:14
BHy4ok
somewhere писал(а):Зачем здесь массив А?

Нету там массива "а", я его раньше убрал чем ты обновил страницу :) (Время обновления не смотри, были добавлены комментарии)

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 15:44
BBB
BHy4ok,
все-таки,
for I := 1 to length(n) do
а не
for I := 0 to length(n) do

И k предварительно обнулить.

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 15:48
BHy4ok
BBB писал(а):BHy4ok,
все-таки,
for I := 1 to length(n) do
а не
for I := 0 to length(n) do

И k предварительно обнулить.

Исправил.
Консольное приложение в делфе автовставками начинает его с нуля, иногда забываю исправлять.

Re: Дано целое число (вводит пользователь), определить сумму его цифр, являющихся пр

Добавлено: 23 июн 2008, 17:15
Хыиуду
BHy4ok писал(а): [syntax='Pascal']
if n in ch then // Ищем простое число
begin
val(n,p,j); // Если число найдено, то переводим его в тип "integer"
k:=k+p; // Суммируем найденное число с уже имеющейся суммой предыдущих чисел.
end;
[/syntax]

Это вполне заменяется на
if n in ch then k:=k+ord(n)-ord('0');