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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2009, 23:09   #1
Helen09
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 11
По умолчанию C++ Одномерный массив.

У меня написана программа, вычисляющая:
1) номер максимального по модулю элемента массива;
2) сумму элементов массива, расположенных после первого положительного элемента:

Код:
#include <iostream>
#include <math.h>
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;

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;

  cin.get();
  return 0;
}
Помогите пожалуйста преобразовать массив таким образом, чтобы сначала располагались все элементы, целая
часть которых лежит в интервале [a, b], а потом все остальные.

Последний раз редактировалось Sazary; 10.12.2009 в 21:29.
Helen09 вне форума Ответить с цитированием
Старый 08.12.2009, 02:20   #2
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Пиши с помощью процедур, нагляднее будет!
пример первого задания --->
Код:
double first(double arr[], int len)
{
	double index = 0;
	int index_max = 0;

	for(int i = 0; i < len; i++) {
		if(arr[i] >= arr[index_max]) {
			index_max = i;
			index = index_max;}}

	return index;
}
для вопроса о элементах между a и b: используй условия

Код:
for (int i = 0; i<len; i++){
if ((arr[i]<b)&&(arr[i]>a)) {
tmp = arr[i-1];
arr[i] = arr[i-1];
arr[i-1] = tmp;
}
}
и переставляй их местами пока не кончится массив...
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 08.12.2009, 19:01   #3
btf
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 25
По умолчанию

bpystep, для нам же надо найти числа целая часть которых лежит на [a,b], а если у меня, например число, 15.3 и я ищу числа на [13..15]то 15.3 на не перенесет в начало.
я бы делал так:
Код:
#include <iostream.h>
#pragma argsused
int main(int argc, char* argv[])
{double mas[10];//массив из 10 вещественных элементов
cout<<"Vvedite elementy massiva \n";//предлогаем ввести элементы массива
for(int i=0;i<10;i++)
{
cin>>mas[i];//запоминаем их
}
double a,b,tmp;//а и b интервал, tmp переменная для перестановки местами элементы
cout<<"Interval ot ";cin>>a;//предлогаем ввеести а, после чего запоминаем значение
cout<<" do ";cin>>b;//аналогично делаем с b

for(int i=0;i<10;i++)
{
for(int j=i+1;j<10;j++)
{
if(int(mas[j])>=a&&int(mas[j])<=b)//если целая часть лежит в интервале
{
tmp=mas[j];//переменной tmp присваиваем значение следующего после i-того элемента
mas[j]=mas[i];//присваиваем ему значение i-того элемента
mas[i]=tmp;//i-тому присваиваем значение j-того
}
}
cout<<mas[i]<<" ";//выводим массив
}
cout<<"\n";//переходим на новую строку
system("pause");
return 0;
}
Helen09,исходя из последенего задания, у Вас массив вещественных чисел, а Вы объявляете как целых:int arr[] = {-10, -9, -8, -7, -6, 1, 2, 3, 4, 11};
btf вне форума Ответить с цитированием
Старый 08.12.2009, 20:18   #4
Helen09
Пользователь
 
Регистрация: 07.12.2009
Сообщений: 11
По умолчанию

Спасибо большое.
А на что конкретно влияет мое обьявление массива?
Helen09 вне форума Ответить с цитированием
Старый 08.12.2009, 21:14   #5
btf
Пользователь
 
Регистрация: 03.12.2009
Сообщений: 25
По умолчанию

на то, что у Вас в массиве не будет дробных чисел, т.к. тип int целочисленный, а по последнему заданию должны быть, следовательно надо использовать тип поддерживающий работу с вещественными(дробными) числами.
btf вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив (СИ) ManInBlack Помощь студентам 8 08.06.2013 17:43
Одномерный массив С++ Tat-ka Помощь студентам 4 21.11.2009 23:00
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
одномерный массив.... malova Помощь студентам 3 27.05.2009 20:22