IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Двумерный массив (ОЧЕНЬ СРОЧНО), С/С++
xazard
сообщение 30.05.2006 14:24
Сообщение #1





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Вопрос жизни и смерти!!!
Дана целочисленная квадратная матрица. Определить:
1) ...
2) минимум среди сумм модулей элементов диагоналей, параллельных побочной диагонали матрицы.

Кто-нибудь исправьте последние две функции, по каким индексам суммировать.
Пожалуйста приведите код...

#include <iostream.h>
#include <math.h>
	
#define SIZE 3 // размер матрицы

// прототипы функций
int Sum (int matrix[SIZE][SIZE]); // суммирует неотрицательных столбцов
int Summ (int matrix[SIZE][SIZE]); // суммирует элементы диагоналей выше побочной диагонали
int Summ1 (int matrix[SIZE][SIZE]); //суммирует элементы диагоналей ниже побочной диагонали 

int main () {
  
  // забиваем матрицу элементами
  int matrix[SIZE][SIZE];
  for (int i=0; i<SIZE; i++){
	for (int j=0; j<SIZE; j++){ 
	 cin >>  matrix[i][j]; 
	}
  }		   
  
  cout <<"Сумма элементов столбцов без отриц. элементво: " << (Sum(matrix)) << endl;
  if (Summ(matrix)<Summ1(matrix)) 
   cout <<"Минимальная сумма: " << (Summ(matrix))<< endl; 
  else  cout <<"Минимальная сумма: " << (Summ1(matrix))<< endl; 
  return 0;
  
}  


// сумма элементов столбцов без отрц. элементов
int Sum (int matrix[SIZE][SIZE]) {  
  
  int sum=0; // общая сумма
  int sum2; // сумма одного столбца
  bool N=false;
	
	for (int j=0; j<(SIZE); j++) {
	  N=false;
	  sum2=0; 
	  for (int i=0; i<(SIZE); i++) {
		if (matrix[i][j]<0) N=true;
		sum2 += matrix[i][j];
	  }
	  if (N) sum2 = 0;
	  else sum += sum2;
	}		   
	  
return sum;
}


// сумма диагоналей выше побочной диагонали (по модулю)
int Summ(int matrix[SIZE][SIZE]) {

int summ=0;
int minimum=fabs(matrix[1][1]); 

for (int j=1;j<(SIZE-1);j++){
summ=0;
	for (int i=1;i<(SIZE-j);i++){
	summ+=fabs(matrix[i][SIZE-j-i+1]);
	cout << summ << " ";
	}
	if (minimum>summ) minimum=summ; 
}
return minimum;
}

// сумма диагоналей ниже побочной диагонали (по модулю)
int Summ1(int matrix[SIZE][SIZE]) {

int summ=0;
int minimum1=fabs(matrix[1][1]); 

for (int j=2;j<SIZE;j++){
summ=0;
	for (int i=j;i<SIZE;i++){
	summ+=fabs(matrix[i][SIZE-i+j]);
	cout << summ << " ";
	}
	if (minimum1>summ) minimum1=summ; 
}
return minimum1;
}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 31.05.2006 10:37
Сообщение #2


Гость






А тесты, кстати, надо СРАЗУ приводить. Пока тестов (причем ВСЕХ, на которых ты собираешься тестировать задачу) не будет здесь - не прикоснусь больше к заданию.

ВСЕ. Надоело. Это не то, и это не так. СДЕЛАЙ ТАК!
 К началу страницы 
+ Ответить 
xazard
сообщение 31.05.2006 10:47
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


volvo
Извини, но тесты не я даю, а препод... mega_chok.gif

Один вопрос только, можно всё-таки убрать изменение индексов в сами циклы или нет? А то я парюсь с этим уже битый час... nea.gif

Заранее благодарен за ответ.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 3.06.2006 17:20
Сообщение #4


Гость






А вот теперь объясни мне смысл изменений, внесенных тобой в программу.

Зачем, по-твоему, я вносил все вычисления индексов в сами циклы? Не по твоей ли просьбе:
Цитата(xazard @ 31.05.2006 10:47)
можно всё-таки убрать изменение индексов в сами циклы или нет? А то я парюсь с этим уже битый час...

?

Так что же получается? Ты просишь внести все в цикл, тебе это ДЕЛАЮТ, и ты ТУТ ЖЕ выносишь все обратно? Тогда зачем просил?

Да и вообще, ты на С++ пишешь, или на Бейсике? Так ПОЛЬЗУЙСЯ преимуществами языка! Зачем вычислять эти i и j отдельно, если я показал тебе, как это сделать прямо в цикле? Почему надо все время привыкать к ПЛОХОМУ стилю? Ведь так и будешь продолжать пользоваться таким стилем "кодирования" (я даже программированием это назвать не могу). До первого собеседования, ибо ТАКОЙ стиль никому не нужен...

Как видно, в следующий раз надо просто игнорировать такие темы nea.gif
 К началу страницы 
+ Ответить 
xazard
сообщение 3.06.2006 22:10
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Спорить не буду, как писать лучше, потому как опыта в программировании на С/С++ пока практически не имею. Но мне кажется, что по читабельности разница сразу ощутима (хотя ИМХО). А изменения сделаны для того, чтобы сдать задачу. Потому как у всех разные стили и мне приходится подстраиваться под тех, кому я сдаю. Возможно, такое в производстве и «не пройдет», но я пока тока учусь… smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 1.08.2025 17:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"