Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > поиск первого и последнего отр.элемента в массиве


Автор: LeD4eG 12.10.2010, 19:41
задача состоит в том, чтобы найти позиции первого и последнего отр.элемента в одномерном массиве. для сохранения их позиций созданы 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;
}

Автор: Crafty 12.10.2010, 19:59
LeD4eG,  в условия  if(a[i]<0) добавьте break, тогда выход из цикла будет когда встретиться первое отрицательно число.

Автор: LeD4eG 12.10.2010, 20:06
вот же тв-ма! smile 
тема закрыта!

Автор: LeD4eG 12.10.2010, 20:28
также необходимо в параметрах цикла на поиск последнего элемента вместо i=n, задать i=n-1, потому что размерность массива задаётся количеством элементов введённых пользователем (например 5), а номер последнего элемента будет равен не 5, а 4. в массивах индексация ведётся с нулевой позиции, то есть элементов, к примеру 5, а номера они будут иметь 0, 1, 2, 3, 4......ну это так.......я подумал мало ли кому-нить понадобиться....... smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)