Вопрос № 103731: Здравствуйте,
Помогите решить такой вопрос. Есть цены за многодневный период времени. Для каждого дня две цены High и Low. Надо вычислить средний ежедневный диапазон цен (AverageDayRange) за последние n дней (например, 20 дней):
((High[21]-Lo...Вопрос № 103794: Привет всем!
Вот написал программу (см.приложение), но она не работает. Поэтому у меня три вопроса:
1) Почему программа не работает с десятичными числами (0.3 и т.п.), а сразу завершается?
2) Как сделать, чтобы после выполнения программы ...
Вопрос № 103.731
Здравствуйте,
Помогите решить такой вопрос. Есть цены за многодневный период времени. Для каждого дня две цены High и Low. Надо вычислить средний ежедневный диапазон цен (AverageDayRange) за последние n дней (например, 20 дней):
((High[21]-Low[21])/2 + (High[19]-Low[19])/2 +.......+ (High[1]-Low[1])/2)/20
Как это правильно записать на языке С, используя массивы, чтобы это было короче?
Отправлен: 28.09.2007, 21:37
Вопрос задал: Vend (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Лукьянчиков Дмитрий Алексеевич
Здравствуйте, Vend!
float High[n];
float Low[n];
float Sum=0;
float Average=0;
... // заполняются массивы High и Low
for (int i=1;i<=n;i++) //цикл от одного до n
{
Sum+=(High[i]-Low[i])/2 ; // считаем всю заработанную сумму за n дней (a+=b означает a=a+b)
}
Avarage= Sum/n; //считаем среднее значение
--------- Программирование, программирование и еще раз программирование...Говорил Страуструп!))
Ответ отправил: Лукьянчиков Дмитрий Алексеевич (статус: Заблокирован)
Ответ отправлен: 28.09.2007, 21:49 Оценка за ответ: 5
Отвечает: Lestat de Lionkur
Здравствуйте, Vend!
Вот примерный код Вашей программ.
Перед этими действиями необходимо инициализировать макрос MAX_DAYS и переменные nHigh и nLow.
Удачи!
Приложение:
Ответ отправил: Lestat de Lionkur (статус: 1-ый класс)
Ответ отправлен: 29.09.2007, 00:34 Оценка за ответ: 4
Отвечает: Maxim V.G.
Здравствуйте, Vend!
Хочу предложить ещё один вариант вычисления указанной задачи при помощи динамических массивов:
int maxDay; // количество дней
fprintf(stdout, "Input maxDay:");
fscanf(stdin, "%d", &maxDay);
if (maxDay == 0){ // Проверка что пользователь действительно ввёл количество дней и не возникнет деление на 0.
cout << "Error: maxDay must be > 0" << endl;
return;
}
float *Hight = new float[maxDay]; //выделение памяти для динамических массивов
float *Low = new float[maxDay];
float Sum=0;
float Average=0;
//Цикл ввода и вычисление средне-дневной цены. Порядок ввода: первая максимальная, вторая миимальная цена
for (int i=0; i<maxDay; i++){
cout << "Input Hight price:" << endl;
fscanf(stdin, "%f", &Hight[i]);
cout << "Input Low price:" << endl;
fscanf(stdin, "%f", &Low[i]);
if (Low[i]>Hight[i]){ // проверка пользователя на соблюдение порядка ввода (первая максимальная, вторая миимальная цена). В случае ошибочного ввода пользователю предлагается ввести заново текущею строку.
cout << "Error: Low price > Hight price" << endl;
cout << "Plaese reinput value current string" << endl;
i--;
continue;
}
Sum+=(Hight[i]-Low[i])/2;
}
Проверка верхней и нижней цены крайне важна. Так, как при её отсутствии можно получить отрицательный результат.
--------- Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 4-ый класс)
Ответ отправлен: 01.10.2007, 18:42
Вопрос № 103.794
Привет всем!
Вот написал программу (см.приложение), но она не работает. Поэтому у меня три вопроса:
1) Почему программа не работает с десятичными числами (0.3 и т.п.), а сразу завершается?
2) Как сделать, чтобы после выполнения программы окно не закрывалось, пока не нажмешь enter (писать в конце scanf ("%d",f) неэффективно и тупо :) )?
3) Как сделать "защиту от дурака", т.е. если будут введены не числа, а символы, например, выводить сообщение об ошибке?
Всем спасибо!
Приложение:
Отправлен: 29.09.2007, 21:00
Вопрос задал: LexXx (статус: Практикант)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 6)
Отвечает: Verena
Здравствуйте, LexXx!
1. Проставим формат в scanf-е для чисел типа float (вместо %d - %f).
2. Самое простое - поставить функцию getch () (или _getch()) - правда, она среагирует на любую нажатую клавишу.
3. Если вручную - над читать число в строку, проверять, все ли введённые символы - цифры (плюс один разделитель), и если это так, переводить строку в число с помощью специальной функции (например, atof (строка)).
Вот Ваш пример в рабочем варианте:
#include
#include
#include
int main()
{
float x,y,d;
int f;
printf ("Vvedite x:");
scanf ("%f",&x);
printf ("
Vvedite y:");
scanf ("%f",&y);
if (fabs(y)<=1-2*fabs(x), d=1); else d=0;
printf ("
d=%f",d);
printf ("
Press to end");
_getch ();
return 0;
}
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 29.09.2007, 21:44 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Отвечает: Dutka M.M.
Здравствуйте, LexXx!
if (fabs(y)<=1-2*fabs(x), d=1); else d=0;??!!!
if (fabs(y)<=1-2*fabs(x)) d=1; else d=0;
scanf ("%d",&x)????
scanf ("%f",&x)!!!!!!!!!!!!!!!
scanf ("%d",f); => getch();
Ответ отправил: Dutka M.M. (статус: 1-ый класс)
Ответ отправлен: 01.10.2007, 02:04