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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2009, 14:40   #1
Джед
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 28
По умолчанию Поиск среднего арифметического в массиве

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


int _tmain(int argc, _TCHAR* argv[])
{int i,n,*pmas, *pres,*ptemp,diapazon,minnum;
	unsigned int r;	
	char cont;


	do
	{		
		cout<<"Size pmas?\n";
		cin>>n;
		pmas=new int[n];	
	
		r=(unsigned int)time(NULL)%32767;
		srand(r);
		cout<<"diapazon=?";
		cin>>diapazon;
		cin.get();
		cout<<"min. number=?";
		cin>>minnum;
		cin.get();
		


      	
	pmas=new int[n];	
	for(i=0;i<n;i++)
		*(pmas+i)=int(rand()/32767.*diapazon)+minnum;


	for(i=0;i<n;i++)
		cout<<pmas+i<<'\t'<<*(pmas+i)<<'\n';
	cout<<'\n';
		cin.get();
		   
	
		cout<<"To continue -- <Enter>,to exit -- any symbol and <Enter>\n";
		cin.get(cont);
		
	}while (cont=='\n');
	
	return 0;
Это заполнение массива.
Вы не могли бы подсказать как вычислить среднее арифметическое?
И как переписать числа из массива, которые меньше среднего арифметического в один динамич массив, а числа, большие среднего арифметического - в другой. Очень прошу помочь, от этого зависит моя оценка на экзамене(((
Джед вне форума Ответить с цитированием
Старый 12.06.2009, 14:46   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Джед
Вы не могли бы подсказать как вычислить среднее арифметическое?
Сумма всех элементов на их количество.
Код:
S = 0; 
for(i=0; i<n; i++)
 S += *(pmas+i);
S /= n;
Цитата:
И как переписать числа из массива, которые меньше среднего арифметического в один динамич массив, а числа, большие среднего арифметического - в другой.
После нахождения сред. ариф. проходите по массиву и подсчитываете количество элементов, которые больше сред. ариф.
После этого выделяете память под два массива. Размер первого - количество элементов больших сред.ариф. Размер второго - (n - размер первого).
Заводите две переменных, хранящих текущие индексы этих двух массивов (пусть будут k1 и k2). Изначально они равны 0.
После этого проходите по исходному массиву и сравниваете элементы со сред.ариф.
Если больше, то Новый_Массив1[k1++] = Исходный_Массив[i];
иначе Новый_Массив2[k2++] = Исходный_Массив[i];
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.06.2009, 14:47   #3
vasek123
Заблокирован
 
Регистрация: 21.11.2008
Сообщений: 4,986
Сообщение

Судя по всему код написан в Visual Studio?! Исключите iostream!
В stdafx.h это уже есть...

p.s. Какие ошибки пишет компилятор?
vasek123 вне форума Ответить с цитированием
Старый 12.06.2009, 14:49   #4
Джед
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 28
По умолчанию

cout, cin и ещё остальные не распознает. Sazary, спасибо.
Джед вне форума Ответить с цитированием
Старый 12.06.2009, 15:02   #5
Джед
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 28
По умолчанию

Код:
int a=0;
for (int k=0;k<n;k++)
if(*(pmas+k)>n)	a++;
cout<<a<<endl;
Вот так нашёл количество элементов, которые больше средн.арифм., но как найти сами элементы и сделать вывод? Голова совсем не работает (

Пытался сделать так, но явно неправильно.

Код:
cout<<*(pmas+k)<<a<<endl;

Последний раз редактировалось Джед; 12.06.2009 в 15:05.
Джед вне форума Ответить с цитированием
Старый 12.06.2009, 15:09   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
но как найти сами элементы
В каком смысле?
Код:
if(*(pmas+k)>n)	cout<<*(pmas+k)<<endl;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.06.2009, 15:20   #7
Джед
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 28
По умолчанию

Код:
for (int k=0;k<n;k++)
		if(*(pmas+k)>n)
		cout<<*(pmas+k)<<endl;
		cin.get();
что-то не то... при маленьких массивах (4 элемента(н-р 4,1,2,3 ) выводит
среднее арифметическое (2.5) но дальше не выводит элементы, которые выше... вообще не выводит.
Джед вне форума Ответить с цитированием
Старый 12.06.2009, 15:25   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Потому что
Код:
if(*(pmas+k)>n)
зачем вы сравниваете элемент массива с количеством элементов?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 12.06.2009, 15:28   #9
Джед
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 28
По умолчанию

А ну да... Сглупил. Спасибо
Джед вне форума Ответить с цитированием
Старый 12.06.2009, 15:34   #10
Джед
Пользователь
 
Регистрация: 27.05.2009
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Заводите две переменных, хранящих текущие индексы этих двух массивов (пусть будут k1 и k2). Изначально они равны 0.
После этого проходите по исходному массиву и сравниваете элементы со сред.ариф.
Если больше, то Новый_Массив1[k1++] = Исходный_Массив[i];
иначе Новый_Массив2[k2++] = Исходный_Массив[i];
Это будет примерно так?

Код:
int k1=0, k2=0;

for (int k=0;k<n;k++)
if(k>s)
{newmas*(k1++)=*(pmas+i)
}
else
{newmas*(K2++)=*(pmas+i)
}
Джед вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в массиве Paul_AG Общие вопросы C/C++ 9 03.06.2009 01:29
Поиск в одномерном массиве Joxter Помощь студентам 6 13.12.2008 14:19
Поиск в массиве данных. Cobra9100 Microsoft Office Excel 1 17.10.2008 09:35
Нахождение среднего арифметического AliVe Паскаль, Turbo Pascal, PascalABC.NET 1 12.04.2007 00:25