Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2013, 12:11   #1
iLeshii
 
Регистрация: 03.12.2013
Сообщений: 5
По умолчанию C++ В одномерном массиве, состоящем из n вещественных элементов, вычислить:

Помогите пожалуйста написать программу на С++

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) минимальный элемент массива;
б) сумму элементов массива, расположенных между первым и последним положительными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные.
iLeshii вне форума Ответить с цитированием
Старый 03.12.2013, 12:41   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

баян пребаян.
в гугле бан?
стихи прям...
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 03.12.2013, 13:04   #3
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от iLeshii Посмотреть сообщение
Помогите пожалуйста написать программу на С++

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) минимальный элемент массива;
б) сумму элементов массива, расположенных между первым и последним положительными элементами.
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные.
Третье задание попытайся сделать сам. Первые два набросал примерно:

Код:
#include <iostream.h>

int n;
float sum;
bool find_first;
//---------------------------------------------------------------------------

int main()
{
find_first = false;
sum=0;
cin >> n;
if (n>0){
float *a = new float[n];
for (int i=0; i<n; i++)
                cin >> a[i];
float min = a[0];
for (int i=0; i<n; i++)
         if (min>a[i]) min=a[i];

cout << "Min element: " << min << endl;

for (int i=0; i<n; i++) {
  if (a[i]>0){
     sum+=a[i];
     find_first=true;
  }
  else if (find_first){
     break;
  }
  }

cout << "Sum: " << sum << endl;
}
else
        cout << "Error: something wrong with your array"<<endl;

        return 0;
}
//---------------------------------------------------------------------------
Не бойтесь разбираться. Все задания простые.

Если интересно, то для третьего бы задания я объявил еще счетчик какой-нибудь(чтобы считать от нуля на каком я сейчас элементе нахожусь). И если в цикле от 0 до длины_массива мне встретится 0, то я поменяю элемент под этим номером на тот, чей я храню в "счетчике". Думаю как-то так...
Baburek вне форума Ответить с цитированием
Старый 03.12.2013, 13:06   #4
iLeshii
 
Регистрация: 03.12.2013
Сообщений: 5
По умолчанию

Задания а и б я нашел но вот с последним проблема: преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные
iLeshii вне форума Ответить с цитированием
Старый 03.12.2013, 13:39   #5
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от iLeshii Посмотреть сообщение
Задания а и б я нашел но вот с последним проблема: преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом — все остальные
В чем конкретно проблема? Скиньте - давайте разберем. Идея была описана чуть выше
Baburek вне форума Ответить с цитированием
Старый 03.12.2013, 13:41   #6
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

с доп массивом можно так:
Код:
цикл от 0 до N по i
   если a[i]!= 0 ТО
      b[j]=a[i] j=j+1;
   конец если
конец цикла
цикл от 0 до j-1 по i
a[i]=0
конец цикла
цикл от j до N по i
a[i]=b[i-j]
конец цикла
тупо в лоб =)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 03.12.2013, 13:54   #7
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

Может и мне попробовать?

Код:
наше_положение_в_массиве = 0; //это для нулей наших состояние
 
цикл от i=0 до N
 если (нашли в массиве 0){ 
    то меняем местами A[i] с A[наше_положение_в_массиве];
    наше_положение_в_массиве++; // т.к. предыдущее положение уже точно с нулем
}

//выводим массив
Baburek вне форума Ответить с цитированием
Старый 03.12.2013, 14:20   #8
iLeshii
 
Регистрация: 03.12.2013
Сообщений: 5
По умолчанию

Всем огромное спасибо за помощь! Все нашел, единственное если что то где то можно подправить, сделать лучше то посоветуйте

Код:
#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
 const int size = 10;
 double arr[size];
 double sum;
 double min;
 int i,j;

// формирование массива
 for (i=0; i<size; i++)
 {
        cout << "arr[" << i << "]=";
  cin >> arr[i];
 }

// эхо-печать массива
    cout << "Введенный массив" << endl;
 for (i=0; i<size; i++)
 {
  cout << i << " " << setprecision(3) << arr[i] << endl;
 }

// поиск минимального элемента
    for (i=0, min=arr[0]; i<size; i++)
        if (arr[i]<min)
            min = arr[i];

// поиск первого положительного элемента
    for (i=0; i<size && arr[i]<=0; i++)
        ;
    sum = 0; // если нет вообще положительных элементов

//поиск последнего положительного элемента
    if ((i<size-2) && (arr[i]>0)) // а есть ли смысл?
    {
        for (j=size-1; j>=0 && arr[j]<=0; j--)
            ;
        if ((arr[j]>0) && (--j>i))
            while (j>i)
            {
// сумма элементов между первым и последним положительным
                sum+=arr[j--];
            }
    }

    for (i=j=size-1; i>=0;--i)
    {
        if (arr[i]!=0)
        {
            if (i!=j)
                arr[j]=arr[i];
            --j;
        }
    }
    for (i=0;i<=j;i++) // заполним начало нулями
        arr[i]=0;

// печать нового массива
    cout << endl;
    cout << "Новый массив" << endl;
 for (i=0; i<size; i++)
 {
  cout << i << " " << setprecision(3) << arr[i] << endl;
 }
    cout << "Минимальный элемент =" << setprecision(3) << min << endl;
    cout << "Сумма между первым и последним положительными элементами = ";
    cout << setprecision(3);
    cout << sum << endl;
	system("pause");
    return 0;
}
iLeshii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В одномерном массиве, состоящем из 10 вещественных элементов вычислить(c++) 3e6p Помощь студентам 5 19.12.2012 11:18
(C#) В одномерном массиве, состоящем из n вещественных элементов, вычислить Nekro95 Помощь студентам 2 06.11.2012 15:11
В одномерном массиве, состоящем из n вещественных элементов, вычислить: Дмитрий222 Помощь студентам 3 01.03.2012 15:14
в одномерном массиве состоящем из п вещественных элементов вычислить: Lyonya-myshin C++ Builder 3 13.06.2011 20:40
С++ В одномерном массиве, состоящем из n-вещественных элементов. вычислить: uropb992 Помощь студентам 1 24.05.2010 20:02