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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.12.2009, 01:45   #1
AntonNeChehov
Новичок
Джуниор
 
Регистрация: 29.12.2009
Сообщений: 1
По умолчанию [C++]замена каждого эл-та на ср. арифметическое его и его соседей.

помогите пожалуйста

Размерность массива - 100
диапазон от -50 до 50

заменить каждый элемент массива на среднее арифметическое его и его соседей!
AntonNeChehov вне форума
Старый 29.12.2009, 19:10   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

Генерация элементов:
Код:
for(i=0; i<N; ++i)
  array[i] = rand()%101-50;
Расчет новых значений:
Код:
array2[0] = array[0];
 array2[N-1] = array[N-1];
 for(i=1; i<N-1; ++i)
  array2[i] = (array[i-1]+array[i]+array[i+1])/3.0;
Остальное сами.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 29.12.2009, 20:32   #3
BleStaR
Форумчанин
 
Регистрация: 25.09.2009
Сообщений: 234
По умолчанию

а по моему перый и последние элементы нового массива тоже должны считаться по формуле, а не просто копироваться... единственное отличие у них не два, а один сосед.
BleStaR вне форума
Старый 31.12.2009, 00:32   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума
Старый 31.12.2009, 20:44   #5
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

С наступающим.
Код:
// Объявление массивов
	double a[9], d[9];
    int n,i;
	n=9;
	// Заполнение массива а
	a[0]=31; a[1]=2; a[2]=12;a[3]=43;a[4]=57; a[5]=14; a[6]=13; a[7]=9; a[8]=23; 
	// Вывод на консоль массива а
	for (i=0;i<n;i++)
		cout<<a[i]<<"\t";
	cout<<"\n";
	// Заполнение первого и последнего элемента массива Д
	d[0]=(a[0]+a[1])/2;
	cout<<d[0];
	cout<<"\n";
	d[8]=(a[8]+a[7])/2;
	cout<<d[8];
	cout<<"\n";
	// Заполнение остальных элементов Д
	for (i=1; i<n-1;i++)
		d[i]=(a[i+1]+a[i]+a[i-1])/3;

	// Запись из массива Д в массив а
	for (i=0; i<n;i++)
		a[i]=d[i];
	cout<<"\n";
	// Вывод массива а
	for (i=0;i<n;i++)
		cout<<a[i]<<"\t";
	cout<<"\n";
Подскажите, а для чего господин Бьерн Страуструп сделал 1-й элемент массива 0-вым. Никак не могу привыкнуть к этому счету, из-за этого постоянные ошибки?


Блин, помойму решать такие задачи бесполезно, те люди которые хоть чуть чуть понимают С++ сами решат. А те которые совсем не разбираются, не смогут написать #include <iostream>, или #include "stdafx.h" и прочий ге..рой . И в итоге решение им ничего не даст.
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол

Последний раз редактировалось atenon; 31.12.2009 в 21:37.
atenon вне форума
Старый 01.01.2010, 07:01   #6
Lunex.08
Форумчанин
 
Аватар для Lunex.08
 
Регистрация: 25.02.2009
Сообщений: 145
По умолчанию

Ну во первых:
Цитата:
// Заполнение массива а
a[0]=31; a[1]=2; a[2]=12;a[3]=43;a[4]=57; a[5]=14; a[6]=13; a[7]=9; a[8]=23;
Это дело можно легко сократить,что будет намного нагляднее:
int a [9]={31,2,12,43,57,14,13,9};
Во вторых:
Цитата:
Подскажите, а для чего господин Бьерн Страуструп сделал 1-й элемент массива 0-вым. Никак не могу привыкнуть к этому счету, из-за этого постоянные ошибки?
Код:
d[0]=(a[0]+a[1])/2;
В этой строке?
Если да,то счет элементов массива начинается с 0.Но в принципе можно начинать счет и с первого элемента,но это не очень рационально,т.к. опять же при считывании массива 1-ый элемент (0-ой индекс массива) будет пустым,что не очень удобно.Но это уже ваш вкус.
И хоть я не модератор,все-таки соблюдайте правила форума.1 тема-1 вопрос.
Компьютеры бесподобны: за несколько минут они могут совершить такую грандиозную ошибку, какую не в состоянии сделать множество людей за многие месяцы.

Последний раз редактировалось Lunex.08; 01.01.2010 в 07:04.
Lunex.08 вне форума
Старый 01.01.2010, 12:26   #7
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Цитата:
// Заполнение массива а
a[0]=31; a[1]=2; a[2]=12;a[3]=43;a[4]=57; a[5]=14; a[6]=13; a[7]=9; a[8]=23;
Cпорить не буду. Лень было переделывать. А задаю в программе для того чтобы легче было отлаживать (или по руски говоря в коде меняешь цифирку и сразу видно к чему это приводит).
А на счет Страуструпа мне просто любопытно (простите за дилитанство) почему бы не сделать 0- ой элемнт масива 1-ым, наверняка на это были причины (вот поэтому и интересно), ведь в школе учат, что счет начинается с 1-цы?

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

Хорошо я вынесу этот вопрос.
Цитата:
d[0]=(a[0]+a[1])/2;
А на счет этого я не понял. Еще раз прокоментирую, первый элемент массива Д равет средне-арифметической сумме первого и второго элемента массива а.
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол

Последний раз редактировалось atenon; 01.01.2010 в 13:00.
atenon вне форума
Старый 01.01.2010, 14:22   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от atenon Посмотреть сообщение
А на счет Страуструпа мне просто любопытно (простите за дилитанство) почему бы не сделать 0- ой элемнт масива 1-ым, наверняка на это были причины (вот поэтому и интересно), ведь в школе учат, что счет начинается с 1-цы?
Решил это не Страуструп, даже если бы он хотел начать счёт с единицы, он не мог этого сделать из-за требования обратной совместимости C++ с C. Ну а в C и его предшественниках, думаю это было продиктовано несколько иной, более низкоуровневой, семантикой. Индекс - это смещение. То есть
Код:
int a[10];
a[0] - элемент массива a, с нулевым смещением(то есть первый)
netrino вне форума
Старый 01.01.2010, 14:48   #9
Terazoid
 
Регистрация: 09.06.2009
Сообщений: 9
По умолчанию

Да, netrino прав. Если бы первый элемент имел индекс 1, тогда при таком обращении к элементу:
Код:
int a[10];
for(i=1; i<=10; i++)
  *(a+i) = rand()%101-50;
значения массива сдвинулись бы вперед на 1 элемент, а последний элемент "потерялся".

Последний раз редактировалось Terazoid; 01.01.2010 в 14:50.
Terazoid вне форума
Старый 01.01.2010, 14:54   #10
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Не скажу что все понятно:
Цитата:
обратной совместимости C++ с C
То есть код из С++ в Си.
Цитата:
более низкоуровневой, семантикой.
.
То есть это продиктовано аппаратными средствами или из за машинных кодов? Ну для меня это высший пилотаж. Но в любом случае спасибо )))).
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
неубиваемый вирус! все антивирусы не находят его! кто знает как его убрать? Yury111 Безопасность, Шифрование 12 05.06.2009 11:19
Поиск поля для ввода текста и его замена ZeroCrash Общие вопросы Delphi 2 21.04.2009 17:22
[Pascal] найти стреднее арифметическое каждого столбца Рамик Помощь студентам 5 23.02.2009 19:01
замена натур. числа и прилижение его к Фибоначчи sher_man Помощь студентам 2 04.02.2009 12:20
Можно ли его расшифровать? DenCraft Фриланс 4 24.02.2008 01:19