IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Различные комбинации символов, было: Помогите решить задачку
nopsrer
сообщение 6.06.2009 21:02
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Здраствуйте, уважемые форумчане.
Помогите, пожалуйста, решить задачку например, задана строка 7 (6 or 5) 4 (3 or 2) 1 надо вывести все возможные комбинации, выбирая из скобок по очереди одно число. OR-ов может быть несколько. (1 or 2 or 3)

входные данные
7 (6 or 5) 4 (3 or 2) 1
выходные данные
76431
76421
75431
75421

М
Просьба уважать Правила Форума (п.4)
На этот раз я исправил..



Сообщение отредактировано: Lapp - 7.06.2009 2:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
sheka
сообщение 6.06.2009 21:33
Сообщение #2


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


Цитата

задана строка

в файле или просто?

можешь взять массив, например m[1..100] of integer;- каждый елемент которого указывает на положение (какая цифра по порядку в данных скобках выводится). думаю 100 значтого числа тебе зватит smile.gif
а потом считывать строку посимвольно: если символ "(" то выводить m[какие по счету скобки] елемент скобок и увеличивать его на 1.
если")", то inc(какие по счету скобки);

переименуй пожалуйста тему (я ведь тоже в таком случае правила нарушил!) smile.gif

Сообщение отредактировано: sheka - 6.06.2009 21:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.06.2009 2:41
Сообщение #3


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(sheka @ 6.06.2009 22:33) *
взять массив, например m[1..100] of integer;- каждый елемент которого указывает на положение (какая цифра по порядку в данных скобках выводится). думаю 100 значтого числа тебе зватит smile.gif
а потом считывать строку посимвольно: если символ "(" то выводить m[какие по счету скобки] елемент скобок и увеличивать его на 1.
если")", то inc(какие по счету скобки);
sheka, любопытно было бы взглянуть на такое решение.. smile.gif

nopsrer, вот решение с использованием рекурсии.
procedure Parse(s: string);
var
i,b,e: integer;
begin
b:= Pos('(',s);
if b>0 then begin
e:= Pos(')',s);
for i:=b+1 to e-1 do Parse(Copy(s,1,b-1)+s[i]+Copy(s,e+1,Length(s)))
end
else WriteLn(s)
end;

var
i: integer;
const
s: string= '7 (6 or 5) 4 (3 or 2) 1';

begin
for i:=Length(s) downto 1 do if not (s[i] in ['0'..'9']+['(',')']) then Delete(s,i,1);
Parse(s);
ReadLn
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
nopsrer
сообщение 7.06.2009 8:21
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Lapp, спасибо огромное.

Еще если можно один вопрос как сделать эту же задачу если входящие числа задаються в виде масива
например:
7 6 4 3 1 0...
0 5 0 2 0 0...
0 0 0 0 0 0
. . . . . . . . . .

Сообщение отредактировано: nopsrer - 7.06.2009 8:23
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.06.2009 8:29
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(nopsrer @ 7.06.2009 9:21) *
как сделать эту же задачу если входящие числа задаються в виде масива
например:
7 6 4 3 1 0...
0 5 0 2 0 0...
0 0 0 0 0 0
. . . . . . . . . .

Я не понял, что ты имеешь в виду. Что значит "эту же задачу", если ты убрал из входных данных главное: скобки и or? blink.gif Это тогда совсем не эта же задача уже. Объясни подробнее новое условие.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2009 8:40
Сообщение #6


Гость






nopsrer, можно уточнить кое-что? Это задача на цифры или на числа?

То есть, вот так может быть: 17 (16 or 15) 4 (3 or 2) 1 ? Или все числа в скобках только однозначные? У тебя вроде в первоначальном условии - числа, но в первом же ответе уже съехали на цифры почему-то...
 К началу страницы 
+ Ответить 
nopsrer
сообщение 7.06.2009 9:03
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Максим

Репутация: -  0  +


Цитата(Lapp @ 7.06.2009 8:29) *

Я не понял, что ты имеешь в виду. Что значит "эту же задачу", если ты убрал из входных данных главное: скобки и or? blink.gif Это тогда совсем не эта же задача уже. Объясни подробнее новое условие.

Извиняюсь, это два разных задачи.
В первой там где строки, то там может быть только цифры (0..9). Эта задача уже решена Lapp-ом.


Во второй могут быть числа (>9), но цифры в числе менять не нужно, не знаю даже как правильно объяснить попробую навести пример ввода-ввывода, может так будет понятнее.
(Это задача мне нужна для написания процедуры вывода всех кратчайших путей в графе от Vi до Vj алгоритмом BFS)

пример:
input:
Код

10 3 4 15 1 0
0  4 0 20 0 0
0  0  0 0  0 0

output:
(вывод на екран)
Код
10 3 4 15 1
10 3 4 20 1
10 4 4 15 1
10 4 4 20 1

так же если так будет возможно(а возможно в рекурсивном варианте такой вывод будет сделать даже проще), то вывод нужно будет организовать задом наперед, то есть так:
Код
1 15 4 3 10
1 20 4 3 10
1 15 4 4 10
1 20 4 4 10



Сообщение отредактировано: nopsrer - 7.06.2009 9:25
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 7.06.2009 9:31
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(nopsrer @ 7.06.2009 10:03) *
может так будет понятнее.
Не стало((. По крайней мере, мне. Попробуй сформулировать понормальнее.

nopsrer, а у тебя есть веская причина давать вторую задачу в одной теме? У меня складывается вречатление, что ты снова пренебрегаешь Правилами..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.06.2009 9:47
Сообщение #9


Гость






Я правильно понял задачу? Вот это тебе надо?
const
seq_len = 20;
maxchange = 10;
type
numbers = array[1 .. seq_len] of integer;
seqtype = array[1 .. seq_len] of record
size: integer;
values: array[1 .. maxchange] of integer;
end;

var
seq: seqtype;


procedure print(level: integer;
arr: array of integer; n: integer);
var i, T: integer;
begin
if level = n then begin
for i := 0 to pred(n) do write(seq[i + 1].values[arr[i]]:3);
writeln;
end
else begin
T := arr[level];
for i := 1 to arr[level] do begin
arr[level] := i;
print(level + 1, arr, n);
end;
arr[level] := T;
end;

end;


var
f: text;
i, X: integer;
nums: numbers;


begin
assign(f, 'fin.txt'); reset(f);
while not eof(f) do begin
i := 0;
while not eoln(f) do begin
inc(i); read(f, X);
if X <> 0 then begin
inc(seq[i].size); seq[i].values[seq[i].size] := X;
end;
end;
readln(f);
end;

i := 1;
while seq[i].size > 0 do begin
nums[i] := seq[i].size; inc(i);
end;
print(0, nums, i - 1);

close(f);
end.
(за исходные данные брал то, что приведено в 7-ом посте)
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.06.2025 11:27
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"