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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 00:52   #1
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию Сумма элементов матрицы после 1-го положительного (СИ)

Уважаемые форумачане, не хотелось бы злоупотреблять вашим терпением, но если возможно, помогите пожалуйста отыскать ошибку ещё в одном коде.
На этот раз необходимо найти сумму модулей элементов квадратной матрицы, которые расположены после первого положительного элемента.
Код следующий:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
clrscr();
int s=0,n,a[100][100];
int i,j;
int k,l;
printf("Razmernost kvadratnoj matricy NxN=");
scanf("%d",&n);
 for (i=0; i<n; i++)
 {
   for (j=0; j<n; j++)
   {
    scanf("%d",&a[i][j]);
   }
 }
//Перебор элементов матрицы и поиск первого положительного
 for(i=0;i<n;i++)
 {
   for(j=0;i<n;j++)
   {
    if(a[i][j]>0)
    {
//Запись координат следующего за первым положительным элементом
	k=i+1;         
	l=i+1;
    break;
    }
   }
//Суммирование последующих элементов
  for(i=k;i<n;i++)
  {
    for(j=l;j<n;j++)
    {
      s=s+abs(a[i][j]);
    }
  } 
 }
printf("\nSuma modyliv =%d",s);
}
В результате вместо требуемой суммы выводится значение, присвоенное переменной s в данном случае 0
flexin вне форума Ответить с цитированием
Старый 16.01.2010, 01:00   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Очепятка
Код:
for(i=0;i<n;i++)
 {
   for(j=0;j<n;j++)
   {
    if(a[i][j]>0)
    {
//Запись координат следующего за первым положительным элементом
	k=i+1;         
	l=j+1;
    break;
    }
   }
А
Код:
s=s+abs(a[i][j]);
Замените на
Код:
s+=abs(a[i][j]);
Поддерживайте стиль программирования
psycho-coder вне форума Ответить с цитированием
Старый 16.01.2010, 01:21   #3
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию

эх спаисбо, но, к сожалению
проблема осталась
Цитата:
В результате вместо требуемой суммы выводится значение, присвоенное переменной s в данном случае 0
видимо что-то ещё
flexin вне форума Ответить с цитированием
Старый 16.01.2010, 03:59   #4
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
k=i+1;         
l=j+1;
break;
Этот break выкинет только из вложенного цикла, а внешний пойдёт крутиться дальше. В итоге Вы получите сумму элементов, расположенных после первого положительного элемента последней строки, в которой есть положительные элементы.
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 16.01.2010, 08:39   #5
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию

Greblin, т.е. еще одного брейка не хватает?
Если я правильно поняла, то код с учетом предыдущих замечаний будет следующий:
Код:
#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
clrscr();
int s=0,n,a[100][100];
int i,j;
int k,l;
printf("Razmernost kvadratnoj matricy NxN=");
scanf("%d",&n);
 for (i=0; i<n; i++)
 {
   for (j=0; j<n; j++)
   {
    scanf("%d",&a[i][j]);
   }
 }
//Перебор элементов матрицы и поиск первого положительного
 for(i=0;i<n;i++)
 {
   for(j=0;j<n;j++)
   {
    if(a[i][j]>0)
    {
//Запись координат следующего за первым положительным элементом
	k=i+1;         
	l=j+1;
    break;
   break;
    }
   }
//Суммирование последующих элементов
  for(i=k;i<n;i++)
  {
    for(j=l;j<n;j++)
    {
      s+=abs(a[i][j]);
    }
  } 
 }
printf("\nSuma modyliv =%d",s);
}
Но сумма снова = 0. Причем компилятор компилирует, но выдает ошибку "Unreachable code"

Или ставить этот брейк (йли 2??) после
Код:
if(a[i][j]>0)
чтобы прервать цикл(?) сразу после нахождения 1-го положительного элемента
Код:
for(i=0;i<n;i++)
 {
   for(j=0;j<n;j++)
   {
    if(a[i][j]>0)
   break;
  break;
  }
}
//Запись координат следующего за первым положительным элементом
	k=i+1;         
	l=j+1;
Но и в этом случае сумма элементов все равно 0

Последний раз редактировалось flexin; 16.01.2010 в 08:48.
flexin вне форума Ответить с цитированием
Старый 16.01.2010, 09:18   #6
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Всё чуть-чуть хитрее. break выкидывает только из того цикла, в котором вызван. Решается это через переменную-флаг
Плюс заметил что у Вас со скобками напутано. В итоге решение такое
Код:
int s=0,n,a[100][100];
int i,j;
int k,l;
int f = 0;
printf("Razmernost kvadratnoj matricy NxN=");
scanf("%d",&n);
 for (i=0; i<n; i++)
 {
   for (j=0; j<n; j++)
   {
	scanf("%d",&a[i][j]);
   }
 }
//Перебор элементов матрицы и поиск первого положительного
for(i=0;i<n;i++)
 {
   for(j=0;j<n;j++)
	 if(a[i][j]>0)
	 {
//Запись координат следующего за первым положительным элементом
	 k=i+1;
	 l=j+1;
	 f = 1;
	 break;
	 }
   if (f) break;
  }
//Суммирование последующих элементов
for(i=k;i<n;i++)
  {
	for(j=l;j<n;j++)

	  s=s+abs(a[i][j]);

  }

printf("\nSuma modyliv =%d",s);
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 16.01.2010, 09:49   #7
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию

С флагами Вы правы. Спасибо
Не совсем понятно только, почему
Код:
  if (f) break;
а не
Код:
  if (f==1) break;


ооой, все равно сумма 0
flexin вне форума Ответить с цитированием
Старый 16.01.2010, 10:19   #8
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

У меня не 0, всё нормально считает, смотрите где скопировали неправильно
Код:
if (f==1)
- это тавтология.
Код:
if (f)
- если f единица, т.е. истина, то это выражение истинно, если ноль, т.е. ложь, то ложно
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 16.01.2010, 10:43   #9
flexin
Пользователь
 
Регистрация: 13.12.2009
Сообщений: 15
По умолчанию

Да нет, перепроверила..

Если вводить элементы матрицы начинаю с отрицательного числа то сумму выдает 0,
а если ввожу все положительные, то сумма = последнему введенному элементу
flexin вне форума Ответить с цитированием
Старый 16.01.2010, 10:58   #10
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Покажите тест
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма элементов матрицы DenProx Помощь студентам 2 19.12.2009 14:49
сумма максимальных значений элементов столбцов матрицы motaro Помощь студентам 2 26.11.2009 19:00
Сумма до мax положительного элемента массива Отчаявшаяся Помощь студентам 2 16.11.2009 19:42
Сумма элементов из заштрихованной области матрицы pasha92 Помощь студентам 3 16.11.2009 18:54
Сумма четных элементов матрицы. Произведение элементов 3-го столбца. Минимальный элемент матрицы. renovare Помощь студентам 2 03.07.2009 21:13