Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Программа с циклом

Автор: Lakibooy 6.06.2007 22:33

Здравствуйте
помогите с задачкой

Надо ввести число от 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 6.06.2007 22:48

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

Автор: Lakibooy 6.06.2007 22:52

Цитата(compiler @ 6.06.2007 19:48) *

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

я еще не считал не знаю как?

Автор: compiler 6.06.2007 22: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.
очистку экрана только добавь(если хочеш)...

Автор: Lakibooy 6.06.2007 23:01

спасибо в который раз уже выручаешь!!!

Автор: compiler 6.06.2007 23:05

Цитата(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 6.06.2007 23:07

Цитата(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 6.06.2007 23:12

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

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

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

Автор: Lakibooy 6.06.2007 23:21


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

подожду может кто напишет!

Автор: Malice 6.06.2007 23:38

Цитата(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 6.06.2007 23:48

Цитата(Malice @ 6.06.2007 19:38) *
Напиши лучше так:
но так мы лишились замечательного const ... smile.gif . В принципе это не безопасно yes2.gif , когда функция будет менять глобальную переменную, можна здорово погареть (я так както час потратил выясняя странное поведения своей переменой, думал баг lol.gif )
хотя конечно для данной задачи можно и так...

Автор: Lakibooy 6.06.2007 23:52

Огромное СПАСИБО ВСЕМ кто помог все работает!!!!
вот код программы может кому пригодиться!

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 6.06.2007 23:58

примечание
ReadN можна и ИМХО, лучше реализовать через процедуру с out...