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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2013, 13:55   #1
alucard115
Пользователь
 
Аватар для alucard115
 
Регистрация: 25.12.2012
Сообщений: 88
По умолчанию Решение задачи. C++

Дано натуральное число n и действительное число x. Вычислить :

S= sinx+sinsinx+...+sinsin...sinx.
(sinsin...sinx) - n раз.

Нужно написать код решения задачи, и блоксхему с описанием сделать...(
помогите пожалуйста.
alucard115 вне форума Ответить с цитированием
Старый 14.02.2013, 13:58   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Напишите функцию double MySin(double x, int n), которая вычисляет
Цитата:
(sinsin...sinx) - n раз.
Основная функция тогда выглядит:
Код:
double S = 0;
for(int i=1; i<=n; ++i) S+=MySin(x,i);
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 14:04   #3
alucard115
Пользователь
 
Аватар для alucard115
 
Регистрация: 25.12.2012
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Напишите функцию double MySin(double x, int n), которая вычисляет Основная функция тогда выглядит:
Код:
double S = 0;
for(int i=1; i<=n; ++i) S+=MySin(x,i);

а что означает
Код:
double S=0
? и Mysin ? такого не проходили пока что..
и
Код:
for
чем отличается от if ?
alucard115 вне форума Ответить с цитированием
Старый 14.02.2013, 14:10   #4
alucard115
Пользователь
 
Аватар для alucard115
 
Регистрация: 25.12.2012
Сообщений: 88
По умолчанию

ммм что то типо такого?

Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{ clrscr();
cout<<"Vvedite x:";
float S; int n,x,i;
cin>> x;
S=0;
for (int i=1; i<=n; ++i) S+=MySin(x,i)

cout <<"S="<<S;
getch();
}
alucard115 вне форума Ответить с цитированием
Старый 14.02.2013, 14:14   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
а что означает double S=0? и Mysin ? такого не проходили пока что..
А что проходили? Я предлагаю Вам написать функцию MySin, которая будет делать часть задачи. for - оператор цикла. Описание операторов цикла и синтаксиса определения функций должно быть в любом учебнике; без первого либо второго эта задача не решается.
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 14:16   #6
alucard115
Пользователь
 
Аватар для alucard115
 
Регистрация: 25.12.2012
Сообщений: 88
По умолчанию

Вместо "double S=0" мы писали просто S=0. вот код другой задачи, но там по другому немного.

Код:
#include <iostream.h>
#include <conio.h>
#include <math.h>
void main()
{ clrscr();
cout<<"Vvedite K:";
float S; int n,k,F=1;
cin>> k;
S=0;
for (n=1; n<k+1; n++)
{F=F*n;
S=S+1.0/F;
}
cout <<"S="<<S;
getch();
}
alucard115 вне форума Ответить с цитированием
Старый 14.02.2013, 14:20   #7
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Вместо "double S=0" мы писали просто S=0.
Нет. Вы пишете
Код:
float S; //Объявлена переменная S. Её значение в этот момент произвольно.
//...
S = 0; //Вот теперь значение S равно нулю
Как общее правило, желательно объявлять переменные как можно ближе к месту их первого использования и инициализировать чем-нибудь сразу при объявлении.

Возвращаясь к нашим баранам. Вы можете написать отдельную функцию, которую бы вызывали в основной программе?
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 14:23   #8
alucard115
Пользователь
 
Аватар для alucard115
 
Регистрация: 25.12.2012
Сообщений: 88
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Нет. Вы пишете
Код:
float S; //Объявлена переменная S. Её значение в этот момент произвольно.
//...
S = 0; //Вот теперь значение S равно нулю
Как общее правило, желательно объявлять переменные как можно ближе к месту их первого использования и инициализировать чем-нибудь сразу при объявлении.

Возвращаясь к нашим баранам. Вы можете написать отдельную функцию, которую бы вызывали в основной программе?
не думаю...(
alucard115 вне форума Ответить с цитированием
Старый 14.02.2013, 14:40   #9
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Тогда смотрите внимательно (и желательно прочитайте тот же раздел в используемом Вами учебнике) - это важно:
Код:
//Заголовок функции - тип возвращаемого значения, название, список аргументов
//Пусть наша функция возвращает float, принимает float (значение x) и int (кратность синуса)
float MultiSin(float x, int n){ //Тело функции заключается в операторные скобки {}
  //Объявляем локальную переменную функции
  floar result = x; //Сразу инициализируем - см. выше
  //Теперь, повторяем n раз:
  for(int i=0; i<n; ++i) result = sin(result); //Если цикл состоит из одной инструкции,
  //можно вот так, без скобок

  //Теперь в result у нас значение "n-кратного синуса"
  //Ключевое слово return возвращает это значение вызвавшему
  return result;
}

//Использование (оформление вроде очистки экрана и ввода x опущено)
float S = 0;
for(int i=1; i<=n; ++i) //Теперь цикл от 1 до n, потому что начинаем со слагаемого с "однократным" синусом
  S += MultiSin(x, i); //Используется название функции, заданное нами выше
  //Эта инструкция увеличивает S на значение "синуса кратности i" в x
Этот пример показывает, как объявлять и использовать собственные функции. Вообще-то, такое решение неоптимально по времени, но более быстрое решение несколько сложнее понять (можете попытаться разобрать, как оно работает):
Код:
float S=0, arg=x;
for(int i=0; i<n; ++i){
  arg = sin(arg);
  S += arg;
}
Abstraction вне форума Ответить с цитированием
Старый 14.02.2013, 15:00   #10
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

=)
Код:
double sinsum(double x, int n) {
    double S;

    S = sin(x);

    if (n > 1) {
        n--;
        S += sinsum(S, n);
    }
    else
        return sin(x);

    return S;
}
Это я так просто.. Ради разнообразия =)
Вариант предыдущего автора, безусловно, правильный.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение задачи Raphael Помощь студентам 4 07.10.2010 18:45
Решение задачи Raphael Помощь студентам 2 07.10.2010 09:43
Решение задачи на C# masicev Помощь студентам 1 15.10.2009 15:33
Решение задачи на c++ JOFRIF Помощь студентам 2 21.04.2008 00:35