منظورتونو متوجه نشدم میشه در قالب کد توضیح بدین؟؟؟؟؟؟؟؟؟؟/
Printable View
سلام امیر اقا
ممنون
یه کم دارم راه میافتم کاری هم که گفتید خواهم کرد ولی مشکل من با توابع هست
درست نمیتونم باهاشون کار کنم
برا همین برنامه هام خیلی طولانی میشه
برای اینکه روال اینجا بهم نخوره یه تاپیک زدم
مثلث خیام پاسکال رو باید چاپ کنه باید با توابع بنویسمش نتونستم
توی توابع گیر کردم ولی شاید کاری گفتید کمکم کنه راه بیافتم
راستی دوستان توی اون برنامه که نوشتم ازp*استفاده کردم
ولی دو تا مشکل هست که این روشی که من استفاده کردم تویcppهست و من باcبرنامه مینویسم
دوم اینکه این روش رو به صورت دو بعدی بلد نیستم
استفاده از توابع باعث میشه که ذهنت خیلی منظم بشه و همین طور برنامت
و خواننده سورس برنامه ی شما خیلی راحت تر متجه کارایه برنامتون میشه
همیشه استاد ما بهمون توصیه می کنه که از توابع استفاده کنیم چون که وقتی برنامه یه خورده بزرگ میشه متجه میشین که چقدر استفاده از توابع به درد میخوره
و من حتما بهتون توصیه میکنم که از توابع تو برنامه هاتون استفاده کنین اونم به صورت خیلی زیاد
تا با کارشون به خوبی آشنا بشین
حق با شماست برنامه ای که میتونم با چند خط بنویسم به چند صفحه میرسه اخرشم درست اجرا نمیشه ممنون میشم یکم در استفاده از توابع راهنمایی کنید مثلا روی یکی دو تا برنامه ساده
اصلا خودم یه کد میزارم یه توضیح مختصر بدید
#include<stdio.h>
intis_prime(int n)
{
intdivisor;
if(n <= 1)
return0;
for(divisor = 2; divisor * divisor <= n; divisor++)
if(n % divisor == 0)
return0;
return1;
من قسمتreturn0,return1رو نمیفهمم
و همینطور کلا چجوری این تابع تعیین میکنه عدد اول هست یا نه
اگر خط به خط بگید خیلی ممنون میشم
خیلی سادس !
int is_prime(int n)اینجا نوع بازگشتی تابع و نوع آرگومان ورودی و اسم آرگومان رو معرفی کرده
int divisor;
یه متغیر تعریف کرده
if (n <= 1)
return 0;
اگه عدد ورودی از 1 کمتر بود یعنی عدد اشتباه وارد شده و 100٪ اول نیست ...
پس همین اول کاری از تابع شوتش می کنیم بیرون !
for (divisor = 2; divisor * divisor <= n; divisor++)
if (n % divisor == 0)
به divisor مقدار 2 داده و تو حلقه از 2 شروع می کنه میره بالا تا به عدد یک دونه کمتر از ورودی برسه ( n ) و دونه دونه چک می کنه ببینه آیا n به divisor بخش پذیر هست یا نه !
اگه بود مقدار 0 رو بر می گردونه ( یعنی عدد اول نیست ! )
اگر هم بر هیچ کدوم بخش پذیر نبود یعنی عدد اوله دیگه !!!
خیلی ساده بود ! نه ؟
موفق باشید
سلام به همه ی دوستان
اینم از برنامه ی کامل که دیدم بد نیست بنویسم من هم گفتم در بیکاری بد نیست سرگرم شوییییم:لبخند::البته مطمئن نیستم درست باشه ولی امتحان کنید .انشالله که درسته:لبخند::
//in the name of god
اگر برنامه درست کار نکرد بگید تا فکر کنم که مشکلش کجایه اکی در ضمن شما دوستان هم بگید کجاش اشکال داره تا بتونم درستش کنم یا الگوریتم های بهترشو بگید ممنون.
#include<stdio.h>
int main()
{
int x,i,s=0,y;
scanf("%d",&x);
for(i=1; i<=(x/2); i++)
{
y=x%i;
if(y==0)
{
s=s+i;
printf("i=%d,,s=%d\n",i,s);
}
else
continue;
}
if(s==x)
printf("%d adadi kamel mibashad",x);
else
printf("%d adadi kamel nist",x);
return 0;
}
برایه اینکه بهتر با کار آرایه ها آشنا بشین
من این برنامه رو حدود یک ماه پیش نوشتم و میذارم ببینید:
#include <stdio.h>
double adad(double[],int);
double avg(double[],int);
int main(){
double x[50],p1,p2,p3;
p1=adad(x,50);
p2=avg(x,p1);
printf("miangin=");
printf("%.3f\n",p2);
return 0;
}
double avg(double b[],int n){
int i;
double sum;
sum=0;
i=0;
while(i<n){
sum=sum+b[i];
i=i+1;
}
sum=sum/n;
return sum;
}
double adad(double a[],int max){
int i,n;
printf("tedade adad\n");
scanf("%d",&n);
if(n<1 || n>51){
n=0;
printf("eror\n");
}
else{
while(i<n){
printf("adad\n");
scanf("%lf",&a[i]);
i=i+1;
}
}
return n;
}
اگه سوالی دارین از این برنامه میتونم براتون توضیح بدم
البته منم مثه شما یه ترم اولیم و شاید حرفام خیلی درست نباشه ولی من تو استفاده از تابع مشکل خاصی ندارم
دستت در نكنهنقل قول:
خیلی ساده بود ! نه ؟
موفق باشید
راست ميگي ساده بود
احساس خنگي بهم دست داد :گیج::لبخند:
سلام
ممنون
خوب اين برنامه قراره چي كار كنه اجراش كردم فقط تعداده عدد رو ميگيره چيزي چاپ نميكنه
راستي يه سوال راجع به input ,output
اين يعني چي؟
%d%%
و اين كه شما تو برنامت نوشتي
scanf ("%1f",&a[i])
اينكه عدد يك رو قبل ازfنزاريم كه فرقي نميكنه؟
و ابنكه وقتي ميزنيم
scanf("%3d",&i)
بهiسه digit اختصاص ميده و scan ميكنه؟
سلام
فکر نمیکنم این برنامه مشکلی داشته باشه
من این برنامه رو تو سی اچ اجرا کردم و مشکلی هم نداشته
یه تعداد عدد میگیره بعد میانگینشو بدست میاره
خیلی خیلی سادس دیگه
در مورد %1f. البته داتشو نذاشتین! که جالبه بدونید که شما با این کار مشخص می کنید که چند تا اعشار بعد از اعداد صحیح پرینت بشه
یادم رفت که بگم "درصد اف " هم همون کاره "درصد ال اف " رو میکنه یعنی برایه عدد های اعشاریست فقط با همین تفاوت
یعنی اگه شما از "درصد ال اف" استفاده کنید اون تعداد اعشاری که به صورت پیش فرض انتخاب شده پرینت میشه ولی با "درصد دات یک اف " شما فقط یک اعشار بعد از عدد صحیح خواهید داشت
البته میتونید هر چی دلتون خواست بذارین مثلا "درصد دات چهار اف"
شاید جالب باشه ولی استاد ما همیشه با این ژینگولگ بازیا مخالفه و میگه این چیزا کمکی به برنامه نویس شدنه شما نمیکنه
منم حرفشو قبول دارم چون که این کارا تو هر زبونی یه جوریه و خیلی هم سادس یادگیریش
پس زیاد گیر ندین
در مورد اون یکی هم چیز زیادی نمیدونم و اونقدرام شوق دونستنشو ندارم
ببخشید که واژگان انگلیسی رو فارسی نوشتم
امیدوارم خوب رسونده باشم
ممنون ولي اون %3dتوي بعضي جاها خيلي مفيده درواقع توي بهتر چاپ كردنه يه برنامه كمك ميكنه و حتي scan كردن مقادير گاهي لازم ميشه كه البته خيلي هم الزامي نيس به قول استادتون ژينگولك بازيه
پيش فرضمون همون مقداريه كه به ال ميديم؟نقل قول:
اگه شما از "درصد ال اف" استفاده کنید اون تعداد اعشاری که به صورت پیش فرض انتخاب شده پرینت میشه
ميتونه يه مقدار متغير باشه؟
نه ببینید خود "درصد ال اف" همون کاره "درصد اف" رو می کنه و هر دو تا شون مثله همن ولی با این تفاوت که شما میتونین از "درصد اف" برای مشخص کردنه تعداد اعشار بعد از عدد صحیح از "درصد اف " استفده کنی البته باید تعدادتو مشخص کنی مثلا اگه خوشت نیومد که تو نمایش عدد بنویسه 2.777777 میتونی تو printf بدی "درصد دات دو اف" و برات پرینت میکنه 2.77
حله؟؟؟!!!
اگه میشه در مورد "درصد سه دی" اگه میدونین چیکار میکنه بگین که چیکار میکنه!!
ممنون
اره داداش حله
حالا راجع به درصد 3 دي(درصد ال دي)
وقتي اينو ميزنيم چيزي كه براي ما چاپ ميشه متغير iبا اختصاص دادنه 3digitهست
مثلا اگر مقدار هi2 باشه با دو تا spaceقبل از اون (اگر 3- بزاريم بعدش) چاپ ميكنه
فايدش چيه
مثلا برنامه اي داريم كه ميخواد يه ماتريس برامونچاپ كنه
ماتريس ما تا زماني خوب و زير هم چاپ ميشه كه اعداد يه رقمي هستند ولي وقتي دو رقمي بشن شكل ماتريس چاپي مون به هم ميخوره اگر بيايم و تعداد digitچاپي رو معين كنيم حتي با اعداد چند رقمي هم ماتريس به هم نميخوره
البته ممكنه راه ديگه اي هم باشه ولي من اينجوري تونستم شكلمو حل كنم
اگه نفهميديد يه شكل هست اونو ميزارم بهتر ميشه
سلام به دوستان
راستی در باره ی پروژه نویسی یا تمرین های بزرگتر نیز بحث کنیم خوبه نه دوستان؟
سلام دوستان، از اینکه تاپیکی به این قشنگی و مفیدی راه افتاده فوق العاده خوشحال شدم. امیدوارم این اقدام تاثیری خوبی در پیشرفت همه ما داشته باشه.
چند روز پیش برنامه ای دیدم که در اینجا البته فقط با کمی تغییر میذارم. علت تغییر اون برنامه این بود که برای اعداد 2 و 3 زوج و فرد بودنشون رو مشخص نمی کرد.
همچنین از دوست خوبمون که برنامه رو به زیبایی تشریح کرده بود متشکرم.
کد اصلاح شده:
#include<iostream>
int main()
{
int isprime(int n);
int i,n;
std::cin>>n;
for (i=2;i*i-1<=n;i++)
std::cout<<i;
if (n%i==0)
std::cout<<n<<"your num isnt prime";
else
std::cout<<n<<"your num is prime";
}
البته با ++ C هست که شما کافیه فقط خطوطی رو که std::cout و std:: cin دارن رو به دستورات دریافت و نمایش در C تبدیل کنید. i هم همون divisor هست.
با پوزش.
سلام دوستان
يه سوال
توي توابع چيزي كه تابع returnميكنه چيه منظورم اينه كه همون كاري كه ما از تابع ميخوايم انجام بديم مقداريه كه return ميشه؟
مثلا توي اين قسمت
double average(double a, double b)
{
return (a + b) / 2;
}
مقداري كه returnميشه همون ميانگينه (كاري كه ما از تابع ميخوايم)يا همون تابعي كه زدم اول يا غير اول بودن عدد مقداري كه بر ميگرده تعيين ميكنه اول هست يا نه
ولي توي اين حالت چي؟ مقداري كه برميگردونه مفهومش چيه اصلا چرا بايد اينو برگردونه؟
چجوري ميتونم به صورت void بنويسم؟
int *input_array(int r, int c){
int *array = (int *)malloc(r * c * sizeof(int));
int i , j;
for(i = 0; i < r ; i++){
for(j = 0 ; j < c ;j++){
printf("enter array[%d][%d]\n", i , j);
scanf("%d", array);
array++;
}
}
return array - r * c;
}
ببینید بانو خانوم
شما وقتی یه تابعو return میکنین پس به طور حتم بهش نیاز دارین تو تابع main یا تو تابع های بعد از اون
اینم که بخواین این تابعی که نوشتینو به صورت void بنویسید یعنی چیزی نمیخواین برگردونید
void بیشتر برایه تابع های پرینت و اینزرت استفاده میشه و شما قرار نیست چیزی رو به تابعی که فراخونی شده برگردونید
البته سوالتون زیاد واضح نیست و منم اینجوری برداشت کردم
البته یه چیزی رو هم اضافه کنم که اشاره گر ها رو که براشون حافظه ی پویا گرفتین مثه همین جا باید return کنین ولی اگه یه آرایه تو تابع پر کردین نیازی نیست برش گردونین چون آرایه شما خودش پر میشه و نیازی به برگردوندن نداره
ولی حافظه پویا چون به آدرس اشاره میکنه نیاز داره که به آدرس مورد نظر برگردونده بشه
پس يعني من توي اين تابع نميتونم به صورت void بنويسم؟
ولي سوال قبل من چيزه ديگه بود
من ميگم تابع چه چيزي رو returnميكنه؟ (كاري كه ما از تابع ميخوايم؟)
مثلا توي اون حالت
return array-r*c
اين چيزي كه برميگردونه چيه؟
و يعني چي؟
چرا ادرس اشاره شده بايد برگرده
يعني چرا خود array رو برنميگردونيم؟
كلا من با اين كه تابع چه چيزي رو بر ميگردونه مشكل دارم
این تابع وظیفه ی تعریف یک آرایه دو بعدی و سپس پر کردن اون توسط ورودی کاربر را بر عهده داره. بعد از این که کار تابع تمام شد شما باید به آرایه تعریف شده دسترسی داشته باشید. پس تابع اشاره گر به آرایه مورد نظر را بر می گردونه تا با استفاده از اون بتونید به آرایه دسترسی داشته باشید.نقل قول:
مقداري كه برميگردونه مفهومش چيه اصلا چرا بايد اينو برگردونه؟
برای این کار شما میتونید آرایه را در بیرون از تابع ایجاد کنید و اشاره گر آرایه را به همراه پارامتر های دیگه به تابع ارسال کنید. به این صورت:نقل قول:
چجوري ميتونم به صورت void بنويسم؟
void input_array(int *array, int r, int c)
{
int i , j;
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
printf("enter array[%d][%d]\n", i, j);
scanf("%d", array);
array++;
}
}
}
در زبان ++C, C آرایه ها با استفاده از اشاره گری که به اولین خانه آرایه اشاره می کنه مورد دستیابی قرار می گیرند. array در ابتدای تابع به اولین خانه آرایه ایجاد شده اشاره میکنه اما در طول تابع مقدار این اشاره گر تغییر می کنه (برای دستیابی به خانه های بعدی آرایه) . برای return کردن آرایه، در واقع ما باید اشاره گر به اولین خانه ی آرایه ایجاد شده را return کنیم اما اشاره گر array در طول تابع تغییر کرده و در آخر تابع به آخرین خانه آرایه اشاره می کنه. پس با کم کردن مقدار r*c (تعداد خانه های آرایه) از اشاره گر array می تونیم آدرس اولین خونه ی آرایه را return کنیم.نقل قول:
return array-r*c
اين چيزي كه برميگردونه چيه؟
امیدوارم تونسته باشم درست توضیح بدم.
اي ول مرسي
پس من نيازي به alloc كردن ندارم؟(پست قبلي رو منظورمه):چشمک:
اگر نه اشاره گر از كجا ميدونه به كجا اشاره ميكنه
اره خيلي ممنون فقط اگر اين رو هم توضيح بديد ممنون ميشم
توي ارايه ها هست كه ما به اين شكل returnميكنيم؟ يعني برميگردونيم به خونه ي اول؟
و اين كه يه تابعي مثل اين
double average(double a, double b)
{
return (a + b) / 2;
}
چرا اومده و مقدار ميانگين رو returnكزده؟
نميشه توي تابع يك چيزي مثل خود average تعريف كنيم و بعد اون رو return كنيم؟ اگر صفر returnكنيم چي؟
منظورتون return کردن بود دیگه ؟ در این صورت بله.نقل قول:
پس من نيازي به alloc كردن ندارم؟
اما اگر منظور استفاده از malloc برای تعریف پویای آرایه بود ، در هر صورت چه در بیرون و یا داخل تابع باید فضای مورد نیاز را یرای آرایه تخصیص بدید.
چرا، این کار را هم میشه انجام داد و اتفاقا خوانایی کد را بالا میبره، اما این کاملا بستگی به سبک برنامه نویسی شما داره و اختیاری هست.نقل قول:
نميشه توي تابع يك چيزي مثل خود average تعريف كنيم و بعد اون رو return كنيم؟ اگر صفر returnكنيم چي؟
صفر را return کنیم ؟ چرا باید این کار را انجام بدیم ؟ مگر قرار نیست تابع ما مقدار میانگین را حساب کنه و اونو return کنه ؟ من فکر می کنم شما درمفهوم توابع مشکل دارید. یک تابع قرار هست که عملیاتی را انجام بده، حالا اگر این عملیات نتیجه ای داشته باشه (یعنی یک عدد، رشته و یا هر مقداری که معرف نتیجه ی عملیات باشه) باید پس از اتمام عملیات (اتمام کار تابع) به این نتایج دسترسی داشته باشیم. یکی از راه های این کار، استفاده از دستور return هست.
بله.نقل قول:
يعني همو كدي كه نوشتيد من بايد mallocرو بيرون از تابع زماني كه ميخوا ازش استفاده كنم ايجاد كنم؟
مثالی برای نحوه ی استفاده :
void input_array(int *, int, int);
int main()
{
int *myArray = (int *)malloc(4 * 5 * sizeof(int));
input_array(myArray, 4, 5);
return 0;
}
void input_array(int* array, int r, int c)
{
int i, j;
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
printf("enter array[%d][%d]\n", i, j);
scanf("%d", array);
array++;
}
}
}
در این قطعه کد ما ابتدا فضای مورد نیاز برای آرایه را تخصیص میدیم و این فضا را به اشاره گر myArray انتساب میدیم.
int *myArray = (int *)malloc(4 * 5 * sizeof(int));
و بعد این اشاره گر را به همراه طول و عرض آرایه (ماتریس) به تابع ارسال می کنیم تا اونو با مقادیر ورودی پر کنه.
input_array(myArray, 4, 5);
كاملا درست فهميديد من با مفهوم توابع مشكل دارم
البته بيشتر قاطي كردم مسايلو
ولي الان فهميدم (خيلي ممنون از راهنمايي هاتون:چشمک:)
در واقع اون سوالي كه اول كار پرسيدم همين بود
(تابع مقداري رو return ميكنه كه قراره مورد استفاده قرار بگيره؟)
در كل خيلي ممنون از راهنمايي هاتون خيلي مفيد بود:چشمک:
مدتیه که این تاپیک از هدفی که برای اون ایجاد شده بود فاصله گرفته و شده محل رفع اشکال برنامه ها، گرچه به دلیل پاسخ هایی که دادم به خودم هم ایراد وارد هست (که البته چاره ای نبود و تقریبا با این اوضاع تفاوتی هم نمی کرد) اما بهتر بود از ابتدا ایجاد کننده تاپیک یا شخص دیگه ای وظیفه ی مدیریت تاپیک را به عهده می گرفت.
به هر حال به نظرم رسید باید این مورد را متذکر بشم.
بر منكرش لعنت كه شما گفتي
منم جملم سوالي نبود تو پرانتز گذاشتم خبري بود:لبخند:
بازم یه سری سورس کد میزارم حالشو ببرین
امیدوارم که خوشتون بیاد :لبخند:
دانلود
اینم برایه اینکه از عنوان تاپیک دفاع کنیم
چند تا تمرین برنامه نویسی که بیشتر برایه مبتدی ها و استفاده از آرایه هاست
بابا یه تشکر بذارین دیگه
هر چی داشتم خرجتون کردم:لبخند::لبخند::لبخند:
دانلود
سلام دوستان عزیز من بالاخره دوباره بازگشتم :لبخند:
از فردا انشالله با تمرین های خوب خوب میام خدمتتون تا حالشو ببرید
راستی اینم یه دست گرمی
برنامه ی 118 رو بنویسید (این برنامه شماره و اسم و ادرس رو میگیره و به کاربر با امکان سرچ و نمایش تحویل داده میشه)
با سلام من یه مشکل دارم و اون هم اینه که اگه یه دستور مثلscanf("%f",&a)l داشته باشیم و بلا فاصله دستور
gets(str)l رو scanf انجام میشه ولی gets انجام نمیشه؟
این مشکل با cin و gets هم وجود داره، برای فهمیدن علت و رفع مشکل، این تاپیک ها را مطالعه کنید:
در ضمن به عنوان تاپیک توجه کنید، بهتر بود سوالتون را در تاپیک مرتبط یا جدید مطرح می کردید.
موفق باشید.
چه تاپیک خوبی :لبخند:
خب اگه دوستان موافقید ، بریم به سمت برنامه های شی گرا و طراحی کلاس ؟
سرفصلها :
1. کلاس
2. توابع friend
3. overloading
4. inherience
5. polymorphism
6. encapsulation
و ......
اگه موافقید شروع کنیم ؟
ای :متعجب:بابا اول اون برنامه 118 رو بنویسید ببینم چی یاد گرفتید بعد بریم به بالا تر ها ok :لبخند:
بعد از اون میریم سراغ کتابخونه منم تا چند روز دیگه کتاب خ.نم که اولین پروژه من بود می ذارم اینجا تاببینید
:لبخندساده:
فعلا بای
اوکی ، من امتحانام تموم شه حتما مینویسمش ؛
یه پروژه انبار هم دارم مینویسم ، کامل شد میذارم اینجا تا همه استفاده کنند (سعی کردم تمام اصول شی گرایی رو توش رعایت کنم و حتی الامکان ساده نوشتم ، فک کنم واسه آموزش چیز خوبی باشه :چشمک:)
موفق باشید :قلب:
خوبه منم موافقم
منم فکر میکنم که کتاب خونم برای آموزش خوب باشه ولی یه بخششو نمی ذارم اونم ماله فایلش وقتی که دیدین می تونید خودتون براش فایلو بنویسین تا یاد بگیرین :لبخند:
(لبته فقط لود کردن رو براتون برم دارم تا سخت نشه براتون.)
سلام اینم از کتاب خونم که البته تصمیم گرفتم که همونی رو که کامل نیست و یه جاهایی رو باید تکمیل بشه رو قرار بدم البته سورسشم تصمیم گرفتم بزارم تا ببیندی من چطور نوشتم و تا خودتون هم بتونید با الگوریتمن هعای متفات برخی جا هاشو عوض کنین و البته بخش لود کر دنشو هنوز قرار ندادم
:
http://www.uplod.ir/download.php?file=617340
برید حتما دانلود کنید و الگوریتم خودتون هم مطرح کنید.
سلام به دوستان عزیز . من یه تازه وارد در بین شما دوستانم اما اگه مشکلی در مورد ++c دارین میتونید به farsicode@yahoo. یا www.farsicode.com دیدن فرمایید
اين تاپيک خيلی مفيده.:تشویق:
اما متاسفانه زياد فعال نيست!!!:ناراحت:
الان بايد 118 رو بنويسيم؟
منم موافقم.فکر خوبیه.
سلام
این تاپی رو مطالعه کردم... از همش جالبتر بنظرم اون کته دوتا space قبل از %C که کار رابندازه... منم یه برنامه می ذارم ببینم کسی متوجه نکتش میشه... برنامه درواقع بسیار آسون و فهمیدنش راحته.
int main()
{
int a=3;
printf("%d ",a);
printf("%d ",a++);
printf("%d ",a++);
printf("%d ",a++);
printf("%d ",a++);
printf("%d ",a++);
printf("\n %d\n %d\n %d\n %d\n %d \n",a++,a++,a++,a++,a++);
getch();
return 0;
}
به خروجیتون و ترتیبش دقت کنین:لبخند:
سلام من چطور ابتدا شروع کنم
برنامه ای بنویسید که دو عدد 30 رقمی را با هم جمع کند.
سلام به همه
بچه ها ببخشيد اگه تكراريه و اگه مبتديه و اگه خسته كنندس ...
سه تا برنامه كوچيكه
به بزرگي خودتون ببخشيد حلشو ميخواستم
برنامه اي كه شعاع دايره را بخواند اختلاف مساحت آن را نسبت به مربع محصور كننده آن محاسبه و چاپ كند
2-برنامه اي كه عددي را بخواند و تعيين كند چند رقم دارد
3-برنامه اي كه دو عدد را بخواند و ميانگين حسابي و ميانگين هندسي آن را نمايش دهد.
سلام
برنامه ای بنویسید که انواع اعداد صحیح، اعداد اعشاری و اعداد اعشاری به فرم نماد علمی را شناسایی کند. (هدف آشنایی با تحلیلگر لغوی یک کامپایلر است.)
همچنین:
فصل ششم صفحه 271 مسئله 19 از کتاب ساختمان داده لیپ شوتز:
حل مسئله برج هاي هانوي را تغيير دهيد به طوري که به جاي دو صدا زدن بازگشتي فقط يک صدا زدن بازگشتي داشته باشيم.
مي توان محورهاي (ميله هاي) A و B را قرينه يکديگر فرض کرد. به اين صورت که گام هاي ذيل را انجام دهيم.
N-1 ديسک از A به B انتقال يابد و بعد داشته باشيم A↑C
تعویض A با B
N-2 ديسک از A به B انتقال يابد و بعد داشته باشيم B↑C
تعویض A با B
N-3 ديسک از A به B انتقال يابد و بعد داشته باشيم A↑C
تعویض A با B
N-4 ديسک از A به B انتقال يابد و بعد داشته باشيم B↑C
تعویض A با B
و به همين ترتيب. بنابراين ما مي توانيم يک صدا زدن بازگشتي را تکرار کرده و در هر بار BEG و AUX را جابجا نماييم و رويه ذيل با توجه به توضيحات فوق حاصل مي شود.
TOWER(N,BEG,AUX,END)
1.If N=0 then: RETURN
2.Call tower(k-1.beg,end,aux.)
4.Write: BEG -> END.
5.BEG with AUX
Set TEMP:=BEG:=AUX.AUX:=TEMP.
[End of step 2 loop.]
6.Return
مشاهده مي کنيد به جاي
N=1
از
N=0
بعنوان ملاک بازگشت استفاده کرده ايم. هر کدام از آنها مي توانند براي بدست آوردن جواب مورد استفاده قرار گيرند.