задача состоит в том, чтобы найти позиции первого и последнего отр.элемента в одномерном массиве. для сохранения их позиций созданы 2 переменные ibeg и iend. по моей мысли для нахождения первого отр.элемента необходимо пройти массив прямо по возрастанию, для нахождения последнего - в обратном порядке. но по неясным для меня причинам при выводе значений номеров этих элементов первый отр. выводится, как последний, а последний, соответственно, как первый. объясните, пожалуйста, почему так получается и как получить верный результат, чтобы всё было на своих местах? спасибо!
в последних строках своего письма привожу код.
код:
| Код | #include<iostream> #include<windows.h> using namespace std; char* Rus(const char* text); int main(){ short i,n; //вводим массив cout<<Rus("Введите размерность массива: "); cin>>n; float *a= new float [n]; cout<<Rus("Введите массив: "); for(i=0;i<n;i++) cin>>*(a+i); cout<<"---------------------------"<<endl; short ibeg=0, iend=n; bool flag_neg=false; for(i=0;i<n;i++){ if(a[i]<0) ibeg=i; flag_neg=true; } for(i=n;i>=0;i--) if(a[i]<0) iend=i; cout<<"---------------------------"<<endl; if(flag_neg){ cout<<Rus("Первый отрицательный элемент находится на ")<<ibeg; cout<<Rus(" месте, последний на ")<<iend; cout<<Rus(" месте.")<<endl; } else cout<<Rus("Отрицательных элементов не найдено!")<<endl;
return 0; } char bufRus[256]; char* Rus(const char* text){ CharToOem(text, bufRus); return bufRus; }
|
|