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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> из с# в с, переделать программу из с# в с 
V
    Опции темы
isu99
Дата 1.10.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте.Столкнулся с очень неприятной ситуацией,из всех С разбираюсь только в C# и то совсем немного,но нужна программа на обычном С((читал,что они очень похожи,но боюсь наделать ошибок.Помогите ,пожалуйста, код программы на C# перевести в С.
Вот задание.
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от Хнач до Хкон с шагом dx с e точностью . Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.

ln(x+1)=∑(от n=0 до бесконечности)((-1)^n*x^(n+1))/(n+1)=x-x^2/2+x^3/3-x^4/4+..., -1<x<1
А вот примерное решение на С#:

Код
using System;
 
 
namespace Ln_x_plus_1
{
    class Program
    {
        static void Main()
        {
            const double e = 0.001, dx = 0.1, a = 0, b = 1;
            const string funcname = "Ln(x+1)";
            int iters;
            Console.WriteLine("Рассчет функции: {0}\nС точностью {1} и шагом {2}\nВ диапазоне [{3},{4}]\n\n",  funcname,e,dx,a,b);
            Console.WriteLine("Приближенное значение\t\tТочное значение\t\t\tСлагаемых");
            for (double x = a; x < b; x += dx)
                Console.WriteLine("{0,-25}\t{1,-25}\t{2}",F(x, e, out iters),Math.Log(x + 1),iters);
            Console.WriteLine("\n\nПрограмма завершена. Для выхода нажмите любую клавишу");
            Console.ReadKey();
        }
 
 
        private static double F(double x, double eps, out int i)
        {
            i = 0;
            if (Math.Abs(x - 0) < double.Epsilon) return 0;
            double result = 0, lastresult = double.MinValue, multipler = x;
            do
            {
                lastresult = result;
                result += multipler / ++i;
                multipler *= -x;
            } while (Math.Abs(result - lastresult) >= eps);
            return result;
        }
    }
}

Заранее благодарю.

Модератор: не забываем пользоваться кнопочкой "Код"
PM MAIL   Вверх
NoviceF
Дата 2.10.2012, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Вообще не знаю C#, плохо знаю Си, но вроде бы каркас должен быть какой-то такой (математику (то есть содержимое функции F) не делал вообще, т.к. что там вызывается не понимаю, тебе должно быть проще это сделать, нужные функции посмотри на http://www.cplusplus.com/reference/clibrary/cmath/).

Может это поможет, ну или знающие люди поправят:

Код

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define E 0.001
#define DX 0.1
#define A 0
#define B 1


double F(double x, double eps, int i);

int main() {

    char * funcname = "Ln(x+1)";
    int iters = 0;
    double x = 0.0;

    printf("Расчет функции: %s \nС точностью %4.3f и шагом %4.1f\nВ диапазоне [%d,%d]\n\n", funcname, E, DX, A, B);

    printf("Приближенное значение\t\tТочное значение\t\t\tСлагаемых\n");

    for (x = A; x < B; x += DX) {

        printf("%4.3f\t\t\t\t %4.3f\t\t\t\t %d\n", F(x, E, iters), log(x + 1), iters);

    }
    return (EXIT_SUCCESS);

}

double F(double x, double eps, int i) {

    double result = 0;
    i = 0;

    if (abs(x - 0) < eps) return 0;

    return result;


}


З.Ы. Расчёт с 1й "с" smile

Это сообщение отредактировал(а) NoviceF - 2.10.2012, 01:30
PM MAIL   Вверх
isu99
Дата 2.10.2012, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да,с функциями нужны и ссылка не работает(
Но спасибо за помощь)

Добавлено через 1 минуту и 52 секунды
p.s.
тоже кстати плохо понимаю ф-ии)

Добавлено через 4 минуты и 30 секунд
и увы нужна на Си,С++ не катит(
PM MAIL   Вверх
NoviceF
Дата 2.10.2012, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(isu99 @ 2.10.2012,  06:41)
да,с функциями нужны и ссылка не работает(
Но спасибо за помощь)

Добавлено @ 06:43
p.s.
тоже кстати плохо понимаю ф-ии)

Добавлено @ 06:45
и увы нужна на Си,С++ не катит(

В ссылку затесалась скобка просто, так должна работать -  http://www.cplusplus.com/reference/clibrary/cmath/

там чисто сишные функции, единственная разница, хедер нужно писать немного по-другому, например вместо #include <cmath> в c++, #include <math.h> .

А так приведённый код нормально компилится Си компилятором тут http://liveworkspace.org/code/d78f179ddf6a...4d24796282fd396
PM MAIL   Вверх
borisbn
Дата 2.10.2012, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



isu99, лови - http://liveworkspace.org/code/cbdb52548ddf...943d86c5ecbc790
честно говоря, правильность работы твоей ф-ции не проверял, а просто перевёл её на Си


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
NoviceF
Дата 2.10.2012, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(borisbn @ 2.10.2012,  09:55)
isu99, лови - http://liveworkspace.org/code/cbdb52548ddf...943d86c5ecbc790
честно говоря, правильность работы твоей ф-ции не проверял, а просто перевёл её на Си

А я всё ломал голову, как вычислить 

Код

double.Epsilon

PM MAIL   Вверх
borisbn
Дата 2.10.2012, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(NoviceF @  2.10.2012,  12:46 Найти цитируемый пост)
А я всё ломал голову, как вычислить 
Код
double.Epsilon

хммм. я как-то не подумал, а сейчас посмотрел в System.double... оказывается там
Код
public const double MinValue = -1.79769313486232E+308;
public const double MaxValue = 1.79769313486232E+308;
public const double Epsilon = 4.94065645841247E-324;

Думаю, что ТС справится с переделкой ))


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
NoviceF
Дата 2.10.2012, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(borisbn @ 2.10.2012,  13:00)
Цитата(NoviceF @  2.10.2012,  12:46 Найти цитируемый пост)
А я всё ломал голову, как вычислить 
Код
double.Epsilon

хммм. я как-то не подумал, а сейчас посмотрел в System.double... оказывается там
Код
public const double MinValue = -1.79769313486232E+308;
public const double MaxValue = 1.79769313486232E+308;
public const double Epsilon = 4.94065645841247E-324;

Думаю, что ТС справится с переделкой ))

Да думаю это излишне, по-моему там DBL_MIN как раз то, что нужно, просто я не знал о её существовании.. smile

Кстати, какая-то нехорошая книжка научила меня, что ссылки это изобретение c++ (почему-то так запомнилось), был удивлён, увидев ссылку в коде Си smile
PM MAIL   Вверх
borisbn
Дата 2.10.2012, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



Цитата(NoviceF @  2.10.2012,  13:20 Найти цитируемый пост)
был удивлён, увидев ссылку в коде Си 

где ? в каком коде ? не должно работать

Добавлено через 19 секунд
Цитата(NoviceF @  2.10.2012,  13:20 Найти цитируемый пост)
Да думаю это излишне, по-моему там DBL_MIN как раз то, что нужно

 smile  smile  smile 


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
isu99
Дата 2.10.2012, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь,попробую доделать)
PM MAIL   Вверх
NoviceF
Дата 2.10.2012, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(borisbn @  2.10.2012,  13:44 Найти цитируемый пост)
где ? в каком коде ? не должно работать


Да вот в вышеприведённом:

Код

double rr = F(x, E, & iters);


или здесь что-то другое?

Это сообщение отредактировал(а) NoviceF - 2.10.2012, 18:53
PM MAIL   Вверх
borisbn
Дата 2.10.2012, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

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



> или здесь что-то другое?
Ага. Другое. Это взятие адреса переменной iter для передачи его в качестве указателя


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
NoviceF
Дата 2.10.2012, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 313
Регистрация: 13.3.2012
Где: Ростов-на-Дону

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



Цитата(borisbn @ 2.10.2012,  19:00)
> или здесь что-то другое?
Ага. Другое. Это взятие адреса переменной iter для передачи его в качестве указателя

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

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

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

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

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


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

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


 




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


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

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