Форум: Форум C++Разное
Новые темы: 00
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Обработка массива
 
 автор: Krasnodar   (27.12.2006 в 22:56)   письмо автору
 
 

В одномерном массиве состоящем из n вещественных эл-тов, вычислить:

1) номер максимального по модулю эл-та массива;
2) сумму эл-тов массива, расположенных после первого положительного эл-та.

Преобразовать массив таким образом, чтобу сначала распологались все эл-ты, целая часть которых лежит в интервале [a,b], а потом - все остальныею

  Ответить  
 
 автор: акваланг   (28.12.2006 в 13:04)   письмо автору
 
   для: Krasnodar   (27.12.2006 в 22:56)
 

STL использовать можно или это должен быть полноценный массив?

  Ответить  
 
 автор: cheops   (28.12.2006 в 13:30)   письмо автору
 
   для: Krasnodar   (27.12.2006 в 22:56)
 

Если можно использовать STL, то первую задачу можно решить следующим образом
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool absLess(int elem1, int elem2)
{
  return abs(elem1) < abs(elem2);
}

int main()
{
  // Коллекция
  vector<int> coll;
  // Итератор
  vector<int>::iterator pos;

  try
  {
    coll.push_back(1);
    coll.push_back(2);
    coll.push_back(3);
    coll.push_back(4);
    coll.push_back(-10);

    // Находим максимальный элемент
    pos = max_element(coll.begin(), coll.end(), absLess);
    // Вычисляем номер элемента в массиве
    cout << distance(coll.begin(), pos) << endl;
  }
  catch(bad_alloc)
  {
    cout << "Не удалось выделить память под коллекцию\n";
  }

  return 0;
}

  Ответить  
 
 автор: cheops   (28.12.2006 в 13:38)   письмо автору
 
   для: Krasnodar   (27.12.2006 в 22:56)
 

Вторую задачу можно было бы решить следующим образом
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
  // Коллекция
  vector<int> coll;
  // Итератор
  vector<int>::iterator pos;

  try
  {
    coll.push_back(-10);
    coll.push_back(-9);
    coll.push_back(-8);
    coll.push_back(-7);
    coll.push_back(-6);
    coll.push_back(1);
    coll.push_back(2);
    coll.push_back(3);
    coll.push_back(4);

    // Находим первый положительный элемент
    pos = find_if(coll.begin(), coll.end(), bind2nd(greater<int>(),0));
    // Вычисляем сумму элементов, после первого
    // положительного элемента
    int summ = 0;
    for(; pos != coll.end(); ++pos) summ += *pos;
    // Выводим результат
    cout << summ << endl;
  }
  catch(bad_alloc)
  {
    cout << "Не удалось выделить память под коллекцию\n";
  }

  return 0;
}

  Ответить  
 
 автор: Krasnodar   (28.12.2006 в 20:31)   письмо автору
 
   для: cheops   (28.12.2006 в 13:38)
 

а если нельзя?

вы меня конечно извините, просто я учусь заочно и мне дали такое задание... есть только книге по С++ из серии для чайников (в эл. виде)...

  Ответить  
 
 автор: cheops   (28.12.2006 в 21:16)   письмо автору
 
   для: Krasnodar   (28.12.2006 в 20:31)
 

Да, вполне может быть, что нельзя... кроме того, в учебных примерах сильно усердствовать не следует, а то преподаватель расстроится и начнёт на экзамене что-нибудь не то спрашивать :))). Если обходиться без STL (в реальной практике этого лучше избегать) то первую задачу можно решить следующим образом
#include <iostream>
#include <math>
using namespace std;

int main()
{
  int arr[] = {-10, -9, -8, -7, -6, 1, 2, 3, 4, 11};
  int max = abs(arr[0]);
  int index = 0;
  for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
  {
    if(abs(max) <= abs(arr[i]))
    {
      max = abs(arr[i]);
      index = i;
    }
  }
  cout << "Макс. значение -        " << max << endl;
  cout << "Индекс макс. значения - " << index << endl;

  return 0;
}

  Ответить  
 
 автор: cheops   (28.12.2006 в 21:20)   письмо автору
 
   для: Krasnodar   (28.12.2006 в 20:31)
 

Вторая задача, соответственно, может быть решена следующим образом
#include <iostream>
using namespace std;

int main()
{
  int arr[] = {-10, -9, -8, -7, -6, 1, 2, 3, 4};
  bool positive = false;
  int summ = 0;
  for(int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
  {
    if(arr[i] >= 0) positive = true;
    if(positive) summ += arr[i];
  }
  cout << "Сумма элементов массива - " << summ << endl;

  return 0;
}

  Ответить  
 
 автор: Krasnodar   (28.12.2006 в 21:54)   письмо автору
 
   для: cheops   (28.12.2006 в 21:20)
 

почему-то в строке

using namespace std;


выдает ошибку и в первом и во втором случае

  Ответить  
 
 автор: cheops   (28.12.2006 в 21:58)   письмо автору
 
   для: Krasnodar   (28.12.2006 в 21:54)
 

В какой среде программируете?

  Ответить  
 
 автор: Krasnodar   (28.12.2006 в 22:07)   письмо автору
 
   для: cheops   (28.12.2006 в 21:58)
 

Borland C++ 5.02

Там правда проблема с кодировкой, рсский язык не воспринимает.... как ее можно решить???? подскажите пожалйста

  Ответить  
 
 автор: cheops   (28.12.2006 в 22:10)   письмо автору
 
   для: Krasnodar   (28.12.2006 в 22:07)
 

Хм... а он какого года выпуска? Попробуйте убрать строку
using namespace std;

Что происходит?

  Ответить  
 
 автор: Krasnodar   (28.12.2006 в 22:18)   письмо автору
 
   для: cheops   (28.12.2006 в 22:10)
 

запускается... работает...
насчет года не знаю, я его в институте взял.....

  Ответить  
 
 автор: cheops   (28.12.2006 в 22:39)   письмо автору
 
   для: Krasnodar   (28.12.2006 в 22:18)
 

Ну скорее всего, этот компилятор не поддерживает стандарт C++ полностью, просто убирайте из моих листингов объявление стандартного пространства имён
using namespace std;

  Ответить  
 
 автор: Krasnodar   (28.12.2006 в 22:54)   письмо автору
 
   для: cheops   (28.12.2006 в 22:39)
 

Раз пойду на рынок, так возьму сразу и Borland... какая сейчас стабильная, хорошая версия и какую лучше брать C++ Builder?

  Ответить  
 
 автор: cheops   (28.12.2006 в 23:05)   письмо автору
 
   для: Krasnodar   (28.12.2006 в 22:54)
 

Сейчас распространение получает C++ BuilderX 1.0 Enterprise, но я сам лично не пробывал, всё ещё на C++ Builder 6.0 работаю (поэтому и помочь могу больше всех с этой версией :). Если будете брать DVD-диск на нём скорее всего обе версии окажутся.

  Ответить  
 
 автор: abaza   (19.11.2009 в 23:34)
 
   для: cheops   (28.12.2006 в 21:20)
 

cheops, вторая задача неправильная, она считает сумму начиная с первого положительного элемента, а должна считать после

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования