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

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

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

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

20.10.2013, 23:08. Просмотров 424. Ответов 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++
Найти сумму элементов матрицы в строках с отрицательным элементом на главной диагонали C++
Для заданной матрицы A(N, N) найти сумму элементов, расположенных в строках с отрицательным элементом на главной диагонали C++
Сумма элементов между первым положительным элементом массива и последним отрицательным C++
Найти сумму элементов масива, которые находятся до максимального элемента C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
414 / 414 / 85
Регистрация: 28.11.2010
Сообщений: 1,175
Завершенные тесты: 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Эксперт С++
 Аватар для MrGluck
6210 / 3455 / 423
Регистрация: 29.11.2010
Сообщений: 9,168
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
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
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
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
21.10.2013, 01:02     Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом #7
Цитата Сообщение от por Посмотреть сообщение
а без flag реально сделать , т.к в нем я не особо понимаю .
а че там понимать
это переменная которая имеет два значения ИСТИНА (true) и ЛОЖЬ(false)
если условия не выполнилось( в данном случае отрицательный элемент) то она ЛОЖЬ, если выполнилось то ИСТИНА
если тебе не понятны булевы переменные то можешь ввести целочисленную и присвоить ей 1 если условие выполнилось и 0 если нет

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

а во вторых
Цитата Сообщение от por Посмотреть сообщение
В общем мне нужно найти в каждой строке суму элементов , которые стоят перед последним отрицательным элементом .
строка это и есть одномерный массив вместо summ введи одномерный массив сумм и записывай в него сумму каждой строки
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6210 / 3455 / 423
Регистрация: 29.11.2010
Сообщений: 9,168
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 введи одномерный массив сумм и записывай в него сумму каждой строки
Спасибо большое сделал как ты написал все отлично считает .
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2013, 20:19     Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6446 / 4912 / 451
Регистрация: 14.02.2011
Сообщений: 16,283
21.10.2013, 20:19     Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом #10
Цитата Сообщение от por Посмотреть сообщение
ак в чем разница между if и flag в данном случае ?
ну наверно в том что if это условие и по другому не напишешь
а flag это переменная и можешь её обозвать по другому
Yandex
Объявления
21.10.2013, 20:19     Задача с массивом, нужно найти сумму элементов которые находятся перед последним отрицательным элементом
Ответ Создать тему
Опции темы

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