Информатика и технология программирования


Итоговый экзамен (семестр) - часть 3



pd = new elem[two.sz];
sz=two.sz;
for (int i=0; i&#60sz; i++) pd[i]=two.pd[i];
}


// Личный метод поиска " места расположения" коэффициента


int matrix::find(int xx, int yy){
for (int i=0; i&#60sz; i++)
if (pd[i].x==xx &#38&#38 pd[i].y==yy) return i;
return 1;
}


matrix matrix::operator+(matrix &#38two){
int newsz=sz; // Размерность выходного массива


for (int i=0; i&#60two.sz; i++) // Если коэффициент из второго отсутствует


if (find(two.pd[i].x, two.pd[i].y)==-1)
newsz++; // в первом - увеличить размерность на 1


matrix out(); // Выходной объект


delete out.pd; // При создании не пустой


out.pd = new elem[newsz];
for (i=0; i&#60sz; i++) // Копировать первый в выходной


out.pd[i]=pd[i];
out.sz=sz;
for (i=0; i&#60two.sz; i++) // Если коэффициент из второго присутствует


{ // в выходном сложить, иначе добавить.


int nn=out.find(two.pd[i].x, two.pd[i].y);
if (nn!=-1)
out.pd[nn]+= two.pd[i];
else
out.pd[out.sz++] = two.pd[i];
}
return out;
}


// Вариант 2. Можно использовать в качестве временного


// объекта второй операнд, если передавать его по значению



matrix matrix::operator+(matrix two){
int newsz=sz; // Размерность выходного массива


for (int i=0; i&#60two.sz; i++) // Если коэффициент из второго отсутствует


if (find(two.pd[i].x, two.pd[i].y)==-1)
newsz++; // в первом - увеличить размерность на 1


// Перераспределить память во втором объекте


two.pd=realloc(two.pd, sizeof(elem)*newsz;
for (i=0; i&#60sz; i++) // Если коэффициент из второго присутствует


{ // в выходном сложить, иначе добавить.


int nn=two.find(pd[i].x, pd[i].y);
if (nn!=-1)
two.pd[nn]+= pd[i];
else
two.pd[two.sz++] = pd[i];
}
return two;
}




Начало  Назад  Вперед