Перейти к содержимому

Фото
- - - - -

[C++] Подскажите в задачке цикл plz.


  • Вы не можете создать новую тему
  • Please log in to reply
5 ответов в этой теме

#1 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 20 декабря 2006 - 22:01

Не поленитесь пожалуйста дочитать. :)


Дана действительная матрица [Ai,j] размера nxn. Получить действительную матрицу [Bi,j ], элемент которой b[i,j] равен сумме элементов данной матрицы, расположенных в области, определяемой индексами i,j так, как показано на рисунке
+------------------+
| |
|-----------a[i][j] |
| | |
| | |
| | |
+--------------------+

Вобщем, например дана матрица
1 5 4 7
3 8 5 9
5 9 3 8
7 8 2 5

Ограничивающая область будет
0 0 0 0
3 8 5 0
5 9 3 0
7 8 2 0


Таким образом, надо заменить 7 суммой 3 + 8 + 5 + 5 + 9 + 3 + 7 + 8 +2 ;
5 суммой 3 + 8 + 5 + 5 + 9 + 3 ;
3 суммой 3 + 8 + 5 ;
8(последняя строка вторая цифра) суммой 8 + 2 + 9 + 3 + 8 + 5;
9 суммой 9 + 3 + 8 + 5;
8 суммой 8 +5;
и 2 суммой 2 + 3 + 5;
3 суммой 3 +5;
5 пятеркой.

Вот мое решение:

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>

int i, j, l, k, s;
void main()
{
clrscr();
const int n = 4;
int a[n][n];
int b[n][n];
s = 0;
randomize();
for (i = 0; i <n; i++)
{
for (j = 0; j < n; j++)
{
a[i][j] = random(9) + 1;
cout << a[i][j] << " ";
}
cout << endl;
}
cout << "\n Rezult: \n";
for (i = 0; i < n; i++)
{ for (j = 0; j < n ; j++)
{
for ( l = 1; l < i ; l++)
for (k = j; k < n - 1 ; k++)

s += a[l][k];
b[i][j] = s;
cout << b[i][j] << " ";
s = 0;
}
cout << endl;
}
getch();
}

Цикл
for ( l = 1; l < i ; l++)
for (k = j; k < n - 1 ; k++)
должен быть не такой, а вот какой?до меня че-то не доходит, точнее есть предположения, но ни одно из них не срабатывает...


упс, рисунок неправтльно вышел
+------------------------+
| |
|-------------a[i][j] |
| | |
| | |
| | |
+------------------------+

упс, рисунок неправильно вышел
+------------------------+
| |
|-------------a[i][j] |
| | |
| | |
| | |
+------------------------+

не выходит, вобщем можно по пример смотреть
  • 0
Why to walk when you can run? // Iacoca Lee

#2 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 21 декабря 2006 - 11:18

Общий цикл должен выглядеть так:
		for(int i = n-1; i>0; i--) {
			for(int j = 0; j<n; j++) {
				
				int sum = 0;
				
				for(int k = i; k>0; k--) {
					for(int l = j; l<n-1; l++) {
						sum += array[k-1][l];
					}
				}
				
				tmp[i][j] = sum;
			}
		}

Сообщение изменено: shb (21 декабря 2006 - 11:19 )

  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#3 desert_rose

desert_rose
  • Пользователь
  • 25 сообщений
  • Откуда:Украина,Крым,Симферополь

Отправлено 21 декабря 2006 - 16:00

я сделала вот так:
for ( i = 0; i < n; i++)
{ for (j = 0; j < n; j++)
{
for (l = 1; l <= i; l++)
for( k = j; k < n-1; k++)
s += a[l]k];


А вобще, это по-моему тоже самое. не?
  • 0
Why to walk when you can run? // Iacoca Lee

#4 БугаГа

БугаГа
  • Пользователь
  • 260 сообщений
  • Откуда:-за

Отправлено 21 декабря 2006 - 16:11

Блин, для кого кнопка # == сделана.
Никто не будет за вас расставлять tab'ы и рыться в этом гххмммм "коде"
  • 0
First they ingore you. Then they laugh at you. Then they fight you. Then you win. © Mahatma Ghandi

#5 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 21 декабря 2006 - 20:39

desert_rose,
Не знаю :)

Скажу одно - твое, по твоим же словам, не работает :)
Мое - работает :)

!!!----- Внимание - нерабочий код :) -----!!!
for ( i = 0; i < n; i++){ 
	  for (j = 0; j < n; j++){
	
			for (l = 1; l <= i; l++){
				  for( k = j; k < n-1; k++){
						s += a[l]k];
						b[i][j] = s;
						cout << b[i][j] << " ";
						s = 0;
				  }
				  cout << endl;
			}

	  }
}

С первого взгляда неверно:
1) Ты пытаешься посчитать сумму, но при этом при каждом заходе в цикл сумма у тебя равна нулю.
Получается простое присваивание:
s = 0; 
s += a[l]k];
b[i][j] = s;

все равно что написать
b[i][j] = a[l]k];
Короче, ты просто копируешь один массив в другой очень сложным способом :)

2) С каждым кругом тебе надо брать все меньшее количество элементов матрицы, а ты постоянно берешь начиная с единицы
for (l = 1; l <= i; l++)

  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!

#6 shb

shb

    New life, much more options

  • Постоялец
  • 5 253 сообщений
  • Откуда:Таллинн

Отправлено 23 декабря 2006 - 12:10

sum += array[k-1][l];

тут у меня ошибка :) не знаю откуда там взялась эта странная единица :) проверил, надо вот так:

sum += array[k][l];

  • 0
Мыслящий человек просто обязан время от времени поднимать себя за волосы © Тот самый Мюнгхаузен

Joga Bonito!