# Native Code > برنامه نویسی با C > برنامه نویسی با زبان C و ++C >  تمرین های زبان برنامه نویسی c

## smahdi1991

سلام من این تاپیک رو ایجاد کردم تا افراد مجرب در این امر برای c کار ها تمرین هایی رو معین کنند از اول تا اون قسمت بالا برای هر قسمت مثلا اگر کل C  بیست فصل باشه برای هر فصل 10 تمرین از آسون تا سخت تعیین کنید در ضمن جواب هر تمرین رو هم لطفا با توضی حات در مورد قسمت های مختلف هر هفته آخر هفته (بهتر جمعه ها باشه)در این تاپیک قرار بدندلطفا افراد حرفه ای این کارو انجام بدن تا ما آما تو ر ها با مشکلی روبرو نشیم وبرای هر هفته هم فقط 4مثال دوتا آسون ودوتا سخت رو خواهشا بیان کنید.
درضمن یادتون نره که افراد مبتدی حتی حرفه ای ها هم می تونند در این تاپیک در باره ی الگوریتم های مختلف حل مسئله و بر نامه هاشون در این تاپیک با هم بحث کنند چون این کار باعث افزایش مهارت در برنامه نویسی میشه.
پیش پیش ممنون از این لطفتون.

----------


## farid_mov2006

سلام
اگر برای همه زبانها چنین کاری بشه خیلی خوب میشه :لبخند گشاده!: 
 :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:  :تشویق:

----------


## حامد مصافی

تا نظر مدیر بخش چی باشه..

----------


## Nima_NF

> تا نظر مدیر بخش چی باشه..


اگر تمرین ها دقیقتا همان تمرین هایی نباشد که فردا یک عهده از آن ها برای مقاصد دریافت نمره استفاده کنند، مشکلی از این بابت نیست. پس بهتر هست اگر سوالی انتخاب می شود بیشتر از منابع غیر فارسی انتخاب شود.

متاسفانه بنده خیلی درگیر هستم، امیدوارم سایر دوستان بتوانند کمک کنند.

----------


## smahdi1991

سلام به شما 
من اول از همه تشکر میکنم از آقا نیما که این تاپیک رو مشا هده کردند و نظر خودشون رو اعلام کردن
آقا نیما من هم بخاطره همین موضوع که شما فرمودید گفتم که یکی که خبره هست و وقت داره بیاد تمرین تعیین کنه برای C 
ممنون میشم اگر این کارو به یکی که هم وقت داره و هم مثل شما کار بلده بدید تا به نحو احسنت انجام بگیره (مثلا اگر آقای بک دال این کارو به عهده بگیره به نظرم خیلی در حق طرفداران وآماتور ها در راه یاد گیری زبان C محبت کرده است)

----------


## smahdi1991

خوب مثل اینکه مسولا ن این بخش به فکر آماتور  ها و این تاپیک به این مهمی نیستند حداقل یکی از شما حر فه ای های بخش برنامه نویسی C این بخش رو بعهده بگیرید و این ما رو را بندازید 
پیش پیش خیلی ممنون

----------


## ali zi zeperto

من خیلی منتظرم کار رو شروع کنید.فکر می کنم که اساتید هم حتما نظراتشون رو دریغ نمی کنن. .به نظر من جمع خوبی اینجا خواهند بود و فعالیت خوبی هم انجام میشه.چند تا سوال مناسب مطرح کنید تا اساتید بگن کدوم بهتره برای شروع یا اگه خواستن تغییراتی بدن بعد ما هم شروع کنیم.باید از یه جایی شروع کرد.

----------


## queen-mm

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

----------


## smahdi1991

سلام دوستان عزیز از نظراتتون ممنون 
منظورم از اینکه یه حرفه ای بیاد و آموزش رو بعهده بگیره اینه که چون با ایشون تجربه ی بیشتری از ما در این زمینه دارند پس تمرین های بهتر و در نتیجه آموزش بهتر و توضیحاتو یادگیری بهتری هم صورت می گیره وگر نه من خودمم می تونم تمرین های کتاب حمید رضا مقسمی یا جعفر نژاد قمی  رو بیارم این جا بنویسم بگم اینم از تمرین
در کل به نظرم اگر یه حر فه ای این کار و به عهده بگیره خیلی بهتر تا یه آما تور مثل خودمون مگر نه؟

----------


## Salar Ashgi

سلام به همه دوستان گرامی ؛ همانطور که آقا نیما ذکر کردن اگه این کار قدم مثبتی باشه برای افراد مبتدی

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

میانبری باشه واسه افرادی که میخوان با استفاده از این کدها کار خود را پیش ببرند ، ارزش علمی نخواهد 

داشت .

و بهتر است اهداف تاپیک بطور کامل مشخص شود : آموزش برنامه نویسی یا فقط ارائه تمرین ، تا تاپیک

دارای محتوای علمی مطلوبی بوده و در راستای موضوعش جریان پیدا کند و مدیران نیز در راستای این امر

و ارتقا سطح علمی کاربران از هیچ کمکی دریغ نخواهند نمود .

موفق باشید .

----------


## smahdi1991

آقا سالار عزیز منظور من هم همینه که از طریق تمرین به آما تورها آموزش  بدیم

----------


## victoria

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

----------


## kral_pontiac

اینجا هم که ماشاالله همه شعارشون شده " تمرین دانشجوئی نه " .
به جای این حرفها کار رو شروع کنید . البته اگه واقعاً نیتتون خیره !
ممنون

----------


## smahdi1991

خوب یکی باید این کارو شروع کنه که بدونه چطوری باس شروع بشه دیگه

----------


## smahdi1991

خوب اگر دیدم واقعا تا آخر امروز هیچ کس تو این قضیه پا پیش نگذاشت من چند تا تمرین می گذارم  تا ببینم تا بعد چی میشه

----------


## alinaghiha

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

----------


## ebrahim1988

خب باشه بنويسيد!
 سوال 1:
برنامه اي بنويسيد كه يك عدد را گرفته فاكتوريل عدد را حساب كند

*فرمول فاكتوريل:   fact(n)=1*2*3*...*n

سوال 2:
برنامه اي بنويسيد كه يك عدد را گرفته و مشخص كند اين عدد اول است يا نه
*عددي اول است كه به غير از خودش و 1 بر هيچ عدد ديگري بخش پذير نباشد
فعلا فكر كنم همينا كافيه

----------


## ebrahim1988

سوال 3:
برنامه اي بنويسيد كه n را گرفته و n عدد اول دنباله ي فيبوناچي رو چاپ كنه
*دنباله ي فيبوناچي :                              1,1,2,3,5,8,13,21,...
يعني هر عدد از مجموع دو عدد قبلي بدست مياد(غير از دو عدد اول كه هميشه ثابت و 1 هستن)
البته فعلا به روش ساده بنويسيد تا برسيم به روش بازگشتي

----------


## smahdi1991

> خب باشه بنويسيد!
>  سوال 1:
> برنامه اي بنويسيد كه يك عدد را گرفته فاكتوريل عدد را حساب كند
> 
> *فرمول فاكتوريل:   fact(n)=1*2*3*...*n
> 
> سوال 2:
> برنامه اي بنويسيد كه يك عدد را گرفته و مشخص كند اين عدد اول است يا نه
> *عددي اول است كه به غير از خودش و 1 بر هيچ عدد ديگري بخش پذير نباشد
> فعلا فكر كنم همينا كافيه


ممنون دوست عزیز ولی فکر نمی کنید این تمرین ها کمی بر ای شروع سخت باشه لطفا طوری تمرین ها رو بیان کنید که دوتا آسون و دو تا سخت باشند نه همشون سخت باشند در ضمن از  اول شروع کنید چون منم خودم مبتدی هستم نمی تونم اینا رو حل کنم برای مبتدی تمرین معین کنید نه برای حرفه ای به تریتب و به مرور زمان که حرفه ای شدیم اون موقع هم به مرور سوالات باید سخت تر و سختر بشه 
ممنون از لطفتون چون گام اول شروع رو برداشتید

----------


## ali zi zeperto

دوستان لطفا نظراتشون رو در مورد کدها اعلام بفرمایند.ممنون و متشکر
دانلود

----------


## queen-mm

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

  با حل اينها با ساختار كلي برنامه آشنا مي شين.متغير تعريف  مي كنين. مقايسه انجام مي دين و عمل تقسيم انجام مي دين.

----------


## smahdi1991

> // in the name of god
>           //this program is coded by BOSS
> #include<stdio.h>
> int main()
> {
>         int x,y;
>     printf("enter 2 number");
>     scanf("%d%d",&x,&y);
>     if(x>y)
> ...


خوب ببینید این درسته

----------


## smahdi1991

> // in the name of god
>           //this program is coded by BOSS
> #include<stdio.h>
> int main()
> {
>         int x;
>     printf ("enter a num:");
>     scanf ("%d",&x);
>     if (x%2==0)
> ...


اینم از دومین برنامه ببینید که اینم درسته اگر نه بگید کجاش عیب داره؟

----------


## amir-yeketaz

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

----------


## smahdi1991

سلام دوست عزیز این تا پیک قصد این رو داره تا از ابتدای C کم کم به سطح حرفه ای C ادامه به کار بده تا کاربرا بتونند c رو با تمرین و توضیح تمرینات خوب بیا موزند 
کم کم این سطح خیلی بالا تر می ره در ضمن queen mm دو مثال دیگه ی این هفته کجا رفت یعنی باید 2 تا ساده و دو  تا سخت باشه پس دو تا دیگه کجاس؟

----------


## queen-mm

جوابتون درست بود.

برنامه اي بنويسيد كه بدون استفاده از آرايه ها معكوس يك عدد رو در خروجي چاپ كنه.
برنامه اي بنويسيد كه يك جدول ضرب 10 در 10 چاپ كنه.

يه سؤال هم مي ذارم كه برنامه نيست ولي بهتره ياد بگيرين:كدي بنويسيد كه تفاوت a++ رابا ++a , a-- را با --a مشخص كند.

با برنامه ي اول تقسيم پياپي و با دومي حلقه ي تودرتو كار مي كنين

----------


## queen-mm

براي حل برنامه ي اول مي تونين از يه حلقه استفاده كنين.داخلش هر بار عدد بر ده تقسيم مي شه و باقيمانده چاپ مي شه تا عدد  0 بشه.برنامه دوم هم از دو تا for تودرتو استفاده مي كنه.و داخلشم بعد از تمام شدن for داخلي يه خط بايد برين پايين.

----------


## mjpersian

*با سلام
میخواستم بدونم چطور عددی را به توان عدد دیگر برسانم(مثلاً a را به توان b برسانیم).حلقه به چه صورت میشود؟
با سپاس*

----------


## smahdi1991

> *با سلام
> میخواستم بدونم چطور عددی را به توان عدد دیگر برسانم(مثلاً a را به توان b برسانیم).حلقه به چه صورت میشود؟
> با سپاس*


برای این کار از این روش استفاده میشه
p=1;
for(i=1;i<=b;i++)
p=p*a;

----------


## queen-mm

> *با سلام
> میخواستم بدونم چطور عددی را به توان عدد دیگر برسانم(مثلاً a را به توان b برسانیم).حلقه به چه صورت میشود؟
> با سپاس*


دوست عزيز بهتر نبود يه تاپيك مي زدي؟نظم تاپيك رو حفظ مي كردي؟

----------


## queen-mm

دوست عزيز ورودتون رو به سايت برنامه نويس تبريك مي گم.ولي چند نكته توجه كن: اولا درخواست پروژه ممنوع
دوما جواب همه ي اين سوالا يه جستجوي ساده هست
سوما اين تاپيك سوالها به ترتيب يادگيري زبان سي پرسيده مي شه.در عرض يك هفته ساير كاربران جواب مي دن.نه اينكه از هر جا هر كي دلش خواست سوال پرسيده شه!

دوستان كسي جواب دو سوال اين هفته  رو بلد نيست.دو روز مونده هاااا!

----------


## smahdi1991

این جواب برعکس کردن ببینید درسته: یا طور دیگه ای هم میشه نوشت (زاستی یه چیزه دیگه اینکه اگر طور دیگه ای هم میشه نوشت لطفا اون جواب رو هم بگذارید تا ماهم ببینیم تا با الگوریتم و برنامه نویسی به سبک متفاوت آشنا بشیم. ممنون)  :
       // in the name of god
#include <stdio.h>
int main()
{
        int x,r,i;
        scanf("%d",&x);
        for (i=1; ;i++)
        {
                r=x%10;
                x=x/10;
                printf("%d",r);
                if(x==0)
                break;
        }
        return 0;
}

----------


## queen-mm

درسته.ولي با while هم مي تونستين بنويسين(شما با سي نوشتين من هم با سي پلاس پلاس مي نويسم):

   while (n)
        {
          cout<<n%10;
          n=n/10;
        }

----------


## amir-yeketaz

خیلی ممنون از این تاپیکی که درست کردین 
خواهشا اگه میشه یه کم سرعتو بیارین بالاتر و برین سر آرایه های یک بعدی و دو بعدی و کاراکتر
البته یه کم نه که یهو سرعت بره بالا 
خیلی ممنون :تشویق:  :تشویق:  :تشویق:

----------


## khafan_bat

اینطوری حال نمیده ! شلوغ کاری شده ! البته این نظر منه !

با این حال همه خسته نباشند. !

www.innovation.iranblog.com

----------


## smahdi1991

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

----------


## smahdi1991

سلام کویین خانوم 
ممنون از این لطفتون ولی اینجا تمرین های C رو مورد بحث قرار میدیم پس لطفا ابتدا جواب رو به C وسپس اگر خواستید به C++‎نیز قرار دهید 
باتشکر مهدی

----------


## بانوی ایران

جدول 10*10 رو میشه حل کنید؟

----------


## بانوی ایران

> چون دوستان مي خوان سريع تر جلو بريم.4 سوال اين هفته رو يك جا مي گم:
> 
> سوالهاي آسون:
> يه ماشين حساب كه جمع و ضرب و تفريق وتقسيم انجام بده(باswitch) 
> برنامه اي كه ك م م و ب م م دو عدد حساب كنه.وچون اين تمرين خيلي ساده هست ادامش يه كد هم بنويسين كه بگه اين دو عدد كدومشون عدد مربع كامل هستن؟
> 
> سوالهاي سخت:
> برنامه اي كه مجموع ارقام يه عدد 10 رقمي رو چاپ كنه
> برنامه اي كه يه معادله ي درجه دو رو حل كنه.


جای سوالای سخت و اسون رو عوض کنید من دوتای دوم رو همین الان نوشتم ولی دوتای اول
راهنمایی کنید :متفکر: 
توی اولی متغیر swich رو چی تعریف کنم؟
برای ب م م و ک م م باید بیام عوامل اول دو عدد رو بکشم بیرون؟

----------


## بانوی ایران

> این جواب برعکس کردن ببینید درسته: یا طور دیگه ای هم میشه نوشت (زاستی یه چیزه دیگه اینکه اگر طور دیگه ای هم میشه نوشت لطفا اون جواب رو هم بگذارید تا ماهم ببینیم تا با الگوریتم و برنامه نویسی به سبک متفاوت آشنا بشیم. ممنون) :
>        // in the name of god
> #include <stdio.h>
> int main()
> {
>         int x,r,i;
>         scanf("%d",&x);
>         for (i=1; ;i++)
>         {
> ...


سلام
اول ممنون از تا÷یکتون
دوم این برنامه که شما نوشتید معکوس رو رقم رقم چا÷ میکنه
برای اینکه یک جا چا÷ کنه ااینجوری بنویسید



```
/*maghloob N*/
```



```

[left]#include <stdio.h>
#include <stdlib.h>
main(void)
{
          int sum=0;
          int N;
          int X;
          printf ("enter N\n");
          scanf ("%d", &N);
          while (N>0)
          {
                X=N%10;
                sum=sum*10+X;
                N=N/10;
          }
          printf ("sum=%d", sum);
          system("pause");
return 0;
}
[/left]
```

----------


## بانوی ایران

اگه میشه از iostream استفاده نکنید من بلد نیستم
stdio.hلطفا

----------


## smahdi1991

سلام بانو خانوم از ورودتون به این تاپیک همه خوشحالیم بانو خانوم لطفا پاسخ ها تون رو در این تاپیک مثل من و بقیه قرار بدید تا همه بتوونند استفاده کنند البته ما ههم با الگوریتم های مختلف می نویسیم این امکان افزاریش بازدهی رو بالا می بره من از این که این 2 و3 هفته کمتر سر می زنم شر منده ام چون امتحانات میان ترمم شرو ع شده و کمتر می تونم بیام ولی وقتی که اومدم سعی می کنم جبران کنم
در ضمن ابتدا در بارهی الگوریتم حل مسله با هم صحبت کنید و بعد پاسخ هاتون رو به همدیگر در این تاپیک نشون بدید و بگید که جه کار کنه بر نامه بهینه تر  میشه و ...   .به نظرم این کارو کنید خیلی بهتره
با تشکر سید مهدی

----------


## بانوی ایران

> سلام بانو خانوم از ورودتون به این تاپیک همه خوشحالیم بانو خانوم لطفا پاسخ ها تون رو در این تاپیک مثل من و بقیه قرار بدید تا همه بتوونند استفاده کنند البته ما ههم با الگوریتم های مختلف می نویسیم این امکان افزاریش بازدهی رو بالا می بره من از این که این 2 و3 هفته کمتر سر می زنم شر منده ام چون امتحانات میان ترمم شرو ع شده و کمتر می تونم بیام ولی وقتی که اومدم سعی می کنم جبران کنم
> در ضمن ابتدا در بارهی الگوریتم حل مسله با هم صحبت کنید و بعد پاسخ هاتون رو به همدیگر در این تاپیک نشون بدید و بگید که جه کار کنه بر نامه بهینه تر میشه و ... .به نظرم این کارو کنید خیلی بهتره
> با تشکر سید مهدی


سلام
چشم برنامه ها رو میزارم
منظورتون ازدرباره  الگوریتم حل مساله صحبت کنیم چیه؟
من امتحانام  تمام شد :بامزه:  :لبخند گشاده!:

----------


## بانوی ایران

/*sum digits of a number*/


#include <stdio.h>
#include <stdlib.h>
main(void)
{
         int N;
         int sum=0;
         int R;
         printf("enter N\n");
         scanf("%d", &N);
         while(N>0)
         {
                   R= N%10;
                   sum+=R;
                   N/=10;
         }
         printf("sum=%d\n", sum);
         system("pause");
return 0;
}
این برنامه مجموع ارقام هر عدد رو چا÷ میکنه
نه فقط 10رقمی

البته به جای stdlib.h وsystem("pause")l میتونید ازconio.h ,getch ()lاستفاده کنید

----------


## بانوی ایران

تابع درجه دو هم باید بیایم  تابعی مثلf=ax2+bx+c
(x2 توان 2 منظورمه)
الگوریتم رو جوری بنویسیم که a,b,cرو دریافت کنه و قرار بده توی delta(تابعی جواب داره که delta بزرگتر و مساوی صفر باشه)به این نحو دستوراتشو قرار میدیم
برنامه رو نوشتم ولی یکم اشکال داره باهاش کار میکنم اگه به جواب نرسیدم میزارمش تا کمک کنید

----------


## victoria

برنامه ماشين حساب
#include<stdio.h>
#include<iostream.h>
void main(){
int x,y,z;
char ch;
cout<<"enter your first number:";
cin>>x;
cout<<"enter your operator(+ - * /):";
cin>>ch;
cout<<"enter your second numer:";
cin>>y;
switch(ch){
case'+':
cout<<"the answer is:"<<x+y;break;
case'-':
cout<<"the answer is:"<<x-y;break;
case'*':
cout<<"the answer is:"<<x*y;break;
case'/':
cout<<"the answer is:"<<x/y;break;
}}

----------


## victoria

ببخشيد يه سوال خيلي بچه گانه داشتم چرا كدهايي كه من گذاشتم همه شون چپكي مي‌شن؟  :خجالت: 
مي شه بگيد بايد چه كار كنم كه اينچوري نشه! :گیج:

----------


## shask00l

> ببخشيد يه سوال خيلي بچه گانه داشتم چرا كدهايي كه من گذاشتم همه شون چپكي مي‌شن؟ 
> مي شه بگيد بايد چه كار كنم كه اينچوري نشه!


برای ارسال کد از تگ [ c o d e ] استفاده کنید . اون بالا روی نوار ابزار ادیتور با علامت # مشخص شده .

----------


## amir-yeketaz

نمیخوای برین جلوتر 
بابا ما که ترم اولیم تا تابع های بازگشتی رو خوندیم 
شما هنوز به آرایه ها هم نرسیدی؟؟؟!!!!

----------


## smahdi1991

لطفا پاسخ های خودتون رو با زبان برنامه نویسی C در این تاپیک قرار بدهید نه C++‎ چون اصلا این تاپیک برای C زده شده نه C++‎ خواهش میکنم .

----------


## smahdi1991

سلام من دوباره اومد م  :لبخند گشاده!: ولی هنوز میان ترمام تموم نشده :گریه: 
اما شروع به پاسخ دادن به سوالات میکنم  مثل همه ی شما دوستان
ببینید این جواب برای تمرین جدول 10*10 درسته یا نه:
              //in the name of god
#include<stdio.h>
int main()
{
        int i,j,s;
        for(i=1;i<=10;i++)
        {

                s=0;
                 printf("\n");
                for (j=1;j<=10;j++)
                {
                        s=i*j;
                        printf("%d\t",s);
                }
        }
        return 0;
}

----------


## smahdi1991

این هم جواب تمرین مر بوط به 4  عمل اصلی ببینید درسته یا نه اگر میشه جواب های خودتون رو هم قرار بدهید و همینطور اگر از الگوریتم دیگری (راه حل دیگری هم بلدی بنویس) استفاده کردید که دیگر حتما باید بنویسید چون خیلی عالی میشه اگر هم مشکلی داشتید در رابطه با بخش ها مختلف عرض کنید تا ما هم اگر بلد بودیم جواب عرض کنیم :لبخند گشاده!: :
              //in the name of god

#include<stdio.h>
#include<conio.h>
int main()
{
        int x,y,i;
        char c;
                for (i=1;i<=4;i++)
        {
        printf("\nPlease Enter 2 operands :");
        scanf("%d%d",&x,&y);
        printf("please Enter desigred operator(+ - / *)\n");
        c=getch();
           printf("x = %d,,y = %d  Operator:%c\n",x,y,c);

        switch(c)
        {
                case '*':
        {
                printf("x * y = %d",x*y);
        break;
        }

        case '+':
        {
               printf("x + y = %d",x+y);
        break;
        }
        case '/':
        {
                printf("x / y = %d",x/y);
        break;
        }
        case '-':
        {
                printf("x - y = %d",x-y);
        break;
        }
        default:
         printf("error happened!");
        break;
        }
        }
        return 0;
}

----------


## بانوی ایران

سلام خسته نباشید
میشه یه توضیح بدید چرا c=getchگذاشتید 
اصلا راجع به getch یه توضیح بدید که کارش چجوریه

----------


## smahdi1991

بر روی چشم  بانوی من(جومونگی گفتم :لبخند گشاده!: ):تابع ()getchبرای خواندن کاراکتر( البته فقط یک کاراکتر ) مورد استفاده قرار میگیرد این تابع کاراکتر ورودی رو از کاربر در یافت نموده و آن را در متغییر ذخیره می کند و لی چیزی به کاربر نمایش نمی دهد وچون کاراکتر ورودی در متغییر ذخیره می شود امکان پاک کردن یا عوض کردن آن وجود ندارد.این تابع در هدرفایل
#include<conio.h>
تعریف می شود.
این کافیه یا اگر بخواهید بهتر  وکاملتر توضیح بدم :لبخند گشاده!:

----------


## smahdi1991

اینم از معادله درجه ی دوم  :لبخند گشاده!: :فکر کنم درست عمل کنه به طور کامل:
//in the name of god
#include<stdio.h>
#include<math.h>
int main()
{

    float a,b,c,d,x,z;
    printf("enter 3 num: a,b,c(ax2+bx+c=0):");
    scanf("%f%f%f",&a,&b,&c);
    d = b*b - (4*a*c);
    if (d==0)
    {
        x=((-b)/(2*a));
        printf("x=%f",x);
    }
    else if (d>0)
    {
        z = sqrt (d);
        printf ("x1=%f,x2=%f",(-b+z)/(2*a),(-b-z)/(2*a));
    }
    else
    {
        printf ("x has no answer");
    }
    return 0;
}

----------


## smahdi1991

راستی اگر مایلی در باره ی ()getchar  و()getche
توضیح بدم :چشمک:

----------


## بانوی ایران

getchar,ghetcheرو هم توضیح بدید ممنون میشم :چشمک:

----------


## بانوی ایران

این برنامه ایه که من برای تابع درجه 2 نوشتم ولی pow رو اجرا نمیکنه
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main(void)
{
          int delta, a, b, c, x1, x2;
          printf ("enter a,b,c\n");
          scanf ("%d %d %d", &a, &b, &c);
          delta=b*b-4*a*c;
          if (delta>0)
          {
                      x1=(-b+pow(delta,1/2)/2*a);
                      x2=(-b-pow(delta,1/2)/2*a);
                      printf ("x1=%d, x2=%d", x1, x2);
          }
          else if (delta==0)
          {
                 x1=-b/2*a;
                 printf ("x1=x2=%d", x1);
          }
          else
          {
              printf("no real roots for this q");
          }
          system ("pause");
return 0;
}

----------


## بانوی ایران

> بر روی چشم بانوی من(جومونگی گفتم):تابع ()getchبرای خواندن کاراکتر( البته فقط یک کاراکتر ) مورد استفاده قرار میگیرد این تابع کاراکتر ورودی رو از کاربر در یافت نموده و آن را در متغییر ذخیره می کند و لی چیزی به کاربر نمایش نمی دهد وچون کاراکتر ورودی در متغییر ذخیره می شود امکان پاک کردن یا عوض کردن آن وجود ندارد.این تابع در هدرفایل
> #include<conio.h>
> تعریف می شود.
> این کافیه یا اگر بخواهید بهتر وکاملتر توضیح بدم


ممنون
خوب چرا از scanf به جاش استفاده نکنیم
میشه ؟

----------


## smahdi1991

توضیحات اموزشی:
تابع ()getchبرای خواندن کاراکتر( البته فقط یک کاراکتر ) مورد استفاده قرار میگیرد(به این صورت به عنوان مثال: x=getch()) این تابع کاراکتر ورودی(مثلا +یا _یا-یاLیاdیا:یا ! , ویا ... ) رو از کاربر در یافت نموده و آن را در متغییر(X) ذخیره می کند و لی چیزی به کاربر (در صفحه خروجی یا نمایشگر به هنگام چاپ )نمایش نمی دهد وچون کاراکتر ورودی در متغییر(X) ذخیره می شود امکان پاک کردن یا عوض کردن(مثلا اگر کاراکتر ورودی *بود نمیتونیم دیگه به /یا rیا(ویا چیزای دیگه تغییرش داد) آن وجود ندارد.و این تابع بعد از دریافت کارکتر ورودی بدون نیاز به فشار دادن دکمه ی enter برای اجرای دستورات به خط بعد می روداین تابع در هدرفایل
#include<conio.h>
تعریف می شود.
تابع()getcheوتابع()getcharنیز مثل تابع ()getchفقط برای یک کاراکتر مورد استفاده قرار میگیرنداما با این تفاوت که تابع ()getchar با در یافت کاراکتر از ورودی علاوه بر اینکه کاراکتر  فشارداده شده را به کاربر نمایش می دهد منتظر می ماند تا دکمه ی enter فشار داده شود و سپس آن را در متغییر (مثلا x) ذخیره می کند که این کار باعث می شود اگر به اشتباه دکمه را فشار دادیم بتوانیم آن را پاک کرده و اصلاح کنیم(با backspace میشه پاکش کردو دوباره کاراکتر رو وارد کرد)اما تابع ()getcheبه محض فشار دادن دکمه کاراکتر ورودی را در متغییر (مثلاx) ذخیره کرده و آن را نیز در صفحه نمایش به کاربر نمایش می دهد که این کار (ذخیره کردن) منجر می شود که ما نتوانیم اگر اشتباهی انجام دادیم آن را تصحیح کنیم.
اووه ه ه ه  ه :لبخند گشاده!: 
دیگه فکر کنم اینو خیلی با حال وکامل و جامع و شامل :لبخند گشاده!:  توضیح دادم

----------


## smahdi1991

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

----------


## بانوی ایران

بله اجراش کردم 
جالب بود
میشه به برنامه ای که من برای تابع درجه 2 نوشتم نگاه کنید pow رو درست اجرا نیمکنه
راستی برنامه ای که برا ماشین حساب گذاشتید نیازی به حلقه for نداره

----------


## smahdi1991

می دونم ولی برای این حلقه ی for رو قرار دادم تا بتونید همه ی اعمالشو  امتحان کنید :چشمک: 
خوب لطفا کد رو قرار بدید

----------


## smahdi1991

خطا های منطقی بزرگترین وبد ترین نوع خطا ها هستند که مغز هر کسی رو به چالش وا می دارند حتی خیلی حر فه ای ها چه برسه به منه آماتور  :لبخند گشاده!: 
برنامه شما دارای 3 خطای منطقی بود که فقط قرار نداد پرانتز موجب این خطا ها شد:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main(void)
{
          int delta, a, b, c, x1, x2;
          printf ("enter a,b,c\n");
          scanf ("%d %d %d", &a, &b, &c);
          delta=b*b-4*a*c;
          if (delta>0)
          {
                      x1=((-b+pow(delta,1/2))/2*a);//اینجا دوتا پرانتز رو قرار ندادید که موجب ایجاد خطای منطقی شد
                      x2=((-b-pow(delta,1/2))/2*a);//اینجا هم مثل بالا وبا ید خیلی وراقب این طور خطا ها باشید
                      printf ("x1=%d, x2=%d", x1, x2);
          }
          else if (delta==0)
          {
                 x1=(-b/(2*a));//اینجا هم مثل بالا
                 printf ("x1=x2=%d", x1);
          }
          else
          {
              printf("no real roots for this q");
          }
          system ("pause");
return 0;
}

----------


## بانوی ایران

باز هم کار نمیکنه
تازه این تغییرات رو هم توش دادم ولی مثلا 1و3و1 که میدم delta=5میشه ولی جواب x1,x2رو میزنه-1,-2
که غلته
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main(void)
{
          int delta, a, b, c;
          float x1, x2;
          printf ("enter a,b,c\n");
          scanf ("%d %d %d", &a, &b, &c);
          delta=b*b-4*a*c;
          if (delta>0)
          {
                      x1=((-b+pow(delta,1/2))/2*a);
                      x2=((-b-pow(delta,1/2))/2*a);
                      printf ("x1=%f, x2=%f", x1, x2);
          }
          else if (delta==0)
          {
                 x1=-b/2*a;
                 printf ("x1=x2=%f", x1);
          }
          else
          {
              printf("no real roots for this q");
          }
          system ("pause");
return 0;
}

----------


## smahdi1991

مخم داغ کرد چون به یه نکته اونم در powدقت نکرده بودم  :لبخند گشاده!: 
این از برنامه با رفع اشکال و دقیق و کامل:خدا کنه دیگه مشکل نداشته باشه :لبخند گشاده!: 
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main()// اینجا هم نباید از void استفاده کنی وباید به این صورت که نوشته شده بنویسی
{

          float x1, x2, a,delta, b, c;
          printf ("enter a,b,c\n");
          scanf ("%f%f%f", &a, &b, &c);//اینجا هم باید از %f استفاده کنیو بهتره که در scanfفاصله نذاری بین %fها
          delta= (b*b)-(4*a*c);

          if (delta>0)
          {
                      x1=((-b+pow(delta,0.5))/2*a);//در اینجا اولا باید در توابعپاور و امثال این باید هر دو باید همنوع بخصوص در اینجا float باشه
                      x2=((-b-pow( delta,0.5))/2*a);// مثله بالا
                      printf ("x1 = %f , x2 = %f\n", x1, x2);
          }
          else if (delta==0)
          {
                 x1=(-b/(2*a));//باید پرانتز رو بگذاری
                 printf ("x1=x2=%f", x1);
          }
          else
          {
              printf("no real roots for this q");
          }
          system ("pause");
return 0;
}

----------


## amir-yeketaz

جند تا سورس کد به زبان سی گذاشتم از اول تا آرایه ها   (180 به بالا)  برا دانلود 
خواستین میتونین ازش استفاده کنین 
  امیدوارم به دردتون بخوره  :چشمک:  :چشمک:  :چشمک: 
حجمشم خیلی پایینه (50 KB)

 از اینجا دانلود کنید

----------


## بانوی ایران

> مخم داغ کرد چون به یه نکته اونم در powدقت نکرده بودم 
> این از برنامه با رفع اشکال و دقیق و کامل:خدا کنه دیگه مشکل نداشته باشه
> #include <math.h>
> #include <stdio.h>
> #include <stdlib.h>
> int main()// اینجا هم نباید از void استفاده کنی وباید به این صورت که نوشته شده بنویسی
> {
>  
>           float x1, x2, a,delta, b, c;
> ...


نه نه :متعجب:  اگه a,b,cرو هم float کنم جوابش داغون میشه یه چیز چرت تر از اون میده
فهمیدم جریان چیه
این برنامه برایdelta=0جواب میده حتی delta>0وقتی x1,x2اعداده int یا floatباشن هم جواب میده مشکل وقتیه که مثلا دلتا میشه 5 چون x1,x2اعداه گنگ میشن(توی صورت رادیکال 5 داریم) و برنامه تبدیلش میکنه به intیا floatعددش درست در نمیاد یعنی اون چیزی که من رو کاغذ به دست میارم نمیشه :چشمک:

----------


## alinaghiha

من فكر مي كنم مشكل ايجاست



x1=((-b+pow(delta,0.5))/2*a);//در اینجا اولا باید در توابعپاور و امثال این باید هر دو باید همنوع بخصوص در اینجا float باشه
                      x2=((-b-pow( delta,0.5))/2*a);// مثله بالا
                     

فكر كنم الان درست شد

x1=((-b+pow(delta,0.5))/(2*a));
x2=((-b-pow( delta,0.5))/(2*a));

----------


## smahdi1991

ایول بابا من نمی دونم چرا اصلا این جا رو ندیده بودم اه  ه  ه  ه :لبخند گشاده!: 
:
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int main()// اینجا هم نباید از void استفاده کنی وباید به این صورت که نوشته شده بنویسی
{
          float x1, x2, a, b, c,delta;
          printf ("enter a,b,c\n");
          scanf ("%f%f%f", &a, &b, &c);//اینجا هم باید از %f استفاده کنیو بهتره که در scanfفاصله نذاری بین %fها
          delta= (b*b)-(4*a*c);

          if (delta>0)
          {
                      x1=((-b+pow(delta,0.5))/(2*a));//doroste hagh ba ali naghia bood ye parantez ham dar inja kam boodدر اینجا اولا باید در توابعپاور و امثال این باید هر دو باید همنوع بخصوص در اینجا float باشه
                      x2=((-b-pow(delta,0.5))/(2*a));// doroste hagh ba ali naghia bood ye parantez ham dar inja kam bood مثله بالا
                      printf ("x1 = %f , x2 = %f\n", x1, x2);
          }
          else if (delta==0)
          {
                 x1=(-b/(2*a));//باید پرانتز رو بگذاری
                 printf ("x1=x2=%f", x1);
          }
          else
          {
              printf("no real roots for this q");
          }
          system ("pause");
return 0;
}

----------


## بانوی ایران

فکر کنم درست شد :چشمک: 
اگر بازم کار نکرد میگم :لبخند گشاده!: 
حالا دوستان یه نگاه به این برنامه بندازید اینو اقامهدی لطف کردن برا من فرستادن(برنامه ماشین حساب با scanfبه جایgetch)

//in the name of god


#include<stdio.h>
#include<conio.h>
int main()
{
   int x,y,i;
   char c;
   for (i=1; i<=4; i++)
   {
       printf("\nPlease Enter 2 operands :");
       scanf("%d%d%c",&x,&y,&c);
       printf("please Enter desigred operator(+ - / *)\n");
       scanf("%c",&c);
       printf("x = %d,,y = %d  Operator:%c\n",x,y,c);
       switch(c)
       {
       case '*':
       {
           printf("x * y = %d",x*y);
           break;
       }
       case '+':
       {
           printf("x + y = %d",x+y);
           break;
       }
       case '/':
       {
           printf("x / y = %d",x/y);
           break;
       }
       case '-':
       {
           printf("x - y = %d",x-y);
           break;
       }
       default:
           printf("error happened!");
           break;
       }
   }
   getch();
   return 0;
}
من یه برنامه شبیه این نوشتم ولی درست اجرا نمیشه میره توی defaultدر واقع اصلا printf ,scanfدوم رو اجرا نمیکنه              //in the name of god

#include<stdio.h>
#include<conio.h>
int main()
{
       int x,y;
       char c;
       printf(" enter x, y :\n");
       scanf("%d%d",&x,&y);
       printf("Enter desigred c:(+ - / *)\n");
       scanf ("%c",&c);
       printf ("x=%d ,  y=%d,  c=%c\n", x, y, c);
       switch(c)
       {
               case '*':
       {
               printf("x * y = %d",x*y);
       break;
       }
       case '+':
       {
              printf("x + y = %d",x+y);
       break;
       }
       case '/':
       {
               printf("x / y = %d",x/y);
       break;
       }
       case '-':
       {
               printf("x - y = %d",x-y);
       break;
       }
       default:
        printf("error happened!");
       break;
       }
       getch(); 
       return 0;
}

----------


## بانوی ایران

اینم یه برنامه که یه عدد از ما میگیره جذر اون عدد رو به صورت intمیده بیرون
#include <stdio.h>
#include <conio.h>
int main(void)
{
    int sum, N, count, x;
    printf ("enter N\n");
    scanf ("%d", &N);
    x=1;
    sum=1;
    count=0;
    while(sum<=N)
    {
          x+=2;
          sum+=x;
          count+=1;
    }
    printf ("%d\n", count);
    getch();
    return 0;
}
ولی وقتی با getchمینویسمش غلط میشه
شاید از getch غلط استفاده میکنم#include <stdio.h>
#include <conio.h>
int main(void)
{
    int sum, N, count, x;
    printf ("enter N\n");
    N=getch();
    x=1;
    sum=1;
    count=0;
    while(sum<=N)
    {
          x+=2;
          sum+=x;
          count+=1;
    }
    printf ("%d\n", count);
    getch();
    return 0;
}

----------


## smahdi1991

همینطور که گفتم تابع getch برای دریافت  یک کاراکتر به کار برده می شه نه اعداد اما اگر عدد وارد کنیدفکر کنم در این حالت  کد اسکی اونو دریافت کنه به همین دلیل اون اوب مورد نظر رو نمی دیدید :لبخند گشاده!:

----------


## smahdi1991

خوب از اونجایی که دکمه ی اینتر( enter ) دوکاراکتری هست پس برای اینکه این برنامه درست بشه بایدد قبل از دریافت +یا- یا .... باید از دوتا space قبلش استفاده کرد تا دریافت کنه بعدش کاراکتر مارو.به صورت زیر:
 
#include<stdio.h>
#include<conio.h>
int main()
{
    int x,y;
    char c;
    printf(" enter x, y :\n");
    scanf("%d%d",&x,&y);
    printf("Enter desigred c:(+ - / *)\n");
    scanf ("  %c",&c);//اینجا باید دوتا space قبل %Cقرار بدید
    printf ("x=%d ,  y=%d,  c=%c\n", x, y, c);
    switch (c)
    {
    case '*':
    {
        printf("x * y = %d",x*y);
        break;
    }
    case '+':
    {
        printf("x + y = %d",x+y);
        break;
    }
    case '/':
    {
        printf("x / y = %d",x/y);
        break;
    }
    case '-':
    {
        printf("x - y = %d",x-y);
        break;
    }
    default:
        printf("error happened!");
        break;
    }
    getch();
    return 0;
}

----------


## alinaghiha

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

ممنون

----------


## marde_foolade

سلام
من یک برنامه به زبان سی پلاس پلاس دارم که می خوام اونو به سی تبدیک کنم
اگر ممکنه منو راهنمایی کنید که خیلی نیاز دارم

----------


## smahdi1991

خواهش می کنم alinaghihaعزیز :لبخند گشاده!: 
خوب دوستان اصلا این برای اینکه همه اگر چیزی بلد هستند مشکلات همدیگر رو برطرف کنند و من هم خودم این نکته رو نمی دونستم  خدا رو شکر بچه های این تاپیک با فعالیت هاشون و سوال های خوبشون باعث میشوند تا همه ی افراد با تجربه های جدید نیز رو برو بشوند و نکات ریز رو بیا موزند من هم وقتی اینو از استادم پرسیدم استادم وقتی جواب بهم داد خیلی خوشحال شدم که یکی از نکات ریز برنامه نویسی به زبان C رو به واسطه سوالات و اقدام برای پیدا کردن پاسخشون تونستم بفهمم و مطمئنم که با فعالیت تو این زمینه ها خیلی چیزای دیگرو هم می فهمم
خوب دوست عزیزmarde_fooladeکدتون رو قرار بدید تا ببینیم چی میشه هرچند نباید در اینجا قرار میدادید و لی چون اینجا مربوط به آموزش C  و شما هم که می خواهید یا دبگیرید عیبی نداره پس کد رو قرار بدید :لبخند گشاده!:

----------


## بانوی ایران

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

----------


## smahdi1991

یعنی چی 
یعنی 1000 تا عدد وارد کنیم از طریق ورودی :گیج: 
یا اینکه چیزه دیگه ای هست سوال من که درست متوجه نشدم :لبخند گشاده!: 
لطفا دوباره دقیق تر سوال رو بفرمایید بانوخانوم

----------


## بانوی ایران

بیبینید ما اعداد 1 تا 1000 رو داریم وارد میکنیم (الزامی نیست ترتیب خواستی داشته باشه اعدادی که وارد میکنیم)
یکی از این اعدادگم شده و ما نمیدونیم که این چه عددیه در وا قع ما 999 تا عدد وارد میکنیم برنامه باید بگه اون عددی که وارد نکردیم بین 1 تا 1000 چیه
می خواید راهنمایی کنم؟

----------


## بانوی ایران

راستی دوستان ما این هفته تازه ارای ها رو خوندیم
اگر میشه چند تا برنامه (نمونه سوال)قرار بدید تا یه کم راه بیافتیم

----------


## alinaghiha

اينم سه تا تمرين از آسون به متوسط
منتظر سخت ها باشيد
برنامه اي بنويسيد كه 10 عدد را خوانده در آرايه قرار دهد و از آخر به اول چاپ كند
برنامه اي بنويسيد كه بزركترين عدد آرايه 10 تايي را چاپ كند را چاپ كند 
برنامه اي بنويسيد كه يك آرايه يك بعدي 10 تايي را معكوس كند(n تايي رو هم اگه خونديد)

----------


## nima20-20

با سلام
من میخواستم بدونم چطوری میشه یه برنامه نوشت که بتونه 1000 فاکتوریل و یا بیشتر را در زبان c حساب کنه البته هر چقدر ساده باشه بهتره من هر چقدر سعی کردم نتونستم یعنی عدد بزرگه و تو متغیر جا نمیشه

----------


## majidmt

به نظر من باید از متغیر داینامیک استفاده کنید یا از رشته ها استفاده کنید

----------


## amir-yeketaz

> با سلام
> من میخواستم بدونم چطوری میشه یه برنامه نوشت که بتونه 1000 فاکتوریل و یا بیشتر را در زبان c حساب کنه البته هر چقدر ساده باشه بهتره من هر چقدر سعی کردم نتونستم یعنی عدد بزرگه و تو متغیر جا نمیشه


ببخشید 1000فاکتوریل!!!!
اونم با متغیر 
عمرا!!!!
باید با آرایه حلش کنین چون آرایه رو میشه هر چی که دلتون بخواد زیادش کنین
الگوریتمشم که دیگه همه جا هست و راه های زیادی داره 
یکیش اینجاس
کلیلک کنید

----------


## reza sadeghi

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


 خوب بانو خانم برنامتونو بذارین

----------


## reza sadeghi

منم یه برنامه مبتدی میذارم تا حلش کنین



برنامه ای که در یک آرایه برای 10درس دانشجو نمرات را دریافت نموده و در آرایه ای دیگر تعداد واحد های همان دروس را دریافت نموده و سپس معدل را حساب کند

----------


## بانوی ایران

> خوب بانو خانم برنامتونو بذارین


//findind the missing number
#include <stdio.h>
#include <stdlib.h>
main(void)
{
          int sum1=0;
          int sum2=0;
          int i;
          int N;
          for(i=0;i<1000;i++,sum1+=i);
          for (i=0;i<999;i++)
          {
                          printf ("enter N");
                          scanf ("%d", &N);
                          sum2+=N;
          }
          printf ("mising num=%d", sum1-sum2);
          system ("pause");
return 0;
} دوستان عذر میخوام بابت تاخیرم مودمم  چند روزه که کار نمیکنه
اینم برنامه مورد نظر باید اعداد 1تا1000 رو جمع کنید بعد 999 تا عددی که داریم رو وارد کنید باهم جمع کنید از مجموع 1000 عدد کم کنید عدد گم شده رو بهمون میده
 اگر نیاز به توضیح بیشتر داره بگید

----------


## بانوی ایران

> خوب از اونجایی که دکمه ی اینتر( enter ) دوکاراکتری هست پس برای اینکه این برنامه درست بشه بایدد قبل از دریافت +یا- یا .... باید از دوتا space قبلش استفاده کرد تا دریافت کنه بعدش کاراکتر مارو.به صورت زیر:
> 
> [/code]


سلام 
دوست عزیز ممنون توصیحتون خیلی مفید بود اما دو تا سوال دیگه
من میخواستم به جای 2 تا spaceبه صورت "2%c", cبنویسم ولی نشد قاعدتا با توضیحی که شما دادید باید بشه
و دیگه اینکه چرا شما توی برنامه خودتون از spaceاستفاده نکردید ولی اجرا میشه؟

----------


## oloom1386

سلام دوستان خسته نباشید
من هم یک مبتدی هستم و در بعضی مواقع شدیدا به کمک محتاج میشم به نظر من هم می تونه یه تاپیک موفق بشه و استقبال زیادی هم میشه ازش بدون شک.
خب واسه اینکه عینا اون تمرینارو ننویسین" که افراد سوءاستفاده کنند" کدهایی تقریبا مشابه به اون تمرینارو بذارین که حداقل مبتدی بتونه از بین اونا چیزای دیگه ای هم پیدا کنه به نظرم اینجوری فن الگوریتم نویسی ما مبتدیها هم خوب میشه و ذهنمون با الگوریتمای بیشتری آشنا میشه
ممنون بچه ها به خاطر تایپیکتون

----------


## smahdi1991

سلام دوست عزیز من ورودتون به این تاپیک رو خوش امد میگم 
و با نو خانوم اگر منظورتون برنامه ی اولی است که بدون 2تا space نوشته شده :اونجا باس دقت کنید که من تو scanf اولی %C رو هم گذاشتم , دو باره برای scanfدومی هم یه %c هم گذاشتم به همین خاطر یکenter  بعد از وارد کردن عدد دوم یک کاراکتر برای %C اولی محاسبه و یه کاراکتر هم برای رفتن به خط بعدی محاسبه می شد و در خط بعدی %C رو میتونست بدون مشکل دریافت کنه اما وقتی که دو تا space بزراید بخاطر همون توضیحی که دادم دیگه نیاز به این کارا نیست

----------


## reza sadeghi

سلام دوستان منم یک مبتدی هیستم
ممنون از تاپیک مفیدی که ایجاد کردید

یک سوال داشتم:خیلی رو این برنامه فکر کردم ولی نتونستم یک روش بهینه برای حلش پیدا کنم ممنون میشم کمکم کنید

برنامه ای که یک عدد دریافت کند و مشخص کند این عدد مکعب است یا خیر؟؟؟

----------


## بانوی ایران

> سلام دوست عزیز من ورودتون به این تاپیک رو خوش امد میگم 
> و با نو خانوم اگر منظورتون برنامه ی اولی است که بدون 2تا space نوشته شده :اونجا باس دقت کنید که من تو scanf اولی %C رو هم گذاشتم , دو باره برای scanfدومی هم یه %c هم گذاشتم به همین خاطر یکenter بعد از وارد کردن عدد دوم یک کاراکتر برای %C اولی محاسبه و یه کاراکتر هم برای رفتن به خط بعدی محاسبه می شد و در خط بعدی %C رو میتونست بدون مشکل دریافت کنه اما وقتی که دو تا space بزراید بخاطر همون توضیحی که دادم دیگه نیاز به این کارا نیست


سلام 
ممنون 
راجع به
2%C
ميدونيد؟ چرا جواب نميده؟

----------


## smahdi1991

ُسلام به همگی 
راستی بانو خانوم من که واقعیتش این فلسفه ی 2%C :اشتباه: رو نی دونم اگر میشه بگید ما هم یاد بگیریم

----------


## بانوی ایران

ببينيد مثلا وقتي ميزنيم 
printf("3%d",2) 
چيزي كه برامون چاپ ميشه اينه
"  2"
با دو تا فاصله 2 رو چاپ ميكنه یعنی 3 digitمیزاره برا چاپ عدد 
من از استادم پرسيدم scasnfهم همينطوره گفت اره 3 digit ,ا scanميشه
منم اومدم برنامه رو اينجوري بنويسم نشد

----------


## بانوی ایران

اي بابا چرا اينجا تعطيل شده
صاحابش كو؟ :متفکر: 




> اينم سه تا تمرين از آسون به متوسط
> منتظر سخت ها باشيد
> برنامه اي بنويسيد كه 10 عدد را خوانده در آرايه قرار دهد و از آخر به اول چاپ كند
> برنامه اي بنويسيد كه بزركترين عدد آرايه 10 تايي را چاپ كند را چاپ كند 
> برنامه اي بنويسيد كه يك آرايه يك بعدي 10 تايي را معكوس كند(n تايي رو هم اگه خونديد)


سلام دوست عزيز
 فرق سوال اول با اخر چيه؟
 اين برنامه كه من نوشتم ماله اوليه
#include <stdio.h>
#include <conio.h>
int main()
{
    int n,j=0, i;
    int *num_A, *new_list;
    printf ("enter n\n");
    scanf ("%d", &n);
    num_A=new int[n];
    new_list=new int[n];
    for (i=0;i<n;i++)
    {
        printf ("enter num_A[%d]", i);
        scanf ("%d", &num_A[i]);
    }
    for (i=n-1;i>=0;i--)
    {
        printf("new_list[%d]=%d\n",j , num_A[i]);
        j++;
    }
    getch();
    return 0;
    
}

----------


## shask00l

> فرق سوال اول با اخر چيه؟


به نظر من فرقی ندارن . فقط توی آخری n ذکر شده ...

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

----------


## amir-yeketaz

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

----------


## reza sadeghi

> سلام دوستان منم یک مبتدی هیستم
> ممنون از تاپیک مفیدی که ایجاد کردید
> 
> یک سوال داشتم:خیلی رو این برنامه فکر کردم ولی نتونستم یک روش بهینه برای حلش پیدا کنم ممنون میشم کمکم کنید
> 
> برنامه ای که یک عدد دریافت کند و مشخص کند این عدد مکعب است یا خیر؟؟؟


بابا سوالم زیاد سخت نیست  کسی نمیتونه راهنمایی کنه؟؟؟؟؟؟؟؟؟؟؟

----------


## shask00l

> یک عدد دریافت کند و مشخص کند این عدد مکعب است یا خیر؟؟؟


اگه منظورت توان سوم یه عدده که دوبار ازش جذر بگیر ببین نتیجه صحیحه یا نه ...

----------


## reza sadeghi

> اگه منظورت توان سوم یه عدده که دوبار ازش جذر بگیر ببین نتیجه صحیحه یا نه ...


 
منظورتونو متوجه نشدم میشه در قالب کد توضیح بدین؟؟؟؟؟؟؟؟؟؟/

----------


## بانوی ایران

> به نام یگانه برنامه نویس عالم
> سلام خدمت همه دوستان 
> بانو خانوم اگه میخواین تو آرایه ها ی یک بعدی فول شین نظرم اینه که یه برنامه جامعه آماری بنویسید
> اینطوری هم استفاده از تابع ها را خوب متوجه میشین هم آرایه ها 
> یعنی برنامه ای بنویسید که تعدادی عدد از کاربر بگیرد(البته با تعدادشون)و میانگین ، واریانس ، انحراف معیار ، نما یا همون مد ، میانه و دیگه هر چی دلتون خواست 
> به نظر من حتما از توابع استفاده کنید تا کارتون منظم باشه 
> تو اینا یه خورده مد و میانه دشوارتره 
> یادتون باشه که داده ها نامنظمند و باید برایه بدست آوردن میانه اونارو منظم کنید و اگه تعداد داده ها زوج و فرد باشن و ... اینا باید شرطاشو بذارین 
> به هر حال نوشتن این برنامه کمک زیادی به فهمیدن کامل آرایه ها میکنه 
> ...


سلام امیر اقا
ممنون
یه کم دارم راه میافتم کاری هم که گفتید خواهم کرد ولی مشکل من با توابع هست
درست نمیتونم باهاشون کار کنم
برا همین برنامه هام خیلی طولانی میشه
برای اینکه روال اینجا بهم نخوره یه تاپیک زدم 
مثلث خیام پاسکال رو باید چاپ کنه باید با توابع بنویسمش نتونستم
توی توابع گیر کردم ولی شاید کاری گفتید کمکم کنه راه بیافتم

----------


## بانوی ایران

راستی دوستان توی اون برنامه که نوشتم ازp*استفاده کردم
ولی دو تا مشکل هست که این روشی که من استفاده کردم تویcppهست و من باcبرنامه مینویسم
دوم اینکه این روش رو به صورت دو بعدی بلد نیستم

----------


## amir-yeketaz

> یه کم دارم راه میافتم کاری هم که گفتید خواهم کرد ولی مشکل من با توابع هست
> درست نمیتونم باهاشون کار کنم
> برا همین برنامه هام خیلی طولانی میشه


استفاده از توابع باعث میشه که ذهنت خیلی منظم بشه و همین طور برنامت 
و خواننده سورس برنامه ی شما خیلی راحت تر متجه کارایه برنامتون میشه 
همیشه استاد ما بهمون توصیه می کنه که از توابع استفاده کنیم چون که وقتی برنامه یه خورده بزرگ میشه متجه میشین که چقدر استفاده از توابع به درد میخوره
و من حتما بهتون توصیه میکنم که از توابع تو برنامه هاتون استفاده کنین اونم به صورت خیلی زیاد 
تا با کارشون به خوبی آشنا بشین

----------


## بانوی ایران

> استفاده از توابع باعث میشه که ذهنت خیلی منظم بشه و همین طور برنامت 
> و خواننده سورس برنامه ی شما خیلی راحت تر متجه کارایه برنامتون میشه 
> همیشه استاد ما بهمون توصیه می کنه که از توابع استفاده کنیم چون که وقتی برنامه یه خورده بزرگ میشه متجه میشین که چقدر استفاده از توابع به درد میخوره
> و من حتما بهتون توصیه میکنم که از توابع تو برنامه هاتون استفاده کنین اونم به صورت خیلی زیاد 
> تا با کارشون به خوبی آشنا بشین


حق با شماست برنامه ای که میتونم با چند خط بنویسم به چند صفحه میرسه اخرشم درست اجرا نمیشه ممنون میشم یکم در استفاده از توابع راهنمایی کنید مثلا روی یکی دو تا برنامه ساده 
اصلا خودم یه کد میزارم یه توضیح مختصر بدید
*
#include <stdio.h>
int is_prime(int n)
{
int divisor;
if (n <= 1)
return 0;
for (divisor = 2; divisor * divisor <= n; divisor++)
if (n % divisor == 0)
return 0;
return 1;
*

من قسمتreturn0,return1رو نمیفهمم
و همینطور کلا چجوری این تابع تعیین میکنه عدد اول هست یا نه
اگر خط به خط بگید خیلی ممنون میشم

----------


## M4st3r_4w4r3

خیلی سادس ! 

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 رو بر می گردونه ( یعنی عدد اول نیست ! )
اگر هم بر هیچ کدوم بخش پذیر نبود یعنی عدد اوله دیگه !!! 

خیلی ساده بود ! نه ؟

موفق باشید

----------


## smahdi1991

سلام به همه ی دوستان 
اینم از برنامه ی کامل که دیدم بد نیست بنویسم من هم گفتم در بیکاری بد نیست سرگرم شوییییم :لبخند گشاده!: :البته مطمئن نیستم درست باشه ولی امتحان کنید .انشالله که درسته :لبخند گشاده!: :
//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;
}
اگر برنامه درست کار نکرد بگید تا فکر کنم که مشکلش کجایه اکی در ضمن شما دوستان هم بگید کجاش اشکال داره تا بتونم درستش کنم یا الگوریتم های بهترشو بگید ممنون.

----------


## amir-yeketaz

> حق با شماست برنامه ای که میتونم با چند خط بنویسم به چند صفحه میرسه اخرشم درست اجرا نمیشه ممنون میشم یکم در استفاده از توابع راهنمایی کنید


برایه اینکه بهتر با کار آرایه ها آشنا بشین 
من این برنامه رو حدود یک ماه پیش نوشتم و میذارم ببینید:
#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 ميكنه؟

----------


## amir-yeketaz

> خوب اين برنامه قراره چي كار كنه اجراش كردم فقط تعداده عدد رو ميگيره چيزي چاپ نميكنه 
> راستي يه سوال راجع به input ,output
> اين يعني چي؟
> %d%%و اين كه شما تو برنامت نوشتي
> scanf ("%1f",&a[i])اينكه عدد يك رو قبل ازfنزاريم كه فرقي نميكنه؟ 
> و ابنكه وقتي ميزنيم
> scanf("%3d",&i)بهiسه digit اختصاص ميده و scan ميكنه؟


سلام 
فکر نمیکنم این برنامه مشکلی داشته باشه 
من این برنامه رو تو سی اچ اجرا کردم و مشکلی هم نداشته 
یه تعداد عدد میگیره بعد میانگینشو بدست میاره 
خیلی خیلی سادس دیگه 
در مورد %1f. البته داتشو نذاشتین! که جالبه بدونید که شما با این کار مشخص می کنید که چند تا اعشار بعد از اعداد صحیح پرینت بشه
یادم رفت که بگم "درصد اف " هم همون کاره "درصد ال اف " رو میکنه یعنی برایه عدد های اعشاریست فقط با همین تفاوت 
یعنی اگه شما از "درصد ال اف" استفاده کنید اون تعداد اعشاری که به صورت پیش فرض انتخاب شده پرینت میشه ولی با "درصد دات یک اف " شما فقط یک اعشار بعد از عدد صحیح خواهید داشت 
البته میتونید هر چی دلتون خواست بذارین مثلا "درصد دات چهار اف"
شاید جالب باشه ولی استاد ما همیشه با این ژینگولگ بازیا مخالفه و میگه این چیزا کمکی به برنامه نویس شدنه شما نمیکنه 
منم حرفشو قبول دارم چون که این کارا تو هر زبونی یه جوریه و خیلی هم سادس یادگیریش 
پس زیاد گیر ندین
در مورد اون یکی هم چیز زیادی نمیدونم و اونقدرام شوق دونستنشو ندارم 
ببخشید که واژگان انگلیسی رو فارسی نوشتم
امیدوارم خوب رسونده باشم

----------


## بانوی ایران

ممنون ولي اون %3dتوي بعضي جاها خيلي مفيده درواقع توي بهتر چاپ كردنه يه برنامه كمك ميكنه و حتي scan كردن مقادير گاهي لازم ميشه كه البته خيلي هم الزامي نيس به قول استادتون ژينگولك بازيه



> اگه شما از "درصد ال اف" استفاده کنید اون تعداد اعشاری که به صورت پیش فرض انتخاب شده پرینت میشه


پيش فرضمون همون مقداريه كه به ال ميديم؟
ميتونه يه مقدار متغير باشه؟

----------


## amir-yeketaz

> ممنون ولي اون %3dتوي بعضي جاها خيلي مفيده درواقع توي بهتر چاپ كردنه يه برنامه كمك ميكنه و حتي scan كردن مقادير گاهي لازم ميشه كه البته خيلي هم الزامي نيس به قول استادتون ژينگولك بازيه
> 
> پيش فرضمون همون مقداريه كه به ال ميديم؟
> ميتونه يه مقدار متغير باشه؟


نه ببینید خود "درصد ال اف" همون کاره "درصد اف" رو می کنه و هر دو تا شون مثله همن ولی با این تفاوت که شما میتونین از "درصد اف" برای مشخص کردنه تعداد اعشار بعد از عدد صحیح از "درصد اف " استفده کنی البته باید تعدادتو مشخص کنی مثلا اگه خوشت نیومد که تو نمایش عدد بنویسه 2.777777   میتونی تو printf بدی "درصد دات دو اف" و برات پرینت میکنه 2.77 
حله؟؟؟!!!
اگه میشه در مورد "درصد سه دی" اگه میدونین چیکار میکنه بگین که چیکار میکنه!!
ممنون

----------


## بانوی ایران

اره داداش حله
حالا راجع به درصد 3 دي(درصد ال دي)
وقتي اينو ميزنيم چيزي كه براي ما چاپ ميشه متغير iبا اختصاص دادنه 3digitهست 
مثلا اگر مقدار هi2 باشه با دو تا spaceقبل از اون (اگر 3- بزاريم بعدش) چاپ ميكنه
فايدش چيه 
مثلا برنامه اي داريم كه ميخواد يه ماتريس برامونچاپ كنه 
ماتريس ما تا زماني خوب و زير هم چاپ ميشه كه اعداد يه رقمي هستند ولي وقتي دو رقمي بشن شكل ماتريس چاپي مون به هم ميخوره اگر بيايم و تعداد digitچاپي رو معين كنيم حتي با اعداد چند رقمي هم ماتريس به هم نميخوره
البته ممكنه راه ديگه اي هم باشه ولي من اينجوري تونستم شكلمو حل كنم
اگه نفهميديد يه شكل هست اونو ميزارم بهتر ميشه

----------


## smahdi1991

سلام به دوستان 
راستی در باره ی پروژه نویسی یا تمرین های بزرگتر نیز بحث کنیم خوبه نه دوستان؟

----------


## davood59

سلام دوستان، از اینکه تاپیکی به این قشنگی و مفیدی راه افتاده فوق العاده خوشحال شدم. امیدوارم این اقدام تاثیری خوبی در پیشرفت همه ما داشته باشه.
چند روز پیش برنامه ای دیدم که در اینجا البته فقط با کمی تغییر میذارم. علت تغییر اون برنامه این بود که برای اعداد 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  هست. 
با پوزش.

----------


## amir-yeketaz

> سلام به دوستان 
> راستی در باره ی پروژه نویسی یا تمرین های بزرگتر نیز بحث کنیم خوبه نه دوستان؟


عجیب موافقم!!!!!!

----------


## بانوی ایران

سلام دوستان
يه سوال 
توي توابع چيزي كه تابع 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;    
}

----------


## amir-yeketaz

> سلام دوستان
> يه سوال 
> توي توابع چيزي كه تابع returnميكنه چيه منظورم اينه كه همون كاري كه ما از تابع ميخوايم انجام بديم مقداريه كه return ميشه؟
> مثلا توي اين قسمت
> double average(double a, double b)
> {
> return (a + b) / 2;
> }
> مقداري كه returnميشه همون ميانگينه (كاري كه ما از تابع ميخوايم)يا همون تابعي كه زدم اول يا غير اول بودن عدد مقداري كه بر ميگرده تعيين ميكنه اول هست يا نه
> ...


ببینید بانو خانوم 
شما وقتی یه تابعو return میکنین پس به طور حتم بهش نیاز دارین تو تابع main یا تو تابع های بعد از اون 
اینم که بخواین این تابعی که نوشتینو به صورت void بنویسید یعنی چیزی نمیخواین برگردونید 
void  بیشتر برایه تابع های پرینت و اینزرت استفاده میشه و شما قرار نیست چیزی رو به تابعی که فراخونی شده برگردونید 
البته سوالتون زیاد واضح نیست و منم اینجوری برداشت کردم
البته یه چیزی رو هم اضافه کنم که اشاره گر ها رو که براشون حافظه ی پویا گرفتین مثه همین جا باید return کنین ولی اگه یه آرایه تو تابع پر کردین نیازی نیست برش گردونین چون آرایه شما خودش پر میشه و نیازی به برگردوندن نداره 
ولی حافظه پویا چون به آدرس اشاره میکنه نیاز داره که به آدرس مورد نظر برگردونده بشه

----------


## بانوی ایران

پس يعني من توي اين تابع نميتونم به صورت void بنويسم؟
ولي سوال قبل من چيزه ديگه بود
من ميگم تابع چه چيزي رو returnميكنه؟ (كاري كه ما از تابع ميخوايم؟)
مثلا توي اون حالت 
return array-r*c
اين چيزي كه برميگردونه چيه؟
و يعني چي؟
چرا ادرس اشاره شده بايد برگرده
يعني چرا خود array رو برنميگردونيم؟
كلا من با اين كه تابع چه چيزي رو بر ميگردونه مشكل دارم

----------


## clover

> مقداري كه برميگردونه مفهومش چيه اصلا چرا بايد اينو برگردونه؟


این تابع وظیفه ی تعریف یک آرایه دو بعدی و سپس پر کردن اون توسط ورودی کاربر را بر عهده داره. بعد از این که کار تابع تمام شد شما باید به آرایه تعریف شده دسترسی داشته باشید. پس تابع اشاره گر به آرایه مورد نظر را بر می گردونه تا با استفاده از اون بتونید به آرایه دسترسی داشته باشید.



> چجوري ميتونم به صورت 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++;
        }
    }
}

----------


## clover

> return array-r*c
> اين چيزي كه برميگردونه چيه؟


در زبان ++C, C آرایه ها با استفاده از اشاره گری که به اولین خانه آرایه اشاره می کنه مورد دستیابی قرار می گیرند. array در ابتدای تابع به اولین خانه آرایه ایجاد شده اشاره میکنه اما در طول تابع مقدار این اشاره گر تغییر می کنه (برای دستیابی به خانه های بعدی آرایه) . برای return کردن آرایه، در واقع ما باید اشاره گر به اولین خانه ی آرایه ایجاد شده را  return کنیم اما اشاره گر array  در طول تابع تغییر کرده و در آخر تابع به آخرین خانه آرایه اشاره می کنه. پس با کم کردن مقدار  r*c  (تعداد خانه های آرایه) از اشاره گر array می تونیم آدرس اولین خونه ی آرایه را return کنیم.

امیدوارم تونسته باشم درست توضیح بدم.

----------


## بانوی ایران

اي ول مرسي 
پس من نيازي به alloc كردن ندارم؟(پست قبلي رو منظورمه) :چشمک: 
اگر نه اشاره گر از كجا ميدونه به كجا اشاره ميكنه

----------


## بانوی ایران

> در زبان ++C, C آرایه ها با استفاده از اشاره گری که به اولین خانه اشاره می کنه مورد دستیابی قرار می گیرند. array در ابتدای تابع به اولین خانه آرایه اشاره میکنه اما در طول تابع مقدار این اشاره گر تغییر می کنه (برای دستیابی به خانه های بعدی آرایه) در موقع بازگردانده آرایه، ما باید یک اشاره گر به اولین خانه ی آرایه را return کنیم اما array در آخر تابع به آخرین خانه آرایه اشاره می کنه. پس با کم کردن مقدار r*c (تعداد خانه های آرایه) از اشاره گر array می تونیم آدرس اولین خونه ی آرایه را return کنیم.
> 
> امیدوارم تونسته باشم درست توضیح بدم.


اره خيلي ممنون فقط اگر اين رو هم توضيح بديد ممنون ميشم
توي ارايه ها هست كه ما به اين شكل returnميكنيم؟ يعني برميگردونيم به خونه ي اول؟
و اين كه يه تابعي مثل اين
double average(double a, double b)
{
return (a + b) / 2;
}
چرا اومده و مقدار ميانگين رو returnكزده؟
نميشه توي تابع يك چيزي مثل خود average تعريف كنيم و بعد اون رو return كنيم؟ اگر صفر returnكنيم چي؟

----------


## clover

> پس من نيازي به alloc كردن ندارم؟


منظورتون return کردن بود دیگه ؟ در این صورت بله.
اما اگر منظور استفاده از malloc برای تعریف پویای آرایه بود ، در هر صورت چه در بیرون و یا داخل تابع باید فضای مورد نیاز را یرای آرایه تخصیص بدید.

----------


## بانوی ایران

> منظورتون return کردن بود دیگه ؟ در این صورت بله.
> اما اگر منظور استفاده از malloc برای تعریف پویای آرایه بود ، در هر صورت چه در بیرون و یا داخل تابع باید فضای مورد نیاز را یرای آرایه تخصیص بدید.


يعني همو كدي كه نوشتيد من بايد mallocرو بيرون از تابع زماني كه ميخوا ازش استفاده كنم ايجاد كنم؟
يا اينكه در تعريف پوياي ارايه نميشه voidكرد؟و بايد *intباشه؟

----------


## clover

> نميشه توي تابع يك چيزي مثل خود average تعريف كنيم و بعد اون رو return كنيم؟ اگر صفر returnكنيم چي؟


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

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

----------


## clover

> يعني همو كدي كه نوشتيد من بايد 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 کنیم ؟ چرا باید این کار را انجام بدیم ؟ مگر قرار نیست تابع ما مقدار میانگین را حساب کنه و اونو return کنه ؟ من فکر می کنم شما درمفهوم توابع مشکل دارید. یک تابع قرار هست که عملیاتی را انجام بده، حالا اگر این عملیات نتیجه ای داشته باشه (یعنی یک عدد، رشته و یا هر مقداری که معرف نتیجه ی عملیات باشه) باید پس از اتمام عملیات (اتمام کار تابع) به این نتایج دسترسی داشته باشیم. یکی از راه های این کار، استفاده از دستور return هست.


كاملا درست فهميديد من با مفهوم توابع مشكل دارم
البته بيشتر قاطي كردم مسايلو
ولي الان فهميدم (خيلي ممنون از راهنمايي هاتون :چشمک: )
در واقع اون سوالي كه اول كار پرسيدم همين بود
(تابع مقداري رو return ميكنه كه قراره مورد استفاده قرار بگيره؟)

در كل خيلي ممنون از راهنمايي هاتون خيلي مفيد بود :چشمک:

----------


## clover

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

----------


## بانوی ایران

بر منكرش لعنت كه شما گفتي
منم جملم سوالي نبود تو پرانتز گذاشتم خبري بود :لبخند گشاده!:

----------


## amir-yeketaz

بازم یه سری سورس کد میزارم حالشو ببرین
امیدوارم که خوشتون بیاد  :لبخند گشاده!: 


دانلود

----------


## amir-yeketaz

اینم برایه اینکه از عنوان تاپیک دفاع کنیم 
چند تا تمرین برنامه نویسی که بیشتر برایه مبتدی ها و استفاده از آرایه هاست
بابا یه تشکر بذارین دیگه 
هر چی داشتم خرجتون کردم :لبخند گشاده!:  :لبخند گشاده!:  :لبخند گشاده!: 

دانلود

----------


## smahdi1991

سلام دوستان عزیز من بالاخره دوباره بازگشتم  :لبخند گشاده!: 
از فردا انشالله با تمرین های خوب خوب میام خدمتتون تا حالشو ببرید
راستی اینم یه دست گرمی 
برنامه ی 118 رو بنویسید (این برنامه شماره و اسم و ادرس رو میگیره و به کاربر با امکان سرچ و نمایش تحویل داده میشه)

----------


## joedolton

با سلام من یه مشکل دارم و اون هم اینه که اگه یه دستور مثلscanf("%f",&a)l داشته باشیم و بلا فاصله دستور 
gets(str)l رو scanf انجام میشه ولی gets انجام نمیشه؟

----------


## clover

> با سلام من یه مشکل دارم و اون هم اینه که اگه یه دستور مثلscanf("%f",&a)l داشته باشیم و بلا فاصله دستور 
> gets(str)l رو scanf انجام میشه ولی gets انجام نمیشه؟


این مشکل با cin و gets هم وجود داره، برای فهمیدن علت و رفع مشکل،  این تاپیک ها را مطالعه کنید:
https://barnamenevis.org/showthread.php?t=198001
https://barnamenevis.org/showthread.php?t=176137
در ضمن به عنوان تاپیک توجه کنید، بهتر بود سوالتون را در تاپیک مرتبط یا جدید مطرح می کردید.
موفق باشید.

----------


## mabbaszadegan

چه تاپیک خوبی  :لبخند گشاده!: 

خب اگه دوستان موافقید ، بریم به سمت برنامه های شی گرا و طراحی کلاس ؟
سرفصلها :
1. کلاس 
2. توابع friend 
3. overloading
4. inherience
5. polymorphism
6. encapsulation
و ......

اگه موافقید شروع کنیم ؟

----------


## smahdi1991

ای  :متعجب: بابا اول اون برنامه 118 رو بنویسید ببینم چی یاد گرفتید بعد بریم به بالا تر ها ok   :لبخند گشاده!: 

بعد از اون میریم سراغ کتابخونه منم تا چند روز دیگه کتاب خ.نم که اولین پروژه من بود می ذارم اینجا تاببینید
 :لبخند: 
فعلا بای

----------


## mabbaszadegan

اوکی ، من امتحانام تموم شه حتما مینویسمش ؛ 

یه پروژه انبار هم دارم مینویسم ، کامل شد میذارم اینجا تا همه استفاده کنند (سعی کردم تمام اصول شی گرایی رو توش رعایت کنم و حتی الامکان ساده نوشتم ، فک کنم واسه آموزش چیز خوبی باشه  :چشمک: )

موفق باشید  :قلب:

----------


## smahdi1991

خوبه منم موافقم 
منم فکر میکنم که کتاب خونم برای آموزش خوب باشه ولی یه بخششو نمی ذارم اونم ماله فایلش وقتی که دیدین می تونید خودتون براش فایلو بنویسین تا یاد بگیرین  :لبخند گشاده!: 
(لبته فقط لود کردن رو براتون برم دارم تا سخت نشه براتون.)

----------


## smahdi1991

سلام اینم از کتاب خونم که البته تصمیم گرفتم که همونی رو که کامل نیست و یه جاهایی رو باید تکمیل بشه رو قرار بدم البته سورسشم تصمیم گرفتم بزارم تا ببیندی من چطور نوشتم و تا خودتون هم بتونید با الگوریتمن هعای متفات برخی جا هاشو عوض کنین و البته بخش لود کر دنشو هنوز قرار ندادم
:
*http://www.uplod.ir/download.php?file=617340
برید حتما دانلود کنید و  الگوریتم خودتون هم مطرح کنید.
*

----------


## f@rid gh

سلام به دوستان عزیز . من یه تازه وارد در بین شما دوستانم اما اگه مشکلی در مورد ++c دارین میتونید به  farsicode@yahoo. یا   www.farsicode.com  دیدن فرمایید

----------


## may.em

اين تاپيک خيلی مفيده. :تشویق: 
اما متاسفانه زياد فعال نيست!!! :ناراحت: 

الان بايد 118 رو بنويسيم؟

----------


## elaheh.68

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

----------


## maktoom

سلام
این تاپی رو مطالعه کردم... از همش جالبتر بنظرم اون کته دوتا 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;
}

به خروجیتون و ترتیبش دقت کنین :لبخند گشاده!:

----------


## عزیز قاسمیان

سلام من چطور ابتدا شروع کنم

----------


## pe32_64

برنامه ای بنویسید که دو عدد 30 رقمی را با هم جمع کند.

----------


## mehdijoooon

سلام به همه
بچه ها ببخشيد اگه تكراريه و اگه مبتديه و اگه خسته كنندس ...
سه تا برنامه كوچيكه
به بزرگي خودتون ببخشيد حلشو ميخواستم

برنامه اي كه شعاع دايره را بخواند اختلاف مساحت آن را نسبت به مربع محصور كننده آن محاسبه و چاپ كند
2-برنامه اي كه عددي را بخواند و تعيين كند چند رقم دارد
3-برنامه اي كه دو عدد را بخواند  و ميانگين حسابي و ميانگين هندسي آن را نمايش دهد.

----------


## maktoom

سلام
برنامه ای بنویسید که انواع اعداد صحیح، اعداد اعشاری و اعداد اعشاری به فرم نماد علمی را شناسایی کند. (هدف آشنایی با تحلیلگر لغوی یک کامپایلر است.)

----------


## maktoom

همچنین:

فصل ششم صفحه 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
 بعنوان ملاک بازگشت استفاده کرده ايم. هر کدام از آنها مي توانند براي بدست آوردن جواب مورد استفاده قرار گيرند.

----------


## mojtaba5

سلام
یه سری سوالات کلیدی هست که برای درس پایانی ++c در دوره کاردانی استفاده میشه میخوام بدونم چه سوالاتی هستن.

----------


## StepUp

#include <iostream>using namespace std;
main()
{
    int x;
    cout << "Type your Number : ";
    cin >> x;
    if(x%2==0)
    {
        cout << "zoj" <<endl;
    }
    else
        cout <<"fard";
    return 0;
}



برنامه تعیین اعداد زوج و فرد

----------


## StepUp

> سلام به همه
> بچه ها ببخشيد اگه تكراريه و اگه مبتديه و اگه خسته كنندس ...
> سه تا برنامه كوچيكه
> به بزرگي خودتون ببخشيد حلشو ميخواستم
> 
> برنامه اي كه شعاع دايره را بخواند اختلاف مساحت آن را نسبت به مربع محصور كننده آن محاسبه و چاپ كند
> 2-برنامه اي كه عددي را بخواند و تعيين كند چند رقم دارد
> 3-برنامه اي كه دو عدد را بخواند  و ميانگين حسابي و ميانگين هندسي آن را نمايش دهد.



در مورد برنامه دومتون اینو نوشتم :
#include<stdio.h>#include<conio.h>
using namespace std;
int sum(int n)
{
   int s=0;
   while(n!=0)
    {
    s=s+n%10;
    n=n/10;
    }
    printf("sumation is %d",s);
}
int main()
{
   clrscr();
   int n;
   printf("enter a number:");
   scanf("%d",&n);
   sum(n);
   getch();
   return 0;
}

----------

