Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Задача на одномерные массивы =(

Автор: Дмитрий 7.11.2006 3:27

Задача:
Даны две последовательности a1 ≤ a2 ≤ ... ≤ аn и b1 ≤ b2 ≤ ... ≤ bn. Образовать из них новую последовательность чисел так, чтобы она тоже была неубывающей (дополнительный массив не использовать).
Я придумал следующий алгоритм:
Берем элемент массива Б(i) и сравниваем его со всеми элементами массива А. Если этот элемент больше или равен какому-либо элементу массива А(j) и меньше следующего в массиве А(J+1), то добавляем его после j и перед j+1 в массив А.
Получилась такая программа но при компиляции происходит либо ошибка памяти либо просто закрывается компилятор (Borland C++ 4.1). Подскажите плз ошибки в коде\алгоритме. При просмотре через дебаггер видно что в массив элементы дописываются не каждый раз.
Получившаяся программа:

 #include <iostream.h>
#include <conio.h>

int *fill(int* a, char nam, int* n)
{
int i;
cout << "\nEnter size of array " << nam << ": ";
cin >>*n;
for (i=0;i<=*n-1;i++)
{
cout << "\nEnter " << i+1 << " elem. of array:";
cin >> a[i];
}
return a,n;
}

int *work(int* a, int* sa, int* b, int* sb)
{
int m,n,t=0,sat;
for (n=0;n<=*sb-1;n++)
{
for (m=0;m<=*sa;m++)
{
if (a[m]<=b[n]) \\ Вопрос: Как эти два выражения совместить в одно?
{
if (a[m+1]>b[n])
{
for (t=*sa;t>=m+1;t--)
{
a[t+1]=a[t];
}
a[t]=b[n];
sa=sa+1;
}
}
}
}
return a,sa;
}




void main ()
{
clrscr();
int i,aa[20],ab[10],*sia,*sib;
fill(aa,'A',sia);

fill(ab,'B',sib);
work(aa,sia,ab,sib);
for (i=1;i<=*sia;i++)
{
cout << aa[i] <<" ";
}
getch();
}

Автор: volvo 7.11.2006 4:00

Попробуй вот так (это твой же алгоритм, но моя реализация):

#include <iostream.h>
#include <conio.h>

void fill(int *a, char nam, int &n) {

cout << "\nEnter size of array " << nam << ": ";
cin >> n;
for(int i = 0; i < n; i++) {
cout << "\nEnter " << i+1 << " elem. of array:";
cin >> a[i];
}
}

void work(int *a, int &sa, int *b, int &sb) {

for(int j = 0; j < sb; j++) {
for(int i = 0; a[i] <= b[j]; i++);
for(int k = sa; k > i; k--) a[k] = a[k - 1];
a[i] = b[j]; sa += 1;
}

}


int main() {

clrscr();
int aa[20], ab[10], sia, sib;

fill(aa,'A',sia);
fill(ab,'B',sib);
work(aa,sia,ab,sib);

for(int i = 0; i < sia; i++)
cout << aa[i] << " ";
cout << endl;

getch();
return 0;
}


Автор: Дмитрий 7.11.2006 12:40

Спасибо большое!