Практикум по курсу "Алгоритмизация и программирование". Часть 2. Андрианова А.А - 22 стр.

UptoLike

А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова .
// выделение памяти под матрицу-результат
b=new float*[m1];
if(b==NULL)
{
printf("Нет требуемого объема памяти.\n");
return;
}
for(i=0;i<m1;i++)
{
b[i]=new float[n];
if(b[i]==NULL)
{
printf("Нет требуемого объема памяти.\n");
for(j=0; j<i; j++)
delete [] b[j];
delete [] b;
return;
}
}
t=0; // номер строки исходной матрицы
for(i=0;i<m1;i++)
{
// находим номер первой «ненулевой» строки
// исходной матрицы, начиная с t-ой
while(IsNullRow(n,a[t])) t++;
// найденная «ненулевая» строка копируется на
// i-ое место в матрицу-результат
for(j=0;j<n;j++)
b[i][j]=a[t][j];
// переход к следующей строке исходной матрицы
t++;
}
}
Рассмотрим второй вариант решения этой задачи исходная матрица
преобразуется посредством удаления из нее нулевых строк. Данный вариант
решения возможен и эффективен только в случае использования схемы хра-
нения матрицы, изображенной на рис.1.2. Преобразование матрицы происхо-
дит путем переприсвоения указателей на строки. Когда встречатся «нулевая»
строка, освобождается занимаемая ею память, а указателю на эту строку в
дальнейшем будет присвоен адрес начала первой всретившейся после нее
«ненулевой» строки, если такая существует.
Этот вариант функции RemoveNullRowMatrix в качестве параметров
22
А.А. Андрианова, Л.Н. Исмагилов, Т.М. Мухтарова                   .
            // выделение памяти под матрицу-результат
            b=new float*[m1];
            if(b==NULL)
            {
                 printf("Нет требуемого объема памяти.\n");
                 return;
            }
            for(i=0;i