Консультация № 178031
25.04.2010, 09:31
0.00 руб.
0 9 1
Доброе утро дорогие эксперты.
Помогите рещить задачи по множеству.
1. Дана строка состоящий из цифр. Вывести те цифры,которые стоят между скобками например 32432(3454353)4353. вывести нужно 3454353.
2.Написать программу,которая в заданно1 строке состоящей из слов,оделенных одним или несколькими пробелами,определяет номер слов содержащи1 цифры.

Обсуждение

давно
Академик
320937
2216
25.04.2010, 11:55
общий
Александ Двинятин:
1. Задача множествами не решается. В Pascal неупорядоченные множества, то есть должно быть напечатано {3,4,5}. Вы же печатаете упорядоченное множество, список, подстроку.
2. Слова содержат ТОЛЬКО цифры или В ТОМ ЧИСЛЕ цифры?
Неизвестный
25.04.2010, 14:05
общий
lamed:
2. Только цифры
1. Тогда..решите через строоки задачу пожалуйста)
давно
Академик
320937
2216
25.04.2010, 19:16
общий
это ответ
Здравствуйте, Александ Двинятин. Ответы в приложении. ABC Pascal. Если что-то требует разъяснений, задавайте вопросы в мини-форум.


Приложение:
program p178031a;
{ не проверяется правая скобка }
{ не проверяется наличие других символов между скобками }
var
s: string;
i: integer;
len : integer;
begin
write('s=');
readln(s);
len := length(s);
i:= 1;
{ пропускаем символы до '(' }
while (i<len-1) and (s[i]<>'(') do
{ должно быть как минимум два оставшихся символа '(' и ')' }
i:= i+1;
if (s[i]<>'(') then
writeln('нет скобок')
else
begin
i:= i+1;
while (i<=len) and (s[i]<>')') do
begin
write(s[i]); { печатаем символы между скобками }
i:= i+1;
end;
writeln;
readln;
end;
end.

program p178031b;
{ Программа в заданной строке, состоящей из слов, разделенных одним или
несколькими пробелами,определяет номер слов содержащих только цифры.
}
var
i: integer;
s: string; { введенная строка }
FirstWord: boolean; { первое слово }
InDigits: boolean; { слово из цифр ? }
InWord : boolean; { в слове ? }
WordNo: integer; { номер слова }

begin
write('s=');
readln(s);
InWord := true;
InDigits := true;
FirstWord := true;
for i:= 1 to length(s) do
begin
if InWord and (s[i] =' ') then
begin { это было слово }
InWord := false;
inc(WordNo,1);
if InDigits then
if FirstWord then { запятая идет только перед следующим словом }
begin
write(WordNo);
FirstWord := false;
end
else
write(',', WordNo);
InDigits := true;
end
else if s[i] <> ' ' then { это начинается новое слово }
begin
InWord := true;
if not (s[i] in ['0'..'9']) then
inDigits := false;
end;
end;
if InWord then { строка кончилась непробельным символом }
begin
inc(WordNo,1);
if InDigits then { если слово только из цифр, печатать номер }
if FirstWord then
write(WordNo)
else
write(',', WordNo);
end;
writeln;
readln;
end.
Неизвестный
27.04.2010, 12:31
общий
По первому вопросу самый простой способ

Код:

const
Ssource= '32432(3454353)4353';
var
t1 : Integer;
t2: Integer;
Snum: string;
begin
t1 := Pos('(',Ssource);
t2 := Pos(')',Ssource);
if (t1>0) and (t2 > t1) then
begin
Snum := Copy(Ssource, t1 + 1, t2 - t1 - 1);
write(Snum);
end;
end;
Неизвестный
27.04.2010, 13:10
общий
Бастрыгин Сергей:
Оформите в виде ответа, пожалуйста
Неизвестный
27.04.2010, 13:29
общий
Александ Двинятин:
По первому вопросу, если нет отклонения от условия задачи
1. Дана строка состоящий из цифр. Вывести те цифры,которые стоят между скобками например 32432(3454353)4353. вывести нужно 3454353.

и не может быть других скобок, т.е. одна открывающая и одна закрывающая, с цифрами между ними, можно использовать простой способ получения результата
Код:

const
Ssource= '32432(3454353)4353';
var
t1 : Integer;
t2 : Integer;
Snum: string;
begin
// получим расположение открывающей скобки
t1 := Pos('(',Ssource);
// Получим расположение закрывающей скобки
t2 := Pos(')',Ssource);

// Скобки обе должны присутсвовать. Закрывающая после открывающей
if (t1 > 0) and (t2 > t1) then
begin
// получаем строку между скобками
Snum := Copy(Ssource, t1 + 1, t2 - t1 - 1);
write(Snum);
end
else
Snum := ''; // контроль на случай использования как функции

end;

давно
Академик
320937
2216
28.04.2010, 10:54
общий
Бастрыгин Сергей:
Доброе утро! У Вас должна быть кнопка "Ответить". Тогда Ваш ответ попадет в рассылку, а Вы получите бонус.
Неизвестный
28.04.2010, 12:43
общий
lamed:
Спасибо, буду знать в следующий раз
Неизвестный
28.04.2010, 12:50
общий
Бастрыгин Сергей:
Так Вы и сейчас можете сделать это: обсуждение в минифоруме реализовано в ответе. Мы все за Вас только порадуемся (и воспримем нормально)
Форма ответа