Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
por
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 6
#1

Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом - C++

20.10.2013, 23:08. Просмотров 436. Ответов 9
Метки нет (Все метки)

Получить b1,…,bn, где bi - сумма элементов , которые находятся перед последним отрицательным элементом ( если все строки неотрицательные , то сума =-1) , размер массива вводится с клавиатуры .
Подскажите если не тяжело в чем ошибка .
Вот написал код , но выводит абсолютно левые числа :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include "stdafx.h"
#include <iostream>
#include <time.h>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{int n,i,j;
 
 
cin>>n;
srand((unsigned int)time(NULL));
int **a = new int*[n];
 
    for (i = 0; i < n; i++)
    {
        a[i] = new int [n]; 
    }
    
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <n; j++)
        {
        a[i][j]=rand()%100-30;
 
        cout << a[i][j] << " " ;
        }
        cout << endl;
    }
    int * b = new int[n];
for (int i=0;i<n;i++)
{
b[i]=0;
}
 
    
 
 
 
for ( i=0; i<n; i++) 
for ( j=n-1; j>=0; j--)
if  (a[i][j]<0)
{
for (int k=j-1;k>=0 ;k--)
{
b[i]+=a[i][k];
 
}
 
for (int i=0; i<n;i++)
cout<<b[i]<<endl;
 
 
 
    system("pause");
    return 0;
}
 
 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2013, 23:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом (C++):

Найти количество элементов массива, которые находится между первым и последним отрицательным элементом - C++
Объявить и проинициализировать массив случайными числами в диапазоне . Найти сколько элементов находится между первым и последним...

Найти сумму элементов массива, находящихся между первым и последним отрицательным элементом - C++
В целочисленном массиве из 20 ти элементов, найти сумму элементов, находящихся между первым и последним отрицательным элементом.Массив...

Найти сумму элементов матрицы, которые размещены в строках с отрицательным элементом на главной диагонали - C++
Дана квадратная матрица А 6-го порядка. Найти сумму элементов матрицы, которые размещены в строках с отрицательным элементом на главной...

Найти сумму элементов массива между последним отрицательным и предпоследним отрицательным элементами - C++
Дан одномерный массив из 1000 элементов, состоящий из случайных целых чисел в диапазоне от -15 до 14. Найти сумму элементов участка...

Заменить все элементы, стоящие перед первым отрицательным элементом, на сумму отрицательных элементов - C++
Доброго времени суток, форумчане. Надысь задали мне контрольную работу по С++, но вот беда: язык я этот не учил никогда. Кое-какие части...

Найти сумму элементов между max элементом и max отрицательным элементом - C++
помогите))) найти сумму элементов между max элементом и max отрицательным элементом

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
20.10.2013, 23:40 #2
сформулируйте полностью задание
por
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 6
21.10.2013, 00:24  [ТС] #3
задать квадратную матрицу порядка n , элементы которой вводятся с помощью функции rand , получить bi,..., bn , где bi это :сумма элементов , которые находятся перед последним отрицательным элементом ( если все строки неотрицательные , то сума =-1).

В общем мне нужно найти в каждой строке суму элементов , которые стоят перед последним отрицательным элементом .
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
21.10.2013, 00:40 #4
Что-то вы с циклами намудрили, например вот тут:
Цитата Сообщение от por Посмотреть сообщение
if *(a[i][j]<0)
{
for (int k=j-1;k>=0 ;k--)
{
b[i]+=a[i][k];
}
наверняка не учитываете, что если встретится после текущего элемента еще один неотрицательный, то всю строку до конца пройдет еще раз.
Рекомендовал бы ввести внутри первого цикла некую переменную flag и если элемент массива оказался ниже нуля, то менять flag на true, далее проверять если flag установлен в true, то плюсовать.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.10.2013, 00:53 #5
Цитата Сообщение от MrGluck Посмотреть сообщение
Что-то вы с циклами намудрили, например вот тут:
а я бы с конца пошел и без всяких флагов
примерно так
C++
1
2
3
4
5
6
7
8
9
10
int summ=-1;
for (int i=n-1;i>=0;i--)
 {
  if(summ==-1)
   {   if(b[i]<0)
          summ++;
    }
   else
      summ+=b[i];
  }
правда если сумма элементов сможет быть равна-1, то получится ерунда и тут без флага не обойтись

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int summ=-1;
bool flag=false
for (int i=n-1;i>=0;i--)
 {
  if(!flag)
   {   if(b[i]<0)
         {
          summ++;
         flag=true;
          }
    }
   else
      summ+=b[i];
  }
por
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 6
21.10.2013, 00:58  [ТС] #6
а без flag реально сделать , т.к в нем я не особо понимаю .

Добавлено через 2 минуты
Цитата Сообщение от ValeryS Посмотреть сообщение
а я бы с конца пошел и без всяких флагов
примерно так
C++
1
2
3
4
5
6
7
8
9
10
int summ=-1;
for (int i=n-1;i>=0;i--)
 {
  if(summ==-1)
   {   if(b[i]<0)
          summ++;
    }
   else
      summ+=b[i];
  }
правда если сумма элементов сможет быть равна-1, то получится ерунда и тут без флага не обойтись

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int summ=-1;
bool flag=false
for (int i=n-1;i>=0;i--)
 {
  if(!flag)
   {   if(b[i]<0)
         {
          summ++;
         flag=true;
          }
    }
   else
      summ+=b[i];
  }
так у меня же массив не одномерный , а двумерный .
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.10.2013, 01:02 #7
Цитата Сообщение от por Посмотреть сообщение
а без flag реально сделать , т.к в нем я не особо понимаю .
а че там понимать
это переменная которая имеет два значения ИСТИНА (true) и ЛОЖЬ(false)
если условия не выполнилось( в данном случае отрицательный элемент) то она ЛОЖЬ, если выполнилось то ИСТИНА
если тебе не понятны булевы переменные то можешь ввести целочисленную и присвоить ей 1 если условие выполнилось и 0 если нет

Добавлено через 2 минуты
Цитата Сообщение от por Посмотреть сообщение
так у меня же массив не одномерный , а двумерный .
во первых я тебе не программу написал а подсказал идею

а во вторых
Цитата Сообщение от por Посмотреть сообщение
В общем мне нужно найти в каждой строке суму элементов , которые стоят перед последним отрицательным элементом .
строка это и есть одномерный массив вместо summ введи одномерный массив сумм и записывай в него сумму каждой строки
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
21.10.2013, 01:40 #8
Цитата Сообщение от ValeryS Посмотреть сообщение
правда если сумма элементов сможет быть равна-1, то получится ерунда и тут без флага не обойтись
ну так собственно поэтому я и выбрал алгоритм с доп. переменной
por
0 / 0 / 0
Регистрация: 27.09.2013
Сообщений: 6
21.10.2013, 20:09  [ТС] #9
Цитата Сообщение от ValeryS Посмотреть сообщение
а че там понимать
это переменная которая имеет два значения ИСТИНА (true) и ЛОЖЬ(false)
если условия не выполнилось( в данном случае отрицательный элемент) то она ЛОЖЬ, если выполнилось то ИСТИНА
если тебе не понятны булевы переменные то можешь ввести целочисленную и присвоить ей 1 если условие выполнилось и 0 если нет

Добавлено через 2 минуты

во первых я тебе не программу написал а подсказал идею

а во вторых

строка это и есть одномерный массив вместо summ введи одномерный массив сумм и записывай в него сумму каждой строки
Так в чем разница между if и flag в данном случае ?

Добавлено через 15 минут
Цитата Сообщение от ValeryS Посмотреть сообщение
а че там понимать
это переменная которая имеет два значения ИСТИНА (true) и ЛОЖЬ(false)
если условия не выполнилось( в данном случае отрицательный элемент) то она ЛОЖЬ, если выполнилось то ИСТИНА
если тебе не понятны булевы переменные то можешь ввести целочисленную и присвоить ей 1 если условие выполнилось и 0 если нет

Добавлено через 2 минуты

во первых я тебе не программу написал а подсказал идею

а во вторых

строка это и есть одномерный массив вместо summ введи одномерный массив сумм и записывай в него сумму каждой строки
Спасибо большое сделал как ты написал все отлично считает .
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
21.10.2013, 20:19 #10
Цитата Сообщение от por Посмотреть сообщение
ак в чем разница между if и flag в данном случае ?
ну наверно в том что if это условие и по другому не напишешь
а flag это переменная и можешь её обозвать по другому
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 20:19
Привет! Вот еще темы с ответами:

Сумма элементов между первым положительным элементом массива и последним отрицательным - C++
В одномерном целочисленном массиве( элементы массива генерируются случайным образом диапазоне от -100 до 100), подсчитать сумму элементов,...

Найти сумму элементов в строках матрицы с хотя бы одним отрицательным элементом - C++
Найти сумму элементов в строках с хотя бы одним отрицательным элементом. Код: //CeMuHaP 3. DByMepHbIE MaccuBbI. #include &lt;iostream.h&gt;...

Найти сумму элементов матрицы в строках с отрицательным элементом на главной диагонали - C++
Дана вещественная прямоугольная матрица. Найти сумму элементов в строках с отрицательным элементом на главной диагонали. Если сумма больше...

В столбцах с отрицательным элементом на главной диагонали найти сумму всех элементов - C++
В столбцах с отрицательным элементом на главной диагонали найти сумму всех элементов. Если на главной диагонали отрицательных элементов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.10.2013, 20:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru