Задача программы вот такая:
Найти все натуральные числа не превосходящие заданного n, Десятичная запись которых есть строго возрастающая или строго убывающая последовательность цифр. delphi
Другие языки программирования и технологии
помогите пожалуйста составить программу на Delphi/
var
n,i, temp : integer;
markUP, markDOWN : boolean;
begin
write('Введите число: ');
readln(n);
markUP := true;
markDOWN := true;
write('Числа, удовлетворяющие условию: ');
for i := 100 to n do begin
//i := 210;
markUP := true;
markDOWN := true;
temp := i;
// проверяем на возростание
while(temp > 10) do begin // разбиваем число на цифры
// если правая цифра меньше левой, то будет убывание
if((temp mod 10) > ((temp div 10) mod 10)) then begin
markUP := false; // возростнаие фолс
break;
end;
// если цифры одинаковые то, нет ни возростания ни убывания
if((temp mod 10) = ((temp div 10) mod 10)) then begin
markUP := false;
markDOWN := false;
break;
end;
temp := temp div 10;
end;
temp := i;
// проверяем на убывание
if(markUp = false) and (markDOWN = true) then
while(temp > 10) do begin // разбиваем число на цифры
// если превая цифра больше меньше левой, то будет возростание
if((temp mod 10) < ((temp div 10) mod 10)) then begin
markDOWN := false;
break;
end;
if((temp mod 10) = ((temp div 10) mod 10)) then begin
markUP := false;
markDOWN := false;
break;
end;
temp := temp div 10;
end;
if((markDOWN = true) or (markUp = true)) then write(i,' ');
//writeln();
end;
end.
n,i, temp : integer;
markUP, markDOWN : boolean;
begin
write('Введите число: ');
readln(n);
markUP := true;
markDOWN := true;
write('Числа, удовлетворяющие условию: ');
for i := 100 to n do begin
//i := 210;
markUP := true;
markDOWN := true;
temp := i;
// проверяем на возростание
while(temp > 10) do begin // разбиваем число на цифры
// если правая цифра меньше левой, то будет убывание
if((temp mod 10) > ((temp div 10) mod 10)) then begin
markUP := false; // возростнаие фолс
break;
end;
// если цифры одинаковые то, нет ни возростания ни убывания
if((temp mod 10) = ((temp div 10) mod 10)) then begin
markUP := false;
markDOWN := false;
break;
end;
temp := temp div 10;
end;
temp := i;
// проверяем на убывание
if(markUp = false) and (markDOWN = true) then
while(temp > 10) do begin // разбиваем число на цифры
// если превая цифра больше меньше левой, то будет возростание
if((temp mod 10) < ((temp div 10) mod 10)) then begin
markDOWN := false;
break;
end;
if((temp mod 10) = ((temp div 10) mod 10)) then begin
markUP := false;
markDOWN := false;
break;
end;
temp := temp div 10;
end;
if((markDOWN = true) or (markUp = true)) then write(i,' ');
//writeln();
end;
end.
Михаил Авдиянц
вылетает программа когда вводишь число..
Михаил Авдиянц
программа работает но некоторые числа пропускаются
За такое обычно платят пару сотен рублей, т. к. это не вопрос.
Марина, все просто. Надо получать цифры из каждого числа, и сравнивать их, на больше-меньше. А младшая цифра, это остаток от деления на 10.
Отсюда: берем цикл, типо^
for k:=0 to n do begin
// из каждого числа получаем, последовательно, цифры, пока не останется 0 (d - очередная цифра, d0 - предыдущая):
v:=k;
OK:=True;
while v<>0 do begin
d:=v mod 10;
if (v<>k) and (d<do) then begin // для возрастающей условие < , для убывающей > , те. противоположное
OK:=False;
Break;
end;
v:=v div 10;
d0:=d;
end;
if OK then ...// Если ОК, то значит мы дошли до 0, последовательность, какая надо, выводим число, если нет, то значит прервались раньше, по Break, не выводим.
end;
Отсюда: берем цикл, типо^
for k:=0 to n do begin
// из каждого числа получаем, последовательно, цифры, пока не останется 0 (d - очередная цифра, d0 - предыдущая):
v:=k;
OK:=True;
while v<>0 do begin
d:=v mod 10;
if (v<>k) and (d<do) then begin // для возрастающей условие < , для убывающей > , те. противоположное
OK:=False;
Break;
end;
v:=v div 10;
d0:=d;
end;
if OK then ...// Если ОК, то значит мы дошли до 0, последовательность, какая надо, выводим число, если нет, то значит прервались раньше, по Break, не выводим.
end;
Михаил Авдиянц
program Project4;
uses SysUtils;
var k, n, d,v,d0:real;
OK:boolean;
begin
Writeln('vvedite N',n);
Readln(n);
for k:=0 to n do begin
v:=k;
OK:=True;
while v<>0 do begin
readln(d);
d:=v mod 10;
if (v<>k) and (d< do ) then begin
OK:=False;
Break;
end;
v:=v div 10;
d0:=d;
end;
if OK then ...
end;
End.
Что мне ещё нужно добавить сюда?
uses SysUtils;
var k, n, d,v,d0:real;
OK:boolean;
begin
Writeln('vvedite N',n);
Readln(n);
for k:=0 to n do begin
v:=k;
OK:=True;
while v<>0 do begin
readln(d);
d:=v mod 10;
if (v<>k) and (d< do ) then begin
OK:=False;
Break;
end;
v:=v div 10;
d0:=d;
end;
if OK then ...
end;
End.
Что мне ещё нужно добавить сюда?
Похожие вопросы
- Помогите пожалуйста составить программу на СИ++. Заранее всем БЛАГОДАРЕН!
- Помогите пожалуйста составить программу и блок-схему (какой-либо один из трех вариантов)
- Помогите пожалуйста с программой на DELPHI
- Помогите пожалуйста составить программу на Паскале, используя оператор case
- помогите пожалуйста составить программу в паскале
- Помогите пожалуйста составить программы для следующих задач:
- Помогите пожалуйста составить программу в Qbasic обычного квадратного уравнения...очень нужно...
- Помогите пожалуйста составить программу по теме массивы.
- Помогите пожалуйста составить программу в VB!
- Помогите, пожалуйста, составить программу на С++: .