Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++|VBasic] массивы 
:(
    Опции темы
tr0d3r
  Дата 11.12.2008, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



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

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

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

Это сообщение отредактировал(а) tr0d3r - 11.12.2008, 21:40
PM MAIL ICQ   Вверх
tr0d3r
Дата 11.12.2008, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



хотябы в Си помогите решить 
PM MAIL ICQ   Вверх
tr0d3r
Дата 11.12.2008, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



(Дан массив: {Xi},i=1...n) 
раз так непонятно расшифрую - кол-во элементов массива неопределено, но лучще задать [20;20] или [50;50] память выделить под него.
PM MAIL ICQ   Вверх
tr0d3r
Дата 12.12.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



хоть какие нибудь соображения, идеи smile 
150 просмотров и ниодного ответа smile 
PM MAIL ICQ   Вверх
ALExDD
Дата 13.12.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2008

Репутация: нет
Всего: нет



Памагу за денежку  smile 
PM MAIL   Вверх
tr0d3r
  Дата 13.12.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



ну например массив из 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 

Это сообщение отредактировал(а) tr0d3r - 13.12.2008, 18:32
PM MAIL ICQ   Вверх
Rififi
Дата 13.12.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



на 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());
}

PM MAIL   Вверх
tr0d3r
Дата 13.12.2008, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



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

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

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

Это сообщение отредактировал(а) tr0d3r - 13.12.2008, 19:47
PM MAIL ICQ   Вверх
Rififi
Дата 13.12.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



Если можно решить так чтобы было похоже что решал студент первого курса.
ну дык как раз примерно такое я и делал на первом курсе smile
PM MAIL   Вверх
tr0d3r
Дата 13.12.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



до этого наверно мы еще дошли, у нас препод ваще без понятия как нужно подавать информацию, он даже не педагог!!!
PM MAIL ICQ   Вверх
taiven
Дата 13.12.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 302
Регистрация: 30.6.2008

Репутация: 4
Всего: 9



Код

#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;
}


PM   Вверх
tr0d3r
Дата 14.12.2008, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



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

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

Это сообщение отредактировал(а) tr0d3r - 14.12.2008, 00:22
PM MAIL ICQ   Вверх
tr0d3r
  Дата 16.12.2008, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



кто нибудь может упростить решение? чем проще тем лучще smile 
PM MAIL ICQ   Вверх
Dmi3ev
Дата 16.12.2008, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

Репутация: 5
Всего: 41



я так понял надо найти последний и предпоследний элемент???
если так, то:
Код

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

#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, так что... удачи козерогам... (так первокурсников называют, не обижайся). учись, студент. удачи....

Это сообщение отредактировал(а) Dmi3ev - 16.12.2008, 03:54


--------------------

PM MAIL   Вверх
tr0d3r
Дата 16.12.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.12.2008

Репутация: нет
Всего: нет



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

но спасибо Dmi3ev, очень упростил! огромное приогромное спасибо! но.... вопрос открыт smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.