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

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

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

> Одномерный массив
barlog
сообщение 23.10.2006 20:44
Сообщение #1


Новичок
*

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

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


Для данного одномерного массива укажите индексы тех его элементов, сумма которых равна заданному числу(если такие есть). Найдите все наборы элементов, удовлетворяющих условию задачи.
Помогите плиз! Чё то и с формулировкой не всё ясно мне. Буду благодарен любой помощи!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
barlog
сообщение 25.10.2006 22:45
Сообщение #2


Новичок
*

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

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


Нашёл тему о разложение числа на слагаемые.
Вот один из способов заполнения массива
Uses Crt;
var
m,k: integer;
x: array[1..100] of integer;
begin
clrscr;
writeln('vvedite razmer massiva');
readln(M);
k:=1;
while (k<=m) do
begin
write('x(',k,')=');
readln(x[k]);
k:=k+1
end;
for k:=1 to m do write (x[k]:2);
readln
end.

А вот ваша процедура
Uses Crt;
var
n: integer;
c: array[1..100] of integer;
print: boolean;

const
diapazon: set of byte = [1,2,3,5];


procedure find(num,k,len: integer);
var i: integer;
begin
if num=0 then begin
print := true;
for i := 1 to pred(len) do
if not (c[i] in diapazon) then print := false;

if print then begin
for i:=1 to len-1 do write(c[i],' '); writeln
end;
end
else begin
for i:=1 to k do
if num-i>=0 then begin
c[len]:=i;
find(num-i,i,len+1);
end;
end;
end;

begin
clrscr;
writeln('vvedite chiso');
readln(n);
find(n,n,1);
readln
end.

Допустим, после заполнения массива вводим нужное число n.
А как теперь подключить процедуру которая переберёт все варианты слагаемых составляющее это число и выведет их номера? Так как число n должно состоять из слагаемых входящих в массив, то они должны параллельно вводиться в diapason?
{ diapason: set of byte [1,5,7]??? }
Т.е массив из {1,5,7}
Вводим число 8.
{1,1,1,1,1,1,1,1}
{5,1,1,1}
{7,1}
И выводит их индексы
{1}
{2,1}
{3,1}
??????????
Помоги, пожалуйста, с реализацией! Что-то вообще запутано! Если есть время конечно.
Буду очень благодарен! Спасибо за предоставленную помощ!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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