1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
1

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

26.10.2013, 16:53. Показов 8920. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как найти номер последнего отрицательного элемента?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.10.2013, 16:53
Ответы с готовыми решениями:

Найти номер последнего отрицательного элемента массива
# include <iostream> using namespace std; void main () { int i=0; int p; setlocale(LC_ALL,...

Найти номер последнего отрицательного элемента в массиве
Найти номер последнего отрицательного элемента в массиве. Формат входных данных В первой строке...

В массиве N элементов найти номер последнего отрицательного элемента
В массиве N элементов найти номер последнего отрицательного элемента. Значение элемента и его...

Найти номер последнего из столбцов матрицы, не содержащих ни одного отрицательного элемента
Подскажите, пожалуйста, как реализовать: Номер последнего из столбцов, не содержащих ни одного...

21
Модератор
Эксперт по электронике
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,501
26.10.2013, 16:56 2
Цитата Сообщение от metalist1925 Посмотреть сообщение
Как найти номер последнего отрицательного элемента?
очень просто
последний- это первый с конца
обходи массив с конца и проверяй значения
как только появился отрицательный то выходи из цикла, это и будет последний отрицательный
1
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 16:57  [ТС] 3
а кодом можешь помочь?
0
25 / 11 / 4
Регистрация: 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;
}
}
0
Модератор
Эксперт по электронике
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,501
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 если отрицательных в массиве нет
0
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;
}
0
25 / 11 / 4
Регистрация: 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;
0
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 17:53  [ТС] 8
Спасибо, что исправили.а с блок-схемой алгоритма можете помочь?
0
25 / 11 / 4
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 17:55 9
Цитата Сообщение от metalist1925 Посмотреть сообщение
Спасибо, что исправили.а с блок-схемой алгоритма можете помочь?
блок схема нужна?
могу описать, но рисовать влом)
Блок схема для 10 тоже или для n?
0
1 / 1 / 0
Регистрация: 17.05.2011
Сообщений: 134
26.10.2013, 17:57  [ТС] 10
Хоть так пусть будет.
0
25 / 11 / 4
Регистрация: 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] и возвращаемся к условию;
0
25 / 11 / 4
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 18:07 12
Массив: Как найти номер последнего отрицательного элемента?

ой, там в условии "a[i]<0?"
описался,прошу прощения)
0
Модератор
Эксперт по электронике
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,501
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;
}
0
25 / 11 / 4
Регистрация: 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;
А по поводу доп переменной - удобнее счетчик имеет внутри цикла отдельно,а результат отдельно.
А компилятор вам выдаст ошибку инициализации.
0
Модератор
Эксперт по электронике
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,501
26.10.2013, 19:50 15
Цитата Сообщение от EzCoding Посмотреть сообщение
У вас ответ хранится в I, а вы выводите N;
а это не у меня
это я код ТС скопировал поправил, а там не заметил
спасибо что обратил внимание
Цитата Сообщение от EzCoding Посмотреть сообщение
А компилятор вам выдаст ошибку инициализации.
это почему еще
Цитата Сообщение от EzCoding Посмотреть сообщение
А по поводу доп переменной - удобнее счетчик имеет внутри цикла отдельно,а результат отдельно.
насчет удобства вопрос спорный
"Не плодите сущности, без необходимости" (с)«Бритва О́ккама»
оптимизировать нужно учится на уровне алгоритмов, здесь у тебя проигрыш и в скорости, лишнее присвоение, и в памяти,лишняя переменная
можно вообще было вывести прямо в цикле сообщение если нашлось заданное число
0
25 / 11 / 4
Регистрация: 26.10.2013
Сообщений: 85
Записей в блоге: 1
26.10.2013, 20:02 16
Цитата Сообщение от ValeryS Посмотреть сообщение
а это не у меня
это я код ТС скопировал поправил, а там не заметил
спасибо что обратил внимание

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

насчет удобства вопрос спорный
"Не плодите сущности, без необходимости" (с)«Бритва О́ккама»
оптимизировать нужно учится на уровне алгоритмов, здесь у тебя проигрыш и в скорости, лишнее присвоение, и в памяти,лишняя переменная
можно вообще было вывести прямо в цикле сообщение если нашлось заданное число
Ну если убрать N- будет норм.
Да, насчет вывода в цикле бесспорно удобнее. Не понимаю зачем вы делаете проверку i>-1 если можно проверять i>=0;
А если выводить вне цикла - лучше иметь счетчик отдельно и отдельно переменную вывода, счетчик может понадобится еще для каких то подзадач. В целом насчет оптимизации вы правы.
0
Модератор
Эксперт по электронике
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,501
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
0
25 / 11 / 4
Регистрация: 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;
}
0
Модератор
Эксперт по электронике
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,501
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;
1
25 / 11 / 4
Регистрация: 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;
Обычно в таких задачах указаны лимиты, а с динамическими массивами у меня всегда какие-нибудь ошибки вылезают.
Но спасибо что исправили) Буду знать как такое использовать)
0
26.10.2013, 23:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2013, 23:42
Помогаю со студенческими работами здесь

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

Для каждой строки найти номер первого отрицательного элемента и записать данные в новый массив
Решите пожалуйста. Завтра надо сдать. Для каждой строки найти номер первого отрицательного...

Найти номер последнего максимального элемента последовательности используя одномерный массив
2 Задача:Дана последовательность из N действительных чисел найти номер последнего максимального...

Для каждой строки матрицы найти номер первого отрицательного элемента, и записать данные в новый массив
Дан массив размером n*n, элементы которого целые числа. Для каждой строки найти номер первого...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru