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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2010, 15:40   #1
Андрей777
 
Регистрация: 04.04.2010
Сообщений: 3
Вопрос кто может исправить ошибку в моем коде написанном на С++

Помоги исправить ошибки к задачке на С++ я уже не знаю к кому обратиться.

Задание:

Программа должна работать следующим образом. Сначала пользователь вводит количество обрабатываемых чисел (значение n). Затем, он вводит n чи-сел в одномерный массив. После этого программа должна обработать эти числа и вывести результат согласно варианту задания.

сама задачка:

Найти число, которое «дальше всех» от среднего арифметическо-го, если таких чисел несколько, то в качестве результата использо-вать число, идущее первым по порядку среди таких чисел.

Тут мои попытки:

#include<math.h>
#include<iostream.h>

int main(void){

int n;
cin>>n;// вводим размер массива

int *mas new int[n]; // динамически выделяем память под массив

cin>>mas; // вводим значения елементов

float sr=0;

for(int i=0;i<n;i++)
sr+=mas[i]/n; // ищем среднее значения

int index= 0;

for(i=0;i<n;i++)
if( abs(sr-mas[index]) < abs(sr-mas[i]) ) // ищем индекс элемента с наибольшим расстоянием от среднего значения
index=i;

cout<<mas[index];

delete []mas; //освобождаем память выделеную под массив
}
Андрей777 вне форума Ответить с цитированием
Старый 10.04.2010, 16:27   #2
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Вроде пашет
Код:
#include <iostream>
#include <math.h>
void main () {
	int n, res_index = 0, num_check;
	double avg = 0;
	std::cin >> n;
	int* arr = new int[n]; // динамически выделяем память под массив

	for (int i = 0; i < n; i++) {
		std::cin >> arr[i]; // заполняем его значениями
		avg += arr[i];
	}
	avg /= n; // находим среднее арифметическое
	num_check = arr[0];
	for (int i = 0; i < n; i++) {
		if (abs(arr[i]) > avg && abs(arr[i]) > abs(num_check)) {
			res_index = i; // индекс самого дальнего от среднего арифметического числа
		}
	}
}
Tirendus вне форума Ответить с цитированием
Старый 10.04.2010, 17:27   #3
Андрей777
 
Регистрация: 04.04.2010
Сообщений: 3
Сообщение

есть ошибки при компиляции
Андрей777 вне форума Ответить с цитированием
Старый 10.04.2010, 17:36   #4
blondino4ka_milk
Пользователь
 
Аватар для blondino4ka_milk
 
Регистрация: 02.03.2010
Сообщений: 59
По умолчанию

Код:
#include <iostream>
#include <math.h>
void main () {
	int n, res_index = 0, num_check;
	double avg = 0;
	std::cin >> n;
	double* arr = new double[n]; // динамически выделяем память под массив

	for (int i = 0; i < n; i++) {
		std::cin >> arr[i]; // заполняем его значениями
		avg += arr[i];
	}
	avg /= n; // находим среднее арифметическое
	num_check = arr[0];
	for ( i = 0; i < n; i++) {
		if (abs(arr[i]) > avg && abs(arr[i]) > abs(num_check)) {
			res_index = i; // индекс самого дальнего от среднего арифметического числа
		}
	}
}
blondino4ka_milk вне форума Ответить с цитированием
Старый 10.04.2010, 17:45   #5
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Андрей777,
какую среду разработки используете?
blondino4ka_milk,
дабловский массив не поможет и он не нужен, если ошибка была на этапе компиляции, то что-то не так с синтаксисом, а не с типами данных.
Tirendus вне форума Ответить с цитированием
Старый 10.04.2010, 20:35   #6
Андрей777
 
Регистрация: 04.04.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Tirendus Посмотреть сообщение
Андрей777,
какую среду разработки используете?
blondino4ka_milk,
дабловский массив не поможет и он не нужен, если ошибка была на этапе компиляции, то что-то не так с синтаксисом, а не с типами данных.
Я использую программу Microsoft Visual Studio 6.0
Андрей777 вне форума Ответить с цитированием
Старый 10.04.2010, 21:14   #7
Tirendus
Форумчанин
 
Аватар для Tirendus
 
Регистрация: 20.03.2009
Сообщений: 272
По умолчанию

Этот код идеально работает под ms visual studio 2008, win32 console application. Возможно, вам нужно добавить в заголовок using namespace std; Я не силен в прошлых версиях студии. Попробуйте такой код. Если тоже не скомпилируется, выложите текст ошибки.

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

void main () {
	int n, res_index = 0, num_check;
	double avg = 0;
	cin >> n;
	int* arr = new int[n]; // динамически выделяем память под массив

	for (int i = 0; i < n; i++) {
		cin >> arr[i]; // заполняем его значениями
		avg += arr[i];
	}
	avg /= n; // находим среднее арифметическое
	num_check = arr[0];

	for (int i = 0; i < n; i++) {
		if (abs(arr[i]) > avg && abs(arr[i]) > abs(num_check)) {
			res_index = i; // индекс самого дальнего от среднего арифметического числа
		}
	}
	system("cls");
	cout << res_index << endl;
}

Последний раз редактировалось Tirendus; 10.04.2010 в 21:16.
Tirendus вне форума Ответить с цитированием
Старый 10.04.2010, 22:49   #8
sugarcoders
Новичок
Джуниор
 
Регистрация: 10.04.2010
Сообщений: 1
По умолчанию

При тестировании варианта Tirendus'a я заметил, что программа некорректно ведет себя при вводе, например, вот таких чисел:
3 (количество элементов)
2000 (1-й элемент)
2001 (2-й элемент)
5 (3-й элемент).
Здесь наиболее "отклоненным" был элемент с индексом 2 (число 5). Программа же посчитала, что таким элементом будет число 2001. Все это приводит к выводу, что алгорит отбора "наиотклонившегося" числа некорректен, ввиду чего прилагаю рабочий свой (код тестировался на Dev-C++ 4.9.8.0):
Код:
#include <iostream>
#include <math.h>
using namespace std;

int main(int Args, char** Argv)
{
	int n, far_index = 0; // far_index - переменная, хранящая индекс "наиотдаленного элемента"
	double arr_check, avg = 0; // arr_check - переменная, хранащая отклонение текущего элемента массива от среднеарифметического значения
	cin >> n;
	int* arr = new int[n]; // динамически выделяем память под массив

	for (int i = 0; i < n; i++) {
		cin >> arr[i]; // заполняем его значениями
		avg += arr[i];
	}
	
	avg /= n; // находим среднее арифметическое

	arr_check = abs(arr[0] - avg);
	for (int i = 1; i < n; i++) {
	    if (abs(arr[i] - avg)> arr_check) {
            arr_check = abs(arr[i] - avg);
            far_index = i;
        }
    }
    
	cout<<arr[far_index]<<endl;
	delete[]arr;
	system("PAUSE");
	return 0;
}
sugarcoders вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помоготе исправить ошибку в коде Operator-cn Общие вопросы C/C++ 4 22.10.2009 23:40
Кто может исправить ошибку в коде программы на с++ Lesj Фриланс 4 18.06.2009 00:10
Исправить ошибку в коде VBA. NitriNKa Помощь студентам 2 29.04.2009 22:22
Помогите исправить ошибку в коде... prizrak1390 Общие вопросы Delphi 4 26.04.2008 13:19