Другие языки программирования и технологии

задача в паскале! нужны только объяснения!!!

Задача: дана строка символов. Найти произведение цифр в этой строке.
Программа есть... но пожалуста напишите комментарии, что обьозначает каждая строка !!!Заранне огромное спасибо!
Program zzz;
Var
s: String;
m,i,c: Integer;
Begin
m:=1;
Write('Строка: ');
ReadLn(s);
For i:=1 to Length(s) do
Begin
c:=Ord(s[ i ]);
if (Ord('0')<=c) and (c<=Ord('9')) then
m:=m*(c-Ord('0'));
End;
WriteLn('Произведение цифр = ', m);
End.
Denis Dmitriv
Denis Dmitriv
385
Доброго времени суток.

Можно немного проще функционал программы сделать.. .

begin
m:=1; {начальное значение произведения}
Write('Строка: '); {приглашение ко вводу строки}
ReadLn(s); {чтение ввода пользователя}
for i:=1 to Length(s) do {цикл по всем символам строки}
if ('0' <= S[ i ]) and (S[ i ] <= '9') then m := m * (Ord(s[ i ] - Ord('0')); {если цифра, перемножаем}
WriteLn('Произведение цифр = ', m); {вывод результата}
ReadLn; {задержка, чтобы его увидеть}
end.

В приведенной версии во время каждой итерации цикла производится в 2 раза меньше обращений к функции Ord.

Удачи!
Леонов Иван
Леонов Иван
59 613
Лучший ответ
Program zzz; {Необязательная строка - назание программы}
Var {Идентификатор обьявляющий описание переменных и их типолв}
s: String; {строковая переменная}
m,i,c: Integer; {целочисленный тип}
Begin {начало тело программы}
m:=1; {присваиваем переменной m единицу}
Write('Строка: '); {Пишем на экран текст}
ReadLn(s); {Читаем с клавиатуры строку}
For i:=1 to Length(s) do {цикл от 1 до числа возвращаемого функцией length строковй переменнйо S}
Begin {начало подпрограммы цикла}
c:=Ord(s[ i ]); {перменной С присваиваем код символа s[ i ]}
if (Ord('0')<=c) and (c<=Ord('9')) then { если С лежит в диапазоне от 0 до 9 то}
m:=m*(c-Ord('0')); {м присваиваем результат выражения m*(c-Ord('0')}
End; {конец подпрограммы}
WriteLn('Произведение цифр = ', m); {выводим строку на экран и значение переменной m}
End. {конец программы}
Мда тут и объяснять-то нечего. Достаточно открыть справочник и прочитать пару функций.
Program zzz; //название вашей программы - ни на что не влият - можно опустить
Var //начало блока объявления переменных
s: String; // объявление переменной типа "строка"
m,i,c: Integer; //объявление переменных типа "целое"
Begin //начало блока программы
m:=1; //присвоение значение
Write('Строка: '); //вывод на экран
ReadLn(s); //считывание данных из консоли
For i:=1 to Length(s) do //описание цикла: здесь от первого до последнего символа строки
Begin //начало тела цикла
c:=Ord(s[ i ]); //запоминаем код текущего символа строки
if (Ord('0')<=c) and (c<=Ord('9')) then //если он больше или равен коду символа '0' И меньше или равен символу '9' - другими словами - если введённый символ - это цифра а не буква или другой какой-то ТО.. .
m:=m*(c-Ord('0')); //новое значение м = старое значение м * на разницу кода текущего и кода символа '0' - реально это будет число обозначающее цифру (типа '1' => 1, '2' => 2 и т. д. )
End; //конец тела цикла
WriteLn('Произведение цифр = ', m); //вывод на экран
End. //конец программы

PS: жду +10
DA
Davlet Atammaev
5 701
Program zzz; - Служебный оператор (необязательный) , задает имя проги.
Var - Оператор начала обьявления переменных
s: String; - переменная S тип Строковый;
m,i,c: Integer; - переменные m,i,c тип Целочисленный (не. дроби ^_^)
Begin - Служебный оператор (показывает начало программы/проц. )
m:=1; - переменной m присваеваится значение 1;
Write('Строка: '); -Оператор вывода на экран сообдения "Строка" без перехода на другую строку.
ReadLn(s); - оператор чтения с клавиатуры (или файла) значения, заносимого потом в переменную s
For i:=1 to Length(s) do - оператор цикла с параметром, будет выполнятся от 1 до длинны строки (функция length возвращает длинну строки)
Begin - если после сл. лова Do более одного оператора, то используются Begin End
c:=Ord(s[ i ]); - присвоение значения переменной c кода символа s
где i номер номер этого символа в стороке s;
if (Ord('0')<=c) and (c<=Ord('9')) then - Условный оператор If, читается так:
Если код символя "0" меньше либо равен значению переменной c и значение переменной c меньше либо равно коду символа "9" Тогда
m:=m*(c-Ord('0')); - переменную m умножить саму на себя и на разность значения переменной c и кода символа "0"
End; - Конец структуры цикла
WriteLn('Произведение цифр = ', m); вывод на экран сообщения и значения переменной m;
End. - конец программы.. .
P.S. В этой программе как минимум одну ошибку... в условии
If (Ord('0')<=c) and (c<=Ord('9')) then...как я понял тут проверяется попадает ли в промежуток переменная с, значит там должно быть
If (Ord('0')>=c) and (c<=Ord('9')) then