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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2010, 18:13   #11
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

Если программа выдает такое сообщение:
Цитата:
"Matrix not change!"
Просто матрица осталась прежней, если хочешь увидеть матрицу при этом условии, то просто внеси изменения в код программы:
Цитата:
if(size <= 0){
cout << "Matrix not change!" << endl; PrintMatrix(Array,n,m); return 0;
}
Только сейчас понял, что я допустил оплошность =( Если в матрице нет строчек состоящих полностью из отрицательных чисел, то программа выводит сообщение и забывает освободить память! Эту ошибку надо исправить. Код писал быстро, поэтому не учел этот критерий.
Вот код программы уже исправленный!
Код:
#include <iostream>
#include <time.h>
using namespace std;

int CreateMatrix(int n, int m);
int *CheckMatrix(int **Array, int n, int m, int *Check);
int PrintMatrix(int **Array, int n, int m);
int CreateNewMatrix(int **Array, int n, int m, int *Check);

int main(){
	srand( time(NULL) );
	CreateMatrix(3,3);
	return 0;
}

//-------------------------------
int CreateMatrix(int n, int m){
	int **Array = new int*[n];
	for(int i = 0; i < n; i++)
		Array[i] = new int[m];

	//заполнение
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++)
			Array[i][j] = rand()%10 - 7;
	}

	int *Check = new int[n+1];
	for(int i = 0; i < n+1; i++)
		Check[i] = -1;

	// проверка
	Check = CheckMatrix(Array,n,m,Check);

	int size = Check[n];
	PrintMatrix(Array,n,m);

	if(size > 0){
		CreateNewMatrix(Array,n,m,Check);
	}

	for(int i = 0; i < n; i++)
		delete []Array[i];
	delete []Array;

	delete []Check;
	return 0;
}
//----------------
int CreateNewMatrix(int **Array, int n, int m, int *Check){
	int size = Check[n];
	int **newArray = new int*[size];
	for(int i = 0; i < size; i++)
		newArray[i] = new int[m];

		int count = 0;
		for(int i = 0; i < n; i++){
			if( Check[i] >= 0 ){
				for(int j = 0; j < m; j++)
					newArray[count][j] = Array[i][j];
				count++;
			}
		}
		cout << "Result:" << endl;
		PrintMatrix(newArray,size,m);
		for(int i = 0; i < size; i++)
			delete []newArray[i];
		delete []newArray;
		return 0;
}
//----------------
int PrintMatrix(int **Array, int n, int m){
	for(int i = 0; i < n; i++){
		for(int j = 0; j < m; j++)
			cout << Array[i][j] << " ";
		cout << endl;
	}
	return 0;
}

//----------------
int *CheckMatrix(int **Array, int n, int m, int *Check){
	int count = 0;
	for(int i = 0; i < n; i++){
		bool fl = true;
		for(int j = 0; j < m; j++){
			if( Array[i][j] >= 0 ){
				fl = false; break;
			}
		}
		if(!fl){
			Check[i] = 1; count++;
		}
	}
	Check[n] = count;
	return Check;
}
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶

Последний раз редактировалось dxdy; 10.07.2010 в 18:22. Причина: Поспешил, людей насмешил...
dxdy вне форума Ответить с цитированием
Старый 11.07.2010, 13:07   #12
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

dxdx, если ты не заметил, ТС нужна на Си программа, а ты на С++ выложил
NiCola999 вне форума Ответить с цитированием
Старый 11.07.2010, 14:16   #13
dxdy
Пользователь
 
Регистрация: 11.06.2010
Сообщений: 78
По умолчанию

NiCola999 подкорректировать данную программу на Си не составит труда, самое главное, чтобы пользователь разобрался в алгоритме.
Я не волшебник, я еще только учусь ٩(๏̯͡๏)۶
dxdy вне форума Ответить с цитированием
Старый 11.07.2010, 14:38   #14
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

я подразумеваю, что ТС ничего не понимает в этом
NiCola999 вне форума Ответить с цитированием
Старый 11.07.2010, 14:55   #15
Денни
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 41
По умолчанию

ага я ток си прошёл на 1ом курсе и то не до конца его знаю а тут с++(((((
Денни вне форума Ответить с цитированием
Старый 11.07.2010, 15:08   #16
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

перевел на Си...
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int CreateMatrix(int n, int m);
int *CheckMatrix(int **Array, int n, int m, int *Check);
int PrintMatrix(int **Array, int n, int m);
int CreateNewMatrix(int **Array, int n, int m, int *Check);

int main(){
	srand( time(NULL) );
	CreateMatrix(3,3);
	return 0;
}

//-------------------------------
int CreateMatrix(int n, int m){
	int **Array = NULL;
	int i,j;
	if( (Array = (int**) malloc(n*sizeof(int*))) == NULL) {
	     printf("no memory\n");
		 exit(1);
	}
	for(i = 0; i < n; i++) {
		if( (Array[i] = (int*) malloc(m*sizeof(int))) == NULL){
		  printf("no memory\n");
		  exit(1);
		}
    }

	//заполнение
	for(i = 0; i < n; i++){
		for(j = 0; j < m; j++)
			Array[i][j] = rand()%10 - 7;
	}

	int *Check = NULL;
	if( (Check = (int*) malloc((n+1)*sizeof(int))) == NULL) {
	     printf("no memory\n");
		 exit(1);
	}
	for(i = 0; i < n+1; i++)
		Check[i] = -1;

	// проверка
	Check = CheckMatrix(Array,n,m,Check);

	int size = Check[n];
	PrintMatrix(Array,n,m);

	if(size > 0){
		CreateNewMatrix(Array,n,m,Check);
	}

	for(i = 0; i < n; i++)
		free(Array[i]);
	free(Array);

	free(Check);
	return 0;
}
//----------------
int CreateNewMatrix(int **Array, int n, int m, int *Check){
	int size = Check[n];
	int i,j;
	int **newArray = NULL;
	if(  (newArray = (int**) malloc(size*sizeof(int*))) == NULL){
	     printf("no memory\n");
		 exit(1);
	}
	for(i = 0; i < size; i++){
		if( (newArray[i] = (int*) malloc(m*sizeof(int))) == NULL) {
		  printf("no memory\n");
		  exit(1);
		}
	}

		int count = 0;
		for(i = 0; i < n; i++){
			if( Check[i] >= 0 ){
				for(j = 0; j < m; j++)
					newArray[count][j] = Array[i][j];
				count++;
			}
		}
		printf("Result:\n");
		PrintMatrix(newArray,size,m);
		for(i = 0; i < size; i++)
			free(newArray[i]);
		free(newArray);
		return 0;
}
//----------------
int PrintMatrix(int **Array, int n, int m){
    int i,j;
	for(i = 0; i < n; i++){
		for(j = 0; j < m; j++)			
			printf("%d ", Array[i][j]);
		printf("\n");
	}
	return 0;
}

//----------------
int *CheckMatrix(int **Array, int n, int m, int *Check){
	int count = 0;
	int i,j;
	for(i = 0; i < n; i++){
		char fl = 1;
		for(j = 0; j < m; j++){
			if( Array[i][j] >= 0 ){
				fl = 0; break;
			}
		}
		if(!fl){
			Check[i] = 1; count++;
		}
	}
	Check[n] = count;
	return Check;
}
NiCola999 вне форума Ответить с цитированием
Старый 11.07.2010, 16:05   #17
Денни
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 41
По умолчанию

спс ток я не пойму я запускаю она компилируется и всё окно с решением не вылетает
Денни вне форума Ответить с цитированием
Старый 11.07.2010, 16:44   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может потому что она сразу же закрывается?)))
запустите через cmd или же getch добавьте.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.07.2010, 17:33   #19
Денни
Пользователь
 
Регистрация: 27.01.2010
Сообщений: 41
По умолчанию

ставил гетч нифига пустое окно выводит
Денни вне форума Ответить с цитированием
Старый 11.07.2010, 17:45   #20
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

где вы компилируете? У меня в gcc работает

назревает еще такой вопрос, вы вообще запустили программу или только откомпилировали?В командной строке если Windows
gcc файл.c && a

Linux
gcc файл.c && ./a.out
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск текста(эл-т массива) в массиве строк peq Microsoft Office Excel 2 16.04.2010 15:11
Поиск в массиве строк. (visual basic) Mikle1990 Помощь студентам 7 19.03.2010 09:44
(Си) Замена слов наименьшей длины в массиве строк RZMTZM Общие вопросы C/C++ 7 25.01.2010 00:30
Как быстро узнать исть ли данная строка в массиве из строк? Alex Cones Общие вопросы Delphi 10 27.08.2009 08:57