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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2011, 03:00   #1
timezero
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 10
По умолчанию Найти всевозможные комбинации значений переменных точно дающих заданную сумму

помогите решить задачу на паскале,
переменная а может быть равняться одному из 3 возможных известных слагаемых, то есть а может равняться либо 1 или 2 или 3 , таких переменных 3 штуки, далее я ввожу число H и мне должно вывести значения этих слагаемых. все цифры только целочисленные и положительные . вроде понятно объяснил)
Пример:
значение переменных а - 1,2,3
b - 4,5,6
c - 7,8,9
ввожу H(допустим 17) которое равняется a+b+c
затем должны вывести на экран всевозможные комбинации значений a,b и с при котором это так скажем уравнение равняется 17, Ответ : вариант 1 - а=3 b=5 c=9 , вариант 2 -a=3 b=6 c=8 , вариант 3 - a=2 b=6 c=9 ну и т.д. но это я мозгом посчитал а надо бы на компике а то мну решать надо с 17-тью переменными, а одна переменная может равняться 30 значениям)
timezero вне форума Ответить с цитированием
Старый 28.01.2011, 09:41   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

самый простой вариант (в случае, если количество переменных жестко ограничено) - воспользоваться массивами (например - "в лоб" - двухмерный массив - 1-й индекс номер переменной - 2-й индекс - значение этой переменной.
если количество значений для каждой переменной отличается - то ещё в массиве (можно в отдельном одномерном) сохранить числа - сколько значений для данной переменной.

ну а потом простейший перебор по всем переменным по всем значениям...

p.s. разумеется, это простейшее решение "в лоб" - без использования динамики..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.01.2011, 15:43   #3
timezero
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 10
По умолчанию

да, количество значений для каждой переменной может быть разным.
Но чет не совсем понял как это реализовать .
timezero вне форума Ответить с цитированием
Старый 29.01.2011, 20:26   #4
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
var
 slag: array[1..3,1..3] of word;
 i,j,k:integer;
 h:word;
begin
  h:=0;
  for i:=1 to 3 do
    for j:=1 to 3 do
       begin
           inc(h);
           Slag[i,j]:=h;
       end;
   write('ВВедите переменную:');
   readln(h);
   for i:=1 to 3 do
    for j:=1 to 3 do
     for k:=1 to 3 do
       begin
           if (Slag[1,i]+Slag[2,j]+Slag[3,k])=h then   
             writeln(Slag[1,i],' ',Slag[2,j],' ',Slag[3,k]);
           Slag[i,j]:=h;
       end;
      
end.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 31.01.2011, 17:57   #5
timezero
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 10
По умолчанию

программка конечно компилируется без ошибок, но все же результат не выводится, что то здесь все таки не правильно.
timezero вне форума Ответить с цитированием
Старый 31.01.2011, 18:04   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но все же результат не выводится
Код:
...
Writeln('Рассчет окончен :)')
Readln;
end.
Помогает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.01.2011, 18:35   #7
timezero
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 10
По умолчанию

Readln;
я уже добавлял, не помогает
timezero вне форума Ответить с цитированием
Старый 31.01.2011, 21:55   #8
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Может так:

Код:
var
 slag: array[1..3,1..3] of word;
 i,j,k:integer;
 h:word;
begin
  h:=0;
  for i:=1 to 3 do
    for j:=1 to 3 do
       begin
           inc(h);
           Slag[i,j]:=h;
       end;
   write('ВВедите переменную:');
   readln(h);
   for i:=1 to 3 do
    for j:=1 to 3 do
     for k:=1 to 3 do
       begin
           if (Slag[1,i]+Slag[2,j]+Slag[3,k])=h then   
             writeln(Slag[1,i],' ',Slag[2,j],' ',Slag[3,k]);
           
       end;
   write('Vse');
   readln;   
end.
Это работает я проверил
a.k.a. Angelicos Phosphoros
Мой сайт

Последний раз редактировалось New man; 31.01.2011 в 22:02.
New man вне форума Ответить с цитированием
Старый 31.01.2011, 22:18   #9
Vikenty
Заслуженный флудер
Участник клуба
 
Аватар для Vikenty
 
Регистрация: 31.03.2010
Сообщений: 1,473
По умолчанию

Переименуйте тему.
Vikenty вне форума Ответить с цитированием
Старый 02.02.2011, 02:50   #10
timezero
Пользователь
 
Регистрация: 28.01.2011
Сообщений: 10
По умолчанию

я так понимаю это прога работает только со значениями переменных а = 1,2,3 ; b=4,5,6 ; c=7,8,9 чето я сразу не придал этому значения когда код смотрел.
Просто задача иначе стояла переменные известны и числовой ряд этих переменных не вычисляется какой либо формулой, т.е. пример переменная а может равняться 0,10,12,15,19,25,31,45 и т.д. так же и для остальных переменных b,c,d... причем у каждой переменной свое количество значений, т.е. у а их м/б -7, у b - 12, у c - 3
и эти переменные придется полюбому вбивать в прогу, я просто привел так скажем примитивный пример со значениями 1,2,3,4,5...
timezero вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти сумму максимальных значений из 2-х масивов. bratello41 C++ Builder 1 17.12.2010 14:25
Бейсик. Найти сумму численных значений элементов одномерного массива Марька Помощь студентам 4 16.03.2010 23:01
Найти сумму вычисленных значений функции Meet163 Фриланс 12 17.02.2010 05:22
Найти комбинации zzzzz Помощь студентам 3 29.09.2008 19:44