Turbo Pascal

S-DIMAN

Active Member
Ответ: Turbo Pascal

Ребята чесно говоря у вас там команды, некоторовые из которых мы не учили. Вы бы не могли это все попроще написать.. ???если это возможно ?
 
A

AkeL.php

Guest
Ответ: Turbo Pascal

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

S-DIMAN

Active Member
Ответ: Turbo Pascal

Вот команда "while", мне не знакома :(

И еще просьба если без них никак, пожалуйста объясните что значат эти строки..

Заранее спасибо.
 

Тагрим

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

Вот команда "while", мне не знакома :(

И еще просьба если без них никак, пожалуйста объясните что значат эти строки..

Заранее спасибо.
пример:

while 1
do
действие


если просто задана единица, то у тебя получается бесконечный цикл. (а если из массива чисел, то когда будет цифра равна 1, тогда будет выполнена операция)

дословно:

когда(пока) происходит условие
выполнить операцию
 

[Spider]

New Member
Ответ: Turbo Pascal

while(i <> 1 ) do
begin
chislo := chislo div 10;
count := count+1;
end
А что такое i? Видимо, ты просто ошибся и там надо было написать count? :)
Дальше, если там действительно должна быть переменная count, то какое её первоначальное значение? Почему нет присваивания ей какого-либо значения перед циклом?
Допустим, что перед циклом count=0, но тогда получается что будет только одна итерация цикла, то есть, условие цикла сводится к тому, что тело цикла должно выполниться ХОТЯБЫ один раз. Так может быть в этом случае лучше было бы использовать цикл repeat...until?

Вообще говоря, по-моему, GHOST предложил самый правильный и самый универсальный подход, вот только этот код можно сделать ещё компактнее, например, так:
Код:
[B]var[/B] k: Byte;          {количество цифр}
    Number: Word;     {число}
     ...
[B]begin[/B]
 {Ввод числа и др.}
 ...
 k:=1;
 [B]while[/B] Number [B]div[/B] exp(k*ln(10))>0 [B]do[/B] Ink(k);
 {Вывод количества цифр и др.}
 ...
[B]end[/B].
Таким образом, задача вообще решается в две строки кода.
Недостатком моего кода является то, что на каждой итерации приходится вычислять степень десятки, то есть, 10, 100 и т.д., хотя понятно, что на каждом шаге это число будет увеличиваться в 10 раз. Поэтому, приведённый мной код можно немного модифицировать:
Код:
 k:=0;
 [B]while[/B] Number>0 [B]do[/B]
  [B]begin[/B]
   Number:=Number [B]div[/B] 10; 
   Ink(k);
  [B]end[/B];
Этот код похож на твой, AkeL.php, с тем лишь отличием, что он рабочий :)
 

[Spider]

New Member
Ответ: Turbo Pascal

Ребята чесно говоря у вас там команды, некоторовые из которых мы не учили.
Вот команда "while", мне не знакома :(
Извини, но как это соотносится с твоими словами о том, что:
Я ее решил через цикл
?!
Через какой-же цикл ты тогда её решил?! В Паскале есть всего три вида циклов: цикл с пред-условием (while...do), цикл с пост-условием (repeat...until) и цикл со счётчиком (for ...to...do). Других вариантов нет. Так что мне совсем не понятны твои слова о том, что ты решил задачу с помощью цикла, но конструкция с использованием слова while тебе не знакома.
 

[Spider]

New Member
Ответ: 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) работает наоборот --- он выполняется ДО тех пор, как условие становится истинным (поэтому его ещё иногда называют циклом-ПОКА), то есть работает пока условие ложно.
 
Зверху