Помощь - Поиск - Пользователи - Календарь
Полная версия: Программа с циклом
Форум «Всё о Паскале» > 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...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.