PDA

View Full Version : دریف های پشت سر هم و جا به جایی آن ها



farhadamin
جمعه 18 آبان 1386, 22:45 عصر
اولا بگم که این کار دانش جویی نیست... که مطلب پاک نشه..و با تشکر از مسولان سایت

سلام یک برنامه می خواستم بنویسم که تغییرات زمان رو نبست به تغییرات دما از یک سمت دیوار بوتانی به سمت دیکه محاسبه می کنه....
تمام فرمول ها را دارم و حتی جواب را هم دارم ... اما نتونستم برنامه را بنویسم ... از دوستان خواهش می کنم در این رابطه کمکم کنند....
فرمول هایی که دارم این هاست
http://aycu36.webshots.com/image/33555/2004034002529197547_rs.jpg.

محدوده ای که توی مربع سبز است دیوار بتنی است.. و T1 هم دما در یک طرف دیوار یا دمای اولیه و Tend هم دمای سمت دیگه دیوار است که برابر است با Tend=T1+TH یعتی در سمت اول دیوار و تغییرات در طول دیوار که به ما از طریق کیبورد داده میشه ....
دیوار (به عنوان مثال) به 6 قسمت که با خط مشخص شده تبدیل شده.(در شکل بالا منظور از x همون دلتا اکس است).. که دوتا اندازه دوطرف به انداز Δx/2 است..
من حالا فرمول ها را می نویستم...
http://aycu15.webshots.com/image/34294/2003537582671701752_rs.jpg

دلتا اکس هم برابر است با اندازه دیوار (d) تقسم بر 100 برای تبدیل واحد به متر و n که تعداد تقسیمات دیوار است که در مثال 6 است.......

به جواب در پایین نکاه کنید برای توضیح این فرمول

یعنی هر T در ردیف بعدی برای است با معدل دما (T)در ردیف بالایی به توجه به خواب مسئله که درپایین آمده بیشتر این موضع را متوجع می شوید...


اعدای هم که از طریق فایل وردی به ما داده می شه به به ترتیب d,T1,TH,n
d انداز دیوار
T1 دمای اولیه
TH تغییر دما
n تعداد تقسیم بندی دیوار

جواب مسئله به صورت زیر است.

http://aycu12.webshots.com/image/33651/2005283745058422586_rs.jpg

جواب به این صورت باید به نمایش در آد که البته ستون و دیف اول نیازی نیست که در جواب باشد من برای فهم بهتر نوشتم...
همان طوری که در بالا گفتم جز ردیف اول که تعریف می شود بقیه ردیف ها از ردیف اول گرفته می شود.. به صورت

به این شکل توجه کنید..
http://aycu08.webshots.com/image/33407/2003830647091263365_rs.jpg

عدد 17.500 از جمع اعداد 15.000 و 20.000 و تقسیم بر دو گرفته شده.... و بقیه اعداد هم به همین صورت است ... ردیف اول هم باید از روی اعدادی که به صورت ورودی داده می شه ساخته بشه...

البته به همین صورت ادامه داره و توقف نداره.... یعنی ردیف های بعدی به همین صورت می آید تا به صورت دستی برنامه قطع بشه....

البته الان به این صورت است بعد باید به صورتی بنویسم که... زمانی که تمامی اعداد هر دریف اندازه شون نسبت به هم از 99% کمتر بود برنامه یا همون دور توقف پیدا کنه که الان برای من سخته نوشتنش..

این همه برنامه ای است که من نوشتم که به هیچ صراطی مسلط نیست...خودتون ببینید....


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

int main(void)
{

FILE *fp1,*fp2;
double d,T1,TH,n,t;
double Tend,deltaX,deltaT;
const double pcP=2.56*pow(10,6), Dumpe= 1.6;
double Temp[72];
int i;

fp1 = fopen("inddata.txt","r");
fp2 = fopen("uddata.txt", "w");


fscanf(fp1,"%lf%lf%lf%lf",&d,&T1,&TH,&n);

Tend=T1+TH;
deltaX=d/100/(n-1);
deltaT=(pow(deltaX,2)*pcP)/(Dumpe*2.);
t=T1+deltaX;



for (i=1;i>(n-1);i++)
{
Temp[i]=T1;
}
Temp[i]=Tend;

for (i=1;i>n;i++)
{
Temp[i]=(Temp[i-1]+Temp[i+1])/2;
}

Temp[0]=t;






for (i=1;i<=n;i++)

{
printf("\n%lf\t",Temp[i]);

}


fclose(fp1);
fclose(fp2);

}


که البته اعداد در فایل ورودی هم به صورت
6 5 15 20 است که
d= 20
T1=15
TH=5
n=6
است امیدوارم که متوجه منظورم شده باشید. این تمرین را می توانید توی کتاب برنامه نویسی الکساندر ملیک پیدا کنید.....




از کمکتون خیلی ممنونم یک مقدار هم عجله دارم...

emad_67
شنبه 19 آبان 1386, 00:03 صبح
مشکلاتی که در برنامت دیدم اینه که:


for (i=1;i>(n-1);i++)
{
Temp[i]=T1;
}



for (i=1;i>n;i++)
{
Temp[i]=(Temp[i-1]+Temp[i+1])/2;
}

این دو تا خلقه for هر دوشون غلط اند چون نوشتی i>n و چون n=6 است و i=1 کلا هیچ وقت شرط for درست در نمیاد . اصلا این دو حلقه اجرا نمیشن. در حلقه ها هم باید از 0 شروع کنی نه از 1. همچنین در حلقه زیر :


for (i=1;i<=n;i++)
{
printf("\n%lf\t",Temp[i]);

}

ضمنا شما اگه می خوای یه چیزی مثل عکسی که گزاشتی چاپ کنی بهتره از آرایه دو بعدی استفاده کنی.

emad_67
شنبه 19 آبان 1386, 00:18 صبح
در نهایت برنامتو با آرایه دو بعدی به صورت زیر تغییر دادم. البته همون مقدار هایی که داده بودی رو ست کردم و قسمت فایل ها رو به صورت comment در اوردم. اون اخرشم چون من c بلد نیستم با cout نوشتم که خودت تغییرش بده.
اگه سوالی بود هم در خدمتم. ضمنا یکی از جواب هایی هم که در عکس بالا گذاشتی اشتباه هست. با کامپایل برنامه خودت متوجه میشی.


#include <stdio.h>
#include <math.h>
#include<iostream.h>
#include<iomanip.h>
int main(void)
{
FILE *fp1,*fp2;
double d=20,T1=15,TH=5,n=6,t;
double Tend,deltaX,deltaT;
const double pcP=2.56*pow(5,6), Dumpe= 1.6;
double Temp[5][6];
int i,j;
/*
fp1 = fopen("inddata.txt","r");
fp2 = fopen("uddata.txt", "w");

fscanf(fp1,"%lf%lf%lf%lf",&d,&T1,&TH,&n);
*/
Tend=T1+TH;
deltaX=d/(50*(n-1));
deltaT=(pow(deltaX,2)*pcP)/(Dumpe*2.0);
t=T1+deltaX;

for (i=0;i<(n-1);i++)
{
Temp[0][i]=T1;
}
Temp[0][i]=Tend;
for (i=1;i<5;i++)
{
Temp[i][0]=T1;
for(j=1;j<n-1;j++)
{
Temp[i][j]=(Temp[i-1][j-1]+Temp[i-1][j+1])/2;
}
Temp[i][j]=Tend;
}
for (i=0;i<5;i++)
{
for(j=0;j<n;j++)
{
cout<<setw(10)<<setprecision(5)<<Temp[i][j];
if(j==n-1)
cout<<endl;
}
}
/*
fclose(fp1);
fclose(fp2);
*/
}

farhadamin
شنبه 19 آبان 1386, 00:25 صبح
اولین سوال ممنون ببین خروجی برنامه چه جوریه من جروجی از برنامه در یافت نمی کنم....
اعداد ورودی برای این مثال خاص این ها هستند و ممکنه عوض بشوند...
راستی این برنامه در سی هست نه در سی پلاس پلاس

emad_67
شنبه 19 آبان 1386, 00:34 صبح
اولین سوال ممنون ببین خروجی برنامه چه جوریه من جروجی از برنامه در یافت نمی کنم....
اعداد ورودی برای این مثال خاص این ها هستند و ممکنه عوض بشوند...

خروجی برنامه دقیقا مثل عکسی هست که گذاشتی.
موقع کامپایل به مشکل بر میخوری؟
من اعداد رو از همین هایی که دادی وارد کردم ولی شما قسمت هایی که رو من به صورت دستی مقدار دادم حذف کن و از همون فایل بخون.
ضما اگه با c کامپایل میکنی اون cout آخر رو هم با printf بنویس.

farhadamin
شنبه 19 آبان 1386, 00:42 صبح
خروجی برنامه دقیقا مثل عکسی هست که گذاشتی.
موقع کامپایل به مشکل بر میخوری؟
من اعداد رو از همین هایی که دادی وارد کردم ولی شما قسمت هایی که رو من به صورت دستی مقدار دادم حذف کن و از همون فایل بخون.
ضما اگه با c کامپایل میکنی اون cout آخر رو هم با printf بنویس.

#include <stdio.h>
#include <math.h>
int main(void)
{
FILE *fp1,*fp2;
double d,T1,TH,n,t;
double Tend,deltaX,deltaT;
const double pcP=2.56*pow(10,6), Dumpe= 1.6;
double Temp[5][6];
int i,j;

fp1 = fopen("inddata.txt","r");
fp2 = fopen("uddata.txt", "w");

fscanf(fp1,"%lf%lf%lf%lf",&d,&T1,&TH,&n);

Tend=T1+TH;
deltaX=d/(100*(n-1));
deltaT=(pow(deltaX,2)*pcP)/(Dumpe*2.0);
t=T1+deltaX;

for (i=0;i<(n-1);i++)
{
Temp[0][i]=T1;
}
Temp[0][i]=Tend;
for (i=1;i<5;i++)
{
Temp[i][0]=T1;
for(j=1;j<n-1;j++)
{
Temp[i][j]=(Temp[i-1][j-1]+Temp[i-1][j+1])/2;
}
Temp[i][j]=Tend;
}
for (i=0;i<5;i++)
{
for(j=0;j<n;j++)
{
fprintf(fp2,"%lf\t",Temp[i][j]);

}
}


fclose(fp1);
fclose(fp2);

}


هزار بار ممنون

ببین من برنامه را به شکل بالا کردم
چند تا مشکل وجود داره...
اول این که اعداد همه پشت سر هم می یان . یعنی بعد از ردیف اول به ردیف دوم نمی ره....
دوم این که این تعداد ردیف ها باید ادامه داشته باشد ...یعنی تعداد ردیف ها باید بیشتر باشه و ما خودمون به صورت دستی (البته فعلا) محاسبه را قطع کنیم......

emad_67
شنبه 19 آبان 1386, 00:54 صبح
اول این که اعداد همه پشت سر هم می یان . یعنی بعد از ردیف اول به ردیف دوم نمی ره....

بعد از خط :


fprintf(fp2,"%lf\t",Temp[i][j]);

باید بنویسی :


if(j==n-1)
//new line ("\n")

که بازم نمیدونم با c چه جوری "n\" یا endl رو میزنن که خودت زحمتشو بکش.

دوم این که این تعداد ردیف ها باید ادامه داشته باشد ...یعنی تعداد ردیف ها باید بیشتر باشه و ما خودمون به صورت دستی (البته فعلا) محاسبه را قطع کنیم......
برای این کار هم کافیه که تعداد سطر های آرایه دو بعدی رو هر چقدر میخوای قرار بدی. البته توی حلقه های for هم باید تعداد سطر ها رو با مقدار جدید جایگزین کنی

farhadamin
شنبه 19 آبان 1386, 01:03 صبح
ببین اونی رو که گفتی نوشتم اما هنوط کار نمی کنه..

{
fprintf(fp2,"%lf\t",Temp[i][j]);
if(j==n-1)
{
("\n");
}
}

دوم این من سی رو از روی یک کتاب انگلیسی تازه شروع کردم منظورم از مقدار ارایه دو بعدی چیه و کجا باید عوضش کنم...

ببحشید گیر تازه کار افتادی دیگه.....:تشویق::عصبانی++:
ممنون

farhadamin
شنبه 19 آبان 1386, 01:06 صبح
for(j=0;j<n;j++)
{
fprintf(fp2,"%lf\t",Temp[i][j]);
if(j==n-1)
{
fprintf(fp2,"%lf\n",Temp[i][j]);
}
}
کد اول رو این جوری نوشتم درست شد.... اما نمی دونم به قول شما بهینه است یا نه.....ممنون ..
اماسوال دوم هنوز حوابشو نمی دونم.....زودی می نویسم می ترسم بی بخوابی سوالام بمونه
راستی ردیف آخر هم دوبار تکرار می شه.....یعنی عدد 20 دوبار می یاد بدون تغییر

emad_67
شنبه 19 آبان 1386, 01:18 صبح
راستی ردیف آخر هم دوبار تکرار می شه.....یعنی عدد 20 دوبار می یاد بدون تغییر
دلیلش اینه که باید در داخل if فقط کدی رو بنویسی که بره خط بعد ولی الان جوری نوشتی که هم عدد آخر رو چاپ میکنه و هم میره خط بعد.
از نظر بهینه بودن هم بهینه هست چون راه دیگه ای نداره.

farhadamin
شنبه 19 آبان 1386, 01:23 صبح
دلیلش اینه که باید در داخل if فقط کدی رو بنویسی که بره خط بعد ولی الان جوری نوشتی که هم عدد آخر رو چاپ میکنه و هم میره خط بعد.
از نظر بهینه بودن هم بهینه هست چون راه دیگه ای نداره.


{
fprintf(fp2,"%lf\t",Temp[i][j]);
if(j==n-1)
{
fprintf(fp2,"\n");
}
}ممنون این جوریش کردم درست شد... اما سوال دیگمو دقیقه نمی دونم کدوم پارایه دوبعدی رو بادی عوض کنم.....
هزار باز ار لطفت ممنون کاش بتونم یه جوری جبران کنم...

emad_67
شنبه 19 آبان 1386, 01:30 صبح
... اما سوال دیگمو دقیقه نمی دونم کدوم پارایه دوبعدی رو بادی عوض کنم.....

توی برنامت به این صورت تعریف شده:


double Temp[5][6];

برای اینکه تعداد سط های بیشتری داشته باشی فقط عدد 5 اونو به عدد مورد نظر خودت تغییر بده.
در خلقه های for هم که به این صورت هست:


for (i=1;i<5;i++)
{
for(j=1;j<n-1;j++)
{

باید i رو کوچکتر از عدد مورد نظر خودت قرار بدی.

هزار باز ار لطفت ممنون کاش بتونم یه جوری جبران کنم...

خواهش میکنم... کاری نکردم.
موفق باشی

farhadamin
شنبه 19 آبان 1386, 01:46 صبح
خیلی ممنون

برنامه را همون جوری که می خواستم کار می کند بازهم ممنون .
حالا باید شروع کنم یک جوری برنامه رو بنویسم که اون i به صورت دستی وارد نشود.
وقتیکه توی ردیف آخر تفاضل دو عدد کناری بین نودو نه در صد و یا صد درصد کمتر است برنامه خودش متوقف بشود.
که البته فکر کنم هنوز یک مقدار زود است برای نوشتن ... ولی نمی دونم
باز هم ممنون و به امید همکاری های بیشتر:لبخندساده::بامزه: و کمکتون
اگر در این مورد هم نظری دارید ممنون می شوم که بدانم

emad_67
شنبه 19 آبان 1386, 09:45 صبح
وقتیکه توی ردیف آخر تفاضل دو عدد کناری بین نودو نه در صد و یا صد درصد کمتر است برنامه خودش متوقف بشود.
درست متوجه نشدم که می خوای چیکار کنی. یه مثال بزن.
ولی در همون حلقه کافیه که این چیزی رو که میخوای محاسبه کنی و یه شرط بزاری که اگه فلان مقدار شد حلقه رو break کنه.

farhadamin
شنبه 19 آبان 1386, 22:36 عصر
درست متوجه نشدم که می خوای چیکار کنی. یه مثال بزن.
ولی در همون حلقه کافیه که این چیزی رو که میخوای محاسبه کنی و یه شرط بزاری که اگه فلان مقدار شد حلقه رو break کنه.
سلام و ممنون
ببین ردیف ها به این صورت هستند دیگه (این یه مثاله)

20.000 19.456 18.230 17.300 16.000 15.000
می خوام وقی ردیفی در برنامه به وحود امد که دو عدد کناری اختلافشون از هم دیگه بین 1.05 و 0.95 بود برنامه متوقف بشه.
یعنی به صورت (این هم یک مثاله)

20.000 19.000 18.050 17.000 15.950 15.000

البته من سعی کردم که با break . بنویسم که کار نکرد...


while(1)
{

if(0.95<=Temp[i][j+1]-Temp[i][j],Temp[i][j+1]-Temp[i][j]<=1.05)
break;

ببین چگونه مبشه نمودار های این برنامه را رسم کرد...منظورم JSP و اون یکی که نمی دونم توی ایران بهش چی میگم .

emad_67
شنبه 19 آبان 1386, 23:58 عصر
تو یه حلقه for به همین صورتی که نوشتی چک کن. البته توی شرط به جای , باید از && استفاده کنی که معادل همون "," است.

منظورم JSP و اون یکی که نمی دونم توی ایران بهش چی میگم .
در این مورد اطلاعی ندارم

farhadamin
یک شنبه 20 آبان 1386, 14:24 عصر
منظورت این جوریه




[CODE] for(0.95<=Temp[i][j+1]-Temp[i][j]&&Temp[i][j+1]-Temp[i][j]<=1.05)
{
break;

emad_67
یک شنبه 20 آبان 1386, 14:50 عصر
این خط رو به برنامت اضافه کن:


bool flag=1;
و این دو تا حلقه رو هم در برنامت جایگزین قبلیا کن.


for (i=1;i<20 && flag;i++)
{
Temp[i][0]=T1;
for(j=1;j<n-1;j++)
{
Temp[i][j]=(Temp[i-1][j-1]+Temp[i-1][j+1])/2;

if(0.95<=Temp[i][j]-Temp[i][j-1] && Temp[i][j]-Temp[i][j-1]<=1.05)
flag=0;
}
Temp[i][j]=Tend;
}
و


for (int k=0;k<i;k++)
{
for(j=0;j<n;j++)
{
cout<<setw(10)<<setprecision(5)<<Temp[k][j];
if(j==n-1)
cout<<endl;
}
}

تعداد سطر های آرایه دو بعدی رو هم 20 تا قرار بده. تا متوقف شدن برنامه رو ببینی.

farhadamin
یک شنبه 20 آبان 1386, 19:36 عصر
#include <stdio.h>
#include <math.h>
int main(void)
{
FILE *fp1,*fp2;
double d,T1,TH,n,t;
double Tend,deltaX,deltaT;
const double pcP=2.56*pow(10,6), Dumpe= 1.6;
double Temp[100][100];
int i,j;
bool flag=1;

fp1 = fopen("inddata.txt","r");
fp2 = fopen("uddata.txt", "w");

fscanf(fp1,"%lf%lf%lf%lf",&d,&T1,&TH,&n);

Tend=T1+TH;
deltaX=d/(100*(n-1));
deltaT=(pow(deltaX,2)*pcP)/(Dumpe*2.0);
t=T1+deltaX;

for (i=0;i<(n-1);i++)
{
Temp[0][i]=T1;
}
Temp[0][j]=Tend;
for (i=1;i<20 && flag;i++)
{
Temp[i][0]=T1;
for(j=1;j<n-1;j++)
{
Temp[i][j]=(Temp[i-1][j-1]+Temp[i-1][j+1])/2;

if(0.95<=Temp[i][j]-Temp[i][j-1] && Temp[i][j]-Temp[i][j-1]<=1.05)
flag=0;
}
Temp[i][j]=Tend;
}
for (int k=0;k<i;k++)
{
for(j=0;j<n;j++)
{
fprintf(fp2,"%5.3lf\t",Temp[i][j]);
if(j==n-1)
{
fprintf(fp2,"\n");
}
}
}

fclose(fp1);
fclose(fp2);

}




سلام من گفته شما برنامه را این جوری کردم اما فقط صفر چاپ می کنه نمی دونم کجا رو اشتباه کرد.

emad_67
دوشنبه 21 آبان 1386, 00:07 صبح
چرا آرایه رو 100*100 کردی؟
گفتم فقط سطر اونو 20 بزار یعنی:


double Temp[20][6];

farhadamin
دوشنبه 21 آبان 1386, 13:11 عصر
چرا آرایه رو 100*100 کردی؟
گفتم فقط سطر اونو 20 بزار یعنی:


double Temp[20][6];

سلام ممنون..امتحانش کرده بودم کار نمی کرد..... الان با این کار خروجی به صورت
0.000 0.000 0.000 -0.000 0.000 -0.000 است.
البته من خط آخری ر که شما نوشته بودید را نفهمیدم چیه و برنامه هم بهش گیر می داد... ممنون از لطفت......منطورم اینه که من به صورت fprintf نوشتم.
[code]
cout<<setw(10)<<setprecision(5)<<Temp[k][j];

[code]

emad_67
دوشنبه 21 آبان 1386, 16:05 عصر
آرایه رو 6*20 کن.
توی این خط نوشتی:


Temp[0][j]=Tend;

که باید اینجوری مینوشتی:


Temp[0][i]=Tend;

توی حلقه ای که برای چاپ هست هم باید به جای i مقدار k رو قرار بدی.


for (int k=0;k<i;k++)
{
for(j=0;j<n;j++)
{
fprintf(fp2,"%5.3lf\t",Temp[k][j]);
if(j==n-1)
{
fprintf(fp2,"\n");
}
}
}

farhadamin
دوشنبه 21 آبان 1386, 16:50 عصر
برنامه کار می کنه نسبتا اما فقط برای همین ورودی خاص زمانی که ورودی ها عوض می شن.. فقط ردیف اول تکرار میشه...

در ضمن ردیفی که برنامه روش متوقف می شه... اینه

15.000 15.873 16.746 17.794 18.843 20.000

که رابطه ای که می خوایم که اختلاف دو ردیف کناری بین 0.95 تا 1.05 باشه توش بر قرار نیست...
ممنون از کمکت

emad_67
دوشنبه 21 آبان 1386, 17:30 عصر
اگه مقدار n رو در فایل تغییر بدی باید تعداد ستون های آرایه رو هم همون n قرار بدی.
برنامه هم برای مقدار های مختلف که من تست کردم درست کار میکنه.
این برنامه رو کامپایل کن. فقط مقدار بزار همون 6 بمونه توی فایل ورودی.


#include <stdio.h>
#include <math.h>
int main(void)
{
FILE *fp1,*fp2;
double d,T1,TH,n,t;
double Tend,deltaX,deltaT;
const double pcP=2.56*pow(10,6), Dumpe= 1.6;
double Temp[20][6];
int i,j;
bool flag=1;

fp1 = fopen("inddata.txt","r");
fp2 = fopen("uddata.txt", "w");

fscanf(fp1,"%lf%lf%lf%lf",&d,&T1,&TH,&n);

Tend=T1+TH;
deltaX=d/(100*(n-1));
deltaT=(pow(deltaX,2)*pcP)/(Dumpe*2.0);
t=T1+deltaX;

for (i=0;i<(n-1);i++)
{
Temp[0][i]=T1;
}
Temp[0][i]=Tend;
for (i=1;i<20 && flag;i++)
{
Temp[i][0]=T1;
for(j=1;j<n-1;j++)
{
Temp[i][j]=(Temp[i-1][j-1]+Temp[i-1][j+1])/2;

if(0.95<=Temp[i][j]-Temp[i][j-1] && Temp[i][j]-Temp[i][j-1]<=1.05)
flag=0;
}
Temp[i][j]=Tend;
}
for (int k=0;k<i;k++)
{
for(j=0;j<n;j++)
{
fprintf(fp2,"%5.3lf\t",Temp[k][j]);
if(j==n-1)
{
fprintf(fp2,"\n");
}
}
}

fclose(fp1);
fclose(fp2);

}


که رابطه ای که می خوایم که اختلاف دو ردیف کناری بین 0.95 تا 1.05 باشه توش بر قرار نیست...
اگه منظورت اینه که این شرط برای همه ستون ها برقرار باشه، این طور کار نمیکنه. در واقع وقتی به اولی دو ستونی که این شرط براشون برقرار باشه برنامه سطر فعلی رو کامل میکنه و تموم میشه

farhadamin
دوشنبه 21 آبان 1386, 19:27 عصر
ممنون از کمک هات اما ببین توی خروجی آخر این دو عدد دیده میشه
15.000 15.873
که شرط برنامه منبی بر اختلاف ببین 0.95 و 1.05 توش دیده نمیشه یعنی برنامه نباد این حا متوقف بشه و باید ردیف های بعدی رو بسازه...
البته این اشکال در عدد های دیگه هم دیده میشه...
بازم ممنون از کمکت...
اگه شد درمورد این تغییرات آخر هم برام بنویس نفهمیدم دقیقا چی کار کردی....

emad_67
دوشنبه 21 آبان 1386, 23:10 عصر
خروجی برنامه طبق اعدادی که گذاشته بودی اینه:


15.000 15.000 15.000 15.000 15.000 20.000
15.000 15.000 15.000 15.000 17.500 20.000
15.000 15.000 15.000 16.250 17.500 20.000
15.000 15.000 15.625 16.250 18.125 20.000
15.000 15.313 15.625 16.875 18.125 20.000
15.000 15.313 16.094 16.875 18.438 20.000
15.000 15.547 16.094 17.266 18.438 20.000
15.000 15.547 16.406 17.266 18.633 20.000
15.000 15.703 16.406 17.520 18.633 20.000
15.000 15.703 16.611 17.520 18.760 20.000
15.000 15.806 16.611 17.686 18.760 20.000
15.000 15.806 16.746 17.686 18.843 20.000
15.000 15.873 16.746 17.794 18.843 20.000
در سر آخر درسته که این دو تا عددی که گفتی دیده میشه ولی توی شرط صدق نمیکنه و برنامه ازش رد میشه در واقع وقتی میرسه به این اعداد:


16.746 17.794

مقدار flag برابر 1 میشه و اینجاست که باید برنامه تموم بشه. ولی چون من دیدم که اینجوری یه خط نصفه میمونه و وقتی بخوای آرایه رو چاپ کنی هم به مشکل بر میخوری جوری نوشتم که خط فعلی رو کامل کنه و بعد برنامه تموم بشه. یه بار دیگه هم میگم که وقتی برنامه به اولین دو عددی که در شرط صدق میکنه برسه مقدار flag برابر 1 میشه و خط های بعدی دیگه ساخته نمیشن.

اگه شد درمورد این تغییرات آخر هم برام بنویس نفهمیدم دقیقا چی کار کردی....منظورت کجاشه؟

farhadamin
دوشنبه 21 آبان 1386, 23:32 عصر
نه باید کل خط رد بشه یعنی باید شرط برای همه اعداد خط مصداق داشته باشه.

emad_67
دوشنبه 21 آبان 1386, 23:41 عصر
اینشو دیگه خودت بنوس

farhadamin
سه شنبه 22 آبان 1386, 00:04 صبح
اینشو دیگه خودت بنوس
هزار بار ممنون از لطفت تا این جا.... یعنی در اصل همشو شما نوشتی... دستت درد نکنه....

می نویسم فقط اگه شد کد را میگذارم این جا اگه تونستی نگاهش کن.