Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Объединение массивов


Автор: LeNes 24.5.2006, 20:46
задача: Слить два массива А (элементы равны 1,3,5 и т.д. нечетные) и В (все элементы равны 2) по 40
элементов  в массив С из 80 элементов так, чтобы вначале шли элементы меньше среднего значения по всему массиву С. Вывести массивы в виде матриц по 10 элементов в строке.

со вторым массивом я справляюсь)))
а вот с реализациеи всеи программы я чтото туплю в доску
Помогите плз!!! 

Автор: Foley 24.5.2006, 22:52
Тебе в алгоритмы надо с этой темой... 

Автор: Albinos_x 24.5.2006, 23:19
а ещё лучше в центр помощи smile 
http://forum.vingrad.ru/index.php?showforum=142 

Автор: Snowy 25.5.2006, 08:24
Модератор: Перенесено из Delphi 

Автор: LeNes 28.5.2006, 22:57
неужели не кто не сможет помочь???? 

Автор: skyboy 28.5.2006, 23:15
значит так... среднее по массиу С расчитывать влом, хотя ясно, что сумма элементов первого массива - сумма арифметической прогрессии: (2*40 - 1 + 1)∙40/2 = 1600 , сумма членов второго ряда: 2∙40=80. 
общая сумма членов ряда С - 1680. Что при делении на количество элементов=80 даёт среднее по массиву С значение 1680/80=168/8=21. Следовательно, в массиве С сначала должны идти числа, меньшие 21. В этом варианте могу предложить след. варианты:
1) сначала идёт чередование элементов А и В в результирующем массиве С, при достижении последнего члена массива А, меньшего 21, "вываливаются" все члены массива В, которые ещё в наличии, а потом "вываливается" "остаток" массива В:
С= (1,2,3,2,5,7,2,9,2,11,2,13,2,15,2,17,2,19,2,2,2,2.....2,21,23,25,27....79)
2) Запись говорит сама за себя:
С=(1,2,2,2,2.....2,3,5,7,9,11,13,15...79)
То есть реализуется упорядоченный результирующий массив, в котором при любом условии "сперва идут числа, меньшие какого-то значения", и не важно, равно это самое "значение" величине среднего арифметического по массиву С, или, скажем 1021... 
3) сначала "вываливаются" все элементы массива А, меньшие 21, потом все элементы массива В, потому как они меньше 21, потом - "остаток" массива А:
С= (1,3,5,7,9,11,13,15,17,19,2,2,2,2,2...2,21,23,25,27...79)
Вобщем выбери способ слияния и - вперёд. 
з.ы. Если я неправильно понял постановку, просьба сообщить  smile  

Автор: LeNes 28.5.2006, 23:28
с математическои постановкои ты канешна круто разобрался...
но все бы класс...
вот тока я не могу это реализовать на делфи...
ну не могу и все ...вот ступор у меня на эту задачу!(((
Ты не смог бы код выложить плз!? 

Автор: skyboy 29.5.2006, 00:07
Так какой метод слияния? Все три и на каждый - по программе? Не могу я полчаса положить - я диплом пишу... Вот определись с выбором - помогу.
P.S. Вообще-то это должно было бы быть задано в постановке задачи - можешь грузануть препода, что, мол, не указано, что делать с двойками - куда их пихать... ;) 

Автор: LeNes 29.5.2006, 00:21
Первым методом!!!!
только Два массива В и А должны задаваться в виде матрицы размерностью 4X10
а последний массив С в виде строки!!!
я тебя уже люблю!!!)
 smile   

Автор: LeNes 29.5.2006, 00:48
Не я главное весь семестр ходил на комп.науки выполнял быстрее всех...
Осталось четыре недели до конца наших занятий...
Ко мне подошли девченки и попросили больше не ходить на комп.науки... сказали ну мол ты понимаешь нам тоже зачет нужен... а ты мол и так вперед всех убежал... на 9 работ... тебе он так поставит.. ну а я что (дурак).. перестал ходить... прихожу с зачеткои.. а эти су**ки по сетке с моего компа скачали все работы, немного модифицировали и выдали за свои.... и еще вперед ушли...
Ну я ему сую зачетку а препод говорит... ты мол отстал.. тебе догонять надо... на говорит вот работка сделаешь и все зачет... а я как взьелся на него... посрались с ним... и не стоит у меня теперь на эту програмку... могу написать но нет желания... просто может психологически чтото?! просто беру ручку... начинаю код набрасывать... и ступор в мозгу...
Спасибо за совет, я ему еще и эти двоикм припомню!!!!!!))) 

Автор: skyboy 29.5.2006, 00:54
Код

var A,B:array[1..4,1..10] of byte;
    i,j:byte;
    C:array[1..80] of byte;
begin
for i:=1 to 4 do
 for j:=1 to 10 do
  A[i,j]:=((i-1)*10+j)*2-1;
for i:=1 to 4 do
 for j:=1 to 10 do
  B[i,j]:=2;
for i:=1 to 10 do
 C[2*i - 1]:=A[1,i];
for i:=1 to 10 do
 C[2*i]:= B[1,i];
for i:=10 to 40 do
 C[i + 10]:=B[i div 10,i mod 10 + 1];
for i:=10 to 40 do
 C[i + 41]:=A[i div 10 + 1,i mod 10 + 1];
writeln('Matrix A:');
for i:=1 to 4 do
 begin
  for j:=1 to 10 do write(A[i,j],#9);   // символ табуляции - для промежутков
  writeln;
 end;
writeln('Matrix B:');
for i:=1 to 4 do
 begin
  for j:=1 to 10 do write(B[i,j],#9);   // символ табуляции - для промежутков
  writeln;
 end;
writeln('Press ENTER to see matrix C...');
readln;
writeln('Matrix C:');
for i:=1 to 8 do
 begin
  for j:=1 to 10 do write(C[(i-1)*10+j],#9);   // сивол табуляции для промежутков
  writeln;
 end;

writeln('Please press ENTER to exit...');
readln;
end.

Оно? smile 
Цитата(LeNes @  29.5.2006,  00:48 Найти цитируемый пост)
могу написать но нет желания

- сам себя заклинил? 

Автор: LeNes 29.5.2006, 01:34
оно!!!!!
Большое Спасибо!!!!!!
Было бы у меня больше сотни мессаг я бы тебе респект на репутаций поставил!!
Зы мнои не заржавеет!!! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)