آموزش C++ قسمت نهم

1395/1/12 --- 2695

به نام خداوند بخشنده مهربان

سلام عرض می کنم  خدمت دوستان و همراهان گرامی . مصطفی دادخواه هستم با نهمین قسمت از آموزش برنامه نویسی سی ++  در خدمت شما بزرگواران . در جلسه پیش ساختار های کنترلی رو به طور کامل بررسی کردیم . و در آخر به “\” ها رسیدیم. اکنون بعضی از پر کاربرد ترین از “\” ها رو میگم

آموزش C++ قسمت نهم

#include < iostream >
using namespace std;
void main(){
  cout << "Tab\t New line\nbeep\a I want to display\\ or display \' or \" ";
}

آموزش C++ قسمت نهم

خب حالا می خوام بحث جدیدی رو شروع کنم

آرایه ها :

آرایه چیه اصلا ؟

ببینید ما تا اینجا با متغیر ها آشنا شدیم . میدونیم که متغیری بلفرض به اسم number که از نوع Int هست در یک زمان  فقط و فقط میتونه یک مقدار رو داشته باشه . حالا اگه ما مجموعه ای از اعداد داشته باشیم . اون موقع تکلیف چیه ؟

اینجاست که بحث آرایه ها پیش اومد .

آرایه : مجموعه ای از داده های مرتبط به همه فقط از یک نوع می باشند .

دقت کنید در سی ++ فقط میتونند از یک نوع باشند .

مثلا اگه من یه سری عدد دارم  {1,2,3,4} در بین این اعداد کاراکتری مثل A نمینونه قرار بگیره . چرا ؟ چون از یک نوع نیسنتد .

حالا چه جور این آرایه رو به کامپایلر معرفی می کنیم ؟

نوع داده اسم آرایه [ میزان فضای مورد نیاز ];

مثلا

 int numbers [50];

این به کامپایلر ما میگه که من یک ارایه ای دارم از اعداد  صحیح که میتونه 50 عدد از این نوع رو در خودش جای بده .

حالا اگه بخوایم یک آرایه رو مقدار دهی کنیم به چه صورت عمل می کنیم ؟

یک روش اینه که ما از قبل به آرایه مقدار بدیم به این صورت : 

int numbers [3] = { 60, 12, 56 } ;

حالا اگه بخوایم این مقادیر رو از حافظه بخونیم به چه صورته ؟

بگذارید یک شما ( Schema ) از یک آرایه بهتون نشون بدم تا درکش کنید

آموزش C++ قسمت نهم

ببینید الان ارایه numbers به این صورت هست . ارایه ای با 3 خانه که اعدادمون در اون قرار دارند .

اما اگه یه کم به عکس دقت کنید شروع خونه ها از 0 شروع شده نه 1 !!!

یعنی شما اگه میخواید ببینید که اولین خونه از آرایتون چیه باید به خونه شماره ی 0 تون مراجعه کنید که این طور مینویسیم .

 numbers[0];

این یعنی مقدار خونه شماره اول رو به من برگردون .

بگذارید برنامه همین مثال رو بنویسیم .

#include < iostream >
#include <conio.h>
using namespace std;
void main(){
  int  numbers[3] = { 60, 12, 56 };
  cout << numbers[0] << endl;
  cout << numbers[1] << endl;
  cout << numbers[2] << endl;
  _getch();
}

خب همون طور که می بینید من اول آرایه numbers رو تعریف کردم برای 3 عدد صحیح و مقدار دهیشون کردم .

بعد در خط بعدی مقدار خونه اول را در خروجی چاپ کردم .

 numbers[0]

بعد در خط بعدی مقدار خونه دوم رو در خروجی چاپ کردم

 numbers[1]

و در خط بعدی مقدار خونه سوم رو در خروچی چاپ کردم

 numbers [2]

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

اما در این برنامه دو نکته دیگه هم وجود داره :

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

#include < iostream >
#include <conio.h>
using namespace std;
void main(){
  int  numbers[3] = { 60, 12, 56 };
  for (int i = 0; i < 3; i++)
    cout << numbers[i] << endl;
  _getch();
}

من الان مستقیما آرایه خودم رو مقدار دهی کردم . 

حالا اگه بخوام این کار توسط کاربر صورت بگیره باید چه کنم ؟  یعنی کاربر عدد هارو وارد کنه چه کنم . حکم چیست ؟

باید بگم که اولا حکم گشنیزه . بعدش از کاربر میپرسیم که تعداد  اعداد ی رو که میخوای   وارد کنی و سپس به اون تعداد ، توسط حلقه for ارایه رو مقدار دهی میکنیم .

#include < iostream >
#include <conio.h>
using namespace std;
void main(){
  int element;
  int  numbers[5];
  cout << "Enter number of elements ( this must less than 6 ) ";
  cin >> element;
  if (element < 6){
    for (int i = 0; i < element; i++){
      cout << "Enter element " << i + 1 << " ) ";
      cin >> numbers[i];
    }
    for (int i = 0; i <element; i++)
      cout << numbers[i] << endl;
  }
  else 
    cout << " Wrong input ! ";
  _getch();
}

خب حالا میخوام در مورد بحث دیگه ای صحبت کنم به نام رشته :

رشته رو من چه تعریف کرده بودم قبلا ؟

مجموعه ای از کاراکتر ها ! درسته ؟

خب ؟ پس ما میتونیم یه رشته رو در یک آرایه قرار بدیم .

برای یاد آوری عرض می کنم . که مثلا “ali” یک رشته با 3 کاراکتر است .

برای اعلان رشته های از نوع char  هم مثل بقیه آرایه ها عمل میکنیم . 

char name [4] = “ali”;

اینجا ارایه ای داریم از نوع کاراکتری که 4 عنصر رو میتونه بگیره و هم به طور پیش فرض هم مقدار ali رو درون خودش داره . اما ali که 3 کاراکتر بیشتر نیست پس چرا من 4 تا فضا خواستم ؟

جواب : به خاطر اینکه کامپایلر برای اینکه ته رشته رو بتونه مشخص کنه آخرین عنصر رو null در نظر میگیره . اما null  چیه ؟

null  یعنی هیچ . پوچ . نمادش هم ‘\0’ اینه . البته اگه به صورت NULL هم بنویسید کامپایلر ازتون قبول میکنه .

برای همین من موقع اعلان یک ارایه هر اسمی که در نظرتون دارید یک خونه بیشتر بهش اختصاص بدید که null در اون قرار بگیره .

#include < iostream >
#include <conio.h>
using namespace std;
void main(){
  char name[4] = "ali";
  for (int i = 0; name[i] != '\0'; i++)
    cout << name[i];
  cout << endl;
  _getch();}

خب همون طور که مشاهده می کنید من شرط حلقه for رو برای نمایش آرایه name   رو این گرفتم که تا وقتی عملیات چاپ رو ادامه بده که به خونه null نرسیدی . هر وقت به این خونه رسیدی از حلقه خارج شو !

حالا اگه بخواهیم اسمی رو از کاربر بگیریم به چه صورت عمل می کنیم ؟

#include < iostream >
#include <conio.h>
using namespace std;
void main(){
  char name[50];
  char ch = '1';
  int counter = 0;
  ch = _getche();
  do {
    name[counter++] = ch;
    ch = _getche();
  } while (ch != 13);
  cout << endl;
  for (int i = 0; i < counter ; i++)
    cout << name[i] ;
  cout << endl;
  _getch();
}

خب توضیح میدم من در ابتدا یه آرایه به طول 50 گرفتم . بعد توسط _getche() کاراکتر هارو دونه به دونه از کیبورد میگیرم و در متغیر ch قرار میدم .

سوال 1 : چرا تو متغیر ch قرار میدی ؟

جواب : چون میخوام هر دفعه چک کنم ببینم آیا ch برابر با کد اسکی Enter شده یا نه ؟

( کد اسکی اینتر 13 می باشد )

سوال دوم : چرا مقدار اولیه 1 رو به ch دادی ؟

جواب : چون کامپایلر به این موضوع ایراد میگیره که اگه میخوای ch  رو توسط getche() مقدار دهی کنی حتما متغیرت باید یک مقدار اولیه ای داشته باشه که من ch رو برابر با 1 گذاشتم .

چیز خاصی دیگه ای تو این کد نمی بینم .

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

برای امشب دیگه کافیه .

خسته نباشید . خدا نگهدار