Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2009, 22:45   #1
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию (Паскаль)Найти произведение цифр, встречающихся в строке

Помогите с задачкой:

Дана строка символов до точки. Группа символов в ней между пробелами считается словом Найти произведение цифр, встречающихся в строке.
Doublefaced вне форума Ответить с цитированием
Старый 08.06.2009, 22:57   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Во-первых, где ваши наработки? Чем помочь-то?
Во-вторых, если нужно найти произведение цифр в строке, то какая разница, разделена она на слова или нет? (просто интересно)

Идете по строке посимвольно до точки. Если текущий символ - цифра (s[i] in ['0'..'9']), то отнимаем от ее кода 48 и домножаем на это число общее произведение.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 23:13   #3
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Код:
var
s:string;
l,i:integer;
begin
writeln('Vvedite stroku:');
readln(s);
l:=length(s);
for i:=1 to l do
if s[i] in ['0'..'9'] then
Примерно так? Вот с отниманием кода, я не совсем понял.
Doublefaced вне форума Ответить с цитированием
Старый 08.06.2009, 23:16   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Заведите еще одну переменную (типа longint), где будете хранить произведение. Вначале она равна 1.
Далее вводите строку и начинаете цикл (то, что вы написали).
Если символ - цифра, то отнимаем от кода 48 ( ord(s[i])-48) и это число домножаем на произведение.
Просто коды цифр (как символов) находятся в диапазоне 48-57.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 23:27   #5
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

Код:
var
s:string;
l,i:integer;
g:longint;
begin
writeln('Vvedite stroku:');
readln(s);
g:=1;
l:=length(s);
for i:=1 to l do
if s[i] in ['0'..'9'] then (ord(s[i])-48);
s:=s[i]*g;
writeln(s);
readln;
end.
Либо я не правильно написал, либо ошибка в типах данных.
Doublefaced вне форума Ответить с цитированием
Старый 08.06.2009, 23:30   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

неправильно написали.
Код:
if s[i] in ['0'..'9'] then (ord(s[i])-48);
Вы ничему не присваиваете получившееся число.
Код:
s:=s[i]*g;
А это что? Хотите умножить символ на число?

Код:
if s[i] in ['0'..'9'] then g := g*(ord(s[i])-48);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 08.06.2009, 23:37   #7
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

почему то выводит тоже число, которое вводишь.
Doublefaced вне форума Ответить с цитированием
Старый 08.06.2009, 23:39   #8
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

begin
end;
в цикле забыли..
Uguu~
__STDC__ вне форума Ответить с цитированием
Старый 08.06.2009, 23:45   #9
Doublefaced
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 100
По умолчанию

не помогло, к сожалению.
Doublefaced вне форума Ответить с цитированием
Старый 08.06.2009, 23:48   #10
__STDC__
Участник клуба
 
Аватар для __STDC__
 
Регистрация: 16.03.2009
Сообщений: 1,013
По умолчанию

а.. ну блин.. я не туда смотрю... там же в цикле одно выражение, так что неважно.. надо написать writeln(g) вместо writeln(s)
Uguu~
__STDC__ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сложение цифр в строке от 1 до 5 buba3230 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 04.06.2009 23:53
Найти произведение цифр натурального числа, больших В microlab Помощь студентам 6 23.12.2008 20:46
вычислить произведение четных чисел в каждой строке массива. Oliver Sykes Паскаль, Turbo Pascal, PascalABC.NET 5 09.10.2008 03:43
Найти (в процентах) частоту появления каждого из m наиболее часто встречающихся элементов sk1p Паскаль, Turbo Pascal, PascalABC.NET 2 26.09.2008 23:57