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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.08.2010, 19:02   #1
olga4eg
Новичок
Джуниор
 
Регистрация: 19.08.2010
Сообщений: 2
По умолчанию Обработка динамичских массивов

В матрице удалить строки, содержащие нули,затем добавить строку из произведений элементов по столбцам.
написала код,всё бы хорошо,но не удаляет строку с нулевым элементом
void main()
{
clrscr();
int i,j,n,m,k,q,**ptr;
cout<<"BBedite razmeru isxodnoi matrici"<<endl<<"4islo strok:";
cin>>n;
cout<<"4islo stolbcov:";
cin>>m;
ptr=new int*[n];
assert(ptr!=0);
for (i=0;i<n;i++)
{
ptr[i]=new(int[m]);
assert(ptr[i]!=0);
for(j=0;j<m;j++)
ptr[i][j]=(rand()-16383)%10;}

cout<<setw(30)<<"BBedena matrica:"<<endl;
for(i=0;i<n;i++) {
for(j=0;j<m;j++)
cout<<setw(4)<<ptr[i][j];
cout<<endl;}
q=0;
k=0;

do {
if (ptr[q][j]==0){
for(i=q;i<n-k-1;i++)
for(j=0;j<m;j++)ptr[i][j]=ptr[i+1][j];
delete[]ptr[n-k-1];
k++;continue;}

q++;}
while (q+k<n);
ptr[n-k]=new(int[m]);
assert(ptr[n-k]!=0);
for(j=0;j<m;j++)
{ ptr[n-k][j]=1;
for(i=0;i<n-k;i++)
ptr[n-k][j]*=ptr[i][j];}
cout<<setw(30)<<"POLY4ENA MATRICA:"<<endl;
for(i=0;i<=n-k;i++){
for(j=0;j<m;j++) cout<<setw(4)<<ptr[i][j];
cout<<endl;}
for(i=0;i<n-k;i++)
delete[]ptr[i];
delete[]ptr;


cout<<endl<<"konec programmu.";
getch();
}

Последний раз редактировалось olga4eg; 19.08.2010 в 19:43.
olga4eg вне форума Ответить с цитированием
Старый 19.08.2010, 22:02   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
#include <iostream>
#include <cstdlib>

template< typename Digit >
void print( Digit *ptr, const int size ){
    for( int i = 0; i < size; ++i )
	std::cout << ptr[ i ] << ' ';
    std::cout << '\n';
}

template< typename Digit >
bool isHaveNull( Digit *ptr, const int size ){
    for( int i = 0; i < size; ++i, ++ptr )
	if( !( *ptr ) )
	    return 1;
    return 0;
}

template< typename Digit >
void copy( Digit *from, Digit *to, const int size ){
    for( int i = 0; i < size; ++i, ++from, ++to )
	*to = *from;
}

int main(  ){
    const int N = 5;
    const int M = 10;
    int **ptr = new int*[ M ];
    for( int i = 0; i < M; ++i )
	ptr[ i ] = new int[ N ];

    for( int i = 0; i < M; ++i )
	for( int j = 0; j < N; ++j )
	    ptr[ i ][ j ] = std::rand( ) % 10;

    std::cout << "Исходный массив :\n";
    for( int i = 0; i < M; ++i )
	print< int >( ptr[ i ], N );

    int haveNull = 0;
    for( int i = 0; i < M; ++i )
	haveNull += isHaveNull( ptr[ i ], N );

    const int newM = M - haveNull + 1;
    int **newArray = new int*[ newM ];
    for( int i = 0; i < newM; ++i )
	newArray[ i ] = new int[ N ];

    for( int i = 0, newPos = 0; i < M; ++i )
	if( !isHaveNull( ptr[ i ], N ) ){
	    copy< int >( ptr[ i ], newArray[ newPos ], N );
	    ++newPos;
	}
    for( int i = 0; i < M; ++i )
       delete [] ptr[ i ];
    delete [] ptr;
    ptr = 0;
    for( int i = 0; i < N; ++i ){
	int sum = 0;
	for( int j = 0; j < ( newM - 1 ); ++j )
	    sum += newArray[ j ][ i ];
	newArray[ newM - 1 ][ i ] = sum;
    }

    std::cout << "Выхлоп :\n";
    for( int i = 0; i < newM; ++i )
	print< int >( newArray[ i ], N );
    
}
Ня Вариант если всё вручную надо делать, иначе std::vector в помощь
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 19.08.2010 в 22:06.
ozo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработка массивов на Паскале Наташа1973 Фриланс 6 18.01.2010 07:01
обработка массивов в Паскале Наташа1973 Помощь студентам 2 17.01.2010 21:24
обработка массивов vvioleta Помощь студентам 1 14.11.2009 13:10