Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа с циклом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lakibooy
Здравствуйте
помогите с задачкой

Надо ввести число от 100 до 10100,если число вводится и не попадает в этот интервал,то запрос повторяется до тех пор ,пока не дойдет до правильного.Если число введено правильно,то выдать сумму его цифр.

тоесть если я ввожу 678 то мне нужно получить сумму цифр пример 6+7+8=21
как мне это сделать?
Подскажите пожалуста.

Добавлено через 12 мин.
вот код который я написал
но не знаю правельно ли!
uses crt;
Var x,s:integer;
begin
Clrscr;
writeln('Введите число');
readln(x);
repeat writeln('Введите число');
readln(x); until (x<100) and (x>10100);

writeln('сумма,s);
readln;
end.
compiler
а где ты считаешь сумму?
Lakibooy
Цитата(compiler @ 6.06.2007 19:48) *

а где ты считаешь сумму?

я еще не считал не знаю как?
compiler
вобщем держи
type i=integer;
var n:i;

function ReadN:i;
var a:i;
begin
repeat
write('-->');
readln(a);
until ( (a>100) and (a<10100) );
ReadN:=a;
end;

function SumNem(const n:integer):i;
var a:i;
begin
a:=n;
SumNem:=0;
while a<>0 do begin
SumNem:= SumNem+ (a mod 10);
a:=a div 10;
end;
end;

begin
n:=ReadN;
WriteLn ( SumNem(n) );
readln;
read;
end.
очистку экрана только добавь(если хочеш)...
Lakibooy
спасибо в который раз уже выручаешь!!!
compiler
Цитата(Lakibooy @ 6.06.2007 19:01) *
спасибо в который раз уже выручаешь!!!
та незачто 10.gif
я вот тебе процедурку не много переписал 1.gif теперь она пищит smile.gif
function ReadN:i;
var a:i;
begin
write('-->');
readln(a);
while ( (a<100) or (a>10100) ) do begin
Clrscr; //добавь библиатеку!!!
write('-->', #7);
readln(a);
end;
ReadN:=a;
end;
Lakibooy
Цитата(compiler @ 6.06.2007 19:55) *

вобщем держи
type i=integer;
var n:i;

function ReadN:i;
var a:i;
begin
repeat
write('-->');
readln(a);
until ( (a>100) and (a<10100) );
ReadN:=a;
end;

function SumNem(const n:integer):i;
var a:i;
begin
a:=n;
SumNem:=0;
while a<>0 do begin
SumNem:= SumNem+ (a mod 10); //перед+ пишет что не хватает ( не знаешь почему?
a:=a div 10;
end;
end;

begin
n:=ReadN;
WriteLn ( SumNem(n) );
readln;
read;
end.
очистку экрана только добавь(если хочеш)...

compiler
>перед+ пишет что не хватает ( не знаешь почему?
чего не хватает ?процитируй что имено віводится...

Добавлено через 3 мин.
а все я понял это же TP... прошу прощения... сейчас перепишу...

Добавлено через 3 мин.
не перепишу, уже всё забыл... можеш пока ввести отдельную переменную и подождать пока кто нибудь напишет...
Lakibooy

Добавлено через 3 мин.
не перепишу, уже всё забыл... можеш пока ввести отдельную переменную и подождать пока кто нибудь напишет...
[/quote]

подожду может кто напишет!
Malice
Цитата(compiler @ 6.06.2007 20:12) *

>перед+ пишет что не хватает ( не знаешь почему?

Напиши лучше так:
function sumNem (n:integer):integer;
begin
if n=0 then sumNem:=0
else
Sumnem:=(n mod 10)+sumnem (n div 10);
end;

compiler
Цитата(Malice @ 6.06.2007 19:38) *
Напиши лучше так:
но так мы лишились замечательного const ... smile.gif . В принципе это не безопасно yes2.gif , когда функция будет менять глобальную переменную, можна здорово погареть (я так както час потратил выясняя странное поведения своей переменой, думал баг lol.gif )
хотя конечно для данной задачи можно и так...
Lakibooy
Огромное СПАСИБО ВСЕМ кто помог все работает!!!!
вот код программы может кому пригодиться!
uses crt;
type i=integer;
var n:i;

function ReadN:i;
var a:i;
begin
write('-->');
readln(a);
while ( (a<100) or (a>10100) ) do begin
Clrscr;
write('-->', #7);
readln(a);
end;
ReadN:=a;
end;


function sumNem (n:integer):integer;
begin
if n=0 then sumNem:=0
else
Sumnem:=(n mod 10)+sumnem (n div 10);
end;


begin
n:=ReadN;
WriteLn ( SumNem(n) );
readln;
read;
end.

compiler
примечание
ReadN можна и ИМХО, лучше реализовать через процедуру с out...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.