-
به نام خداوند جان و خرد کزین برتر اندیشه برنگذرد
جمله-اگر دانش را بخاطر کسب درآمد فرامیگیرید به حق آنهایی که بخاطر خود ، علم و دانش اندوخته اند تجاوز کرده اید. اندره ژید
سلام . امیر هستم :oops: و قصد دارم در این تاپیک با هم زبان برنامه نویسی سی رو با هم بررسی کنیم و با هم یاد بگیریم
خب در ابتدا یه عذر خواهی کوچولو هم بکنم که نمیدونم طرز کار با ویکی چطوری هستش و در آینده خیلی نزدیک آموزش ها رو به اونجا هم انتقال خواهم داد :-\" :^o
سنت شکنی نمیکنم و توضیح مختصر و مفید درباره این زبان برنامه نویسی بدم ::)
زبان c زبان برنامه نویسی سطح بالایی است که در سال ۱۹۷۲ توسط مستر دنیس ریچی در آزمایشگاه بل از شرکت تلفن و تلگراف آمریکا AT&T ساخته شد . از اونجایی که c برای نوشتن سیستم عامل یونیکس طراحی شده بود بهمین خاطر در ابتدا فقط در سیستم های مختلف کامپیواری استفاده میشد . با این وجود طی سال های متمادی با افزایش قدرت و انعطاف پذیری C و موازی با این اتفاقات کامپایلر های هوشمندی که برای این زبان بوجود میامد این زبان رو به یک زبان محبوب و همه پسند تبدیل کرد.
خب ما هم این زبان رو داخل سیستم عامل محبوبمون یعنی لینوکس با توزیع های متفاوت که فرق نمیکنه کار میکنیم
من خودم (کسی هم نیستم) از کامپایلر gcc که از طریق ترمینال هم میتوینم ازش استفاده کنیم و با یه ادیتور متن که انواع زیادی هم داره مثل gedit , vi , vim , mousepad , … ولی من از Gedit استفاده میکنم شما هم هر چی رو که دوست داشتین انتخاب کنید و استفاده کنید
در ادامه بیشتر آشنا میشیم و یاد میگیریم که یه فایل c. ایجاد کنیم و کامپایل کنیم
نکته ) محیط کدنویسی Code::Block هم یک محیط کدنویسی خیلی خوب هس که برای لینوکس و ویندوز (!) قابل استفاده هست:)
اینو هم اضافه کنم که منبع من کتاب هانلی – کافمن هست
اطلاعات بیشتر درباره زبان برنامه نویسی c هم دانشنامه ویکی پدیا
https://fa.wikipedia.org/wiki/%D8%B3%DB%8C_(%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C) (https://fa.wikipedia.org/wiki/%D8%B3%DB%8C_(%D8%B2%D8%A8%D8%A7%D9%86_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C))
برای شروع فک میکنم کافی باشه :-X
اگه نظر و انتقادی دارید لطفا لطفا لطفا خواهش میکنم از طریق پیام خصوصی درمیان بزارین \\:D/ خیلی خوشحال میشم اشتباه که بسیار زیاده خوشحال میشم با کمک شما اشتباهات رو تصحیح کنم (در اینجا قصد یاد گرفتنه)
سربلند و پیروز باشید
در پناه حق :)
پ.ن ۱ : با تشکر از دوستمون آقا koosha بخاطر نکته ی بجایی که فرمودن . زبان C امروزه زبانی سطح میانی شناخته میشه چون این کتاب برای سال های پیشه و من نخواستم مقدمه ی کتاب رو دستکاری کنم بهمین خاطر این نکته رو در قالب نکته ای اخر مطلب اضافه کردم.
ویرایش : اضافه کردن فصل ها
-----------------------------------------------
- آشنایی با زبان C و ورودی و خروجی
- آشنایی با توابع
- دستورهای کنترلی (شرطی)
- حلقه ها
-
به نام خداوند جان آفرین حکیم سخن در زبان آفرین
جمله – آنچه مغز و قلب را از آلایش پاک میکند فقط دانش است ; مابقی بی دانشی است
خب رسیدیم به بخش اول کارمون ، در این قسمت میخوایم مثل ۹۹ درصد آموزش های برنامه نویسی یک پیام Hello World تقدیم جامعه کنیم و لذت ببریم
یه آشنایی با زبان C پیدا کنیم ???
اصولا و به طور کلی برنامه هایی که ما قراره بنویسیم از دو قسمت ساخته میشن :
۱ – رهنمود های پیش پردازنده یا PreProcessor Commnad
۲- تابع اصلی و یا main
تابع اصلی داخل زبانهایی مثل جاوا و سی پلاس پلاس و … هم وجود داره اما به شکل های متفاوت .
دستور های پیش پردازنده چه دستوراتی هستن ؟
این دستور ها با علامت # آغاز می شود و به پیش پردازنده دستوراتی را ارسال میکنند (اصطلاحات زیاد هستند و در ادامه اصطلاحات به کار برده شده رو به طور کامل تعریف میکنم و اطلاعات تکمیلی رو براتون قرار خواهم داد ازین بابت نگران نباشید)
دو مورد از پرکاربرد ترین دستوراتی که از انها بسیار زیاد استفاده خواهیم کرد دستور include , define هست
دستور include کتابخانه هایی که توسط خوده برنامه نویس یا دیگر برنامه نویسان نوشته شده اند رو در اختیار برنامه میزاره
سخت شد ؟ امیدوارم اینطور نباشه اما مطمئن باشید که تا پایان این قسمت اینطوری نیست :)
خب حالا اصطلاحات جدید رو تعریف کنیم و کاملا باهاشون آشنایی پیدا کنیم و بعد بریم سراغ ادامه ی کار
کتابخانه :یه سری فایل هایی باپسوند .h هستند که شامل کد های مفیدی هستند که به ما کمک میکنند برنامه ی بهتر و کارامد تری بنویسیم و لزوما این نیست که حتما خود ما این کتابخانه ها رو نوشته باشیم
پیش پردازنده یا Preprocessor : برنامه ای هست که ورودی رو دریافت میکنه پردازش میکنه و یک خروجی تحویل ما میده
با اصطلاح سرفایل استاندار د هم آشنا شیم … وقتی که ما از دستور include استفاده کنیم قاعدتا باید ازین طریق کتابخانه هایی به برنامه اضافه میشوند که با این کتابخانه ها اصطلاحا Standard Header File گفته میشود
برای مثال :
#include<stdio.h>
یک نمونه دستور پیش پردازنده یعنی include و یک سرفایل استاندارد یعنی stdio.h هست
سرفایل های استاندارد دستورات مفیدی رو به اسم شناسه های استاندارد در اختیار ما قرار میدن که بتونیم از اونها استفاده کنیم :) مثلا سرفایل استاندارد stdio.h دو شناسه استاندارد printf و scanf رو در اختیار ما میزاره
که printf برای خروجی و scanf برای دریافت ورودی استفاده میشود
خب این همه حرف زدیم برای چند خط کد ؟
بزارین یه ورودمونو به دنیا خوش آمد بگیم البته به دنیای برنامه نویسی با زبان سی
ادیتورمون رو باز میکنیم من از gedit استفاده میکنم
و کدم رو داخلش مینویسم
#include<stdio.h>
int main(void)
{
printf(“Hello World!\n”);
}
وقتی میخوام ذخیرش کنم یه اسم دلخواه مثل project_01.c براش میزارم و با استفاده از کامپایلر gcc به این شکل کامپایلش میکنم
شکل کلی :
gcc filename.c
یا
gcc filename.c -o نام دلخواه
خب اسم برنامه من project_01.c هست پس به این شکل کامپایلش میکنم
gcc project_01.c
بعد از کامپایل اگه دقت کنیم یه فایل به اسم a.out برای ما میسازه که این فایل اجرایی ماست و به این شکل اجرا میشه
./a.out
و در نهایت پیام خوش آمدمون رو روی صفحه مشاهده میکنیم
Hello World!
8) 8) 8)
چند نکته ی تکمیلی :
۱ – تابع ما از نوع تهی است یعنی ورودی دریافت نمیکنه در ادامه بیشتر آشنا میشیم
۲ – اگه دقت کنید بعد از کلمه ی World یک \n دیده میشه با این نوع کاراکترها کاراکترهای کنترلی میگن و این کاراکتر برای رفتن به سطر بعد هستش \n = next Line
۳ – باید توجه داشتیم که دستور پیش پردازنده خارج از تابع اصلی نوشته میشه
۴ – دقت کنیم اکولاد باز و بسته رو بزاریم
۵ – توجه کنیم که ; سمیکولن فراموش نشه چون برنامه ارور خواهد داد
خب بهتره این قسمتو همینجا به پایان برسونم و یه تمرین هم براتون بدم
سوال : حروف اسمتون رو یکی یکی داخل هر سطر به نمایش بزارین ;D ;D
تمرین فراوان کنید
سوالی بود در خدمتم البته در خصوصی و یا تلگرام D: @amir_k_98
موفق و پیروز باشید
بدرود
-
به نام خداوند خورشید و ماه که دل را بنامش خرد داد راه
جمله – تنها چیزی که در یادگیری من تداخل ایجاد میکند ، تحصیلاتم است . آلبرت اینشتین
سلام به همه ی دوستان ::)
در دو جلسه ی پیش یه مقدمه ی مختصر و مفید گفتیم و ساختار کلی یه برنامه ی c رو با هم بررسی کردیم
در این قسمت میخوایم توضیحات یا Comments رو با هم بررسی کنیم و یاد بگیریم
از این توضیحات زمانی استفاده میکنیم که نیاز داریم کناره های برخی کد ها توضیحاتی رو با زبان روزمره و نه با زبان برنامه نویسی بنویسیم .
این توضیح چه کمکی به ما میکنه ؟ :o
بیاین فرض کنیم یه فرض پروژه ی ۲۰۰۰ ??? ???خط کدی نوشتیم بدون توضیحات و بعد از ۶ ماه نیاز به ویرایش و اپدیت کردنش داریم به نظر شما بعد از ۶ ماه میتونیم باز مثل سابق تمام کدهای خودمون رو تجزیه تحلیل کنیم ؟مسلما جواب نه هست :'(
یا اینکه پروژه ی ما متن بازه و میخوایم اونو در اختیار سایر کاربران بزاریم آیا بدون توضیحات خود نویسنده ی کد دیگران میتونن سر از پروژه ی ما در بیارن ؟باز هم جواب نه هست :)
در نتیجه اگر ما از توضیحات استفاده کنیم کار رو برای فهمیدن و درک خودمون و دیگران آسون تر کردیم :) چقد خوبیم ما :)
توضیحات توسط کامپایلر نادیده گرفته میشن یعنی بود و نبودش فرقی نمیکنه ولی بودشون بهتره :)
ما دو نوع توضیح یا توضیحات داریم :
۱- توضیح تک خطی ( Single Line Comments)
۲ – توضیح چند خطی (Multi Line comments)
توضیح تک خطی با // و توضیح چند خطی با */ شروع و با /* به پایان میرسه
پروژه ای رو که در قسمت قبل با هم کار کردیم یادتونه ؟
#include<stdio.h>
int main(void)
{
printf(“Hello,World!\n”);
}
خب حالا بهش توضیحاتی رو اضافه میکنیم
#include<stdio.h>
/* include is preprocessor command
* stdio.h is Standard Header File*/
int main(void)
{
printf(“Hello,World!\n”); // Result of this execution is Hello,World!
}
در ادامه با انواع متغیر ها آشنا میشیم
یه ویدیوی کوچولو موچولو هم در باره ی این قسمت و قسمت قبل آماده میکنم و ضمیمه ی این قسمت خواهم کرد
-------------------------------
فیلم آماده شد D:
http://www.aparat.com/v/Oq6fu
-------------------------------
شاد باشید و موفق
خدانگهدار
-
به نام خداوند بخشنده و مهربان
جمله – زکات دانش، آموزش به کسانی که شایسته ی آنند و کوشش در عمل به آن است . امام علی (ع)
سلام . با یه قسمت دیگه از آموزش در خدمت شما عزیزان هستم
تا به اینجا یه کلیت از زبان سی و توضیحات رو یاد گرفتیم
در این قسمت میخوایم با هم درباره متغیر ها ، انواع متغیر و کلا درباره متغیر حرف بزنیم (قسمت طولانی هستش با حوصله خوانده شود :D )
خب بهتره اول درباره متغیر حرف بزنیم که متغیر ها چه هستن ؟ فک کنیم که یه نرم افزار حسابداری داریم که میخوایم اسم و فامیلی و حقوق و سن و … رو کلا دریافت کنیم تا سر ماه حقوقشون رو پرداخت کنیم به همین خاطر داخل زبان های برنامه نویسی ما برای اتجام این کار چیزی به اسم متغیر داریم – متغیر ها بخش هایی که حافظه هستند که ما اونها رو فراخونی میکنیم و ازشون در جاهای مورد نیاز استفاده میکنیم . تعریف کردن متغیر یا اعلان کردن متغیر چه هستند ؟نام گذاری بخش های حافظه ای رو اصطلاحا اعلان متغیر یا تعریف متغیر میگن.
داخل زبان سی انواع مختلف متغیر رو داریم متغیر هایی از نوع :
۱- صحیح یا integer
۲ – شناور یا float
۳ – اعشاری یا double
۴ – بولی یا bool
۵ – کاراکتری یا char
ولی تا به آخر این سری آموزش ها نرسیدیم از float استفاده ی زیادی نخواهیم کرد
متغیر integer از اسمشم معلومه برای اعداد یا داده های (!) صحیح و بدون اعشار مورد استفاده قرار میگیره
از متغیر double برای محاسبات با دقت بالا استفاده میکنیم
متغیر char برای دریافت کاراکتر از کاربر مورد استفاده قرار میگیره
متغیر بولی هم دو مقدار درست یا ۱ و نادرست یا ۰ در دریافت میکنه
تا اینجا با انواع متغیر ها آشنا شدیم :)
سازمان ANSI C یه سری قوانین رو برای زبان C تعیین کرده که باید ازشون پیروی کنیم
۱) از کلمه های کلیدی یا رزرو شده استفاده نکنیم مثل int
۲) نام متغیر با حرف شروع میشه و با عدد یا حرف و یا زیر خط یا همون اندرلاین (صحیحش اندر اسکور هست) ادامه پیدا میکنه
چن تا قانون نانوشته هم هست که رعایت کردنش بین برنامه نویسا معموله :
متغیر های ثابت یا ماکروثابت رو با حروف بزرگ مینویسیم
متفیر های معمولی رو با حروف کوچیک مینویسیم
اگر اسم دو متغیر تا ۳۱ حرف مثل هم باشه دو متغیر محسوب میشه اما اگر بیش از ۳۱ حرف مشابه شدن بعضی از کامپایلر ها اونها رو یک متغیر فرض میکنن
اگه نام متغیر طولانی هس باید بین هر کلمه _ بزاریم چون خوانایی رو بالاتر میبره
اینم از قوانین نانوشته :D
حالا یه مثال بنویسیم :
int number_1 = 2;
double number_2 = 2.2;
char ch = ‘a’;
به متغیر هایی که خودمون تعریف کنیم میگن شناسه استاندارد ولی خیلی مهم نیس اینا اضافه گویی های کتب دانشگاهیه
بهتره این قسمتو طولانی تر نکنم :)
در قسمت بعد ورودی و خروجی | عملگرها و دیگر نکات باقی مونده رو میگم تا فصل اولمون رو تموم کنیم :D
یه نکته رو هم بگم اصلا به گفته های من یا دیگر منابع قانع نباشین و خودتون مقالات و جزوات و سایت و … رو پیدا کنین واید بخونین تا با قدرت بیشتری این زبان رو یاد بگیرید
ممنونم که تا اینحا همراه من هستین و خواهید بود احتمالا
موفق باشید و پایدار
-
بسم الله الرحمن الرحیم هست کلید در گنج حکیم
جمله – اگر دانش به روزی برفزودی ز نادان تنگ روزی تر نبودی . سعدی
سلام . امیر هستم . در این جلسه قصد داریم دریافت ورودی / نشان دادن خروجی / عملگرها و … رو با هم یاد بگیریم
در قسمت های قبل با دستور خروجی یعنی printf آشنا شدیم. کار دستور printf یا شناسه ی استاندارد printf (!) برای نشان دادن یک خروجی از هر نوعی به کاربر هست.
در قسمت مقابل ما دستوری برای دریافت ورودی داریم اگر ورودی ها نباشن برنامه های ما بسیار بسیار انعطاف پذیری کمی خواهند داشت و مثل این میمونه که یک دیکتاتور نرم افزاری بسازیم :D دستور دریافت ورودی scanf هست
خب یه مثال کوتاه صرفا برای آشنایی با این دو دستور بنویسم و بعدش توضیحات تکمیلی رو ارائه کنم
#include<stdio.h>
int main(void)
{
char name;
printf(“Enter first character of your name :”);
scanf(“%c”,&name);
printf(“First Char of your name is :%c”,name);
}
خب ما در این قطعه کد از کاربر میخوایم که یک حرف از اسمشو وارد کنه و بعد اون حرف رو بهش نشون بدیم
الان ممکنه سوالات زیادی درباره ی خط ۶ و ۸ داشته باشید . خب در اینجا به طور کامل یاد میگیریم :
ما برای اینکه از کاربر یک ورودی بگیریم باید از جانگهدارها یا placeholder ها بهره بگیریم
جانگهدار با علامت درصد % شروع میشه و نوع اون ورودی رو باید جلوش بنویسیم . لیست انواع ورودی ها
int : %d
double : %lf
char : %c
یعنی ما برای دریافت هر نوع ورودی از کاربر باید در دستور scanf باید بین دابل کوتیشن نوع ورودی رو تعیین کنیم و یک , بزاریم و بعدش با علامت & اسم متغیری رو که تعیین کردیم قرار بدیم . اگه نوع ورودی با نوع متغیری که تعریف کردیم هماهنگ نباشه برنامه یه اررور خوشکل بهمون میده :D
مثال :
#include<stdio.h>
int main(void)
{
int num;
char name;
printf(“Enter your number :”);
scanf(“%d”,&name);
printf(“Show %d”,num);
}
خب ازین برنامه انتظار داریم درست کار کنه یا اررور بده ؟
جواب با خودتون :)
برای نشون دادن خروجی بازم باید از علامت درصد % و نوع متغیر استفاده کنیم اما دو تفاوت وجود داره :
لیست نشان دادن خروجی :
int : %d
double : %f
char : %c
میبینیم که نوع داده ای اعشاری بجای اینکه lf باشه f هست باید این تفاوت دقت کنید تا در برنامه هاتون مشکلی بوجود نیاد
تفاوت دیگه اینه که برای نشون دادن خروجی نیازی به علامت & نداریم
خب تا اینجا ما دریافت ورودی و نشون دادن خروجی رو یاد گرفتیم
حالا ما نوع دیگری از متغیر ها داریم به اسم ماکروثابت یا ثابت ها که به دو شکل در زبان برنامه نوسی C تعریف میشن
نمونه اول :
#include<stdio.h>
#define PI 3.14159 //this is Const
int main(void)
{
return(0);
}
در خط دوم ما یک ثابت تعریف کردیم . ثابت ها متغیر هایی هستند که تغییر نمیکنند و اگر بخوایم اونها رو تغییر بدیم اررور میگریم !! معمولا از ثابت ها جاهایی استفاده میکنیم که نیازی به تغییر دادن یک مقدار نباشیم مثل عدد پی
معمولا قرار دادی بین برنامه نویس ها هست که ثابت ها با حروف بزرگ نوشته شوند !
روش دوم تعریف استفاده از کلمه کلیدی const هست. مثال :
#include<stdio.h>
#define PI 3.14159 //this is Const
int main(void)
{
const double KM_PER_MILE = 1.609 //this is another const
return(0);
}
در خط ۵ ما نوع دیگری از تعریف ثابت داریم :D
اینم از بحث ثابت ها :)
عملگرها رو هم شروع کنیم به یاد گرفتن :D
عملگرها کلا کارشون بروی متغیر هاس یه تعریف خاصی که همه هم اونو به عنوان تعریف قبول داشته باشند تا بحال ندیدم ولی همه اینو میگن که عملگرها کارشون بروی متغیر هاس
انواع مختلفی از عملگرها داریم که در این فصل از آموزشمون میخوایم عملگرهای ریاضی رو یاد بگیریم
عملگر جمع : +
عملگر تفریق : -
عملگر ضرب : *
عملگر تقسیم : /
عملگر باقی مانده : ٪
:)
و یک عملگر هم داریم به اسم عملگر انتساب = این عملگر در جاهای مختلف اسم های متفاوتی میگیره
یه برنامه نویسیم که تبدیل واحد کنه برامون
سوال : برنامه ای بنویسید که از کاربر کیلومتر دریافت کند و تبدیل به مایل کند و در خورجی نمایش دهد
حالا این سوالو با هم حل میکنیم
هر مایل ۱.۶۰۹ کیلومتره پس این میتونه ثابت ما باشه (هر چند اگه نباشه مشکلی نیست ولی … بودنش برنامه رو استاندارد میکنه)
کیلومتر، هم میتونه عددی صحیح و هم اعشاری باشه پس ما از متغیر double استفاده میکنیم
حالا برنامه رو بنویسیم:
#include<stdio.h>
#define KMS_PER_MILE 1.609
int main(void)
{
double mile , kms;
printf(“Enter your kilometer number :);
scanf(“%lf”,&kms);
mile = kms * KMS_PER_MILE;
printf(“Result : %.3f”,mile);
return (0);
}
اینم برنامه ی تکمیل شدمون :)
یه نکته ی کوچیک جا موند :D
اونم فرمت یا قالب بندی متنه
%.3f این دستور میگه فقط تا ۳ رقم اعشار رو نشون بده و اگه کمتر از ۵ یا بیشتر از ۵ بود رو گرد میکنه به عدد قبل یا بعد خودش
این عدد میتونه تغییر کنه ۲ یا ۱ یا ۴ فرقی نمیکنه
برای عدد صحیح هم همینطور اما عدد صحیح اعشار نداره پس به اینشکل تعریف فرمت تعیین میکنیم %3dبه این شکل متغیر عدد صحیح هم فرمت دار میشه به مبارکی و میمونی :D:D:D
ی سری سوال هم برای تمرین داشته باشیم :
۱ - مساحت و محیط مستطیل رو محاسبه کنید
۲- محیط و مساحت دایره رو محاسبه کنید
۳ – برنامه ای بنویسید که فارنهایت رو به سلسیوس تبدیل کنه
۴ – برنامه ای بنویسید که ۲۵ درصد حقوق یک کارمند رو نمایش بده
خب در اینجا فصل ۱ به اتمام میرسه :D
جواب سوالات رو در قالب یه فایل ویدیویی فردا قرار خواهم داد
ویدیو این قسمت رو هم تا ساعاتی دیگر قرار خواهم داد
تمرین زیاد کنید
نظراتتون رو هم مشتاقم که بشنوم ایرادات رو حتما بگین تا اموزش های بدون ایرادی داشته باشیم
ممنونم
شاد باشید و موفق
بدرود
-
سلام به همگی ;D
ویدیو مربوط به دو قسمت قبل :
http://www.aparat.com/v/Gn31b
ویدیو ها اماده شدن ولی احتمالا اشتباهات ریاضی زیاد دارم D: ببخشید خودتون :-X
سوال اول :
http://www.aparat.com/v/9Js6q
سوال دوم :
http://www.aparat.com/v/0kbaP
سوال سوم :
http://www.aparat.com/v/arvOV
سوال چهارم :
http://www.aparat.com/v/fP42v
موفق باشید./
-
سلام ::) با ادامه آموزش ها در خدمت شما هستم . بخاطر وقفه ای که بین آموزش ها پیش آمد معذرت خواهی میکنم :-X :'(
بریم که خیلی کار داریم ::)
در این فصل از آموزشمان انواع توابع را بررسی میکنیم
تابع ها چه کاربردی دارند ؟
بیایید فرض کنیم که ما برنامهای داریم که قطعه کدی را چندین بار نیاز است که در طول برنامه تکرار شود کار غیر عاقلانه این است که مرتبا کد ها را بنویسیم! اما کار عاقلانه این است که کد هایمان را یکبار بنویسیم و در هر جایی که نیاز شد از آن استفاده کنیم :)
انواع تابع ؟
تابع ها دو نوع هستند: ۱- تابع هایی که ورودی دریافت نمیکنند ۲- تابع هایی که ورودی دریافت میکنند.
اسمهای دیگری هم به این تابع ها اطلاق میشود مانند تابع بدون آرگومان ، تابع با آرگومان | تابع بدون خروجی ، تابع با خروجی و دیگر اسمهایی که ممکن است بشنوید که همه یک مفهوم را دارند.
در این جلسه ما تابع های بدون ورودی یا آرگومان را بررسی میکنیم :D
تابع هایی که از این نوع هستند هیچ ورودی را از کاربر را دریافت نمیکنند و تنها کدهای اجرایی داخل تابع را اجرا میکند :)
نکته : میتوان دریافت ورودی را درون تابع تعریف کرد .
نکته : تابع بدون پارامتر از کلمه کلیدی void استفاده میکند که در قبل با آن آشنا شدهایم اما در این جلسه مثالهای متعددی را بررسی میکنیم.
سؤال : تابعی بنویسید که ۳ پیام را به کاربر نشان دهد و نام آن تابع دلخواه باشد .
#include<stdio.h>
int messages(void)
{
printf(“Hello, World\n”);
printf(“Hello, C programming !\n”);
pritnf(“Hello Users \n”);
}
int main(void)
{
messages();
}
نکته : ما میتوانیم از کلمه کلیدی void هم صرف نظر کنیم :)
برای استفاده از تابع تعریف شده توسط خودمان کافیست نام تابع به همراه ;() را در تابع اصلی یا main قرار دهیم.
در این روش از تعریف تابع ما ابتدا تابع messages را تعریف کردیم و سپس تابع main را تعریف کردیم. (این روش به نظر من بهتره)
دیگر روش تعریف تابع این است که در ابتدا تابع main را تعریف کنیم و سپس تابع مدنظر خود را تعریف کنیم! اما این نوع روش تعریف تابع یک نکته دارد و آن هم این است که در بالای تابع main باید تابع خود را تعریف کنیم .
نکته : هنگام تعریف تابع در بالای main باید به نوع تابع دقت کنیم که هر دو از یه نوع باشند.
حالا تابعی را که در بالا نوشتیم به این شکل هم میتوانیم بنویسیم :
#include<stdio.h>
int messages();
int main(void)
{
messages();
}
int messages(void)
{
printf(“Hello, World\n”);
printf(“Hello, C programming !\n”);
pritnf(“Hello Users \n”);
}
کار تابع messages چیست ؟ خیلی راحت ۳ پیام را چاپ میکند :D
مثال دیگری حل کنیم :
سؤال :تابعی بنویسید که دو عدد صحیح از کاربر دریافت کند و چهار عمل اصلی را بر روی اعداد انجام دهد و سرانجام نتایج را به کاربر نشان دهد.
روش اول (تابع مورد نظر اول و سپس تابع اصلی):
#include<stdio.h>
int calculator()
{
int number_1;
int number_2;
int sum,minus,multiplied,devided;
printf("Enter the first number :");
scanf("%d",&number_1);
printf("Enter the second number :");
scanf("%d",&number_2);
sum = number_1 + number_2;
minus = number_1 - number_2 ;
multiplied = number_1 * number_2;
devided = number_1 / number_2;
printf("Result of This Calucation :\nsum:%d\nminus:%d\nmultiplied:%d\ndevided:%d\n",sum,minus,multiplied,devided);
// in top we can see all of scores :D
}
int main(void)
{
calculator();
}
در تابع calculator ما دو ورودی از نوع صحیح int از کاربر دریافت میکنیم و چهار عمل اصلی (جمع ، تفریق ، ضرب ، تقسیم) را هم از نوع int تعریف میکنیم. با دو پیام از کاربر عدد اول و دوم را دریافت میکنیم و سپس اعمال خواسته شده را می نویسیم. در نهایت نام تابع را در تابع اصلی قرار میدهیم :)
روش دوم :
#include<stdio.h>
int calculator();
int main(void)
{
calculator();
}
int calculator()
{
int number_1;
int number_2;
int sum,minus,multiplied,devided;
printf("Enter the first number :");
scanf("%d",&number_1);
printf("Enter the second number :");
scanf("%d",&number_2);
sum = number_1 + number_2;
minus = number_1 - number_2 ;
multiplied = number_1 * number_2;
devided = number_1 / number_2;
printf("Result of This Calucation :\nsum:%d\nminus:%d\nmultiplied:%d\ndevided:%d\n",sum,minus,multiplied,devided);
// in top we can see all of scores :D
}
این تابع تماماً شبیه تابع قبلی است تنها با این تفاوت که در زیر تابع اصلی نوشته شده و نیاز به فراخوانی دارد :)
به زودی ویدیو این آموزش را هم قرار خواهم داد :)
تمرین زیاد کنید
موفق باشید و سربلند
-
به نام خداوند بخشنده و مهربان
سلام . امیدوارم که تا بدینجا منو همراهی کرده باشید و لذت کافی رو برده باشید ;D \\:D/
بریم که بحثو ادامه بدیم :o ???
رسیدیم به بررسی کردن دومین نوع تابع یعنی تابع با ورودی یا آرگومان و دیگر اسمها که مفهوم یکی است.
در تابع های با آرگومان ما تعیین میکنیم که کاربر چه نوع دادههایی را وارد کند و همان دادهها را در تابع استفاده میکنیم.
در تعریف تابع بهتر است که نوع داده ی مورد نیاز خود و نوع تابع را یکی تعریف کنیم اما در غیر این صورت هم برنامه ی ما با مشکل جدی روبرو نخواهد شد(حداقل برای کار های ساده مشکلی بوجود نمی آید).
ما تعداد آرگومان های مورد نیاز خود را در بین () تعریف میکنیم و با کلمه ی کلیدی return نتیجه آخر تابع یعنی خروجی برنامه را به دیگر توابع میتوانیم ارسال کنیم :)
با مثال بهتر درک میکنیم :) :
یک قطعه کد بنویسیم که دو عدد را بگیرد و حاصل جمع آنرا به ما برگرداند
#include<stdio.h>
int sum (int a, int b)
{
return a+b;
}
int main(void)
{
pritnf(“Result Of this function :%d\n”,sum(4,2));
}
در نگاه اول کمی گیجکننده هست اما اگر خط به خط توضیح دهیم میفهمیم که بسیار ساده است :)
۱ - خط اول که نیاز به توضیحی نداره رهنمود پیش پردازنده ایست که تابع printf و scanf را در اختیار ما قرار می دهد.
۳ – در خط سوم ما تابعی به اسم sum تعریف کردهایم و درون پرانتز ها تعیین کردیم که دو متغیر از نوع عدد صحیح از کاربر دریافت کند !
نکته : در انتهای تعریف متغیر خود از ; استفاده نکنید چون خطا میگیرید :)
۴ - شروع تابع
۵ – در خط ۵ ما با استفاده از کلمه ی کلیدی return (به معنای برگشت) میتوانیم دو متغیر دریافتی را با عملگر + جمع بزنیم و در نهایت به سایر توابع برگشت دهیم !
۶ – پایان تابع
۸ – تعریف تابع اصلی !
۹ – شروع تابع
۱۰ – ما با استفاده از دستور نشان دادن خروجی printf به سادگی میتوانیم تابع sum را فراخوانی کنیم و دو مقدار که جایگزین دو متغیر a و b میشود را درون پرانتز برای تابع sum در نظر میگیریم !
۱۱ – پایان تابع
پس اگر دقت کنید ما در اینجا یک نکته ی کاربردی یاد گرفتیم که میتوانیم تابع ها را هم با استفاده از جانگهدار ها در دستور printf مورد استفاده قرار دهیم و این دستور منحصر به متغیر ها نیست :D
در خط ۱۰ بصورت خلاصه ما تابع sum را استفاده کردهایم !
میتوانیم یک متغیر تعریف کنیم و تابع sum را در آن متغیر فراخوانی کنیم و در نهایت آن متغیر را در تابع printf استفاده کنیم !
به این شکل
int main(void)
{
int get_sum = sum(3,3);
printf(“result is :%d\n”,get_sum);
}
این برنامه را هنوز میتوان گستردهتر و انعطاف پذیر تر کرد !
به این شکل عمل میکنیم :
int main(void)
{
int number_1, int number_2;
printf(“Enter the first number :”);
scanf(“%d”,&number_1);
pritnf(“Enter the second number :);
scanf(“%d”,&number_2);
printf(“Result of this calculation :%d\n”,sum(number_1,number_2));
}
ما در تابع اصلی دو متغیر تعریف میکنیم که دو ورودی از کاربر بگیرد و در نهایت دو ورودی را در تابع sum قرار میدهیم که عملیات محاسبه را انجام دهد :)
خب فکر میکنم تا اینجا تا حد مطلوبی با تابع با آرگومان آشنا شدیم دو ویدیو با دو مثال تقریباً خوب آماده میکنم و برای یادگیری و تکمیل این آموزش قرار خواهم داد :)
تمرین تمرین تمرین تمرین >>> کلید موفقیت در برنامه نویسی
شاد باشید \\:D/
-
به نام خدا
ویدیو های آموزشی (بهتر بگم تکمیلی)اموزش های متنی دو درس توابع بدون ارگومان و با ارگومان اماده شد :)
قسمت اول تابع بدون ارگومان :
http://www.aparat.com/v/WT0pB
قسمت دوم تابع بدون ارگومان :
http://www.aparat.com/v/Jvcet
تابع با ارگومان :
http://www.aparat.com/v/R9eZ3
بزودی فصل سوم اموزش ها رو با هم یاد میگیریم \\:D/ ;D
-
ویدیو آموزشی بدون صدا !!!عجب !!!
-
سر آغاز هر نامه نام خداست که بی نام او نامه یکسر خطاست
در این فصل از آمون زبان C ساختار کنترلی (شرط ها) را بررسی میکنیم
دستور ها در زبان C به ۳ روش اجرا و ساماندهی میشوند : ۱- جریان ترتیبی اجرای دستور ها ۲- دستور های شرطی ۳- دستور تکرار (حلقه ها)
در جلسات قبل ما برنامههای خود را به روش ترتیبی می نوشتیم یعنی برنامه از یک نقطه شروع میشود و تا آخرین دستور به ترتیب اجرا میشود
مثال :function
{
statement 1;
statement 2;
statement 3;
.
.
.
.
statement n;
}
در این ساختار دستورات از statement 1 شروع میشود تا statement n ادامه مییابد.
اما برنامهای به این شکل تنها یک حالت را اجرا میکند و انعطاف کمتری دارد مثلاً در سیستم نمره دهی جدید اگر بخواهیم برای کسی کارنامه صادر کنیم باید چندین رنج نمره تعریف کنیم که اگر فردی از این رنج تا این رنج نمره ای دریافت کرده به او بگوییم که عملکردش چگونه بوده است.
مثلاً اگر کسی نمره ی ۱۸ گرفت یعنی خیلی خوب ، نمره ۱۴ نمره ی قابل قبول است :)
به هر حال چنین برنامهای نیاز به شرط دارد یعنی بگوییم که اگر فرد این نمره را گرفت به او بگو عملکردت اینگونه بوده !
دستورات شرطی قابل استفاده در زبان C :
۱- if
۲- if , else
۳- if , else if , else
۴- switch
که به ترتیب هر کدام را با مثال یاد خواهیم گرفت :D
اما در ابتدا باید عملگرهای مربوط به این قسمت را یاد بگیریم !
در کل ۳ عملگر را در این فصل با هم یاد خواهیم گرفت : ۱- عملگر برابری ۲- عملگر مقایسهای ۳- عملگر های منطقی
در ابتدا عملگرهای برابری که کمتر هستند را یاد بگیریم :D عملگرهای برابری ، برای برابر بودن یا نبودن دو متغیر کاربرد دارد :) دو عملگر مربوط به این دسته :
== برابر بودن و =! برابر نبودن
حالا گروه دوم یعنی عملگرهای مقایسهای را بررسی میکنیم همانطور که از نام این عملگرها پیداست برای مقایسه کردن دو متغیر با هم کاربرد دارند. عملگرهای مربوط به این دسته :
> کوچکتر از
< بزرگتر از
=> کوچکتر یا مساوی
=< بزرگتر یا مساوی
در ادامه با ذکر مثال بیشتر آشنا میشویم :)
و در نهایت دسته سوم یعنی عملگرهای منطقی را بررسی میکنیم عملگرهای منطقی برای ایجاد شرط های طولانی کاربرد دارد یعنی میتوانیم شرط ها را دو به دو با هم ارزیابی کنیم و درنهایت یک نتیجه True و یا False را دریافت کنیم :) عملگرهای مربوط به این دسته :
&& و یا and
|| یا یا(!) or
! نقیض یا not
این جلسه کوتاه و مقدماتی در همینجا به پایان رسید در ادامه دستورات شرطی را با هم یاد خواهیم گرفت :)
نظرات خود را ارسال کنید(خصوصی)
موفق باشید و سربلند
-
اینا را توی یه کتاب بنویس, اینطوری خیلی بهتره :)
-
به نام خالق پیدا و پنهان که پیدا و نهان داند به یکسان
در ابتدای سخن لازمه که دوباره یاداوری کنم که برای ارسال نظرات خود لطفا داخل این تاپیک ارسال نکنید و به شخصی بنده ارسال کنید . ممنون
امیدوارم تا بدینجا از این سری اموزش ها لذت برده باشید
در این جلسه از آموزش دستور شرطی if , else if , if else if را مورد بررسی قرار خواهیم داد.
همانطور که در مثال جلسه قبل خاطر نشأن شدیم وقتی بخواهیم حالتهای مختلفی را برای برنامه ی خود ایجاد کنیم باید از دستورات شرطی یا ساختار کنترلی شرط (هر دو یکی هستند) استفاده کنیم.
ساختار کلی دستور شرط if :
if(condition)
{
statement 1;
statement 2;
statement 3;
.
.
.
statement n;
}
دستور if (به معنی اگر) مشخص میکند که اگر این حالت (شرط درون پرانتز) رخ داد دستورات درون {}را اجرا کن پ در غیر این صورت کد های بعد از {} را اجرا کن .
مثال : برنامهای بنویسید که اگر عدد مثبت وارد شد به ما نشان دهد که برنامه اگر عددی مثبت را دریافت کرد به کاربر پیغام متناسب نشان دهد.
#include<stdio.h>
int main(void)
{
float number;
printf(“Enter a number :”);
scanf(“%f”,&number);
if(number > 0)
{
printf(“This number is possetive\n”);
}
printf(“If this condition not result to you your number is another :) and this message will show to you\n”);
}
در این برنامه مشخص میکنیم که برنامه یک عدد اعشاری (بخاطر پوشش انواع اعداد) دریافت کند و اگر عدد وارد شده مثبت بود به کاربر یک پیام نشان میدهد و پیام بعد از آن هم نشان داده میشود ولی اگر عدد وارد شده منفی بود به دلیل صحیح نبودن شرط از پیام داخل {} (یعنی بلاک کد) صرف نظر میشود و پیام خارج از بلاک کد به کاربر نشان داده می شود:)
برای اینکه حالت منفی و صفر را هم بررسی کنیم میتوانیم از دو شرط if دیگر استفاده کنیم یعنی به این صورت :
#incude<stdio.h>
int main(void)
{
float number;
printf(“Enter a number :”);
scanf(“%f”,&number);
if(number > 0)
{
printf(“This number is possetive\n”);
}
if(number < 0)
{
printf(“This number is negative\n”);
}
if(number > 0)
{
printf(“This number is zero\n”);
}
}
به این صورت میتوانیم سه حالت (مثبت ،منفی ، صفر) را به برنامه ی خود اضافه کنیم اما این کار یک عیب دارد و آن هم این است که این شرط ها مستقل هستند ! ما میتوانیم این برنامه را به گونهای بنویسیم که شرط ها به یکدیگر پیوسته باشند! ما در زبان C کلمه ی کلیدی به اسم else داریم (به معنی دیگر) با استفاده از این دستور حالت دیگیری را برای شرط اصلی قرار میدهیم که در صورت صحیح نبود شرط اول شرط های درون else بررسی می شود.
برنامه ی بالا را به دیگر شکل مینویسیم :
#include<stdio.h>
int main(void)
{
float number;
printf(“Enter a number :”);
scanf(“%f”,&number);
if(number > 0)
{
printf(“This number is possetive\n”);
}
else
{
printf(“This number is negative or zero\n”);
}
}
در مقابل دستور else نمیتوان شرط تعریف کرد پس در این صورت نمیتوانیم منظور برنامه را به بهترین شکل برسانیم پس در اینجا در زبان C راهکاری وجود دارد به نام دستورات شرطی تو در تو (nested condition) که میتوانیم در else دوباره شرط تعریف کنیم پس مثال خود را به این شکل بازنویسی میکنیم که به این روش تمام حالات را میتوانیم مورد بررسی قرار دهیم :
#include<stdio.h>
int main(void)
{
float number;
printf(“Enter a number :”);
scanf(“%f”,&number);
if(number > 0)
{
printf(“This number is possetive\n”);
}
else
{
if(number < 0)
{
printf(“this number is negative\n”);
}
else
{
printf(“this number is zero or another\n”);
}
}
}
در این روش با اینکه برنامه بخوبی کار میکند و هیچ مشکلی نخواهد داشت اما همینکه دستورات داخل یکدیگر فرو میروند باعث گنگ شدن برنامه می شود(در برنامههای پیچیده حتماً اشتباه میشود) پس راه حل چیست ؟
ما با استفاده از دستور else if براحتی میتوانیم تعداد خطوط کمتر و خوانایی بیشتری را برای برنامه ی خود به ارمغان بیاوریم (تبلیغ شد :D ) پس برنامه را به این شکل دوباره می نویسیم :
#include<stdio.h>
int main(void)
{
float number;
printf(“Enter a number :”);
scanf(“%f”,&number);
if(number > 0)
{
printf(“This number is possetive\n”);
}
else if(number < 0)
{
printf(“this number is negative \n”);
}
else
{
printf(“this number is zero\n”);
}
}
در این روش کدنویسی ما خیلی خلاصه تر شده و در آخر هم دستور else را می نویسیم که اگر حالاتی را که ما برای برنامه ی خود تعریف نکردهایم را پوشش دهد!
با دستور else if میتوانیم بی نهایت حالت برای شرط خود تعریف کنیم :)
در پست بعد دستور switch بهمراه مثال جامع از دستور if و switch را با هم بررسی میکنیم
جلسه ی طولانی و لذت بخشی بود (حداقل برای من :) )با این جلسه میتوانید حداقل برنامههایی را که با C نیاز دارید بسازید :)
تمرین کردن را فراموش نکنید :)
شاد باشید و موفق
-
به نام خدایی که خاک آفرید کزان خاک انسان پاک افرید
سلام . امیدوارم که تا بدیجا لذت برده باشید :o ::)
در این جلسه یک مثال برای if else حل میکنیم و بعد از آن ساختار کنترلی switch را با هم یاد میگیریم.
در اولین مثال جلسات ساختار کنترلی (شرط) ما برنامه ی نمره ی توصیفی را بررسی کردیم حالا میخواهیم آن برنامه را به صورت عملی بنویسیم.
سؤال : برنامهای بنویسید که نمره ای را دریافت کند و آن را توصیف کند !
#include<stdio.h>
int main(void)
{
float number;
printf("Enter your number :");
scanf("%f",&number);
if(number >= 18 && number <=20)
{
printf("Excellent\n");
}
else if(number >=15 && number <= 17 )
{
printf("Good\n");
}
else if(number >= 10 && number<= 14)
{
printf("So-So\n");
}
else if(number >=0 && number <= 9)
{
printf("Feild \n");
}
else
{
printf("the numner is incorrect!\n");
}
}
چون نمره میتواند اعشار نیز داشته باشد از نوع دادهای float استفاده میکنیم و چندین شرط را تعریف میکنیم که هر کدام از شرط ها دارای یک بازه عددی هستند که اگر نمره ی وارد شده توسط کاربر در هر کدام از این بازه ها باشد بلاک مربوط به آن شرط اجرا میشود و در آخر یک else نیز قرار دادیم تا اگر عددی خارج از محدوده ی ۰ تا ۲۰ باشد به کاربر خطا دهد !
حالا برویم سراغ دستور شرطی switch ! :)
معمولاً ما دستور switch را زمانی استفاده میکنیم که تمام حالاتی که قصد داریم پیادهسازی کنیم برای یک متغیر بوده و تعریف کردن if else سرعت کار ما و خوانایی برنامه ی ما را کم میکند پس در این حالت ما از switch استفاده میکنیم :)
ساختار کلی دستور switch :switch(variable or condition)
{
case result of that variable or condition:
statement …;
break;
case result of that variable or condition:
statement …;
break;
.
.
.
.
default:
statement;
break;
}
در پرانتز switch ما شرط یا متغیری را قرار میدهیم که قرار است انواع حالاتی را برایش تعریف کنیم !
با استفاده از کلمه ی کلیدی case میتوانیم در جلوی آن حالت و یا بهتر بگوییم حالتی که قرار است در صورت صحیح بودن و متابقت داشتن با آن شرطی که درون پرانتز رخ دهد را در جلوی case می نویسیم و دقت کنید که : (کولون) بگذارید نه ; (سمیکولون) !
در زیر case هم آن دستوراتی که قرار است در صورت صحیح بودن شرط رخ دهد را می نویسیم و دقت داشته باشید که یک تب داخل تر از case دستورات خود را بنویسید(مشکلی در برنامه ایجاد نمیکند اما خوانایی برنامه را بهتر میکند) و سپس دستور break; را مینویسیم تا بعد از آنکه دستورات را اجرا کرد به صورت اتوماتیک از اجرای دیگر حالتها صرف نظر کند.
دستور دیگری در اینجا به اسم default داریم که معادل else است حالتی را بررسی میکند که تعریف نکردهایم و قرار هم نیست تعریف شود :D
برای درک بهتر این درس یک مثال حل میکنیم :
سؤال : برنامهای بنویسید که تعدادی رنگ را به کاربر نشان دهد و کاربر رنگ مورد علاقه خود را با وارد کردن شماره آن رنگ انتخاب کند.
#include<stdio.h>
int main(void)
{
int numbe_of_color;
printf("Insert your favorite color number :\n[1]Red\n[2]Yellow\n[3]Blue\n[4]Green\n[5]Others\n");
scanf("%d",&numbe_of_color);
switch(numbe_of_color)
{
case 1:
printf("Your favorite color is Red\n");
break;
case 2:
printf("Your favorite color is Yellow\n");
break;
case 3:
printf("Your favorite color is Blue\n");
break;
case 4:
printf("Your favorite color is Black\n");
break;
case 5:
printf("Your favorite color is not in this list !\n");
break;
default:
printf("Error !\n");
break;
}
}
این برنامه ی کوتاه ۴ عدد رنگ را به کاربر نشان میدهد که کاربر میتواند رنگی را انتخاب کند !
توضیح و تحلیل این برنامه بر عهده ی خودتان ! :D تا بهتر درک کنید و اگر مشکلی داشتید میتوانید سؤال کنید راهنمایی میکنم :)
تمرین : برنامه نمره ی توصیفی را با استفاده از switch بنویسید !
شاد باشید
-
-سرآغاز گفتارنام خداست که رحمتگر ومهربان، خلق راست
سلام . امیر هستم . امیداورم تا به اینجا مشکل زیاد داشته باشید ;D (منظور منفی رو نگیرید مشکل داشتن باعث میشه ادم زیاد سرچ کنه و با هر سرچ نکات زیادی را یاد بگیره ::) ) ;D ;D بریم درس جدید از فصل جدید رو شروع کنیم \\:D/
در این فصل از آموزش دومین ساختار کنترلی یعنی حلقه ها را با هم یاد میگیریم . حلقه ها دستوراتی هستند که برای تکرار کردن یک سری کد به کار میروند. برای مثال فرض کنیم که میخواهیم نام و نام خانوادگی کارمندان یک شرکت را به تعداد ۱۰ نفر دریافت کنیم اگر بخواهیم برنامه ی خود را ۱۰ بار تکرار کنیم قطعاً این کار بسیار غیر عاقلانه است ! چرا که در زبان C ما براحتی با استفاده از حلقه ها به تعداد خیلی زیاد دستورات را اجرا کنیم :)
سر فصل ها :
عملگر های افزایشی و کاهشی
حلقه ی while
حلقه ی for
حلقه ی do … while
در ابتدا عملگرهای مربوط به این فصل را یاد خواهیم گرفت سپس سه نوع حلقه ی زبان C را یاد خواهیم گرفت .
عملگرهای این فصل بسیار ساده هستند و تعدادشان هم کم است.
عملگر افزایشی :
i++
++i
i +=1
این سه شکل از عملگر افزایشی است که هر کدام از آنها را زمانی که به توضیح حلقه ها رسیدیم به طور دقیق توضیح خواهم داد.
به این ترتیب متغیر i یک واحد به متغیر i اضافه خواهد شد.
عملگر کاهشی :i--
--i
i-=1
در این عملگرها هم یک واحد از متغیر i کم می شود.
حلقه ی while :
این حلقه در ابتدا شرطی را دریافت میکند و اگر آن شرط درست بود دستورات درون {} یعنی بدنه ی شرط را اجرا میکند که به این شرط، شرط تکرار حلقه می گویند. و به متغیر کنترل کننده ی شرط ، متغیر کنترل حلقه میگویند .
ساختار کلی دستور while :
while(condition)
{
statement 1;
statement 2;
statement 3;
.
.
.
statement n;
}
مثال : برنامهای بنویسید که مدیر یک شرکت تعداد کارمندان خود را وارد کند و اگر تعداد کارمندان بیشتر از ۰ بود برنامه اجرا شود و حقوق کارمندان را دریافت کند .
#include<stdio.h>
int main(void)
{
double money = 0.0;
double all = 0.0;
int number ;
printf("Enter number of clerck :");
scanf("%d",&number);
while(number > 0)
{
printf("Enter your clerck money :");
scanf("%lf",&money);
all += money;
number --;
}
printf("All money is %.4f\n",all);
}
در اینجا ما یک متغیر int برای تعداد کارمندان تعریف میکنیم :) و دو متغیر از نوع double برای دریافت پول هر کدام از کارمندان و ذخیره ی آن پولها در یک متغیر دیگر.
شرط اجرای حلقه ی این است که تعداد کارمندان باید بیشتر از ۰ تا باشد :D و در صورت صحیح بودن شرط به تعداد کارمندان وارد شده حلقه اجرا میشود و پول دریافتی هر کارمند را در متغیر all ذخیره میکند و یک واحد از متغیر number کم میکند تا شرط حلقه نادرست شود و حلقه به پایان برسد (در غیر این صورت حلقه تا بی نهایت اجرا می شود) و در پایان تمام پول را با تابع printf نشان میدهیم ! :)
اگر دقت کنید ما در اینجا از عملگر کاهشی – number استفاده کردیم به این صورت هم می توانستیم استفاده کنیم number -=1 تفاوتی ایجاد نمیکرد
یک مثال دیگر هم از while حل میکنیم تا بهتر با این حلقه آشنا شویم : چند عدد از کاربر دریافت کنیم و میانگین آنها را نشان دهیم .
#include<stdio.h>
int main(void)
{
float number , total;
int number_count;
int use_number;
printf("Enter count of your numbers : ");
scanf("%d",&number_count);
use_number = number_count;
while(number_count > 0)
{
printf("Enter the numbers :");
scanf("%f",&number);
total += number;
number_count --;
}
printf("Average of your number > %.3f \n",total / use_number);
}
امیدوارم ازین جلسه نهایت استفاده رو برده باشید و اگر مشکلی ، نکته ی مبهمی و … وجود داشت در خصوصی پاسخگو هستم :)
تمرین تمرین تمرین
موفق باشید :)
-
بنیاد سخن به نام حق، نه کزهرچه به است نام حق به
سلام به دوستان علاقه مند به زبان C ادامه اموزش ها رو با هم پیگیری میکنیم :
در ادامه فصل حلقه ها به حلقه ی for میرسیم :)
معمولاً از حلقه ی for زمانی استفاده میکنیم که تعداد تکرار دستورات برای ما مشخص باشد حلقه ی for از سه قسمت : اندیس حلقه ، شرط حلقه و گام حلقه تشکیل میشود.
ساختار کلی حلقه ی for : for(variable initialization; condition; variable update)
{
statement 1;
statement 2;
statement 3;
.
.
.
statement n;
}
یک مثال حل کنیم :) : برنامهای بنویسید اعداد ۱ تا ۲۰ را چاپ کند:
#include<stdio.h>
int main(void)
{
for(int i = 0; i< 20 ; i++)
{
printf("%d ",i);
}
printf("\n");
}
در تابع اصلی ما یک حلقه for داریم که مقداردهی اولیه آن ۰ است و شرط آن این است که حلقه ی ما ۲۰ بار اجرا شود و در قسمت گام حلقه ما برای حلقه معین کردهایم که برنامه یک بار یک بار اجرا شود.
نکته : توجه کنیم که هنگام خروجی اگر با عدد ۱۹ مواجه شدیم و عدد ۲۰ را ندیدیم به این معنا نیست که برنامه ی ما اشتباه کرده است ! بلکه در کامپیوتر همه چیز از ۰ شروع میشود نه ۱ :D پس این نکته n-1 را در ذهنتان داشته باشید :)
و اگر بخواهیم که عدد ۲۰ را هم ببینیم باید در قسمت شرط، شرط حلقه را به صورت i<=20 تعریف کنیم :) (اگر => را فراموش کردهاید به جلسات مربوط به دستورات شرطی مراجعه کنید)
نکته : اگر بخواهیم تنها اعداد مثبت این بازه نمایش داده شود باید در قسمت گام حلقه ، گام را به این صورت i+=2 تغییر دهیم ! میبینیم که برنامه دو تا دو تا اجرا میشود :D
یک مثال پیچیدهتر حل کنیم : برنامهای بنویسید که مدیر یک شرکت تعداد کارمندان خود را وارد کند و ساعت و تعداد روز های کاری انان را وارد کند و برنامه حقوق ماهانه هر کدام را محاسبه کند.
#include<stdio.h>
#define CONST_MONEY 78.34
int main(void)
{
double get_money;
int day , hours;
int count;
printf("Enter count of your clerck >");
scanf("%d",&count);
for(int i=0;i<count;i++)
{
printf("NO.%d : Enter days worked> ",i);
scanf("%d",&day);
printf("NO.%d : Enter hours worked> ",i);
scanf("%d",&hours);
get_money = day * hours * CONST_MONEY ;
printf("Money of NO.%d is %.4f\n",i,get_money);
}
printf("\n\nGood job...Now ...Exit\n");
}
این برنامه به سادهترین شکل ممکن نوشته شده است پس انتظار بالایی نداشته باشید :) :D
ما در ابتدا یک هزینه دریافتی ثابت تعریف میکنیم تا مساوات رعایت شود :)
بعد ما در اینجا فرمول محاسبه ی حقوق ما : تعداد روز × ساعت کار کرد × هزینه دریافتی ثابت
تعداد کارمندان را شرط حلقه قرار دادهایم که تا زمانی که تعداد کارمندان به اتمام نرسیده است حلقه تکرار شود
و در ادامه تعداد ساعات و روز های مربوط به هر فرد را دریافت میکند و حقوق مربوط به او را محاسبه میکند و در خروجی چاپ می کند:)
حلقه ی for در اینجا به اتمام رسید :)
تمرین کردن فراموش نشه :D
تا آموزش بعدی در پناه حق :)
-
تا که سخن از دل و از دلبر است نام خدا ،زینت هر دفتر است
سلام . این درس بسیار کوتاه است و بریم که زود تند سریع یادش بگیریم ::) :
در ادامه فصل حلقه ها به آخرین حلقه ای میرسیم که میخواهیم مورد بررسی قرار دهیم!
در این جلسه حلقه ی do-while را با هم یاد میگیریم ، معمولاً این حلقه را زمانی استفاده میکنیم که میخواهیم حداقل یکبار دستوراتمان را اجرا کنیم؛ و دلیل این امر هم این است که ما ابتدا دستورات خود را می نویسیم و سپس شرط را تعریف میکنیم !
ساختار کلی حلقه do-while :
do{
statement 1;
statement 2;
statement 3;
.
.
.
statement n;
}
while (condition);
مثالی برای حلقه do-while : برنامهای بنویسید که سن کاربر را دریافت کند و تعداد روز های سن او را محاسبه کند :) و تا زمانی که شرط برقرار است سن دریافت کند.
#include<stdio.h>
int main(void)
{
int age;
double days;
do{
printf("Enter your age :");
scanf("%d",&age);
days = age * 365.6;
printf("Days of you spend in your life is :%.2f\n",(double)days);
}
while(age >=1);
}
در این قطعه کد ما سن کاربر را بصورت صحیح دریافت میکنیم |تعداد روز ها را بصورت اعشاری می نویسیم | سپس یک حلقه تعریف میکنیم که سن را دریافت کند و سن را محاسبه میکند و تا زمانی که سن ورودی برابر ۰ نشده است حلقه اجرا میشود.
این هم از درس کوتاه حلقه ی do-while :)
موفق باشید و سربلند.
-
به نام خدایی که برذات وی محال است هرگز بردعقل،پی
این فصل هم در این جلسه به پایان می رسید :o 8) ::)
در آخرین بخش از این فصل از آموزشمان حلقه های تو در تو و دو دستور Continue و break را بررسی میکنیم . حلقه ها هم مانند دستورات شرطی قادرند که در داخل هم نوشته شوند !
از دستور while شروع میکنیم تا به do-while برسیم:
۱- ساختار کلی حلقه ی تو در تو while :
while (condition)
{
.
.
while(condition)
{
}
.
.
.
}
اگر شرط حلقه اول درست باشد حلقه ی درون while اجرا میشود و تا زمانی که شرط برقرار حلقه دوم برقرار است حلقه اول ادامه پیدا میکند :D و در غیر اینصورت ادامه حلقه ی اول ادامه پیدا میکند:)
مثال:برنامه ای بنویسید که یک عدد را دریافت کند که اگر کمتر از صفر یعنی منفی بود دوباره از کاربر سؤال کند که عددی را وارد کند اگر اینبار عددی مثبت وارد کرد به تعداد نصف آن پیامی برای ما چاپ کند.
#include<stdio.h>
int main(void)
{
int number ;
printf("Enter any number>");
scanf("%d",&number);
while(number < 0)
{
printf("Enter number again >");
scanf("%d",&number);
int half = number / 2;
while(half > 0)
{
printf("This is Msg.%d\n",half);
half --;
}
}
}
توضیح این برنامه بطور کامل در سؤال موجود است :D :D :D :D
مختصر توضیحی درباره این برنامه دهیم که بهتر این کد ها را درک کنیم. ما در ابتدا از کاربر میخواهیم که عددی را وارد کند و در صورتی که این عدد مثبت بود برنامه برای ما ۲ پیام را چاپ نمیکند!!! چرا ؟ چون برنامه اصلاً وارد حلقه نمیشود ! پس برای اینکه برنامه برای به تعداد نصف عدد وارد شده پیام چاپ کند باید ابتدا عدد منفی وارد کنیم ! این مهمترین نکته ی این برنامه بود :)
۲- ساختار کلی حلقه تو در تو for :
for(initialization ; condition ; variable update)
{
.
.
for(initialization ; condition ; variable update)
{
}
.
.
.
}
توضیح تمام حلقه های تو در تو شبیه به هم است و تنها شکل نوشتن آنها با هم فرق میکند.
مثال : یک جدول ضرب ساده بنویسید :
#include<stdio.h>
int main(void)
{
for(int i = 1;i<=10;i++)
{
for(int j = 1;j<=10;j++)
{
int f = i * j;
printf("%d ",f);
}
printf("\n");
}
printf("\n");
}
شاید سخت ترین قسمت کد دادن ستون و سطر به این جدول باشد و نه خود نوشتن برنامه :D:D
دو حلقه for تعریف کردهایم که هر دو شامل اعداد ۱ – ۱۰ هستند و این اعداد را دو به دو با هم ضرب میکند و در متغیر f میریزد و چاپ میکند به همین سادگی :):D
۳- حلقه ی تو در تو do-while :
تنها تفاوت این حلقه با سایر حلقه ها این است که حداقل یکبار حلقه را اجرا میکند
مثال : برنامهای بنویسید که تا کاربر فرمان خروج را نداده است برنامه به تعداد دلخواه کاربر پیام چاپ کند.
#include<stdio.h>
int main(void)
{
int n ;
do
{
printf("Enter any number >");
scanf("%d",&n);
do{
printf("Hello,This is msg.%d\n",n);
n--;
}
while(n>0);
printf("If you want to try again enter a number exept zero / (Quit = 0)");
scanf("%d",&n);
}
while(n != 0);
}
توضیح این برنامه هم به این شکل است که کاربر باید عددی غیر از ۰ را وارد میکند و اگر عدد او نامساوی با۰ بود برنامه اجرا میشود و به تعداد عدد وارد شده پیام چاپ میکند و در ادامه اگر کاربر بخواهد که برنامه ادامه پیدا کند باید عددی غیر از ۰ را وارد کند و همینطور تا آخر :)
این هم از بحث حلقه های تو در تو .
دو دستور باقیمانده continue و break هستند که در شرایطی میتوانند بسیار از حجم کدنویسی ما کم کنند!
ابتدا break را بررسی میکنیم . همانطور که از نام این دستور پیدا است کار شکستن را بر عهده دارد و در دستورات شرطی و یا حلقه ها کاربرد زیادی دارد برای مثال در مثال قبل ما میخواهیم که اگر کاربر عددی غیر صفر وارد کند تا برنامه اجرا شود اما با دستور break میتوانیم تعیین کنیم که اگر کاربر عدد منفی را هم وارد کرد از برنامه خارج شود و برنامه را اجرا نکند :
#include<stdio.h>
int main(void)
{
int n ;
do
{
printf("Enter any number >");
scanf("%d",&n);
if(n < 0)
{
break;
}
do{
printf("Hello,This is msg.%d\n",n);
n--;
}
while(n>0);
printf("If you want to try again enter a number exept zero / (Quit = 0)");
scanf("%d",&n);
}
while(n != 0);
}
میبینیم که تنها یک دستور شرطی if اضافه کردهایم !
در این صورت اگر کاربر عدد منفی را هم وارد کرد برنامه به طور کامل قطع می شود.
دستور continue هم همانند اسمش کار ادامه دادن را بر عهده دارد یعنی از دستورات بعد از continue صرف نظر میشود و نمایش داده نمی شود.
برای مثال یک حلقه تعریف میکنیم که وقتی به عدد ۸ رسید نمایش داده نشود :#include<stdio.h>
int main(void)
{
for(int i = 0;i<10;i++)
{
if(i == 8)
{
continue ;
}
printf("Hello %d\n",i);
}
printf("Good bye \n");
}
:) خب اکثر مباحث مهم فصل حلقه ها گفته شد ،به نوشتههای من قناعت نکنید !
تمرین کنید تمرین تمرین ….
موفق باشید.
-
به نام آن که تن رانور جان داد خرد را سوی دانایی عنان داد
بریم که فصل جدید رو شروع کنیم ;D:
در فصل جدید آموزش هایمان به مبحث آرایه ها میرسیم . مبحث جذاب ارایه ها :):):)
ارایه ها انواعی از دادهها هستند که میتوانند دادههایی را بصورت دستهجمعی و منحصربه فرد ذخیره کنند.
ارایه ها را صورت زیر تعریف میکنیم :
type array_name[size] ;
در قسمت type نوع دادهای خود را می نویسیم (int , float , …)
در قسمت array_name نام ارایه را می نویسیم که نام ارایه هم از قانون ANSI پیروی میکند
در قسمت size هم ما تعداد ارایه هایی را که نیاز داریم تعریف میکنیم.
برای مثال اگر بخواهیم در یک کلاس ۲۰ نفری ، نمره ۲۰ نفر را وارد کنیم کار غیر عاقلانه ای در اینجا میتوانیم انجام دهیم این است که ۲۰ متغیر تعریف کنیم ! اما کار بهتر و منطقیتر این است که ما یک ارایه تعریف کنیم و تنها با index (شماره هر خانه) به متغیر مورد نظر دسترسی پیدا کنیم :)
مثال ۱ – برنامهای بنویسید که نمره ۱۰ نفر را ذخیره کند .
این مثال را به شکلهای متفاوت میتوان حل کرد که چندین نوع انرا بررسی میکنیم .
۱.۱ – نوع اول : در این نوع ما فقط میتوانیم نمرات را خودمان به شکل دیکتاتوری بنویسیم :D .
#include<stdio.h>
int main(void)
{
float scores[10];
scores[0] = 13;
scores[1] = 14;
scores[2] = 18.25;
scores[3] = 2.5;
scores[4] = 13.75;
scores[5] = 17.75;
scores[6] = 11.5;
scores[7] = 20;
scores[8] = 7.75;
scores[9] = 0;
printf("This is Score of first man or woman :D> %.2f\n",scores[4]);
}
۱.۲ – نوع دوم : با استفاده از توابع ورودی و خروجی با کاربر تعامل برقرار می کنیم.
#include<stdio.h>
int main(void)
{
float scores[10];
printf("Enter the 1.number : ");
scanf("%f",&scores[0]);
printf("Enter the 2.number : ");
scanf("%f",&scores[1]);
printf("Enter the 3.number : ");
scanf("%f",&scores[2]);
printf("Enter the 4.number : ");
scanf("%f",&scores[3]);
printf("Enter the 5.number : ");
scanf("%f",&scores[4]);
printf("Enter the 6.number : ");
scanf("%f",&scores[5]);
printf("Enter the 7.number : ");
scanf("%f",&scores[6]);
printf("Enter the 8.number : ");
scanf("%f",&scores[7]);
printf("Enter the 9.number : ");
scanf("%f",&scores[8]);
printf("Enter the 10.number : ");
scanf("%f",&scores[9]);
printf("This is list of your numbers :\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n%f\n",scores[0],scores[1],scores[2],scores[3],scores[4],scores[5],scores[6],scores[7],scores[8],scores[9]);
}
در این روش ما بسیار کد های تکراری و خستهکننده نوشتیم ! :(
۱.۳ – نوع سوم : با استفاده از حلقه ی for براحتی با کاربر تعامل برقرار میکنیم و تعداد کد هایمان خیلی خیلی کم میشود :
#include<stdio.h>
int main(void)
{
float scores[10];
for(int i = 0;i < 10 ; i++)
{
printf("No.%d Enter your numbers> ",i);
scanf("%f",&scores[i]);
}
}
با یک حلقه for براحتی میتوانیم به تمامی اعضای ارایه دسترسی پیدا کنیم .
با یک تیر چند نشان زدیم : حجم کد ها کم شد ، برنامه انعطاف پذیر شد ، با کاربر تعامل برقرار کرد و …
نکته : ایندکس ارایه ها هم از ۰ شروع میشود تا n-1 تعداد متغیر . در مثال قبل که ده نمره را دریافت کردیم خانه اول ارایه ها ۰ و خانه آخر ۹ است .
مثال۲ (پیچیدهتر) : برنامهای بنویسید که کاربر بتواند ۵ عددصحیح را وارد کند و آن اعداد را به ضورت معکوس وارد کند.
#include<stdio.h>
int main(void)
{
int number[5] ;
printf("Enter 5 numbers > \n");
for(int i = 0; i <= 4 ; i++ )
{
scanf("%d", &number[i]);
}
printf("This inverse of your numbers > \n");
for(int j = 4 ; j >= 0 ; j--)
{
printf("%d ",number[j]);
}
printf("\n");
}
انواع شیوههای تعریف ارایه :
۱ – در این شیوه تنها سایز ارایه را مشخص میکنیم که چقدر ورودی دریافت کند :
int number[5] ;
۲ – در این شیوه خانههای حافظه ای را هم مقدار دهی اولیه میکنیم :
int number[5] = {1,2,3,4,5} ;
۳ – در این شیوه سایز خانههای حافظه ای مشخص نیست :
int number[] ;
۴ – در این شیوه میتوانیم سایزی مشخص نکنیم و به تعداد نیازمان مقدار اولیه در ارایه قرار دهیم:
int number = {1,2,3,4,54,5,6,6,34,34,34,213,324,453,546,546};
مبحث ارایه ها خیلی مبحث کاربردی و پیچیدهای هست و باید با احتیاط (!) :) یاد گرفت :)
بخش بعدی آموزشها : ارایه های دو بعدی و چند بعدی
این جلسه را به عنوان مقدمات در نظر بگیرید بعد از آنکه ارایه های دو بعدی و چند بعدی هم گفته شد یک جلسه به طور مفصل مثال حل میکنیم .
شاد و سربلند باشید
-
به نام آن که جان رافکرت آموخت چراغ دل به نورجان برافروخت
سلام . ادامه ی اموزش ها را دنبال میکنیم ::) :
در ادامه فصل ارایه ها به ایستگاه ارایه های دو بعدی و چند بعدی میرسیم :)
آرایه های چندبعدی معمولاً برای کارهایی محاسباتی مثل ماتریس کاربرد دارد .
ساختار کلی :ارایه های چند بعدی :
array_type array_name [dimension_size 1][dimensio_size 2]…..[dimesion_size n] ;
مثال :
int n[2][2] ;
اما اول ارایه های دو بعدی را یاد بگیریم برای اینکه درک خوبی از ارایه های چند بعدی پیدا کنیم . در [] اول ما تعداد ردیف ها یا تعداد دستهای که نیازمندیم را می نویسیم و در [] دوم تعداد ستونها و یا تعداد اعضای هر دسته را مشخص میکنیم (اصطلاح صحیح ردیف و ستون هست اما من تعداد دسته و اعضای دسته را برای خودم در نظر گرفتم تا قابل فهم شود شما به هر شکلی میتوانید روشهایی یا نامگذاری هایی را انتخاب کنید تا قابل فهم شود :) ) .
به سه شکل میتوانیم ارایه هایمان را مقدار دهی کنیم :
روش اول (مرسوم تر) – در این روش تعداد ردیف و ستون مشخص است و مقدار هر کدام نیز مشخص است .
Int n [2][2] = { {2,3} , {20,30} } ;
در علامت {} اعضای هر دسته یا ستونهای هر دسته را می نویسیم .
با علامت , دسته ها را از هم جدا میکنیم .
روش دوم – این روش برای زمانی مناسب است که یکی از دو مورد ستون یا ردیف مشخص نیست اما دیگری تعدادش مشخص است .
Int n[][3] = { {2,3,4} , {20,30,40} , {200,300,400} } ;
در اینجا ما تعداد دسته ها یا ردیف هایمان مشخص نیست اما برایمان مشخص است که هر دسته ۳ عضو دارد :) ) .
روش سوم – در این روش ما از {} برای جدا کردن هر دسته استفاده نمیکنیم :
int n[2][3] = {1,2,3,4,5,6} ;
برای دسترسی به هر کدام از خانههای حافظه ای ابتدا ردیف و سپس ستون را می نویسیم
مثال :int n [2][3] = { {2,4,5} , {4,5,6} } ;
printf("I selected this number > %d\n" , n[0][1] );
انتظار داریم که عدد ۴ را به ما برگرداند ! اگر تعجب کردید باید بگویم که ارایه ها هم مانند درسهای جلسات قبل که در مبحث حلقه ها بود است n – 1 . برای آدرس دهی باید ۱ عدد کمتر از مکان عدد مورد نظر باشد مثلاً ۴ عدد دوم است اما برای آدرس دهی باید ۱ را وارد کنیم . پس بطور کل شمارش خانههای حافظه ای بصورت 0 ,1 , 2 , … , n است !
ارایه های سه بعدی هم مانند ارایه های دوبعدی هستند اما با یک تفاوت که در با یک مثال با این تفاوت آشنا میشویم .
int n[2][3][3] = { { {1,2,3} , {4,5,6} , {7,8,9} } , { {10,20,30} , {40,50,60} , {70,80,90} } } ;
printf("I select this number : %d\n" , n[0][1][1] )
;
در این مثال انتظار داریم که عدد ۵ را به ما نشان دهد !
میبینیم که یک [] به خانهها اضافه شده که نشان دهنده این است که ستون و ردیف باید در یک دسته بزرگتر قرار بگیرند . دو [] آخر مختص ردیف و ستون هستند که هر چقدر هم [] قبل از آنها بیاید تغییری ایجاد نمیکند !
خب در اینجا آموزش ارایه ها دو بعدی و چند بعدی هم به پایان رسید . در قسمت بعد تنها از مبحث ارایه ها مثال حل میکنیم .
شاد و پیروز باشید .
-
به نام آن که جان رافکرت آموخت چراغ دل به نورجان برافروخت
سلام . اخرین قسمت از فصل ارایه ها :
در جلسه آخر از این فصل آموزشمان میخواهیم ارایه ها را با حل کردن مسائل مختلفی یاد بگیریم ! امیدوارم که دو جلسه پیش را مطالعه کرده باشید و حالا با یک آمادگی به سراغ این جلسه خیز برداشته باشید :)
خب اولین مثالی که میخواهیم حل کنیم یک برنامه ی ساده که توان اعداد ۰ تا ۱۰ را محاسبه میکند ! ابتدا کد را مشاهده کنیم :
#include<stdio.h>
#define MAX_ITEM 11
int main(void)
{
int i , squar[MAX_ITEM] ;
for(i=0 ; i< MAX_ITEM ; ++i)
{
squar[i] = i * i ;
printf("squar of Number %d : %d\n", i,squar[i] ) ;
}
}
همانطور که گفته شد میخواهیم توان اعداد ۰ تا ۱۰ را محاسبه کنیم و اگر به خاطر داشته باشید ارایه ها بصورت n-1 عمل میکنند یعنی اگر بخواهیم عدد ۱۰ را هم محاسبه کنیم باید مقدار دهی اولیه خود را که در اینجا MAX_ITEM میباشد را عدد ۱۱ بگذاریم در غیر این صورت یعنی اگر ۱۰ را قرار دهیم تنها تا عدد ۹ را محاسبه میکند !
در ادامه ،در تابع اصلی خود یک ارایه به نام square تعریف کردهایم که سایزش را معادل MAX_ITEM قرار دادهایم چرا که میخواهیم نتیجه ی هر توان را در یک خانه ی حافظه ای قرار دهیم ! یک متغیر I هم تعریف کردهایم که متغیر کنترل کننده حلقه ما است .
پس از این تعریف متغیر و ارایه یک حلقه ی for داریم که نقدار دهی اولیه آن ۰ است و باید تا MAX_ITEM اجرا شود !
در داخل حلقه هم تعریف کردهایم که هر خانهی حافظه متعلق به حاصل ضرب i * I باشد .
سپس با استفاده از تابع خروجی ،خروجی را به کاربر نشان میدهیم :)
حالا یک مثال نسبتاً خوب حل کنیم تا خیلی با C حال کنیم :D
در آمار تفاضل بین دادهها و میانگین گرفتن از دادهها را داشتیم که میخواهیم به سادهترین شکل ممکن این برنامه را بنویسیم :)
ابتدا کد را ببینیم و سپس درباره برنامه حرف بزنیم :):#include<stdio.h>
#include<math.h>
#define MAX_ITEM 8
int main(void)
{
double x[MAX_ITEM],mean , st_dev , sum , sum_sqr ;
int i ;
printf("Enter %d numbers seprated by blank or <return>s\n ",MAX_ITEM) ;
for(i = 0; i < MAX_ITEM ; ++i)
scanf("%lf", &x[i]);
sum = 0;
sum_sqr = 0;
for(i = 0 ; i < MAX_ITEM; ++i)
{
sum += x[i] ;
sum_sqr += x[i] * x[i] ;
}
mean = sum / MAX_ITEM;
st_dev = sqrt(sum_sqr / MAX_ITEM - mean * mean) ;
printf("The mean is %.2f.\n" , mean);
printf("The standard devation is %.2f.\n",st_dev);
printf("\nTable of the diffrences between data values and mean\n");
printf("Index Item diffrence\n");
for( i = 0 ; i<MAX_ITEM ; ++i)
printf("%3d%4c%9.2f%5c%9.2f\n",i,' ',x[i],' ',x[i] - mean);
return (0);
}
ثابت ماکرو MAX_ITEM اندازه ارایه را تعیین میکند. از متغیر I در هر حلقه ، به عنوان متغیر کنترل حلقه و اندیس ارایه ها استفاده شده است .
حلقه for اول :
for(i = 0; i < MAX_ITEM ; ++i)
scanf("%lf", &x[i]);
در هر عضو ارایه x ، یک مقدار ذخیره میکند . برای هر مقدار I از ۰ تا ۷ ، احضار تابع scanf تکرار میشود و هر بار یک داده جدید از ورودی خوانده شده و در x ذخیره میشود . اندیس I تعیین میکند کدام عضو ارایه مقدار داده ی بعدی را دریافت میکند .
حلقه for دوم مجموع تمام مقادیر ذخیره شده در این ارایه را در sum انبار (ذخیره) می کند. این حلقه ، مجموع مربعات تمام مقادیر عضو های این ارایه را نیز در sum_sqr انبار(ذخیره) میکند.
اندکی بعد این حلقه به طور مشروح و با جزئیات کامل بررسی میشود . آخرین حلقه for :
for( i = 0 ; i<MAX_ITEM ; ++i)
printf("%3d%4c%9.2f%5c%9.2f\n",i,' ',x[i],' ',x[i] – mean);
جدول را چاپ میکند . در هر خط از این جدول ، اندیس ارایه یعنی عضو ارایه و تفاضل بین آن عضو و میانگین دادهها یعنی x-mean باعث میشود . توجه دارید که حافظه ی نگهدارنده ی رشته فورمت در احضار تابع ()printf باعث میشود در بالای هر ستون از مقادیر داخل جدول خروجی ، عنوان ستون مربوطه چاپ میشود . اکنون که برنامه را به طور کامل ملاحظه کردهاید ،نکاهی دقیقتر به محاسبه ی حلقه ی for می افکنیم :
sum = 0;
sum_sqr = 0;
for(i = 0 ; i < MAX_ITEM; ++i)
{
sum += x[i] ;
sum_sqr += x[i] * x[i] ;
}
این حلقه حاصل جمع هر هشت عضو ارایه x را در متغیر sum ذخیره میکند . در هر بار از اجرای بدنه ی حلقه ، عضو بعدی ارایه x به sum اضافه میشود . پس از آن مقدار این عضو ارایه به توان ۲ میرسد و توان دوم آن در نگهدارندهی مجموع مربعات (توان) عضو ها یعنی sum_sqr ذخیره میشود .
انحراف معیار ، مجموعهای از دادهها ، مقیاسی برای پراکندگی مقادیر دادهها در اطراف میانگین است . انحراف معیار کوچک ، معرف آن است مه تمام مقادیر دادهای به فاصله ی نسبتاً نزدیکی از مقدار میانگین قرار دارند .
فرمول محاسبه انحراف معیار در اینجا :
st_dev = sqrt(sum_sqr / MAX_ITEM - mean * mean) ;
مثالهای ارایه های یک بعدی به اتمام رسید در ادامه با یک مثال ساده برای ارایه های چندبعدی با طرز کار این ارایه ها آشنا می شویم :
ساخت جدول ضرب اعداد با ارایه دو بعدی :
#include<stdio.h>
int main(void)
{
int table[10][10] , i , j;
for(i = 0; i < 10 ; i++)
for(j=0;j<10;j++)
table[i][j] = (i+1) * (j+1) ;
for(i = 0 ; i< 10 ; i ++){
for(j = 0 ; j < 10 ; j++)
printf("%4d",table[i][j]);
printf("\n");
}
}
در تابع اصلی ما یک ارایه دو بعدی با سایز ۱۰ میسازیم همچنین دو متغیر I , j هم میسازیم که متغیر های کنترل حلقه ی ما هستند .
حلقه for تو در تو اول :
for(i = 0; i < 10 ; i++)
for(j=0;j<10;j++)
table[i][j] = (i+1) * (j+1)
;
اعداد ۱ – ۱۰ را (بخاطر قرار دادن i+1 و j+1 ) در یکدیگر ضرب میکند
پ حلقه for تو در تو دوم :
for(i = 0 ; i< 10 ; i ++){
for(j = 0 ; j < 10 ; j++)
printf("%4d",table[i][j]);
printf("\n");
نتیجه محاسبه حلقه اول را در خروجی چاپ میکند .
امیدوارم تا اینجا از زبان C لذت برده باشید :)
- بعد از تمام شدن جلسات متنی ، آموزشها را بصورت ویدیو (با صدا) هم خواهم ساخت تا هم افرادی که دوست دارند که آموزش متنی داشته باشند (که خودم یکی از این افراد هستم ) و هم افرادی که علاقهمند به آموزش ویدیویی هستند از این زبان جذاب بهره مند شوند :)
- بعد از تمام شدن آموزشهای زبان C دیگر زبانهای برنامه نویسی را هم در انجمن کار خواهیم کرد :) (انجمن برنامه نویسی رو رونق بدیم و گسترشش بدیم)
- نظرات خود را برای من در شخصی ارسال کنید و سؤال و یا نکته ی ابهامی هم وجود داشت سؤال کنید .
به این آموزشها قناعت نکنید و دیگر منابع خارجی مثل :
http://www.programiz.com/c-programming
http://tutorialspoint.com/cprogramming/
http://www.cprogramming.com/tutorial/c-tutorial.html
این آموزشها را هم بخوانید
شاد و پیروز باشید / یا حق
-
به نام خدا
سلام . بعد از یک وقفه نسبتاً زیاد بالاخره فصل جدید رو شروع میکنیم در این فصل رشتهها رو یاد میگیرم و کار با چند تابع مخصوص رشتهها را یاد میگیریم :) با من همراه باشید :)
در زبان C ما مانند دیگر زبانهای برنامه نویسی امروزی (python , perl , java , …) کار با رشتهها برایمان ساده نیست!
در فصل قبل ما ارایه ها را یاد گرفتیم که پیش نیاز یادگیری رشته هست ! اگر دقت کنید ما تنها از ارایه های از نوع صحیح و اعشاری استفاده کردیم و از ارایه های نوع char استفاده نکردیم !؟ درست حدس زدید ما با استفاده از ارایه char رشتهها را میسازیم :) در اصل رشته (ارایه ای از کاراکتر ها یا جمعی از کاراکتر هاست یا هر تعریف دیگری که داشته باشیم :))
تعریف رشته هم مثل یک ارایه از نوع صحیح یا اعشاری است . مثال :
char str[11] = "Hello World";
برای نشان دادن متن در خروجی و دریافت متن از کاربر از حافظه نگهدار s% استفاده میکنیم !
حالا یک نمونه ساده که نام و نام خانوادگی را از کاربر دریافت کند و آن را با پیام مناسب در خروجی نمایش دهد :
#include<stdio.h>
int main(void)
{
char name[20] ;
char family[25];
printf("Enter your name> ");
scanf("%s",name);
printf("Enter your family> ");
scanf("%s",family);
printf("Hello,\nYour name is %s and your family is %s , and i glad to meet you :D \n",name,family);
}
تعریف رشته هم مثل ارایه است. اول نوع متغیر char و بعد از آن نام ارایه (در اینجا رشته) و سپس مقدار دهی آن .
اگر دقت کنیم میبینیم که در اینجا برای دریافت از کاربر از کاراکتر & استفاده نکردهایم ! پس ما برای چه دریافت و چه خروجی رشته از علامت & استفاده نمیکنیم.
نمونه دیگه تعریف رشتهها به صورت زیر است :
char *name ;
(در فصل های بعد اشاره گر ها را هم بصورت مختصر یاد خواهیم گرفت)
اما آنچه که در اینجا وجود دارد این است که ما براحتی نمیتوانیم رشتههای خود را مقداردهی کنیم پس برای اینکه کار ما راحتتر شود کتابخانه ای به نام string.h در کتابخانههای زبان C اضافه شد تا کار را برای ما راحتتر کند :)
در اینجا توابع مفید انرا بررسی خواهیم کرد .
تابع strcpy :
این تابع مخفف دو کلمه String Copy است که کار انتقال دادن رشته مقصد در مبدأ را بر عهده دارد شکل کلی این تابع بع شمل زیر است :
strcpy(Source,string);
یعنی ما هر مقدار String را داشته باشیم این تابع در Source کپی میکند . مثال :
#include<stdio.h>
#include<string.h>
int main(void)
{
char msg[50] ;
strcpy(msg , "Hello,I am Amir Kouhkan ;D");
printf("my new string text is : \n%s\n",msg);
}
در خروجی مشاهده میکنید که رشته ای را که در قسمت دوم تابع strcpy تعریف کردیم به ما نشان داده است :)
تابع دیگری که C عزیز برایمان فراهم کرده تابع strcat است که برای ما رشته ی مقصد را در آخر رشته ی مبدأ اضافه میکند .
شکل کلی :
strcmp(Source , String);
مثال :
int main(void)
{
char msg[50] ;
strcpy(msg , "Hello,I am Amir Kouhkan ;D");
strcat(msg , "And I like programming and share my information with other people :D");
printf("my new string text is : \n%s\n",msg);
}
در خروجی میبینیم که رشته دوم در انتهای رشته اول اضافه شده است :)
تابع مفید دیگری که داریم تابع strcmp است که کار مقایسه کردن را بر عهده دارد.
شکل کلی :
strcmp(str1 , str2 );
مثال :#include<stdio.h>
#include<string.h>
int main(void)
{
char name[20] = "Amir";
char name_1 [20] = "Alireza";
printf("%d\n",strcmp(name,name_1));
}
این تابع دو رشته را دریافت میکند و در کل ۳ خروجی میتواند داشته باشد (-۱ و ۰ و ۱ ) .
۰ : اگر خروجی آن صفر بود یعنی تعداد کاراکتر های هر دو رشته با هم برابر است .
-۱ : اگر خروجی ما -۱ بود یعنی تعداد کاراکتر های رشته اول بیشتر بوده است
۱ : اگر خروجی ما ۱ بود یعنی تعداد کاراکتر های رشته دوم ما بیشتر بوده است .
تابع strlen :
این تابع مخفف دو کلمه String Length میباشد پس از نام تابع پیداست که وظیفه شمردن تعداد کاراکتر های رشته را بر عهده دارد . و خروجی آن یک خروجی از نوع صحیح است که میتوان با حافظه نگهدار d% از آن استفاده کرد .
شکل کلی :
strlen(string);
مثال :
#include<stdio.h>
#include<string.h>
int main(void)
{
char name[20] = "Amir";
printf("%d\n",strlen(name));
}
در آخر هم تعداد کاراکتر های رشته را در خروجی چاپ میکند که در اینجا ۴ است .
یک نکته ی خوب !
اگر ما رشته ی خودمان را بصورت char *string ; تعریف کنیم میتوانیم بدون استفاده از تابع strcpy انرا مقدار دهی اولیه کنیم . مثال :#include<stdio.h>
#include<string.h>
int main(void)
{
char *name ;
name = "amir kouhkan";
printf("My name is : %s\n",name);
}
امیدوارم ازین فصل اموزشمان هم بهره ی کافی را برده باشید .
نظرات خود را در خصوصی بفرستید .
موفق باشید./
-
سلام . در ادامه آموزشهای زبان C که کم کم داریم به آخر آن هم نزدیک میشویم میخواهیم درباره اشاره گر ها یا Pointers حرف بزنیم :)
اشاره گر ها در کل مفهوم سادهای دارند اما اگر بخواهیم آنها را خیلی پیچیده دنبال کنیم مبحث نسبتاً سنگینی هست به همین خاطر ما در این سری آموزشهابه گفتن کاربرد آن و چند مثال ساده بسنده میکنیم .
اشاره گر ها برای اجرا شدن بعضی از وظایف در زبان برنامه نویسی C بسیار کار را راحتتر کردهاند برای مثال :اختصاص دادن حافظه پویا (Dynamic Memory ) بدون استفاده از اشاره گر ها ممکن نیست .پس بهتر است که برنامه نویس زبان C با این مبحث آشنایی داشته باشد .
همانطور که میدانید متغیر ها مکان هایی از حافظه هستند و این حافظه ها دارای آدرسی هستند که ما در زبان C با استفاده از عملگر & میتوانیم به آنها دسترسی داشته باشیم .
مثال :
#include<stdio.h>
int main(void)
{
int n = 5;
printf("This is number %d \nand this is location of it in memory :%x\n",n , &n);
}
در این مثال مه یک متغیر از نوع صحیح (integer) تعریف کردیم که در خروجی مشاهده میکنید که خروجی اول مقدار متغیر و خروجی دوم آدرس حافظه ای متغیر است .
نکته ۱ : حافظه نگهدار اشاره گر ها x% است.
نکته ۲ : حتماً متغیر را برای دسترسی به مکان حافظه ای خود با عملگر & استفاده کنید .
واقعاً اشاره گر ها چه هستند ؟
یک اشاره گر یک متغیر است که مقدار آن آدرس یک متغیر دیگر است . مثلاً : آدرس مستقیم از مکان حافظه است . مانند هر متغیر و یا ثابت دیگری ابتدا باید اشاره گر را تعریف کرده و سپس مقدار دهی کنیم .
تعریف یک اشاره گر عموما به شکل زیر صورت میگیرد :
var_type *var_pointer_name ;
var_type : نوع متغیری است که ما انتخاب میکنیم
* : برای فهماندن این موضوع که ما داریم اشاره گر تعریف میکنیم نه متغیر به کامپایلر از این علامت استفاده میکنیم .
var_pointer_name* : نام اشاره گر است
انواع اشاره گر ها :int *var_int;
float *var_float ;
double *var_double ;
char *var_char;
مقدار حقیقی انواع مختلف دادهها در اشاره گر ها از قبیل : Inteher , Float , Double , Char همگی مانند هم هستند و همگی آنها یک عدد طولانی هگزادسیمال هستند که نشان دهنده محل حافظه هستند و تنها فرقشان هم در نوعشان است .
چگونه از اشاره گر ها استفاده کنیم ؟
مراحل استفاده از اشاره گر ها ، کاری که غالباً انجام میدهیم ۱- تعریف کردن یک اشاره گر ۲- نسبت دادن آدرس یک متغیر به یک اشاره گر و ۳- در آخر دادن دسترسی به مقدار (Value) که آدرسهای قابل دسترسی در متغیر اشاره گر را ذخیره کند .
مثال زیر را ببینیم :#include<stdio.h>
int main(void)
{
int number = 34;
int *value;
value = &number;
printf("This is Address of number in the MEMORY : %x\nAnd this is Address that stored in value :%x\nfinally this is real number that stroed in memory : %d\n",&number,value,*value);
}
در این مثال هم از مراحل بالا تبعیت کردیم ابتدا یک متغیر از نوع صحیح تعریف کردیم و سپس یک اشاره گر تعریف کردیم و مقدار اشاره گر را برابر با آدرس متغیر در حافظه قرار دادیم .
۳ خروجی ما به کاربر در اینجا نشان میدهیم که خروجی اول آدرس حافظه ای متغیر number میباشد و خروجی دوم آدرس حافظه ای اشاره گر است و خروجی سوم مقدار واقعی عدد است که توسط اشاره گر به متغیر number به آن اشاره شده است .
نکته ۱ : برای نشان دادن مقدار واقعی اشاره گر حتماً در خروجی از * استفاده کنید
نکته ۲ : برای نشان دادن آدرس اشاره گر در حافظه بدون هیچ کاراکتر اضافی استفاده میشود
در همینجا این فصل را پایان میدهیم :) چرا که مباحث بسیار زیاد است و ما کار های زیادی با آن نخواهیم داشت .
این فصل درواقع تلفیقی از مطالب وبسایت tutorialspoint و اطلاعات خودم هست :)
امیدوارم که گیج نشده باشید اگر سؤالی در این خصوص بود در خصوصی در خدمتم :)
شاد باشید و موفق ./
-
سلام. در این قسمت کار با Structure ها رو یاد خواهیم.
در هنگام برنامه نویسی، اغلب تعریف یک نوع متغیر آسانتر از آن است که دستهای از دادههای وابسته به هم را تعریف کنیم. Structures راه مناسبی برای تعریف کردن و ذخیره کردن انواع زیادی متغیر با نام مشابه با هم را فراهم میکنند!
به این شکل برنامهای که ما تعریف میکنیم اصطلاحاً modular تر می شود.بدلیل طراحی و ساختار جمع و جور این نوع تعریف داده برنامه ما سادهتر و خواناتر می شود.به طور عمومی strutures برای اینکه دادههای زیادی را در خودشان بصورت گروهی با هم ذخیره کنند مفید هستند. برای مثال اگر ما بخواهیم اطلاعات را از یک دیتابیس یا از کاربر بگیریم میتوانیم از Strutures استفاده کنیم. مثلاً اگر بخواهیم یک برنامه بنویسیم که اطلاعاتی مانند نام و نام خانوادگی و شماره تلفن و شماره تلفن همراه و آدرس خانه را دریافت کند از Struture استفاده میکنیم :).
شکل کلی تعریف structure به این شکل است :
struct Tag {
Members
};
که در اینجا tag نام Structure میباشد و Member آنچه که ما در بدنه structure مینویسم است:
struct Tag name_of_single_structure;
برای دسترسی به متغیر structure ما به روش زیر عمل میکنیم :
name_of_single_structure.name_of_variable;
برای مثال :
struct example {
int x;
};
struct example an_example; /* Treating it like a normal variable type
except with the addition of struct*/
an_example.x = 33; /*How to access its members
*/
در اینجا مثالی دیگر میزنیم :
struct database {
int id_number;
int age;
float salary;
};
int main()
{
struct database employee; /* There is now an employee variable that has
modifiable variables inside it.*/
employee.age = 22;
employee.id_number = 1;
employee.salary = 12000.21;
}
ما در structure database اعلام میکنیم که سه متغیر تعریف کردهایم که یکی age, id_number, salary هستند. ما میتوانیم از این ساختار مانند متغیری مثل int استفاده کنیم.
ما میتوانیم structure ها برگشت(resturns) دهیم را به تابعی با تعریف نوع برگشتیشان از یک نوع structure برگشت دهیم.
برای مثال :
struct database fn();
درباره union ها هم مختصر توضیحی بدیم.
Union ها شبیه به structure ها هستن با این تفاوت که همه ی متغیر ها فضای مموری مشابهی را به اشتراک میگذارند. زمانی که یک union اعلان می شودکامپایلر مقدارم حافظه ی مناسبی را برای ذخیره بزرگترین نوع داده union در نظر میگیرد که این مشابه یک جعبه ذخیره سازی غول پیکر است که ما میتوانیم بزرگترین ایتم خود را در آن ذخیره کنیم یا کوچیک ترین ایتم را خود را ذخیره کنیم اما نمیتوانیم که هر دو را ذخیره کنیم :).
عملگر . برای دسترسی به متغیرهای درون union کاربرد دارد.
و نکته آخر اینکه اگر میخوایم که یک اشاره گر به structure داشته باشیم، درواقع ما به اطلاعات ذخیره شده در structure اشاره میکنیم. برای اینکار از عملگر <- بجای . استفاده میکنیم.
مثال :#include <stdio.h>
struct xampl {
int x;
};
int main()
{
struct xampl structure;
struct xampl *ptr;
structure.x = 12;
ptr = &structure; /* Yes, you need the & when dealing with
structures and using pointers to them*/
printf( "%d\n", ptr->x ); /* The -> acts somewhat like the * when
does when it is used with pointers
It says, get whatever is at that memory
address Not "get what that memory address
is"*/
getchar();
}
پایان این قسمت.
در حقیقت این متن ترجمه ای سریع از این لینک میباشد:
http://www.cprogramming.com/tutorial/c/lesson7.html (http://www.cprogramming.com/tutorial/c/lesson7.html)
فقط یه بخش دیگه از این اموزش ها باقی مونده که تا هفته اینده سعی میکنم اماده بشه.بدلیل مشغولیات زیاد نمیتونم اون متون مد نظر خودمو بنویسم بهمین خاطر این متن ها رو ترجمه میکنم و اواسط مهر آموزشهای ویدیویی این سری از آموزشها بهمراه GTK+ که منتشر میشه شما میتونین از آموزشهای ویدیویی بهره مند بشین. ارادمتند امیر.
-
سلام. به ایستگاه آخر رسیدیم :) یعنی جایی که ما با FILE I/O آشنا می شویم.
باید این نکته رو هم اضافه کنم که به هیچ وجه به این نوشتههای من راضی نباشید چراکه یا نواقصی دارند یا کامل نیستند!
این متن ترجمه ای از سایت خوب programiz.com و تجربیات خودم هست.
در برنامهنویسی به زبان C ، فایل مکانی از حافظه دیسک هست که مجموعهای اطلاعات را ذخیره میکند.
چرا به فایلها نیاز داریم ؟
وقتیکه برنامهای که نوشتیم را میبندیم تمام اطلاعات و متغیرهایی که با آن سر و کار داشتهایم را از بین بردهایم، اما اگر بخواهیم اطلاعات خود را ذخیره کنیم و هر وقت که به آنها نیاز شد به آن دسترسی داشته باشیم ما باید از دیتابیسها یا فایلها استفاده کنیم.
تعداد زیادی Function در دنیای C هستند که وظیفه رسیدگی به فایل ورودی و خروجی (FILE I/O) را برعهده دارند، اما ما در اینجا Standard I/O (High Level file functions) را بررسی میکنیم.
فایلهای استاندارد سطح بالا را میتوانیم به دسته زیر طبقهبندی کنیم :
۱. فایلهای متنی
۲. فایلهای باینری
اعمال روی فایل :
۱. ساختن یک فایل جدید
۲. باز کردن یک فایل موجود
۳. خواندن و نوشتن اطلاعات از یک فایل
۴. بستن یک فایل
کار کردن با فایلها :
برای کار کردن با فایلها ما نیاز داریم یک اشارهگر از نوع FILE اعلان کنیم. این اعلان برای ارتباط بین فایل و برنامه لازم است.
FILE *ptr ;
باز کردن یک فایل :
باز کردن یک فایل بوسیله تابع کتابخانهای fopen() صورت میگیرد. ساختار کلی باز کردن یک فایل بصورت زیر است :
ptr = fopen(“fileopen”, “mode”);
برای مثال :
fopen(“/tmp/text.txt”,”w”);
در اینجا فایل text.txt ساخته میشود.
بستن یک فایل :
یک فایل باید بعد از خواندن شدن و نوشته شدن بسته شود. بستن یک فایل با تابع کتابخانهای fclose() بسته میشود.
توابع fprintf() و fscanf() :
توابع fprinf() و fscanf() نسخههای مربوط به فایل printf() و scanf() هستند :)
تنها تفاوتی که وقتی از دو تابع fprintf() و fscanf() استفاده میکنیم این است که، آرگومان اول یک اشارهگر است که به FILE اشاره میکند.
باز کردن یک فایل:
#include <stdio.h>
int main()
{
int n;
FILE *fptr;
fptr=fopen("/tmp/file.txt","w");
if(fptr==NULL){
printf("Error!");
}
printf("Enter n: ");
scanf("%d",&n);
fprintf(fptr,"%d",n);
fclose(fptr);
return 0;
}
این برنامه یک عدد از کاربر دریافت میکند و سپس آنرا در یک فایل ذخیره میکند. یعد از اینکه برنامه را کامپایل و اجرا کردیم میتوانیم عددی را که وارد کردیم در فایل file.txt مشاهده کنیم.
تابع scanf() برای خواندن اطلاعات از فایل است.
خواندن فایل :
#include <stdio.h>
int main()
{
int n;
FILE *fptr;
if ((fptr=fopen("/tmp/file.txt","r"))==NULL){
printf("Error! opening file");
exit(1); /* Program exits if file pointer returns NULL. */
}
fscanf(fptr,"%d",&n);
printf("Value of n=%d",n);
fclose(fptr);
return 0;
}
اگر برنامه بالا را کامپایل و اجرا کنیم عددی را که در فایل file.txt نوشته بودیم دریافت میکنیم.
خب بطور خلاصه کار با FILE I/O رو یاد گرفتیم!
به همین راحتی :)
نسخه PDF این آموزشها رو هم بزودی درست میکنم و منتشر میکنم.
از مهر ماه هم یه سری آموزش در رابطه با GTK+ منتشر میکنم :)
شاد و پیروز باشید