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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2013, 14:22   #1
Юлия Рубцова
 
Регистрация: 27.04.2012
Сообщений: 6
Восклицание Создать два одномерных массива путем комбинаторики

Здравствуйте! Помогите пожалуйста! необходимо создать два массива размерностью 5, числа в которых будут меняться, причем первое равно 1, последнее равно 5. Затем необходимо при каждой новой комбинации проводить определенные действия с этими массивами.

я пробовала примерно такое:
for i1:=0 to 5 do
for i2:=0 to 5 do
For i3:=0 to 5 do begin
i:=i+1;
a[i]:=(a1, a[i2], a[i3], a[i4], a[5]);

но тогда как задать такую толпу массивов в var? или можно сделать как то по другому?
Юлия Рубцова вне форума Ответить с цитированием
Старый 12.02.2013, 15:04   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Юлия
необходимо создать два массива ..... но тогда как задать такую толпу массивов в var?
Юлия, какая толпа массивов? Вам же всего два массива нужны?

во-вторых, Вы говорите, что "первое равно 1, последнее равно 5.". А цикл пишете он нуля.. Тогда уже цикл от 1 и крутите...

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

Вы в конечном итоге какую задачу хотите решить? Дайте условия ИСХОДНОЙ задачи...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.02.2013, 15:17   #3
Юлия Рубцова
 
Регистрация: 27.04.2012
Сообщений: 6
По умолчанию

Даны два массива, условия создания: а1+b1=1, ak<=k, bj<=j, an=n, bm=m.
из этих двух массивов создаются "полочки"
2. a1+b1
3.a1+b2, b1+a1,
4. a1+b3, a2+b2, a3+b3
.....
необходимо найти правильную "полочку" в каждом "стеллаже", правильная полка-если на ней существует ровно одна сумма строго меньше всех остальных сумм.

задача упрощена до 5 элементов в двух массивах.
я думала сделать кучку массивов а,сохранить их все, со всеми перебранными числами и кучку массивов b, потом в цикле считать полочки и проверять их правильность. Затык в том как задать множество массивов? переписывать в Var в ручную все 550? это ведь только а...
Юлия Рубцова вне форума Ответить с цитированием
Старый 12.02.2013, 16:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

о.. это тот редкий случай, когда после объяснения, мне стало намного менее понятно, что Вы делаете и какую задачу решаете (я не понял, ни что такое "полочка", ни условия, по которой эта самая "полочка" заполняется (какие элементы массивом на эту полочку попадают - т.е. как осуществляется суммирование)...



p.s. Если у Вас есть эта задача в печатном виде (с формулами и иллюстрациями) - не поленитесь, выложите её сюда на форум либо в виде картинки (фото или скриншот), либо в виде .doc файла...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.02.2013, 10:31   #5
Юлия Рубцова
 
Регистрация: 27.04.2012
Сообщений: 6
По умолчанию

Фото!



и

Изображения
Тип файла: jpg IMG_20130213_100802.jpg (94.5 Кб, 151 просмотров)
Тип файла: jpg IMG_20130213_101549.jpg (138.0 Кб, 152 просмотров)
Юлия Рубцова вне форума Ответить с цитированием
Старый 13.02.2013, 11:04   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

о! вот теперь понятно стало!


вот примерное решение:
Код:
const
  N = 3;
  M = 4;
var
  A : array[1..n] of real;
  B : array[1..m] of real;
  minSum : real;
  minIndexI, minIndexJ : integer; {переменные, в которые мы запомним индексы элементов массива, дающие минимальную сумму}
  i, j, k : integer;
  flagIsUniq : boolean;  {признак того, что минимальное значение уникально в данное строке}
begin

  {заполним исходные массивы. 
   Здесь, для простоты, заполняются цифрами из лекции.
   Можно организовать ввод данных с клавиатуры (ввод оператором)
   или заполнение случайными числами. 
   ВНИМАНИЕ! В при вводе оператором и заполнении случайными числами
       нужно ОБЯЗАТЕЛЬНО контролировать, что элементы массивов вводятся 
       согласно заданным в условиях задачи ограничениям}

   A[1] := 0;
   A[2] := 1;
   A[3] := 3;

   B[1] := 1;
   B[2] := 2;
   B[3] := 3;
   B[4] := 4;

   {вот, собственно, и цикл поиска решений}

   for k:=2 to (N+M) do begin{цикл по всем "полочкам" - строчкам, где мы находим суммы}

     minSum := A[n]+B[m]+1; {по условиям задачи (см. ограничения),
                     эта сумма == ПРЕВЫШАЕТ на 1 максимальное возможно значение суммы двух элементов массивов A и B}

     minIndexI := 0; minIndexJ := 0; {это иницилизация необязательная, просто для красоты, тут можно хоть 1, 1 присвоить,
                                      хоть -1, -1, хоть ноль, как мы и сделали}

     flagIsUniq := true; {изначально предполагаем, что значение минимальной суммы в строке уникально!}

     for i:=1 to N do  {i- будем перебирать элементы в массиве A}
       for j:=1 to M do {j- будем перебирать элементы в массиве B}
        if (i+j)=k then {если сумма индексов элементов даёт нужный номер строки, то}
          if (A[i]+B[j])<minSum then begin
            minSum := (A[i]+B[j]);
            minIndexI := i;
            minIndexJ := j;
            flagIsUniq := true; {такой суммы ещё не было. Пока считаем её уникальной!}
          end
          else {проверим, а уникально ли значение}
            if (A[i]+B[j])=minSum then
                   flagIsUniq := false; {нет, не уникально!}

     if flagIsUniq then
       WriteLn('В строке ',k,
         ' минимальное уникальное значение A[',minIndexI,'] + B[',minIndexJ,'] = ',
          A[minIndexI]:0:2,' + ',B[minIndexJ]:0:2,' = ', minSum:0:2)
     else
       WriteLn('В строке ',k,' сумма ', minSum:0:2, ' НЕУНИКАЛЬНА!');


   end;

   Readln
end.
разбирайтесь. будут вопросы - милости прошу...

Последний раз редактировалось Serge_Bliznykov; 13.02.2013 в 11:36.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два одномерных массива A и B. Сформировать два новых массива. Паскаль. Где ошибка в коде? Tomny Помощь студентам 1 27.03.2011 16:47
Даны два одномерных массива чисел А и В BOBAHbI4 Помощь студентам 2 14.01.2011 23:23
как объеденить два одномерных массива разной длины? Artur1992 Помощь студентам 3 26.12.2010 20:26
Даны два одномерных массива, содержащие вещественные числа. Упорядочить по убыванию значен [Meeen] Общие вопросы C/C++ 1 08.06.2010 00:49
Два одномерных массива,представляющие собой средние значения строк и столбцов исходного. Делфи 3 <DimonM@n> Помощь студентам 2 23.11.2008 21:51