Turbo Pascal

WerSus64

New Member
Ответ: Turbo Pascal

S-DIMAN Ты можешь уточнить задачу??
Если в твоем случаи нельзя использовать циклы то эт один вариант решения. Если можна, то код [Spider] решает твою задачу.
 

S-DIMAN

Active Member
Ответ: Turbo Pascal

Дано натуральное число которое меньше 1000. Используя операции div и mod, определить, сколько цифр в этом числе ???

Слово в слово.
 

Hamster

Well-Known Member
str(X,i);
z:=i[0] div 1 ;
writeln(z);

Без циклов и используя див. =)
И вообще, по нормальному используя див задачу без цикла не решить.
 

Тагрим

Поняшка
Ответ: Turbo Pascal

Тагрим, пару минут сидел соображал, а на Паскале ли ты это написал?

На том месте, где в приведённом тобой фрагменте кода стоит 1, должно, как правильно заметил KoLoB, располагаться условие. Условие представляет собой выражение логического типа, 1 --- это выражение целочисленного типа. 1=0 --- выражение логического типа, 1<>1 --- выражение логического типа, 1>Ord('c') --- выражение логического типа, False --- выражение логического типа, Boolean(1) --- тоже выражение всё того же логического типа, 1 --- выражение целочисленного типа. Поэтому приведённый тобой код даже не удастся скомпилировать --- по причине наличия синтаксических ошибок.
Кстати, Boolean(1)=True, так что если уж нужно получить бесконечный цикл, то код должен быть таким:
Код:
[B]while[/B] True [B]do[/B] <тело цикла>;
или
Код:
[B]repeat[/B] <тело цикла> [B]until[/B] False;
, в зависимости от того, какой из циклов нужно использовать.
При этом естественно нужно следить, чтобы в теле циклов присутствовало некоторое условие, при выполнении которого происходил бы принудительный выход из цикла с помощью использования функции Break.
Например, так:
Код:
[B]while [/B]True [B]do[/B]
[B]begin[/B]
...
k:=Func(x);
[B]if[/B] k>0 [B]then[/B] Break;
...
[B]end[/B];
В противном случае, можно "зациклить" программу.

Условие не происходит или не происходит :), а выполняется (то есть, становится истинным, принимает значение True), либо не выполняется (становится ложным, принимает значение False).
Выполнение цикла в цикле с пред-условием (цикле while) происходит ПОКА условие в заголовке цикла истинно, поэтому цикл while называют ещё цикл-ПОКА. Как только условие становится ложным, выполнение цикла прерывается и управление передается следующему за циклом оператору программы.
Цикл с пост-условием (цикл repeat...until) работает наоборот --- он выполняется ДО тех пор, как условие становится истинным (поэтому его ещё иногда называют циклом-ПОКА), то есть работает пока условие ложно.
извиняюсь, я просто в паскале не кодил давно. в основном визуал студио. привел в общих чертах (так как задаю).
 
Ответ: Turbo Pascal

Дано натуральное число которое меньше 1000. Используя операции div и mod, определить, сколько цифр в этом числе ???

Слово в слово.
Если слово в слово, то:

uses wincrt; // это если borland Pascal использовать, uses crt – под дос.
const d=100;d1=10; // описание констант
var x:integer; // описание переменной целого типа
begin
write ('Vvedite naturalnoe chislo <1000. X=');
read(x);
if x>=1000 then //проверка условия задачи
writeln ('Vvedennoe vami chislo ne sootvetstvuet usloviu zadachi. Perezapustite prilozhenie i povtorite popitku..')
else
if ((x div d)>=1) then // например 987/100=9,87=> 9 больше 1
writeln('Otvet: 3')
else
if (((x mod d)>=1) and ((x div d1)>=1))then // например 98/100=0,98 =>98 больше 1 и 98/10=9,8 =>9 больше1
writeln('Otvet: 2')
else
writeln('Otvet: 1'); // если число должно быть меньше 1000, то оно 3-х значное, 3 и 2 расмотрено, знач. 1.
end.
 

Вкладення

  • 5.5 КБ Перегляди: 121

[Spider]

New Member
Ответ: Turbo Pascal

Мне кажется, что задача всё-таки может быть решена без использования циклов, если принять во внимание ограничения --- число натуральное и не превышает 1000. То есть, это числа 1, 2, 3, ..., 999. Пусть n --- указанное число, k --- количество цифр в нем. Тогда,

1, если n<10,
k= 2, если 10<=n<100,
3, если 100<=n<1000.

Если записать это с использованием операторов ветвления if...then...else и операции целочисленного деления div, то получится что-то типа этого:
Код:
[B]if[/B] n [B]div[/B] 10=0  {n<10}
 [B]then[/B] k:=1
 [B]else[/B] [B]if[/B] n [B]div[/B] 100=0  {n<100}
        [B]then[/B] k:=2
        [B]else[/B] k:=3;
Использование div здесь вообще искусственно, не очевидно и вообще лишает код наглядности, но раз уж нужно использовать div... :)
Если нужно использовать и div и mod, то код может быть например таким:
Код:
[B]if[/B] n [B]div[/B] 100>0
 [B]then[/B] k:=3
 [B]else[/B] [B]if[/B] n>n [B]mod[/B] 10
        [B]then[/B] k:=2
        [B]else[/B] k:=1;
 

[Spider]

New Member
Ответ: Turbo Pascal

Вот же ё, пока писал свой ответ nilayn написал что-то похожее на то, что написал я :). Сейчас буду разбираться в коде nilayn.

Кстати, сразу вопрос: а зачем там модуль CRT/WinCRT подключать?
 

WerSus64

New Member
Ответ: Turbo Pascal

Второй код [Spider] оптимальный при данном условии задачи.

nilayn а зачем ты используешь во втором условии mod? И без него работает ?
 
Ответ: Turbo Pascal

Кстати, сразу вопрос: а зачем там модуль CRT/WinCRT подключать?
Чтобы было :) Вам не понять, это женская логика ;)
А вообще, та строчка была написана на подсознании, поэтому можно смело удалить… а можно и оставить, это ж не ошибка…
nilayn а зачем ты используешь во втором условии mod? И без него работает ?
Ответ:
Используя операции div и mod
"и", а не "или"...
З.ы. Я на звание великого программиста не претендую, поэтому когда пишу проги на первом месте для меня – правильный ответ, а не здравый смысл кода…
 
Зверху