Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите суммировать элементы массива 
V
    Опции темы
alexandr007
Дата 8.3.2015, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.3.2014

Репутация: нет
Всего: нет



Не могу понять как правильно запрограммировать smile 
Код

#include <stdio.h>
#include <math.h>
#include <conio.h>
void main()
{
int N[26]={14, 17, 22, 16, 11, 19, 15, 8, 12, 19, 21, 13, 29, 21, 9, 18, 15, 23, 16, 13, 12, 28, 19, 7, 16,12};
int S[26]={23, 21, 45, 44, 92, 92, 133, 135, 176, 175, 232, 231, 285, 286, 334, 335, 376, 380, 420, 423, 477, 479, 529, 527, 577, 579};
float L,x;
int n;
for(n=1;n<=26;x=S[n])
{
L+=N[n]*(S[n]-x);
printf("L=%.5f",L);
}
getch();
}

Мне нужно что бы была сума L=N1*(S1-x)+N2*(S2-x)+...N26*(S26-x), где х - поочередно присваивается значения массива от S1 до S26 (цифры это индекс значений заданного массива (N[26]))

Помогите пожалуйста...
PM MAIL   Вверх
maint
Дата 8.3.2015, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: 1
Всего: 2



даже основы не освоены. Во первых, массив всегда начинается с 0, отсюда
Код

for( n = 0; n < 26; n++)

далее, первоначальное значение L не задано. Что будет находится в памяти в неинициализированной ячейке, хрен его знает
отсюда
Код

float L = 0;

а дальше, либо сформулируете условие по человечески, лучше прямиком из методички или задания, или решайте все сами. А то у вас получается по условию, что всегда будет ноль. Поскольку S(i) - x, где x = S(i) всегда равны 0

Это сообщение отредактировал(а) maint - 8.3.2015, 17:57
PM   Вверх
feodorv
Дата 8.3.2015, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(alexandr007 @  8.3.2015,  16:45 Найти цитируемый пост)
Мне нужно что бы была сума L=N1*(S1-x)+N2*(S2-x)+...N26*(S26-x), где х - поочередно присваивается значения массива от S1 до S26 (цифры это индекс значений заданного массива (N[26]))

Вообще не понятно, что есть х. Пояснить примером или оригинальным текстом задания можете?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
alexandr007
Дата 8.3.2015, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.3.2014

Репутация: нет
Всего: нет



Дома в деревню расположены в течении улице, по которой ходит автобус, связывающий деревню с другими населенными пунктами. Количество домов в деревне m. Расстояние от ворот различных домов к краю улицы S1, S2..., Sm, а среднее (за месяц) количество жителей, которые идут от этих домов к автобусной остановке, в соответствии N1, N2..., Nm. Составить программу вычисления оптимального расстояния х с точностью delta(х) от края улицы до автобусной остановки, при которой общий путь L, который проходят жители села в течении месяца между своими домами и остановкой автобуса, есть минимальным.

Формулу я уже сам выводил. Мне нужно что бы х принимал поочередно значения S(n), и всегда операция суммирования проходила до конца: L=N1*(S1-x)+N2*(S2-x)+...+N26*(S26-x)


Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  2.jpg 66,44 Kb
PM MAIL   Вверх
feodorv
Дата 9.3.2015, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Ага, спасибо, уже понятней.


Цитата(alexandr007 @  8.3.2015,  18:24 Найти цитируемый пост)
Мне нужно что бы х принимал поочередно значения S(n)

x не обязан принимать значения S(n). Иными словами, остановка не обязана располагаться напротив какого-либо дома. Более того, Вам задана точность определения x - delta(x).


Цитата(alexandr007 @  8.3.2015,  18:24 Найти цитируемый пост)
и всегда операция суммирования проходила до конца

Вам как раз нужно подобрать x таким образом, чтобы L стала минимальной, а не тупо посчитать L.


Цитата(alexandr007 @  8.3.2015,  18:24 Найти цитируемый пост)
Формулу я уже сам выводил

Я Вас огорчу, формула неправильная. Расстояние между двумя точками на числовой оси есть модуль разницы их координат, то есть все расстояния S(n)-x следует брать по модулю.


Честно говоря, нужно ещё знать, какой метод решения подобных задач предлагается (приведённый Вами скан к какому разделу учебника относится)? Можно, конечно, позволить себе "брутфорс":
Код

double delta = 0.01;

// Находим самый дальний дом
double x, xMax = 0, xMin = 0;
for( n = 0; n < 26; ++n) 
  if( xMax < S[n] ) xMax = S[n];

// С шагом delta вычисляем L и сравниваем с оценочным минимальным расстоянием
double lMin = calculateL( 0 ); // 0 - это начальное значение для xMin, которое мы как раз и ищем
for( x = delta; x <= xMax; x += delta) // не от 0, так как для 0 уже посчитали
{
  double l = calculateL( x );
  if( l < lMin ) // для данного x суммарное расстояние меньше
  {
    xMin = x;
    lMin = l;
  }
}

printf( "x = %f, l = %f\n", xMin, lMin);


PS Функция calculateL как раз для заданного x вычисляет Вашу сумму (с учетом модулей и замечания от maint). Очень надеюсь, что данную функцию Вы реализуете самостоятельно.

PPS Для C все объявления переменных нужно перенести в начало main()


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
alexandr007
Дата 9.3.2015, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 16.3.2014

Репутация: нет
Всего: нет



Огромное спасибо smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1115 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.