چگونه میشه یه آرایه با تعداد اعضای بی نهایت تعریف کرد ؟
از دستور enum چه استفاده ای میشه کرد ؟ میشه مثال بزننین
Printable View
چگونه میشه یه آرایه با تعداد اعضای بی نهایت تعریف کرد ؟
از دستور enum چه استفاده ای میشه کرد ؟ میشه مثال بزننین
سلام
با لیست پیوندی link list میشه
این کار در c با آرایه امکانپذیر نیست چون با آرایه شما فقط میتونید آرایه ای با طول ثابت تعریف کنید و توانایی تغییر طول آرایه رو ندارید.در vb این امکان با redim هست ولی شما در c برای اعضای بی نهایت و قابل تغییر باید از لیست پیوندی استفاده کنید روش کار هم به اینصورته که هر گره (node) که داده میگیره به آدرس گره بعدی اشاره می کنه به همین صورت تا زمانی که حافظه تون جا داشته باشه شما می تونید داده وارد کنید و فقط کافیه گره شروع رو داشته باشید تا به تمام گره های دیگه دسترسی پیدا کنید و زمانی هم که به گرهی رسیدیم که آدرس گره بعدی رو نداشت اون گره ،گره پایانی ماست.در لیست پیودنی گره شروع خیلی مهمه چون اگر گمش کنید کل لیستتون رو گم کردید!
دوستان در مورد آرایه توضیح دادن .
ولی در مورد enum :
الان PAWN مقدار 0 داره . ROOK مقدار 1 و KNIGHT مقدار 2 و ....... .کد:enum Type { PAWN, ROOK, KNIGHT, BISHOP, QUEEN, KING };
یعنی مثلا اگه نوع داده برگشتی تابع شما int باشه شما می تونین یکی از این اعضای enum رو برگردونین و مشکلی هم پیش نمیاد .
مثلا فرض کنین شما دارین برنامه شطرنج رو می نویسین و تو اون دو حالت سفید و سیاه دارین . می خواین مثلا به سفید 0 رو انتساب بدین و به سیاه 1 رو . اگه این کارو بکنین طی برنامه ممکنه سردرگم بشین که سیاه 0 بود یا 1 . مجبورین دوباره برگردین و اون جایی که این انتساب رو انجام دادین نگاه بکنین . با استفاده از enum به صورت زیر می تونین به جای 0 از خود white استفاده کنین :
اگه می خواین white مقدار 1 بگیره و BLACK مقدار 2 می تونین این کارو بکنین :کد:enum Color { WHITE, BLACK };
اگه بعد از BLACK یه مقدار دیگه هم داشتیم اون هم 3 می گرفت .کد:enum Color { WHITE = 1, BLACK };
یه سوال دیگه :
می خواستم تو یه آرایه 2 بعدی که مثلا 10 سطر و 10 ستون داره به یک آرایه به طور رندوم (random) اشاره کنم یعنی یه آرایه به طور رندوم انتخاب کنم . چه طوری باید این کار رو کنم ؟
اصلا متوجه نشدم . یعنی اینکه محتوای آرایه رو به صورت Random پر کنین ؟
مثلا یه آرایه رو به طور رندوم انتخاب کنیم و مقدار 1 بهش بدیم
a[i][j]f
که i و j دلخواه و رندوم توسط کامپایلر انتخاب بشه
مثلا اینجوری :
اگه آرایه تون مثلا 4 در 4 باشه :
کد:a[rand()%4][rand()%4]=1;
:11:سلام من دو سوال داشتم فقط اگر می شود جواب این سوال را علاوه بر
++C به #C هم بدهید ممنون
برای دسترسی به فایل کامپیوتر در زبان #C باید از namespace زیر استفاده کرد :
system.io
1- در ++C چه کتابخانه ای را باید include کنیم ؟
2- لطفا تابع های موجود در system.io را توضیح دهید و همچنین معادل آنها در ++C ؟
ممنون از جوابتون
یه سوال دیگه :
تو یه لیست که از یه آرایه با تعداد مثلا 7 عضو تشکیل شده می خواستم مقدار ماکسیمم این آرایه ها رو پیدا کنم
الگوریتم نوشتنش با while رو هر کاری کردم نشد بنویسمش . میشه کمک کنین ؟
مثلا آرایه 1 مقدار 8 دارد و آرایه 2 مقدار 78 و ... و به همین ترتیب . مثلا اگه بیشترین مقدار 256 هست . می خواستم این مقدار رو پیدا کنه و نمایش بده
در ++C هم fstream رو اینکلود می کنیم .نقل قول:
از #C چیزی نمی دونم متاسفانه .
اولا من جمله بندی تونو با اجازه شما درست می کنم .نقل قول:
ابتدا یه متغیر می گیرین به نام max و فرض می کنین مقدار ماکزیمم همون عنصر اول یعنی 8 است . یعنی max الان مقدار 8 داره . حالا تو یه حلقه که از اول تا آخر آرایه حرکت می کنه میگین اگه مقداری از این max بیشتر شد اونو به عنوان max بگیر . اگر هم پیدا نشد که طبیعتا همون عنصر اول max هست .نقل قول:
مثلا عنصر اول آرایه مقدار 8 و عنصر دوم آرایه مقدار 78 داره .
سلام
دست شما درد نکنه از اینکه جواب سوالم را دادید فقط اگر می شود تابع های fstream را توضیح دهید.
یک سوال دیگر :
چرا وقتی دستور زیر
using namespace System
را وارد می کنم می گوید namespace به نام system وجود ندارد درحالی که در msdn نوشته برای دستیابی به تابع Convert باید این دستور را اضافه کنید.
برای استفاده از fstream در ++c اول باید fstream را اینکلود کنی بعد مثلا این طوری :نقل قول:
[html]ifstream k;
k.open ("s.dat");
ofstream j;
j.open ("d.dat");
[/html]
راستی در مورد namespace در ++c
[HTML]using namespace std;[/HTML]
تو ++C نسخه Native فقط یدونه namespace داریم که اونم std هست .نقل قول:
سلام
پس
اگر فقط std داریم برای دستیابی به تابع Convert باید چه کار کنیم ؟
با تشکر
سلام
یک برنامه در جایی دیدم که اولش متغییر را به صورت زیر تعریف کرده بود :
bigint q,r,xx,yy,sign;
درحالی که وقتی من این را می نویسم ++C دیتا تایپ bigint را نمی شناسد. باید چیز خاصی را اینکلود کنم،در آنجا که چیزی نوشته نشده بود.
تابع convert چیکار میکنه ؟ تو ++C نسخه ANSI برای استفاده از تابع آماده namespace نمیاریم . فایل هدر include می کنیم .نقل قول:
تو ++C ما bigint نداریم .نقل قول:
سلام
تابع convert یک چیزی تو مایه های cast هست برای تبدیل یک data type به یک date type دیگر، منتها قوی تر و تبدیلات بیشتر.
در msdn بعد از نوشتن
using namespace system;در main برنامه به صورت زیر استفاده کرده بود :
Convert::Toint32()همین را می شود به صورت زیر نوشت :
static_cast<int>
ولی حالا که می گویید باید اینکلود کنیم چه فایلی را ؟
بله . یه همچین چیزی وجود داره و براش هم namespace سیستم رو include می کنیم . ولی این برای ++ANSI C نیست . بلکه برای استاندارد ++C مایکروسافت یا همون C++/CLI هست . اگه تو ویژوال استادیو پروژه CLR Console Application رو انتخاب کنین می تونین از این تابع استفاده کنین .
سلام
دست شما درد نکنه امتحان کردم جواب داد
فقط اگر می شه فرق این دو نوع را بیشتر توضیح بدید .
کدام نوع بهتر است ؟
نقل قول:
اگه منظورتون فرق بین C++\CLI و ++ANSI C هستش باید بگم :
این دو ، دو نوع مختلف از استاندارد تعریف شده برای ++C هستند که اولی توسط ANSI استاندارد شده است و متداول ترین نوع ++C هست که به نسخه Native هم معروف هست . Unmanaged هم میگن . منظور از Native هم اینه که این کدهای نوشته شده به صورت محلی در کامپیوتر شما اجرا می شن و نیاز به پلتفرم خاصی نداره . ولی C++\CLI توسط مایکروسافت استاندارد شده است و تحت CLR اجرا میشه که اون هم یه محیط استاندارد برای اجرای برنامه هاست . CLR یا همون Common Language Runtime . به نظر من CLI بهتره . خیلی چیزا توش بهبود یافته . مثلا تخصیص حافظه و رهاسازی اون یا مثلا یه نوع داده صحیح 8 بایتی long long داره که range وسیعی رو ساپورت می کنه . Syntax کد نویسی تو این محیط خیلی شبیه به #C هستش . و خب طبیعتا می دونین که این نوع اخیر یعنی C++\CLI فقط تو ویندوز کاربرد داره و همیشه که بحث از قابل حمل بودن کدهای ++C میشه در این مورد محروم می مونین . ولی نسخه ANSI/ISO قابل حمل تره . چه تو لینوکس چه تو ویندوز و ... .
از اینجا می تونین سند استانداردسازی C++\CLI رو دانلود کنین تا اطلاعات بیشتری راجع به Syntax اش بدست بیارین :
کد:http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-335.pdf
سلام
برنامه ای که یک عدد را از ورودی دریافت کند و به مبنای 2 ببرد و در یک عدد ذخیره کند و سپس آن را چاپ کند.
من این را به دو روش نوشتم یکی با آرایه و یکی بدون آن فقط خیلی طولانی است. من آنها را در زیر می گذارم
ببینید راه بهتری ببرای نوشتن این برنامه هست یا نه ؟ اگر هست لطف کنید بیان کنید.
روش 1 :
--------------------------------------------کد:#include<iostream>
#include<math.h>
#include<conio.h>
using namespace std;
int main()
{
int num,Num,r,i=0;
unsigned long long int binary=0;
cout<<"Please Enter a number :\n";
cin>>num;
Num=num;
while(Num!=0)
{
i++;
Num/=10;
}
i=floor(i/log10(2.0))+1;
while(i>0)
{
Num=num;
for(int j=1;j<=i;j++)
{
r=Num%2;
Num/=2;
}
binary=binary*10+r;
i--;
}
cout<<binary<<endl<<endl;
main();
}
روش 2 :
کد:#include<iostream>
#include<math.h>
#include<string>
using namespace std;
using namespace system;
int main()
{
int a,A,i=0;
int Binary1[33]={0};
int Binary2[33]={0};
//
cout<<"\aPlease Enter a Number : "<<endl;
cin>>a;
A=a;
//tedad argham bedast miayad
while(A!=0)
{
i++;
A/=10;
}
A=a;
//adad dar mabnaye 2 monteha Vice Versa
for(int j=0;j<33;j++)
{
Binary1[j]=a%2;
a/=2;
}
//Vice versa
int w=0;
for(int j=(static_cast<int>(i/log10(2.0))+1);j>=0;j--)
{
Binary2[w]=Binary1[j];
w++;
}
//Cout
cout<<"ravesh 1: "<<endl;
for(int j=0;j<(i/log10(2.0)+1);j++)
cout<<Binary2[j];
//
cout<<endl;
}
فکر کنم این راحت تر باشه :
[html]
#include <iostream>
using namespace std;
int main()
{
int bin[ 50 ] = { 0 };
int num;
cin >> num;
int index = 0;
while( num > 0 )
{
bin[ index ] = num % 2;
num /= 2;
index++;
}
for( int i = index - 1; i >= 0; i-- )
cout << bin[ i ];
cout << endl;
return 0;
}
[/html]
سلام
دست شما درد نكنه فقط
1- اگر مي شود برنامه را بدون استفاده از آرايه بنويسيد(من در بالا با 3 حلقه نوشتم. راحت تر!)
2- چطوري ميشود وقتي كه يك عدد را مي خواهيم cout كنيم تعيين كنيم كه از سمت راست 3 رقم 3رقم جدا كند؟
به طور مثال عدد 123456 را به صورت 123,456 بنويسد
با تشكر
1- این با یه حلقه . البته درخواست برنامه خلاف قوانین هست متنها چون شما یه نمونه از برنامه داشتین و درخواست بهبود کرده بودین نوشته شد :
2- نمی دونم ! :31:کد:#include <iostream>
using namespace std;
int main ()
{
int number;
int b;
int bin = 0;
int p = 1;
cout << "Enter a decimal number : ";
cin >> number;
int temp = number % 2;
number /= 2;
for ( ; number > 0; )
{
b = number % 2;
number /= 2;
p *= 10;
bin += b * p;
}
cout << "Binary : " << bin + temp << endl;
return 0;
}