Консультация онлайн # 202241

Раздел: С / С++
Автор вопроса: semen16vzx (Посетитель)
Дата: 03.03.2022, 15:14 Консультация неактивна
Поступило ответов: 2
Здравствуйте! Прошу помощи в следующем вопросе:
Разделить код на функции.
int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Russian");
int i,n,ibeg=0,iend=0,imin; //объявление
float min=0,sum=0; //переменных
cout<<"Введите размерность n=";
cin>>n; //ввод размерности массива
cout<<"Введите элементы массива:"<<endl<<endl;
float *p=new float[n]; // объявление массива
for(i=0;i<n;i++)cin>>p[i]; //ввод массива
min=p[0]; //принимаем 1-й элемент за минимальный
for(i=0;i<n;i++) // поиск
if(p[i]<min) //минимального
{
min=p[i]; //элемента
imin=i;
}
cout<<"\nМинимальный элемент: "<<min<<endl; //вывод элемента
cout<<"Позиция минимального элемента: "<<imin+1<<endl; //вывод номера элемента
for(i=0;i<n;i++) //поиск
if(p[i]<0) //первого
{
ibeg=i; //отрицательного
break; //элемента
}
for(i=ibeg+1;i<n;i++) //поиск
if(p[i]<0) //второго
{
iend=i; //отрицательного
break; //элемента
}
for(i=ibeg+1;i<iend;i++)sum+=p[i]; //суммирование элементов
cout<<"\nСумма элементов расположенных между 1 и 2 отрицательными элементами: "<<sum; //вывод суммы
cout<<"\nПреобразованный массив:"<<endl<<endl;
for(i=0;i<n;i++) //поиск
if(fabs(p[i])<=1) //элементов
{ //модуль которого не превышает 1
cout<<p[i]<<' '; //вывод массива
}
for(i=0;i<n;i++)
if(fabs(p[i])>1)
{
cout<<p[i]<<' '; //вывод всех остальных элементов массива
}
return 0;
}
Например, так:
Код [C#]
#include <iostream>
#include <cmath>

using namespace std;

void Input(float *a, int size)
{
 for (int i=0; i<size; i++) cin >> a[i];
}

int IndexOfMin(float *a, int size)
{
int index;
float min = a[0];
 for (int i=1; i<size; i++)
  if (a[i]<min)
  min = a[index=i];
return index;
}

int IndexOfNegative(float *a, int size)
{
 for (int i=0; i<size; i++)
  if (a[i]<0)
  return i;
return 0;
}

float Sum(float *a, int start, int end)
{
float sum = 0;
 for (int i=start+1; i<end; i++)
 sum += a[i];
return sum;
}

void OutputLess(float *a, int size, float max)
{
 for (int i=0; i<size; i++)
  if (fabs(a[i])<max)
  cout << a[i] << ' ';
}

void OutputMore(float *a, int size, float min)
{
 for (int i=0; i<size; i++)
  if (fabs(a[i])>min)
  cout << a[i] << ' ';
}

int main(int argc, char* argv[])
{
setlocale(LC_ALL, "Russian");
int n;
cout << "Введите размерность n=";
cin >>n;                // ввод размерности массива
cout << "Введите элементы массива:" << endl;
float *p=new float[n]; 	// объявление массива
Input(p, n);            // ввод массива
int imin = IndexOfMin(p, n);
cout << "\nМинимальный элемент: " << p[imin] << endl; //вывод элемента
cout << "\nПозиция минимального элемента: " << imin+1 << endl;//вывод номера элемента
int ibeg = IndexOfNegative(p, n);           // поиск первого отрицательного элемента
int iend = ibeg + IndexOfNegative(p+ibeg+1, n-ibeg-1) + 1; // поиск второго отрицательного элемента
float sum = Sum(p, ibeg, iend);             // суммирование элементов
cout << "\nСумма элементов расположенных между 1 и 2 отрицательными элементами: " << sum; //вывод суммы
cout << "\nПреобразованный массив:" << endl << endl;
OutputLess(p, n, 1);	// вывод поиск элементов модуль которого не превышает 1
OutputMore(p, n, 1);	// вывод всех остальных элементов массива
return 0;
}

Коцюрбенко Алексей Владимирович

Старший модератор
04.03.2022, 20:20
Нет оценки ответа

Ответ # 2, Megaloman (Мастер-Эксперт)

Еще вариант
Код
#include <locale.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>

int minel(int n, float *p, float &minmas) {	// поиск минимального элемента
	int i, m;
	m = 0;
	for(i = 0; i < n; i++) if (p[i] < p[m]) m = i; // поиск минимального элемента
	minmas = p[m];
	return m;
}

unsigned char minus12 (int n, float *p, int &m1, int &m2) { 	// поиск номеров первых двух отрицательных элементов
	int i;
	m1 = -1;
	m2 = -1;
	for(i = 0; i < n; i++) if (p[i] < 0) {		
		if (m1 >= 0) {m2 = i; return 1;}
		m1 = i;
		}
	return 0;
}

float sum12(float *p, int m1, int m2) {
	float sum = 0;
	int i;
	for(i = m1 + 1; i < m2; i++) sum += p[i];
	return sum;
}

void reorg(int n, float *p, float m) {		// вывод элементов массива сначала по модулю <m, потом остальных.
	int i;
	cout << "\nBывод элементов массива сначала по модулю <" << m <<", потом остальных" << endl;
	for(i = 0; i < n; i++) if(fabs(p[i]) < m) cout << p[i] << " ";		// элементы по модулю <m
	for(i = 0; i < n; i++) if(fabs(p[i]) >= m) cout << p[i] << " ";		// элементы по модулю >=m
}

void massin(int n, float *p) {				// ввод массива
	int i;				
	cout << "\nВведите элементы массива:" << endl;
	for(i = 0; i < n; i++) cin >> p[i];
}

int main(int argc, char* argv[]) {
	clrscr();                 		// очистка экрана
	setlocale(LC_ALL, "Russian");

	int n, ibeg, iend;			// объявление
	float minmas; 				// переменных

	cout << "Введите размерность n = ";
	cin >> n; 				// ввод размерности массива

	float *p = new float[n];		// объявление массива

	massin(n, p);

	cout << "\nПозиция минимального элемента: " << minel(n, p, minmas) + 1; // вывод номера элемента
	cout << "\nМинимальный элемент: " << minmas << endl; 	     // вывод элемента

	if (minus12(n, p, ibeg, iend) == 1) {	// суммирование элементов
		cout << "\nСумма элементов расположенных между " << ibeg +1 << " и " << iend +1 << " элементами <0: " << sum12(p, ibeg, iend) << endl; // вывод суммы
	}
	else cout << "\nВ массиве два отрицательных элемента не найдено" << endl;

	reorg(n, p, 1);

	return 0;
}

Последнее редактирование 04.03.2022, 22:24 Megaloman (Мастер-Эксперт)


Megaloman

Мастер-Эксперт
04.03.2022, 22:22
Нет оценки ответа

Мини-форум консультации # 202241


Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.