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

Массив: Как найти номер последнего отрицательного элемента? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
metalist1925
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 16:53     Массив: Как найти номер последнего отрицательного элемента? #1
Как найти номер последнего отрицательного элемента?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 16:53     Массив: Как найти номер последнего отрицательного элемента?
Посмотрите здесь:

Найти величину и номер первого отрицательного и последнего положительного элементов в массиве C++
C++ Найти значение последнего отрицательного элемента
Найти номер последнего отрицательного элемента массива C++
Найти сумму элементов, расположенных правее последнего отрицательного элемента C++
C++ Для каждого столбца массива найти номер последнего нечетного элемента и записать данные в новый массив
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
26.10.2013, 16:56     Массив: Как найти номер последнего отрицательного элемента? #2
Цитата Сообщение от metalist1925 Посмотреть сообщение
Как найти номер последнего отрицательного элемента?
очень просто
последний- это первый с конца
обходи массив с конца и проверяй значения
как только появился отрицательный то выходи из цикла, это и будет последний отрицательный
metalist1925
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 16:57  [ТС]     Массив: Как найти номер последнего отрицательного элемента? #3
а кодом можешь помочь?
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 17:01     Массив: Как найти номер последнего отрицательного элемента? #4
Будем считать что массив длинной N заполнен.
C++
1
2
3
4
5
6
7
8
for (int i=n; i>0; i--)
{
if (massive[i] < 0)
{
 cout<< massive[i]; // здесь вместо cout можно присвоить глобальной переменой значение i;
 break;
}
}
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
26.10.2013, 17:07     Массив: Как найти номер последнего отрицательного элемента? #5
Цитата Сообщение от EzCoding Посмотреть сообщение
for (int i=n; i>0; i--)
а что нулевой( первый) элемент не будем проверять?
Цитата Сообщение от metalist1925 Посмотреть сообщение
а кодом можешь помочь?
примерно так
C++
1
2
3
4
int i;
for(i=n-1;i>-1;i--)
  if( A[i]<0)
    break;
после цикла в i индекс последнего отрицательного элемента или -1 если отрицательных в массиве нет
metalist1925
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 17:38  [ТС]     Массив: Как найти номер последнего отрицательного элемента? #6
Массив из 10 вещественных чисел задан случайным образом.Найти номер последнего отрицательного элемента.
Помогите пожалуйста с кодом.Исправьте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
  const n=10;
  int a[n]={-1,5,7,4,-3,0,9,-7,2,0},i,N;
    for(i=n-1;i>-1;i--)
        if( a[i]<0)
        i=N;
    cout <<"Nomer elementa:"<<N;
  getch ();
  return 0;
}
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 17:49     Массив: Как найти номер последнего отрицательного элемента? #7
Цитата Сообщение от metalist1925 Посмотреть сообщение
Массив из 10 вещественных чисел задан случайным образом.Найти номер последнего отрицательного элемента.
Помогите пожалуйста с кодом.Исправьте.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
  const int n=10;
  int a[n]={-1,5,7,4,-3,0,9,-7,2,0};
  int N=0;
    for(int i=n-1; i>=0; i--)
        {
        if( a[i]<0) 
        {
            N=i;
            break;
        }
        }
    cout <<"Nomer elementa:"<<N;
  getch ();
  return 0;
}
На данном массиве выведет 7, если нужно вывести номер учитывая что нумерация с 1ого элемента - cout <<"Nomer elementa:"<<N+1;
metalist1925
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 17:53  [ТС]     Массив: Как найти номер последнего отрицательного элемента? #8
Спасибо, что исправили.а с блок-схемой алгоритма можете помочь?
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 17:55     Массив: Как найти номер последнего отрицательного элемента? #9
Цитата Сообщение от metalist1925 Посмотреть сообщение
Спасибо, что исправили.а с блок-схемой алгоритма можете помочь?
блок схема нужна?
могу описать, но рисовать влом)
Блок схема для 10 тоже или для n?
metalist1925
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 17:57  [ТС]     Массив: Как найти номер последнего отрицательного элемента? #10
Хоть так пусть будет.
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 18:00     Массив: Как найти номер последнего отрицательного элемента? #11
Цитата Сообщение от metalist1925 Посмотреть сообщение
Хоть так пусть будет.
Начало -> Ввод [a1, a2, a3, a4, a5, a6, a7, a8, a9, a10] -> Условие [ i=10; если a[i] < 0 ] - (Условие выполняется)[Вывод i]; Иначе (условие не выполняется) [i=i-1] и возвращаемся к условию;
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 18:07     Массив: Как найти номер последнего отрицательного элемента? #12
Массив: Как найти номер последнего отрицательного элемента?
ой, там в условии "a[i]<0?"
описался,прошу прощения)
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
26.10.2013, 18:47     Массив: Как найти номер последнего отрицательного элемента? #13
Цитата Сообщение от EzCoding Посмотреть сообщение
int N=0;
если нет ни одного отрицательного элемента и если отрицательный лежит в первой(нулевой) ячейке
результат будет одинаков
и зачем вводить дополнительную переменную?

Добавлено через 4 минуты
Цитата Сообщение от metalist1925 Посмотреть сообщение
i=N;
cout <<"Nomer elementa:"<<N;
и зачем ты в i записываешь N?
вот твой код поправленный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
 const n=10;
 int a[n]={-1,5,7,4,-3,0,9,-7,2,0},i,N;
  for(i=n-1;i>-1;i--)
      if( a[i]<0)
        break;
 
 if(i<0)
   cout <<"None";
 else
   cout <<"Nomer elementa:"<<N;
 
 getch ();
 return 0;
}
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 19:30     Массив: Как найти номер последнего отрицательного элемента? #14
Цитата Сообщение от ValeryS Посмотреть сообщение
если нет ни одного отрицательного элемента и если отрицательный лежит в первой(нулевой) ячейке
результат будет одинаков
и зачем вводить дополнительную переменную?

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

и зачем ты в i записываешь N?
вот твой код поправленный
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
 const n=10;
 int a[n]={-1,5,7,4,-3,0,9,-7,2,0},i,N;
  for(i=n-1;i>-1;i--)
      if( a[i]<0)
        break;
 
 if(i<0)
   cout <<"None";
 else
   cout <<"Nomer elementa:"<<N;
 
 getch ();
 return 0;
}
У вас ответ хранится в I, а вы выводите N;
А по поводу доп переменной - удобнее счетчик имеет внутри цикла отдельно,а результат отдельно.
А компилятор вам выдаст ошибку инициализации.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
26.10.2013, 19:50     Массив: Как найти номер последнего отрицательного элемента? #15
Цитата Сообщение от EzCoding Посмотреть сообщение
У вас ответ хранится в I, а вы выводите N;
а это не у меня
это я код ТС скопировал поправил, а там не заметил
спасибо что обратил внимание
Цитата Сообщение от EzCoding Посмотреть сообщение
А компилятор вам выдаст ошибку инициализации.
это почему еще
Цитата Сообщение от EzCoding Посмотреть сообщение
А по поводу доп переменной - удобнее счетчик имеет внутри цикла отдельно,а результат отдельно.
насчет удобства вопрос спорный
"Не плодите сущности, без необходимости" (с)«Бритва О́ккама»
оптимизировать нужно учится на уровне алгоритмов, здесь у тебя проигрыш и в скорости, лишнее присвоение, и в памяти,лишняя переменная
можно вообще было вывести прямо в цикле сообщение если нашлось заданное число
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 20:02     Массив: Как найти номер последнего отрицательного элемента? #16
Цитата Сообщение от ValeryS Посмотреть сообщение
а это не у меня
это я код ТС скопировал поправил, а там не заметил
спасибо что обратил внимание

это почему еще

насчет удобства вопрос спорный
"Не плодите сущности, без необходимости" (с)«Бритва О́ккама»
оптимизировать нужно учится на уровне алгоритмов, здесь у тебя проигрыш и в скорости, лишнее присвоение, и в памяти,лишняя переменная
можно вообще было вывести прямо в цикле сообщение если нашлось заданное число
Ну если убрать N- будет норм.
Да, насчет вывода в цикле бесспорно удобнее. Не понимаю зачем вы делаете проверку i>-1 если можно проверять i>=0;
А если выводить вне цикла - лучше иметь счетчик отдельно и отдельно переменную вывода, счетчик может понадобится еще для каких то подзадач. В целом насчет оптимизации вы правы.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
26.10.2013, 21:41     Массив: Как найти номер последнего отрицательного элемента? #17
Цитата Сообщение от EzCoding Посмотреть сообщение
Ну если убрать N- будет норм.
да и при N будет нормально, ошибки не будет, просто на экран выведется мусор, переменная то не инициализирована
Цитата Сообщение от EzCoding Посмотреть сообщение
Не понимаю зачем вы делаете проверку i>-1 если можно проверять i>=0;
этот код выполнит одно и тоже но при записи i>=0 возможен вариант что будут две проверки на больше и на равно
неизвестно как компилятор откомпилирует, оптимизирует или нет, на каком камне это будет исполнятся
а так я просто показал еще один путь решения
не люблю мыслить шаблонно
Цитата Сообщение от EzCoding Посмотреть сообщение
А если выводить вне цикла - лучше иметь счетчик отдельно и отдельно переменную вывода, счетчик может понадобится еще для каких то подзадач.
так если он не нужен снаружи объявляй его в цикле
да и счетчик это не приговор
можешь в одном цикле объявить i а в другом ii
почитай Криса Касперски "Техника отладки программ без исходных кодов" "Основы хакерства" и другие книги
и поймешь что получается в исполняемом коде, хороший оптимизатор может так перелопатить твою программу, что её никто не узнает

Цитата Сообщение от Andrey027 Посмотреть сообщение
Помогите найти ошибку.
одну
Цитата Сообщение от Andrey027 Посмотреть сообщение
Microsoft visual C++ 6.0
Цитата Сообщение от Andrey027 Посмотреть сообщение
double a[5],
Цитата Сообщение от Andrey027 Посмотреть сообщение
cout<<"Vvedite razmer massiva";
зачем? он итак известен 5
а что будет, если я введу100
Цитата Сообщение от Andrey027 Посмотреть сообщение
cout<<"\nVvedite massiv:\n";
cin>>a[n];
выход за пределы массива

и где ввод всех элементов массива?
Цитата Сообщение от Andrey027 Посмотреть сообщение
for(i=0;i<n;i++)
{
cout<<"\nMassiva:\n"<<a[i];
p*=a[i];
k++;
}
и где проверка на отрицательный элемент?
k будет равно n
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 23:39     Массив: Как найти номер последнего отрицательного элемента? #18
Цитата Сообщение от ValeryS Посмотреть сообщение
да и при N будет нормально, ошибки не будет, просто на экран выведется мусор, переменная то не инициализирована

этот код выполнит одно и тоже но при записи i>=0 возможен вариант что будут две проверки на больше и на равно
неизвестно как компилятор откомпилирует, оптимизирует или нет, на каком камне это будет исполнятся
а так я просто показал еще один путь решения
не люблю мыслить шаблонно

так если он не нужен снаружи объявляй его в цикле
да и счетчик это не приговор
можешь в одном цикле объявить i а в другом ii
почитай Криса Касперски "Техника отладки программ без исходных кодов" "Основы хакерства" и другие книги
и поймешь что получается в исполняемом коде, хороший оптимизатор может так перелопатить твою программу, что её никто не узнает



одну


зачем? он итак известен 5
а что будет, если я введу100


выход за пределы массива

и где ввод всех элементов массива?

и где проверка на отрицательный элемент?
k будет равно n
спасибо, почитаю. Только начинаю программировать, поэтому много не знаю)


Код правильный:
Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
double mas [1000], result=1.0;
int n;
cout<<"Vvedite razmer massiva:";
cin>>n;
for (int j=0; j<n; j++) cin >> mas [j];
for (int i=0; i<n; i++)
  {
  if (mas [i] > 0) continue;
  else n=i;
  }
for (int g=0; g<n; g++) result=result*mas[g];
cout << "Massive do otrucatelnoro:";
for (int i=0; i<n; i++)  cout<<mas [i]<<" ";
cout << endl;
cout << "Proizvedenie :"<<result;
getch ();
return 0;
}
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
26.10.2013, 23:40     Массив: Как найти номер последнего отрицательного элемента? #19
Цитата Сообщение от EzCoding Посмотреть сообщение
double mas [1000], result=1.0;
iint n;
cout<<"Vvedite razmer massiva";
так то лучше, но если пользователь введет 100000????
выход: выделять память под массив динамически
C++
1
2
3
cout<<"Vvedite razmer massiva";
cin>>n;
double *mas=new doudle[n];
и когда не нужно удалять
C++
1
delete []mas;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.10.2013, 23:42     Массив: Как найти номер последнего отрицательного элемента?
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
EzCoding
25 / 11 / 1
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 23:42     Массив: Как найти номер последнего отрицательного элемента? #20
Цитата Сообщение от ValeryS Посмотреть сообщение
так то лучше, но если пользователь введет 100000????
выход: выделять память под массив динамически
C++
1
2
3
cout<<"Vvedite razmer massiva";
cin>>n;
double *mas=new doudle[n];
и когда не нужно удалять
C++
1
delete []mas;
Обычно в таких задачах указаны лимиты, а с динамическими массивами у меня всегда какие-нибудь ошибки вылезают.
Но спасибо что исправили) Буду знать как такое использовать)
Yandex
Объявления
26.10.2013, 23:42     Массив: Как найти номер последнего отрицательного элемента?
Ответ Создать тему
Опции темы

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