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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2012, 11:13   #1
skorpionsej
Пользователь
 
Регистрация: 10.10.2012
Сообщений: 10
По умолчанию проблема с программой

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

Код:
#include "stdafx.h"
#include <math.h>
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int massiv[50], n, S=0, A, B, N, abc, temp;
	setlocale(LC_ALL, "russian");
	cout<<"Введите количество элементов массива"<<endl;
	cin>>n;
	cout<<"Элементы массива"<<endl;
	for (int i=0; i<=n-1; i++)     // создаем массив n-х элементов
	{
		 massiv[i] = rand()%100-50; // отнимаем 50, чтобы были отрицательные числа
		 cout<<massiv[i]<<endl;
	}
	cout<<"Введите номер элемента А"<<endl;
	cin>>A;
	cout<<"Введите номер элемента B"<<endl;
	cin>>B;
	if (B>A) N=B-A-1;
	else N=A-B-1;
	cout<<"Число элементов от А до В = "<<N<<endl;    //  находим число элементов в диапазоне от А до В
	int imax = 0;
	for (int i=imax ; i<=n-1; i++)
		{
			if ( massiv[i] > massiv[imax] ) imax = i;
		}
	cout<<"Номер максимального элемента = "<<imax<<"  Его значение = "<< massiv[imax++]<<endl;
	for (int j=imax; j<=n-1; j++)
	{
		S=S+massiv[j];
	}
	cout<<"Сумма элементов после максимального = "<<S<<endl;  //  находим сумму элементов после максимального
	cout<<""<<endl;
	cout<<"Упорядоченный массив"<<endl;
	for (int i=0;i<n-1;i++)                                   // упорядочиваем массив
		for (int h=i+1; h<n; h++)
			if (massiv[h] > massiv[i])
			{
				temp = massiv[i];
				massiv[i] = massiv[h];
				massiv[h] = temp;
			}
			for (int i=0; i<n; i++)
			cout<<massiv[i]<<endl;
	system("pause");
	return 0;
}
Не уверен что правильно реализовал первый пункт. Все остальное работает вполне корректно. Подскажите, если что не правильно
skorpionsej вне форума Ответить с цитированием
Старый 10.10.2012, 11:30   #2
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

Поправил. И еще: там же по модулю берутся величины при сортировке.
Подключаем time.h и добавляем функцию srand(), чтобы рандомайзер работал, а то у тебя одинаковые значения все время выдавались.
Второй пункт считает правильно.

Код:
#include <math.h>
#include <iostream>
#include <time.h>
using namespace std;

int main()
{
        srand(static_cast<unsigned int> ( time(NULL)));
	int massiv[50], n, S=0, A, B, N, abc, temp;
	setlocale(LC_ALL, "russian");
	cout << "Введите количество элементов массива: ";
	cin >> n;
	cout << "Элементы массива: " << endl;
	for (int i=0; i<=n-1; i++)     // создаем массив n-х элементов
	{
		 massiv[i] = rand()%100-50; // отнимаем 50, чтобы были отрицательные числа
		 cout << massiv[i] << " ";
	}
	cout << "\nВведите номер элемента А: ";
	cin >> A;
	cout << "\nВведите номер элемента B: ";
	cin >> B;
	N = (int)fabs(B - A);
	cout << "\nЧисло элементов от А до В = " << N << endl;    //  находим число элементов в диапазоне от А до В
	int imax = 0;
	for (int i=imax ; i<=n-1; i++)
		{
			if ( massiv[i] > massiv[imax] ) imax = i;
		}
	cout << "\nНомер максимального элемента = " << imax << ", eго значение = " << massiv[imax++] << endl;
	for (int j=imax; j<=n-1; j++)
	{
		S=S+massiv[j];
	}
	cout << "Сумма элементов после максимального = " << S << endl;  //  находим сумму элементов после максимального
	cout << endl;
	cout << "Упорядоченный массив: " << endl;
	for (int i=0;i<n-1;i++)                                   // упорядочиваем массив
		for (int h=i+1; h<n; h++)
			if (fabs(massiv[h]) > fabs(massiv[i]))
			{
				temp = massiv[i];
				massiv[i] = massiv[h];
				massiv[h] = temp;
			}
			for (int i=0; i<n; i++)
			cout << massiv[i] << " ";
	system("pause");
	return 0;
}
Никто

мой блог

Последний раз редактировалось three_cats; 10.10.2012 в 11:42.
three_cats вне форума Ответить с цитированием
Старый 10.10.2012, 11:58   #3
skorpionsej
Пользователь
 
Регистрация: 10.10.2012
Сообщений: 10
По умолчанию

я так понял, что мысль на счет первого задания у меня верна?
а с модулем я что-то не дружу, компилятор ругается, в принципе он и без fabs упорядочивал хорошо.
а с time.h действительно интересней стало
skorpionsej вне форума Ответить с цитированием
Старый 10.10.2012, 12:15   #4
skorpionsej
Пользователь
 
Регистрация: 10.10.2012
Сообщений: 10
По умолчанию

Упорядочил по модулю и сделал небольшое ветвление из-за А и В.
Код:
	if (B>A) N=B-A;
	else N=A-B;
Думаю, все что нужно реализовал?

Код:
#include "stdafx.h"
#include <math.h>
#include <iostream>
#include <time.h>
using namespace std;

int main()
{
    srand (static_cast <unsigned int> (time(NULL)));
	int massiv[50], n, S=0, A, B, N, temp;
	setlocale(LC_ALL, "russian");
	cout << "Введите количество элементов массива: ";
	cin >> n;
	cout << "Элементы массива: " << endl;
	for (int i=0; i<=n-1; i++)     // создаем массив n-х элементов
	{
		 massiv[i] = rand()%100-50; // отнимаем 50, чтобы были отрицательные числа
		 cout << massiv[i] << " ";
	}
	cout<<endl;
	cout<<"\nВведите номер элемента А: ";
	cin>>A;
	cout<<"Введите номер элемента B: ";
	cin>>B;
	if (B>A) N=B-A;
	else N=A-B;
	cout<<"\nЧисло элементов от А до В = " <<N<<endl;    //  находим число элементов в диапазоне от А до В
	int imax = 0;
	for (int i=imax ; i<=n-1; i++)
		{
			if ( massiv[i] > massiv[imax] ) imax = i;
		}
	cout<<"\nНомер максимального элемента = " <<imax<< ", eго значение = " <<massiv[imax++]<<endl;
	for (int j=imax; j<=n-1; j++)
	{
		S=S+massiv[j];
	}
	cout<<"Сумма элементов после максимального = " <<S<< endl;  //  находим сумму элементов после максимального
	cout<<endl;
	cout<<"Упорядоченный массив:"<<endl;
	for (int i=0;i<n-1;i++)                                   // упорядочиваем массив
		for (int h=i+1; h<n; h++)
			if (abs(massiv[h]) > abs(massiv[i]))
			{
				temp = massiv[i];
				massiv[i] = massiv[h];
				massiv[h] = temp;
			}
			for (int i=0; i<n; i++)
			cout<<massiv[i]<<endl;
			cout<<endl;
	system("pause");
	return 0;
}
skorpionsej вне форума Ответить с цитированием
Старый 10.10.2012, 17:21   #5
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
Счастье

skorpionsej, да, верно все!
Никто

мой блог
three_cats вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с программой Alex_12Proxy Паскаль, Turbo Pascal, PascalABC.NET 4 02.02.2012 23:07
проблема с программой crazyW Помощь студентам 0 17.01.2012 20:15
Проблема с программой Aleks2215 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 26.10.2010 22:56
Проблема с программой. elDiablo Паскаль, Turbo Pascal, PascalABC.NET 2 17.08.2010 21:59
проблема с программой dima00 Общие вопросы Delphi 2 20.11.2007 13:56