برگزیده های پرشین تولز

آموزش C++ سي پلاس پلاس از پايه

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
اين هم همان برنامه 2 پست قبل است ولي جوري نوشته ايم كه تابع مقدار برگرداند. و مقدار هم ، همان مجذور 5 يعني 25 است.


116.gif


چون تابع مقدار برمي گرداند ، بايد حواسمان باشد كه ظرفي آماده كنيم كه آن مقدار را تحويل بگيريم. و اين ظرف در برنامه ما majzoor است . نوع آن int است. چون تابع int برمي گرداند.
ورودي تابع هم int است. خروجي را قبل اسم تابع مي نويسند و ورودي را داخل پرانتز بعد اسم تابع مي نويسند.
برويد header هاي مختلف را كنيد و ببينيد ورودي و خروجي آنها چيست. و به اين ترتيب از آنها استفاده كنيد. ولي گاهي مشكل است اين كار كه از مثالهاي توربو سي و سورسهايي كه از جاهاي مختلف پيدا مي كنيد استفاده كنيد.
سايت پلانت يكي از منابع اين سورس هاست. سعي كنيد beginner ها را دانلود كنيد . چون حرفه اي ها بزرگ است و حجم زياد برنامه رديابي ها را مشكل مي كند.
.

کد:
#include <conio.h>		
#include <iostream.h>				

int f1(int);
 
void main()						
{		
clrscr();char c ;
 menu:
 // ----------- shoroe ghaaleb -------------
   int majzoor;
   majzoor=f1(5);
    cout<<"majzoor="<<majzoor<<endl;
 // ----------- entehaye ghaaleb -----------
 cout<<"----------------------new run"<<endl;
	c=getch();if(c != 'x') goto menu;				
}

int f1(int x)
{
int y;
y=x*x;
return y ;

}
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از M I N A :

.
شما دوست گرامي بهتره كه برنامه اتان را اينجا شرح دهيد تا خواننده ها بدانند سطح و موضوع چيه . خيلي ها اينجا متخصص هستند ولي با نامه وقت ندارند پيگيري كنند.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
من داشتم همون پروژه گرافيكي را كار مي كردم كه دچار مشكلي شدم.
و آن اين بود كه نمي توانستم در حالت گرافيكي ، اعداد را چاپ كنم. تصميم گرفتم كه اعداد را به رشته تبديل كنم و بعد چاپ كنم. البته شايد مي شد اعداد را در حالت گرافيكي چاپ كرد ولي من بلد نبودم.
حالا مي خواهم اين تابع (( تبديل عدد به رشته )) را اين جا بگويم.
من يك سورس داشتم . در تاپيك ((يك ساعت گرافيكي)) اين سورس را گذاشته ام.

من از اين سورس خيلي چيزها يادگرفته ام. تبديل عدد به رشته را هم نويسنده اين سورس استفاده كرده.
او از تابع itoa استفاده كرده. من براي خودم مي خوانم (( int ،، to ،، askii )) ولي نمي دانم مخفف چيست. Ltoa هم داريم كه ميشه (( long به ....)) و utoa كه ميشه (( unsighn به ...))

من رفتم به index از help توربو سي و سينتكس آن را ديدم و يك مثال هم براي itoa زده بود كه در زير عينا آورده ام.

کد:
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
   int number = 12345;
   char string[25];

   itoa(number, string, 10);
   printf("integer = %d string = %s\n", number, string);
   return 0;
}

من كمي تغييرش دادم تا به قالبهاي خودم شبيه بشه.

کد:
#include <conio.h>		
#include <iostream.h>				
#include <stdlib.h>
void main()						
{		
clrscr();char c ;
 menu:
 // ----------- shoroe ghaaleb -------------
 


   int number = 12345;
   char string[25];

   itoa(number, string, 10);
   //printf("integer = %d string = %s\n", number, string);
   cout<<"integer="<<number<<"    string="<<string<<endl;


 // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
	c=getch();if(c != 'x') goto menu;				
}

نكته : اين تابع در stdlib.h است. پس include كردن آن بالاي برنامه فراموش نشود.

در اين header داريم:

کد:
char   *_CType itoa(int __value, char *__string, int __radix);

سه نوع ورودي مي گيرد اين تابع و خروجي اش هم char است.
در help توربو سي گفته radix عددي بين 2 و 36 است. و اين توضيح را داده:


Specifies the base to be used in converting value

If value is negative and radix is 10, itoa and ltoa set the first character
of string to the minus sign (ultoa does not).

من منظورشو نفهميدم. اگه كسي مي داند توضيح بدهد. فعلا 10 مي گذاريم تا بعدا بفهميم چيه.
.
 

mostafa_gm

Registered User
تاریخ عضویت
4 آپریل 2005
نوشته‌ها
1,863
لایک‌ها
438
محل سکونت
My House
radix مبنای عددی هست که باید به رشته تبدیل بشه.
فکر میکنم شما اینجا با مبنای 10 کار میکنی(decimal)
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

122a1.gif


مفهومي كه از عكس بالا مي خواهيم بگيم اينه كه هر تابع بعد اين كه احضار ميشه ، دستوراتش تك –تك اجرا ميشه و وقتي به پايان مي رسه ، كنترل برنامه برمي گردد به خط بعدي برنامه اصلي. يعني اگر در خط 10 برنامه اصلي تابع احضار شده بود وقتي كه خطوط تابع اجرا شد ، مي رود به خط 11 از برنامه اصلي. البته نكته خيلي ساده اي بود ولي چون عكسش قشنگ بود پست كردم. آن فانكشن 3 را نگاه كنيد. اون به فانكشن دو وابسته است و فانكشن 2 براش مثل برنامه اصلي مي ماند.
.

122a2.gif


در شكل بالا ، دو روش تعريف تابع را مي بينيد ، دومي به گفته sams ميشه بگي clear تر است. يعني وضوح و خوانايي بهتري دارد.

البته قبلا گفتيم. ولي ((تعريف تابع)) و ((خود تابع)) ، 2 فرق با هم دارند. اولي بدنه نداره و سمي كالن داره. دومي بدنه داره و سمي كالن نداره. منظور از بدنه همان كدهاي تابع است كه تابع را بخاطر آن احضار مي كنيم.


122a3.gif


منظور از شكل بالا اينه كه بگيم كه درسته كه تابع l و w مي خواهد . ولي هر چي كه int باشه بهش بديم خودش l و w فرض مي كنه و محاسبات را شروع مي كنه.
بعد بازگشت ميده نتيجه را ( return ميكنه ) به آن متغير areaofyard كه براي تحويل گرفتن خروجي آماده كرده بوديم.


122a4.gif


در شكل بالا دو تابع را مي بينيم كه اولي خروجي داره كه در اسم تابع هم كلمه long آمده و دومي خروجي نداره و با void معرفي شده . و كارش فقط چاپ است و چيزي را برنمي گرداند.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
متغيرها :
متغيرها از دو جهت ،
مي توانند دسته بندي شوند.
يكي قلمروي عمل آنها
و دومي طول عمر آنها.
)))))))(((((((((((((((
و حالا مي خواهم ابتدا راجع به متغير محلي صحبت كنم.
در كتاب جناب جعفرنژاد قمي(آموزش سي) ، براي معرفي متغير محلي ، آمده قسمتي از برنامه اصلي را با كروشه جدا كرده و فرموده :در داخل اين كروشه ها ، متغيرهايي كه تعريف مي شوند ، محلي هستند و با بيرون كروشه ارتباطي ندارند.
بگذاريد مثالش را بگم. اين طوري نميشه. البته ذهني مي گم. كتاب الان دم دستم نيست.


123a1.gif


123a2.gif


در برنامه بالا ، قسمتي كه با رنگ آبي نشان داده شده ، يك محله جدا و ايزوله محسوب مي شود. متغير b نمي تواند به آنجا نفوذ كند. من عمدا داخل اين قطعه محصور به b مقدار ندادم كه نتيجه را ببينيد. مي بينيد كه عددي بي معني چاپ شده وقتي كه داخل كروشه خواسته ايم مقدارش را بدانيم ولي بيرون كروشه مقدارش 2 است.
راجع به متغير a قضيه فرق دارد. فلش هاي زرد را به اين علت من كشيدم كه بگويم به همه قسمتهاي برنامه دسترسي دارد اين متغير. و عمومي نام دارد.
البته من داخل main به آن مقدار دادم ولي اگر مقدار ندهيم صفر در آن به طور پايه وجود خواهد داشت و اين نكته اي بود كه دوست عزيزمون در همين تاپيك به من ياد داد.
يعني اگر بيرون main متغيري تعريف كنيم مقدار اوليه داره ولي اگر داخل main تعريف كنيم مقدار اوليه نداره . مثل همين b داخل كروشه كه عددي بي معني چاپ ميشه.
ميشه گفت كه هم b داخل كروشه و هم b خارج كروشه محلي اند . چون به قلمرو همديگر نمي توانند نفوذ كنند.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
اين دو روز كه من برنامه نويسي سي تمرين مي كردم ، به خيلي چيزا پي بردم كه اشاره مي كنم.

اول اين كه 3 تا 4 برابر زماني را كه به نوشتن كدها اختصاص مي دهيد به نظم دادن به كدها بپردازيد.
البته من صاحب نظر نيستم ولي اگر نخواهم تجربياتم را اينجا بگم پس مي خوام چي بگم؟
كتاب را كه همه دارند.
اين نظم دهي شامل :
اول كامنت نويسي كه خيلي مهم است.
دوم تغيير نام متغيرها و توابع و header ها به اسم هاي با معني.
ممكنه چندين بار نام ها را عوض كنيد. بايد جوري باشه كه تا نگاه مي كنيد بفهميد وظيفه اش چيه.

سوم فاصله دادن. كه مي تونه كم كردن فواصل باشه يا زياد كردن . دندانه دار كردن هم مهم است. دندانه دار كردن يعني يك قسمت را با space جلو ببريد تا واضح بگه چه ارتباطي با بقيه داره.

چهارم يادگيري دوباره مفاهيم پايه. كه حالا در زير مي خواهم راجع به اين چهارمي بگم.
{{{{{{{{{{{{{{{{{{}}}}}}}}}}}}}}}}}}}}

من امروز يك اشتباهي كردم كه هم جالب بود و هم عذاب آور.
من آمدم تمام متغيرها را بيرون main مقدار دهي كردم. تا اينجا هيچ مشكلي نبود. چون ديگه نمي خواست به قلمرو متغيرها فكر كنم. ولي ديگه سي را خيلي مهربان دانستم و آمدم يكي از متغيرها را همان بيرون main مقدار دهي كردم. و نمي دانستم اين كار غير مجازه.
نتيجه اين كه مدام كامپايلر امتناع و error مي داد و من اصرار و علامت سئوال در ذهنم.
حتي فكر مي كردم كامپيوتر قاطي كرده و reset كردم. ولي باز همان error .

حالا منظورم از گفتن داستان اينه كه معمولا افراد به دو علت در پروژه هايشان گير مي كنند.
يكي بي نظمي .
دوم بلد نبودن مفاهيم پايه. مثل من كه نمي دانستم بيرون main جاي هر كاري نيست.

كلا: در سي اگر متغيرها را درك كني ، سي ميشه عبد و عبيد.
چون تنها تفاوت سي با بقيه زبانها اينه كه كمي در اين مورد پيچيده است.
وگرنه تعريف و استفاده از تابع فرقي با بقيه زبانها نداره.

و اينم بگم كه سي با توابعش شخصيت پيدا مي كند . و خيلي هم از لحاظ داشتن توابع قوي معركه است. از توابعي كه مثل اسمبلي به هر جا سرك مي كشند گرفته تا توابعي كه كارهاي سطح بالا انجام مي دهند.
ولي حتي در بكارگيري توابع آماده سي هم باز اين انواع متغيرهاست كه مزاحمت ايجاد مي كند.
البته با وجود بزرگان سايت ، نبايستي من از اين نظرها بدهم ولي من اظهار نظر مي كنم و اگه غلط بود يا تكميل نياز داشت دوستان مرحمت مي كنند.

كلا و ختم كلام: اگر با كامپايلر درگير شديد بايد ببينيد در كجا مي لنگيد و يك بار اساسي اون مبحث را يا مطالعه كنيد يا برويد در يك برنامه كوچك كارهاي خود را به انواع مدلها امتحان كنيد تا بفهميد كجا را داريد بيراه مي رويد. بقولي هميشه حق با كامپايلر است.
بايد جوري بشه كه تا دست به كيبورد مي شيم برنامه ما بهش يك قسمت اضافه بشه. و ورژنش بره بالا و اگر درگير شديد با خطاها ، بهتره فكر اساسي تري بكنيد به جاي با بي نظمي ادامه دادن. ديگه روضه بسه .

من قبل از اين كه مثال كتاب آقاي جعفرنژاد را بگم ، مي خواستم بگم كه داخل يك تابع كه مثل يك جزيره بيرون main نشسته ، متغيرها هم موضعي اند و هم موقتي.

يعني هم ميرا هستند و هم محدود به اين جزيره.
من عادت دارم از توابع به شكل زيربرنامه استفاده مي كنم تا در كدنويسي صرفه جويي كنم. البته همه اين كار را مي كنند.
و عادت دارم كه يك زيربرنامه را در اختيار قسمتهاي زيادي مي گذارم. يعني توابع زيادي از يك تابع استفاده مي كنند و صداش مي كنند. البته همه اين كار را مي كنند.

و خيالم راحته كه وقتي تابع a آن را صدا مي كنه و بعد تابع b آن را صدا مي كنه، هيچ يك از a و b خبر ندارند كه مملوك آنها ارباب ديگري هم دارد. چون متغيرها به محض طرد تابع( يعني return آن به تابع صدا زننده ) همه مي ميرند و وقتي دوباره صدا بشه ، دوباره زنده مي شوند. پس هر كس تابعي را صدا مي كنه ، نمي داند كه قبلا آيا اين تابع صدا شده يا نه. يعني تابع حافظه اي از گذشته ندارد. و متغيرهايش هميشه به نوعي هميشه آكبند و صفركيلومترند.
به زبان كامپيوتري اين طور ميشه كه فضايي كه موقع احضار تابع به متغيرهاي آن داده ميشه ، بعد خاتمه كار تابع آزاد ميشه و پس گرفته ميشه.

تكرار بحث اين كه متغيرها دو صفت دارند ، طول عمر و دامنه يا scope يا قلمرو. در مورد تابع هاي ما هر دوي اينها روي حداقل است . يعني ميرا و موضعي.
.
 

shazdeh kocholo

Registered User
تاریخ عضویت
28 مارس 2005
نوشته‌ها
710
لایک‌ها
50
محل سکونت
Tehran
من یه مشکلی دارم .
در حلقه for دوم بعد از اینکه 3بار حلقه محاسبات رو انجام میده وقتی از حلقه خارج میشه مقدار متغیر
f[0]​
رو تغییر میده: من از دیشب تا حالا باهاش ور رفتم نفهمیدم.:wacko:
این هم خود برنامه :

کد:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
int main()
{
int i,j,k;
float x[4],f[4];
for(i=0;i<=3;i++)
	scanf("%f%f",&x[i],&f[i]);
float df[3][3],d2f[2][2][2],d3f;
for(i=0,j=1;i<=2,j<=3;i++,j++)
	df[i][j]= (f[j]-f[i])/(x[j]-x[i]);
for(i=0,j=1,k=2;i<=1,j<=2,k<=3;i++,j++,k++)
	d2f[i][j][k]= (df[j][k]-df[i][j])/(x[k]-x[i]);
d3f = (d2f[1][2][3]-d2f[0][1][2])/(x[3]-x[0]);
float X = -1.5;
float px;
px =f[0]+(X-x[0])*df[0][1]+(X-x[0])*(X-x[1])*d2f[0][1][2]+(X-x[0])*(X-x[1])*(X-x[2])*d3f;
printf("%f",px);
return 0;
}
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
کد:
for(i=0,j=1;i<=2,j<=3;i++,j++)
  df[i][j]= (f[j]-f[i])/(x[j]-x[i]);
بجاي سينتكس بالا سينتكس پايين را بكار ببريد شايد درست بشه. ولي من هنوز چيزي را تست نكرده ام. امتحان مي كنم.

کد:
for (i=0;i<=2;i++)
for (j=1;j<=3;j++)
df[i][j]= (f[j]-f[i])/(x[j]-x[i]);
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
اگر در help توربوسي برويد به index و روي string.h كليك كنيد ، به صفحه زير مي رسيد. كه ليست توابع اين header است.
من حالا ميرم توي مثالهاي توربوسي مي گردم ببينم چي گيرم مياد. مي خواهيم كمي رشته كار كنيم.
قبلا دو تا از آنها را كار كرده ايم. Strlen كه طول رشته را مي داد و strcat رشته هايي را مي ريخت درون يك رشته بزرگتر.
.

127.gif

.
 

shazdeh kocholo

Registered User
تاریخ عضویت
28 مارس 2005
نوشته‌ها
710
لایک‌ها
50
محل سکونت
Tehran
به نقل از saalek :
کد:
for(i=0,j=1;i<=2,j<=3;i++,j++)
  df[i][j]= (f[j]-f[i])/(x[j]-x[i]);
بجاي سينتكس بالا سينتكس پايين را بكار ببريد شايد درست بشه. ولي من هنوز چيزي را تست نكرده ام. امتحان مي كنم.

کد:
for (i=0;i<=2;i++)
for (j=1;j<=3;j++)
df[i][j]= (f[j]-f[i])/(x[j]-x[i]);
نه نشد. حتی ارور هم میده حالا :
کد:
ّFloating point : Invalid
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از shazdeh kocholo :

من اين برنامه را اجرا كردم.
هيچ خطايي نمي دهد. و پي ايكس را چاپ مي كند. من نمي دونم اين عدد چيه . شما هيچ توضيحي نداديد. ولي برنامه اعدادي را مي گيره و خروجي مي دهد بيرون. بي هيچ خطايي.
.
کد:
#include <conio.h>		
#include <iostream.h>				
				
void main()						
{		
clrscr();char c ;
 menu:
 // ----------- shoroe ghaaleb -------------
 

int i,j,k;
float x[4],f[4];

for(i=0;i<=3;i++)
cin >> x[i]>>f[i];

float df[3][3],d2f[2][2][2],d3f;

for (i=0;i<=2;i++)
for (j=1;j<=3;j++)
df[i][j]= (f[j]-f[i])/(x[j]-x[i]);

for (i=0;i<=1;i++)
for (j=1;j<=2;j++)
for (k=2;k<=3;k++)
d2f[i][j][k]= (df[j][k]-df[i][j])/(x[k]-x[i]);

d3f = (d2f[1][2][3]-d2f[0][1][2])/(x[3]-x[0]);
float X = -1.5;
float px;
px =f[0]+(X-x[0])*df[0][1]+(X-x[0])*(X-x[1])*d2f[0][1][2]+(X-x[0])*(X-x[1])*(X-x[2])*d3f;


cout<<"px= "<<px<<endl;


 // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
	c=getch();if(c != 'x') goto menu;				
}
 

shazdeh kocholo

Registered User
تاریخ عضویت
28 مارس 2005
نوشته‌ها
710
لایک‌ها
50
محل سکونت
Tehran
توضیح میدم حتما:
این برنامه محاسبه درونیابی یک تابع مجهول هست که به روش تفاضلات تقسیم شده نیوتن عمل میکنه.
روش کار اینکه ابتدا مقادیر تقریب اولیه ینی همون xها رو بهش میدیم +مقادیر fx رو و اون ابتدا بوسیله اون حلقه ها تفاضلات رو پیدا میکنه و نهایتا تقریب مورد نظر رو نشون میده...
خیلی خلاصه گفتم. مشکل اینجاست که وقتی مقادیر x , fx رو میگیره باید بوسیله اطلاعات مقادیر دیگه ای رو محاسبه کنه اما حین انجام کار من نمی دونم چطور میشه که مقدار اولیه که بهش دادم تو حلقه دوم for برای آرایه f0 عوض میشه! و یه عدد دیگه رو میپذیره درحالیکه هیچجا براش تریف نشده که مقادری رو عوض کنه یا مقدار جدیدی بگیره. و این باعث میشه در محاسبه px به مشکل بر بخوریم. یعنی اشتباه حساب میکنه.
برنامه کار میکنه اما بلت این مشکل که گفتم نتیجه غلطی میده.
باز هم ممنونم
 

shazdeh kocholo

Registered User
تاریخ عضویت
28 مارس 2005
نوشته‌ها
710
لایک‌ها
50
محل سکونت
Tehran
ممنونم اما نمیدونم چرا وقتی مقادیر رو بهش میدم خطای ّFloating point : Invalid میده؟!
فعلا که کار نکرد. علت اینکه f0 رو عوض میکنه چی میتونه باشه؟!
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از shazdeh kocholo :

سعي كن برنامه را به قطعاتي تقسيم كني و با پرينت گيري نتيايج بفهمي كجا مشكل داره. البته حتما اين كار را كردي. ولي به نظرم سريع پيدا بشه محل اشكال.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از saalek :


STRSET

برنامه زير را اجرا كنيد. بجاي عدد 123456789 همه ميشه حرف c .

کد:
#include <conio.h>		
#include <iostream.h>				
#include <string.h>				
void main()						
{		
clrscr();char c ;
 menu:
 // ----------- shoroe ghaaleb -------------
   char string[10] = "123456789";
   char symbol = 'c';
   
 cout<<"string= "<<string<<endl;
 strset(string, symbol);
 cout<<"string= "<<string<<endl;
 // ----------- entehaye ghaaleb -----------
    cout<<"----------------------new run"<<endl;
	c=getch();if(c != 'x') goto menu;				
}
 

shazdeh kocholo

Registered User
تاریخ عضویت
28 مارس 2005
نوشته‌ها
710
لایک‌ها
50
محل سکونت
Tehran
به نقل از saalek :
سعي كن برنامه را به قطعاتي تقسيم كني و با پرينت گيري نتيايج بفهمي كجا مشكل داره. البته حتما اين كار را كردي. ولي به نظرم سريع پيدا بشه محل اشكال.
آره این کارو کردم برای همین گفتم حلقه دوم ایراد داره. جالب اینکه دفعه آخر که (سوم) که حلقه محاسبه رو انجام میده مقدار f0 رو تغییر میده.نفهمیدم بالاخره.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از shazdeh kocholo :

به هر حال يك علت منطقي داره. به نظر من نبايد زياد وقت بگذاريد. از اول با يك روش ديگه بريد. مثلا تعداد حلقه ها را بيشتر كنيد . يك جوري بايد آن نقطه مخفي را وادار كنيد آشكار بشه.
من خودم در چنين مواقعي برنامه را ها مي كنم و چند ساعت بعد برمي گردم. چون روش ثابت ، نتيجه اش ثابته.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

Variables defined outside of any function have global scope and thus are avail-able
from any function in the program, including main().
In C++, global variables are avoided because they can create very confusing code that is
hard to maintain. You won’t see global variables in any code in this book, nor in any pro-grams
I write.​

از كتاب sams : متغيرهايي كه خارج همه فانكشنها ، تعريف بشوند ، داراي قلمروي گلوبال هستند. و در هر جاي برنامه شما قابل دسترس هستند. شامل main
در سي++ از اين گونه متغير پرهيز مي شود. زيرا باعث ايجاد برنامه اي گيج كننده مي شود. برنامه اي كه مديريت آن سخت خواهد بود.
شما در كدهاي من در اين كتاب(sams)، ابدا اين نوع متغير را نخواهيد ديد.
.
 
بالا