Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++|VBasic] массивы


Автор: tr0d3r 11.12.2008, 21:14
Дан массив: {Xi},i=1...n. Найти номера начального и конечного элементов последней последовательности положительных элементов. Решение записать в [C++] и в [VBasic]

Просьба не усложнять рещение. Если можно решить так чтобы было похоже что решал студент первого курса.

Благодарю заранее.

Автор: tr0d3r 11.12.2008, 21:48
хотябы в Си помогите решить 

Автор: tr0d3r 11.12.2008, 23:19
(Дан массив: {Xi},i=1...n) 
раз так непонятно расшифрую - кол-во элементов массива неопределено, но лучще задать [20;20] или [50;50] память выделить под него.

Автор: tr0d3r 12.12.2008, 15:52
хоть какие нибудь соображения, идеи smile 
150 просмотров и ниодного ответа smile 

Автор: ALExDD 13.12.2008, 17:47
Памагу за денежку  smile 

Автор: tr0d3r 13.12.2008, 18:27
ну например массив из 20 чисел: -3, 3, 1, 0, 0, 6, 11, -1, 2, -7, 4, 8, -9, 5, 7, -6, 0, 10, 5, -2

числа последней последовательности положительных элементов:-3, 3, 1, 0, 0, 6, 11, -1, 2, -7, 4, 8, -9, 5, 7, -6, 0, 10, 5,-2 тоесть ответ [10] и [5] т.к. [-2] отрицательное

записать решение не могу, а так вижу как решать  smile 

помогите записать решение, очень прошу  smile 

Автор: Rififi 13.12.2008, 19:33
на C++, с использованием штатных средств будет так:

Код
const int arr[] = { ... };
const size_t N = sizeof(arr) / sizeof(arr[0]);

// Перегоняем массив в стандартный контейнер
// с ним работать удобнее, а без stl мне делать влом (:
typedef std::vector<int> V;
const V v(arr, arr+N);
                                
V::const_reverse_iterator begin;
    
// ищем первый с конца положительный элемент (проверяем что такое элемент вообще есть)
if ((begin = std::find_if(v.rbegin(), v.rend(), std::bind2nd(std::greater_equal<V::value_type>(), 0))) != v.rend())
{
    // индекс последнего элемента последовательности
    size_t end_pos = std::distance(v.begin(), --begin.base());
    // индекс первого элемента
    size_t begin_pos = std::distance(v.begin(), std::find_if(begin, v.rend(), std::bind2nd(std::less_equal<V::value_type>(), 0)).base());
}

Автор: tr0d3r 13.12.2008, 19:45
Цитата(tr0d3r @  11.12.2008,  21:14 Найти цитируемый пост)
Просьба не усложнять рещение. Если можно решить так чтобы было похоже что решал студент первого курса.

но всеравно спасибо smile 

еще есть смельчаки на другие варианты? наиболее простейшие  smile 

Автор: Rififi 13.12.2008, 21:43
Если можно решить так чтобы было похоже что решал студент первого курса.
ну дык как раз примерно такое я и делал на первом курсе smile

Автор: tr0d3r 13.12.2008, 21:47
до этого наверно мы еще дошли, у нас препод ваще без понятия как нужно подавать информацию, он даже не педагог!!!

Автор: taiven 13.12.2008, 22:04
Код

#include <iostream>
#define SIZE 20

int main()
{
    int index = 0;
    int arr[SIZE] = {-3, 3, 1, 0, 0, 6, 11, -1, 2, -7, 4, 8, -9, 5, 7, -6, 0, 10, 5, -2};
    
    for(index = SIZE-1; index >= 0; index--)
    {
        if(arr[index] > 0)
        {
            std::cout << "number: " << index+1 << " value: [" << arr[index] << "]\n";
            for(; index >= 0; index--)
            {
                if(arr[index] <= 0)
                { 
                    std::cout << "number: " << index+2 << " value: [" << arr[index+1] << "]\n"; 
                    break; 
                }
            }
            break;    
        }
    }
    return 0;
}


Автор: tr0d3r 14.12.2008, 00:21
taiven, спасибо, но этот массив я брал за пример просто, а в условии задачи он не определен, тость может быть и 20 и 50 и 1000 чисел, а из них нужго выбрать 2 числа положительных (одно последннее положительное число, а другое, тоже положительное которое стоит перед ним.

вот например: *начало масиива*.................123, -543, 476, 0, 970
ответ:                                                                               476     970

Автор: tr0d3r 16.12.2008, 01:54
кто нибудь может упростить решение? чем проще тем лучще smile 

Автор: Dmi3ev 16.12.2008, 03:53
я так понял надо найти последний и предпоследний элемент???
если так, то:
Код

//---------------------------------------------------------------------------

#include <iostream.h>

//---------------------------------------------------------------------------

int main()
{
int *m,*bm,*em;
int r, k=0;
cout<<"Enter range of m: "<<endl;
cin>>r;
m=new int[r];
bm=em=&r;
for (int i=0; i<r; i++)
 {
  cout<<"Enter M["<<i+1<<"]=";
  cin>>*(m+i);
  if (*(m+i)>0)
   k++;
  cout<<endl;
 }
if (k<2)
 {
  cout<<"There are no two elements which >0!";
  return 0;
 }
for (int i=0; i<r; i++)
 {
  if (*(m+i)>0)
   {
    bm=em;
    em=(m+i);
   }
 }
cout<<"Last1: "<<*bm<<" Last2: "<<*em;
return 0;
}
//---------------------------------------------------------------------------

короче, такое точно делают на первом курсе, здесь ваще ничего не используется, массив сколько напишете размерность, столько и будет (главное, не за***сь заполнять, если 1000 напишешь, как ты указал в объяснении)
Rififi просто слишком хорошо о Вас думал))) поэтому вектора ввел, хотя это проще. Когда начнете программировать, поймете...
я тут следовал вашей логики, хотя задание понял по-другому, но Вам виднее, что там хотят.
сначала я думал, что первый и последний элемент положительной последовательности это:
при таких раскладах: 1,2,3,4,5,6,7 это 1 и 7
а при таких:
Цитата

вот например: *начало масиива*.................123, -543, 476, 0, 970

970 и 970, те он же первый и он же последний элемент положительной последовательности (последней). но у вас написано 476, 970, так что... удачи козерогам... (так первокурсников называют, не обижайся). учись, студент. удачи....

Автор: tr0d3r 16.12.2008, 11:57
Цитата(tr0d3r @  11.12.2008,  21:14 Найти цитируемый пост)
Найти номера начального и конечного элементов последней последовательности положительных элементов

но спасибо Dmi3ev, очень упростил! огромное приогромное спасибо! но.... вопрос открыт smile 

Автор: tr0d3r 17.12.2008, 05:07
Цитата(tr0d3r @  11.12.2008,  21:14 Найти цитируемый пост)
Дан массив неопределенной длины. Найти номера начального и конечного элементов последней последовательности положительных элементов. Решение записать в [C++] и в [VBasic]


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