PDA

View Full Version : نوشتن کد زیر در سی شارپ که به زبان سی پلاس نوشته شده



RIG000
جمعه 28 فروردین 1394, 02:50 صبح
سلام من میخام این کد رو به سی شارپ بنویسم.
اما از جنریتور های تبدیل کننده که استفاده کردم نشد ونتیجه نداد.
میشه این رو به سی شارپ تبدیل کنید؟



#include "stdafx.h"
#include "math.h"
#include "cstdlib"
using namespace std;
double *c = new double[50];
int main()
{
srand(100);
double s = 0, Nstep = 0;
for (int i = 0; i < s; i++)
c[i] = 0;
scanf_s("%lf %lf", &s, &Nstep);
double A = 0;
bool sw;
double AB = 0;
int k = 0;
for (int i = 0; i < Nstep; i++)
{
double IA = -(1 / 4)*(log((double)(1 - (rand() % 100) / 100.0)) / log(2.718281828));
A = A + IA;
int j = 0;
sw = false;
while (A < c[j])
{
j++;
if (j == s) { k++; sw = true; break; };
}
if (sw)
continue;
double X = -(2.4)*(log((double)(1 - (rand() % 100) / 100.0)) / log(2.718281828));
c[j] = A + X;
double m = c[1];
for (int j = 2; j < s; j++)
{
if (c[j] < m) m = c[j];
}
if (m>A) AB = AB + m - A;
}


printf("%lf \n %lf\n", k / Nstep, AB / A);
return 0;
}

Mofid.m
جمعه 28 فروردین 1394, 08:10 صبح
درود دوست عزیز.
این برنامه چی کار میکنه؟
من نوشتم ولی نمیدونم درسته یا نه؟
بیشتره وقتا خطا داره.OutOfRange
ولی با مقادیر ورودی s=10 , Nstep=5 کار میکنه.

البته از بعضی کداش سر در نیاوردم حدس زدم چیه، مثلا srand(100) که من تو برنامه خودم تابع رندم رو با next(100) اجرا کردم.
برسیش کن خبر بده
اگر درست نبود بگو درستش کنیم. کنجکاوم بدونم خروجیش چیه.



double s = 0, Nstep = 0;
double[] c = new double[50];


for (int i = 0; i < s; i++)
c[i] = 0;
s = Console.Read();
Nstep = Console.Read();
double A = 0;
bool sw;
double AB = 0;
int k = 0;
Random rand=new Random();
for (int i = 0; i < Nstep; i++)
{
double IA = -(1 / 4) * (Math.Log((double)(1 - (rand.Next(100) % 100) / 100.0)) / Math.Log(2.718281828));
A = A + IA;
int j = 0;
sw = false;
while (A < c[j])
{
j++;
if (j == s) { k++; sw = true; break; };
}
if (sw)
continue;
double X = -(2.4) * (Math.Log((double)(1 - (rand.Next(100) % 100) / 100.0)) / Math.Log(2.718281828));
c[j] = A + X;
double m = c[1];
for (int q = 2; q < s; q++)
{
if (c[q] < m) m = c[q];
}
if (m > A) AB = AB + m - A;
}


Console.WriteLine(k / Nstep);
Console.WriteLine(AB / A);


Console.ReadKey();

RIG000
جمعه 28 فروردین 1394, 10:36 صبح
5 که وارد میکنی خطای otu of renge میگیره و 10 که وارد میکنی مقدار بعدی رو دیگه ازم نمیگیره ...
اما تو خود c داره جواب میده ..... یعنی تو سی که اجراش کردم هر چی بدی بهش خروجی داره .. یعنی تو سی داره دو تا ورودیمیگره و سپس حساب میکنه و بهت دو تا خروجی میده ....
برنامه خودمم نمیدونم چیه یکی ازم خاسته کمکش کنم منم که نمیدونم چیکار میکنه این برنامه ... فردا هم تحویل داره ....

Mofid.m
جمعه 28 فروردین 1394, 11:13 صبح
درود به شما
ورودی رو 5 10 بده، ورودی اول، یه فاصله ورودی دوم

hoseinharami
جمعه 28 فروردین 1394, 11:42 صبح
سلام
اول ازش بپرس که این برنامه چی هست
برنامه نوشتن راحت تر از خطا گیریه

به جای Console.Read() بنویس :
((Convert.ToDouble(Console.ReadLine)
((Convert.ToDouble(Console.ReadLine)

RIG000
جمعه 28 فروردین 1394, 13:16 عصر
کمک شما جواب داد فعلا خروجی یه چیزی تومایعات همون کد سی شد...
حالا دیگه نمیدونم درست هست یا نه!!!
================
دوورودی ودو خروجی در سی شارپ
5
10
-----
0.5
infinity
==========================
===========================
دو ورودی و دو خروجی در سی
5
10
----------
0.500000
1.#INF00
==============

دیگر ورودی های دیگه هم میدم تو خروجی هاکه چک کردم درست هست و متشابه با هم...
نمیدونم حالا در کل درسته یانه....