‫داده‬ ‫انواع‬
‫داده‬ ‫انواع‬
mrajaati@yahoo.com
‫رجعتی‬ ‫میثم‬
‫گرمسار‬ ‫دانشگاه‬
-
‫کامپیوتر‬ ‫مهندسی‬ ‫دانشکده‬
-
‫کامپیوتر‬ ‫علوم‬ ‫گروه‬
‫پاییز‬
1401
2
‫از‬
55 ‫داده‬ ‫انواع‬
‫مطالب‬ ‫فهرست‬

‫ثابتها‬

‫متغیرها‬

‫گرها‬ ‫اشاره‬ ‫مفهوم‬

‫اشاره‬
‫ثابتها‬ ‫و‬ ‫گرها‬

‫و‬ ‫ها‬ ‫آرایه‬
‫اشاره‬
‫گرها‬

‫گرها‬ ‫اشاره‬ ‫و‬ ‫ها‬ ‫تابع‬
2
‫از‬
28
3
‫از‬
55 ‫داده‬ ‫انواع‬
‫مقدمه‬
‫در‬ ‫ها‬ ‫زبان‬ ‫بین‬ ‫اصلی‬ ‫تفاوت‬
‫انواع‬
،‫مجاز‬ ‫های‬‫داده‬
‫نوع‬
‫اعمال‬
‫و‬ ‫موجود‬
‫برای‬ ‫شده‬ ‫فراهم‬ ‫روشهای‬
‫ترتیب‬ ‫کنترل‬
‫کارگیری‬ ‫به‬
‫رو‬ ‫بر‬ ‫اعمال‬
‫ی‬
‫ها‬‫داده‬
‫باشد‬ ‫می‬
.
‫تعری‬ ‫امکان‬ ‫نویس‬ ‫برنامه‬ ‫به‬ ‫تا‬ ‫کند‬ ‫فراهم‬ ‫را‬ ‫امکاناتی‬ ‫باید‬ ‫زبان‬
‫انواع‬ ‫ف‬
‫را‬ ‫جدید‬ ‫داده‬
‫بدهد‬
‫انواع‬
‫ها‬‫داده‬
:
.1
‫اصلی‬ ‫های‬‫داده‬
:
‫سازی‬ ‫شبیه‬ ‫کامپیوتر‬ ‫افزار‬ ‫سخت‬ ‫طریق‬ ‫از‬
‫می‬
‫شود‬
.
‫شود‬ ‫می‬ ‫دستکاری‬ ‫منفرد‬ ‫واحد‬ ‫یک‬ ‫صورت‬ ‫به‬
.
‫یافته‬ ‫ساخت‬ ‫های‬‫داده‬ 2
:
‫میشود‬ ‫سازی‬ ‫شبیه‬ ‫افزار‬ ‫نرم‬ ‫توسط‬
.
‫اشیا‬ ‫از‬ ‫ای‬ ‫محموعه‬ ‫شامل‬ ‫داده‬ ‫ساختمان‬
‫دیگر‬ ‫داده‬
‫است‬
.
4
‫از‬
55 ‫داده‬ ‫انواع‬
‫مقدمه‬
‫داده‬ ‫شی‬ ‫هر‬
‫زندگی‬ ‫دوران‬ ‫دارای‬
‫است‬
.
‫از‬ ‫برخی‬
‫اشیاء‬
‫وجود‬ ‫اجرا‬ ‫شروع‬ ‫در‬ ‫داده‬
‫و‬ ‫دارند‬
‫برخی‬
‫ایجاد‬ ‫اجرا‬ ‫زمان‬ ‫پویا‬ ‫صورت‬ ‫به‬
‫میشود‬
‫از‬ ‫برخی‬
‫اشیاء‬
‫روند‬‫می‬ ‫بین‬ ‫از‬ ‫اجرا‬ ‫زمان‬ ‫در‬ ‫داده‬
‫و‬
‫برخی‬
‫ماند‬ ‫می‬ ‫باقی‬ ‫برنامه‬ ‫خاتمه‬ ‫تا‬
5
‫از‬
55 ‫داده‬ ‫انواع‬
‫مقدمه‬
‫اشیا‬ ‫های‬ ‫ویژگی‬
‫داده‬
:
.
‫نوع‬ 1
:
‫مجموعه‬
‫مقادیر‬
‫نماید‬ ‫اختیار‬ ‫تواند‬ ‫می‬ ‫داده‬ ‫شی‬ ‫آن‬ ‫که‬ ‫هایی‬ ‫داده‬
.
‫مکان‬ 2
:
‫تقید‬
‫به‬
‫حافظه‬ ‫در‬ ‫مکانی‬
.
‫مقدار‬ 3
:
‫انتساب‬ ‫عمل‬ ‫نتیجه‬
.
‫نام‬ 4
:
‫رجوع‬ ‫اجرا‬ ‫زمان‬ ‫در‬ ‫داده‬ ‫شی‬ ‫به‬ ‫آنها‬ ‫توسط‬ ‫که‬ ‫نام‬ ‫چند‬ ‫یا‬ ‫یک‬
‫شو‬‫می‬
‫د‬
.
‫اجزا‬ 5
:
‫شی‬ ‫تقید‬
‫داده‬ ‫شی‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫به‬ ‫داده‬
‫دیگر‬
.
‫اعمال‬ 6
:
‫که‬ ‫کند‬‫می‬ ‫مشخص‬ ‫داده‬ ‫نوع‬ ‫برای‬ ‫شده‬ ‫تعریف‬ ‫های‬ ‫عمل‬ ‫مجموعه‬
‫داده‬ ‫اشیا‬ ‫چگونه‬
‫نوع‬ ‫آن‬
‫شود‬ ‫دستکاری‬ ‫تواند‬ ‫می‬
: int int
: int int int
UnaryOp
BinOp

 
6
‫از‬
55 ‫داده‬ ‫انواع‬
‫ثابتها‬
‫یک‬ ‫با‬ ‫هستند‬ ‫هایی‬ ‫داده‬ ‫شی‬ ‫ها‬ ‫ثابت‬
‫نام‬
‫که‬
‫به‬
‫تغییر‬ ‫قابل‬ ‫زندگی‬ ‫دوران‬ ‫طول‬ ‫در‬ ‫که‬ ‫شوند‬‫می‬ ‫مقید‬ ‫مقادیری‬ ‫یا‬ ‫مقدار‬
‫ن‬
‫یستند‬
.
‫ثابت‬ ‫انواع‬
‫ها‬
:
.1
‫ثابت‬
‫لفظی‬
:
‫آ‬ ‫مقدار‬ ‫شده‬ ‫نوشته‬ ‫نمایش‬ ‫همان‬ ‫آن‬ ‫نام‬ ‫که‬ ‫است‬ ‫ثابتی‬
‫ن‬
‫است‬
.
‫عدد‬ ‫مانند‬
“25”
.
‫برنامه‬ ‫توسط‬ ‫شده‬ ‫تعریف‬ ‫ثابت‬ 2
‫نویسی‬
:
‫تو‬ ‫آن‬ ‫نام‬ ‫که‬ ‫است‬ ‫ثابتی‬
‫برنامه‬ ‫سط‬
‫انتخاب‬ ‫آن‬ ‫داده‬ ‫شی‬ ‫تعریف‬ ‫در‬ ‫نویس‬
‫میشود‬
.
#define one 1
#define MAX 50
7
‫از‬
55 ‫داده‬ ‫انواع‬
‫دودویی‬ ‫های‬ ‫داده‬
‫نوع‬
‫داده‬ ‫اشیا‬ ‫شامل‬ ‫دودویی‬ ‫داده‬
‫که‬ ‫است‬
‫مقدار‬ ‫دو‬ ‫از‬ ‫یکی‬
‫غلط‬ ‫یا‬ ‫درست‬
‫را‬
‫دا‬
‫رند‬
.
‫منطقی‬ ‫عملگرهای‬ ،‫ای‬ ‫مقایسه‬ ‫عملگرهای‬
8
‫از‬
55 ‫داده‬ ‫انواع‬
‫دودویی‬ ‫های‬ ‫داده‬
‫نوع‬
‫داده‬ ‫اشیا‬ ‫شامل‬ ‫دودویی‬ ‫داده‬
‫که‬ ‫است‬
‫مقدار‬ ‫دو‬ ‫از‬ ‫یکی‬
‫غلط‬ ‫یا‬ ‫درست‬
‫را‬
‫دا‬
‫رند‬
.
‫عملگرهای‬
‫بیتی‬
‫عملگر‬
‫نماد‬
‫و‬
And
&
‫یا‬
Or
|
‫انحصاری‬ ‫یای‬
xor
^
‫نقیض‬
not
~
‫راست‬ ‫به‬ ‫شیفت‬
right shift
>>
‫چپ‬ ‫به‬ ‫شیفت‬
left shift
<<
9
‫از‬
55 ‫داده‬ ‫انواع‬
‫عددی‬ ‫های‬ ‫داده‬
.
‫اعداد‬ 1
‫صحیح‬
.
‫اعشاری‬ ‫اعداد‬ 2
(
‫شناور‬ ‫ممیز‬ ‫یا‬ ‫ثابت‬ ‫ممیز‬
)
.
‫مختلط‬ ‫اعداد‬ 3
10
‫از‬
55 ‫داده‬ ‫انواع‬
‫متغیرها‬
‫ال‬ ‫نویسی‬ ‫برنامه‬ ‫زبانهای‬ ‫در‬ ‫معموال‬
‫متغیر‬ ‫هر‬ ‫از‬ ‫استفاده‬ ‫از‬ ‫قبل‬ ‫است‬ ‫زم‬
،
‫داده‬ ‫نوع‬
‫مشخص‬ ،‫شود‬ ‫ذخیره‬ ‫متغیر‬ ‫در‬ ‫است‬ ‫قرار‬ ‫که‬ ‫ای‬
‫شود‬
.
‫نامند‬ ‫می‬ ‫متغیر‬ ‫تعریف‬ ً‫ا‬‫اصطالح‬ ‫را‬ ‫کار‬ ‫این‬
.
;
‫اند‬ ‫شده‬ ‫جدا‬ ‫هم‬ ‫از‬ ‫کاما‬ ‫با‬ ‫که‬ ‫متغیرها‬ ‫نام‬
‫نوع‬
‫متغیر‬
‫متغییرها‬ ‫نام‬ ‫ویژگی‬
:
•
‫کلمات‬
‫نباشد‬ ‫زبان‬ ‫کلیدی‬
•
‫ترکیبی‬
‫باشد‬ ‫اعداد‬ ‫و‬ ‫حروف‬ ‫از‬
•
‫یک‬
‫شود‬ ‫شروع‬ ‫حرف‬
•
‫عالوه‬
‫مثل‬ ‫دیگر‬ ‫نمادهای‬ ‫برخی‬ ‫توان‬ ‫می‬ ‫اعداد‬ ‫و‬ ‫حروف‬ ‫بر‬
_
‫نام‬ ‫در‬ ‫نیز‬
‫کرد‬ ‫استفاده‬ ‫متغیرها‬
•
‫زبانها‬ ‫معموال‬
‫بزرگ‬ ‫حروف‬ ‫به‬
‫وکوچک‬
‫حساس‬
‫هستند‬
.
 int x12_s;
■ int cin, _x12s, 12x;
11
‫از‬
55 ‫داده‬ ‫انواع‬
‫اعالن‬
‫متغیرها‬
Int
Float
Double
char
bool
‫صحیح‬
‫اعشاری‬
‫مضاعف‬ ‫دقت‬ ‫با‬ ‫اعشاری‬
‫کاراکتر‬
1
‫دودویی‬
1
Data type size signed names;
int long unsigned A, aa2, Aa2 ;
‫را‬ ‫ای‬ ‫داده‬ ‫اشیا‬ ‫نوع‬ ‫و‬ ‫نام‬ ‫مورد‬ ‫در‬ ‫اطالعاتی‬ ‫که‬ ‫است‬ ‫برنامه‬ ‫از‬ ‫حکمی‬ ‫اعالن‬
‫اختیار‬ ‫در‬ ‫باشد‬ ‫می‬ ‫نیاز‬ ‫مورد‬ ‫اجرا‬ ‫طول‬ ‫در‬ ‫که‬
‫میدهد‬ ‫قرار‬ ‫مترجم‬
.
.
‫صریح‬ ‫اعالن‬ 1
;
‫اند‬ ‫شده‬ ‫جدا‬ ‫هم‬ ‫از‬ ‫کاما‬ ‫با‬ ‫که‬ ‫متغیرها‬ ‫نام‬
‫نوع‬
‫متغیر‬
.
‫اعالن‬ 2
‫ضمنی‬
:
‫بسیاری‬
‫ن‬ ‫را‬ ‫فرض‬ ‫پیش‬ ‫یا‬ ‫ضمنی‬ ‫های‬ ‫اعالن‬ ‫زبانها‬ ‫از‬
‫یز‬
‫فقط‬ ‫که‬ ‫آورند‬‫می‬ ‫فراهم‬
‫انتساب‬
‫می‬ ‫آن‬ ‫اعالن‬ ‫باعث‬ ‫متغیر‬ ‫به‬ ‫مقدار‬
‫ش‬
‫ود‬
.
12
‫از‬
55 ‫داده‬ ‫انواع‬
‫اعالن‬
‫متغیرها‬
‫اعالن‬ ‫اهداف‬
‫ها‬
:
.1
‫های‬ ‫نمایش‬ ‫انتخاب‬
‫حافظه‬
.
‫حافظه‬ ‫مدیریت‬ 2
:
‫زندگی‬ ‫مدت‬
‫داده‬ ‫اشیاء‬
.
‫اعمال‬ 3
‫چندریختی‬
:
‫مانند‬ ‫خاصی‬ ‫های‬ ‫نماد‬
‫جمع‬
)+(
‫های‬ ‫عملیات‬
‫اعشاری‬ ‫جمع‬ ‫یا‬ ‫صحیح‬ ‫جمع‬ ‫مانند‬ ‫کند‬‫می‬ ‫پشتیبانی‬ ‫را‬ ‫متفاوتی‬
‫چنین‬ ،
‫نماد‬
‫عملگری‬
‫می‬ ‫شده‬ ‫پربار‬ ‫را‬
‫نامند‬
.
.
‫بررسی‬ 4
‫نوع‬
:
‫است‬ ‫این‬ ‫نویس‬ ‫برنامه‬ ‫دیدگاه‬ ‫از‬ ‫اعالنها‬ ‫هدف‬ ‫مهمترین‬
‫که‬
‫ایجاد‬ ‫پویا‬ ‫جای‬ ‫به‬ ‫ایستا‬ ‫صورت‬ ‫به‬ ‫را‬ ‫نوع‬ ‫بررسی‬ ‫امکان‬
‫نماید‬
‫مانند‬ ‫ها‬ ‫زبان‬ ‫برخی‬
C
‫اجازه‬
‫نوع‬ ‫تبدیل‬
‫را‬
‫می‬
‫مانند‬ ‫ها‬ ‫زبان‬ ‫برخی‬ ‫ولی‬ ‫دهند‬
‫پاسکال‬
‫اجازه‬
‫را‬ ‫نوع‬ ‫تبدیل‬
‫دهند‬ ‫نمی‬
13
‫از‬
55 ‫داده‬ ‫انواع‬
‫اعالن‬
‫متغیرها‬
–
‫نوع‬ ‫تبدیل‬
‫انجام‬
‫عملیات‬
‫محاسباتی‬
‫مانند‬
‫جمع‬
‫دو‬
‫عدد‬
‫صحیح‬
‫با‬
‫جمع‬
‫دو‬
‫عدد‬
‫اعشاری‬
‫متفاوت‬
‫است‬
.
‫در‬
‫زبان‬
‫های‬
‫برنامه‬
‫نویسی‬
‫این‬
‫تفاوت‬
‫به‬
‫صورت‬
‫خودکار‬
‫لحاظ‬
‫شده‬
‫و‬
‫الزم‬
‫ن‬
‫یست‬
‫برنامه‬
‫نویس‬
‫دغدغه‬
‫ای‬
‫در‬
‫این‬
‫خصوص‬
‫داشته‬
‫باشد‬
.
‫در‬
‫تعیین‬
‫مود‬
‫انجام‬
،‫محاسبات‬
‫در‬
‫مواردی‬
‫که‬
‫عملوندهای‬
‫یک‬
‫عبارت‬
‫محاسباتی‬
‫از‬
‫ا‬
‫نواع‬
‫مختلف‬
،‫باشد‬
‫نوعی‬
‫انتخاب‬
‫می‬
‫شود‬
‫که‬
‫شامل‬
‫سایر‬
‫انواع‬
‫نیز‬
‫باشد‬
.
‫اما‬
‫این‬
‫قانون‬
‫گاهی‬
‫محاسبات‬
‫را‬
‫با‬
‫مشکل‬
‫مواجه‬
‫می‬
‫کند‬
.
‫به‬
‫طور‬
‫مثال‬
x
‫یک‬
‫متغیر‬
‫از‬
‫نوع‬
‫اعشاری‬
‫است‬
‫اما‬
‫حاصل‬
x = 1 / 2
‫برابر‬
‫صفر‬
‫است‬
‫چون‬
‫عدد‬
1
‫و‬
2
‫هر‬
‫دو‬
‫صحیح‬
‫هستند‬
‫و‬
‫حاصل‬
‫تقسیم‬
‫صحیح‬
‫خواهد‬
‫بود‬
.
‫دو‬
‫راهکار‬
‫برای‬
‫اصالح‬
‫آن‬
‫وجود‬
‫دارد‬
.
.
‫تغییر‬ 1
‫مود‬
‫متغییرها‬
x = 1.0 / 2
.
‫استفاده‬ 2
‫از‬
‫قالب‬
‫ریزی‬
‫نوع‬
typecasting
x = (float) 1 / 2
14
‫از‬
55 ‫داده‬ ‫انواع‬
‫شمارشی‬ ‫های‬‫داده‬
‫نوع‬
‫داده‬
‫شمارشی‬
‫یک‬
‫لیست‬
‫ترتیبی‬
‫از‬
‫مقادیر‬
‫مجزا‬
،‫است‬
‫برنامه‬
‫نو‬
‫یس‬
‫نام‬
‫های‬
‫لفظی‬
‫را‬
‫به‬
‫عنوان‬
‫مقادیر‬
‫متغیر‬
‫و‬
‫ترتیب‬
‫آنها‬
‫را‬
‫با‬
‫استفاده‬
‫از‬
‫اعال‬
‫ن‬
‫تعریف‬
‫می‬
‫نماید‬
.
15
‫از‬
55 ‫داده‬ ‫انواع‬
‫کاراکترها‬
‫رشته‬
‫کاراکتر‬
‫ها‬
‫در‬
‫زبان‬
‫های‬
‫مختلف‬
‫ممکن‬
‫است‬
‫به‬
‫صورتهای‬
‫مختلف‬
‫پیاده‬
‫سازی‬
‫شوند‬
.
.
‫در‬ 1
‫زبان‬
‫هایی‬
‫مانند‬
‫پرولوگ‬
‫به‬
‫صورت‬
‫مستقیم‬
‫از‬
‫طریق‬
‫نوع‬
‫داده‬
‫ر‬
‫شته‬
‫کاراکتری‬
‫و‬
.
‫در‬ 2
‫زبان‬
‫هایی‬
‫مانند‬
‫سی‬
‫به‬
‫صورت‬
‫آرایه‬
‫خطی‬
‫از‬
‫کاراکترها‬
‫در‬
‫نظر‬
‫گرفته‬
‫می‬
‫شود‬
16
‫از‬
55 ‫داده‬ ‫انواع‬
‫آرایه‬
‫های‬‫داده‬ ‫سازی‬‫ذخیره‬ ‫برای‬ ‫نام‬ ‫یک‬ ‫تحت‬ ‫که‬ ‫گویند‬‫می‬ ‫ای‬‫داده‬ ‫ساختمان‬ ‫به‬
‫شود‬‫می‬ ‫استفاده‬ ‫نوع‬ ‫هم‬
.
‫آرایه‬
‫ثابتی‬ ‫تعداد‬
‫از‬ ‫متغیر‬
‫داده‬ ‫نوع‬ ‫یک‬
‫تحت‬ ‫و‬
‫نام‬ ‫یک‬
‫است‬
.
Type name[num];
char A[10];
char A[10]= {‘R’, ‘a’, ‘j’, ‘a’, ‘a’, ‘t’, ‘i’, ‘0’};
‫هر‬
‫یک‬
‫از‬
‫متغیرهای‬
‫درون‬
‫آرایه‬
‫با‬
‫یک‬
‫شماره‬
‫به‬
‫نام‬
‫اندیس‬
‫از‬
‫یکدیگر‬
‫م‬
‫تمایز‬
‫شوند‬‫می‬
.
A[2]=>‘j’
17
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬
‫آدرس‬ ‫محتوا‬
& *
FF200
X FF201 10
FF202
FF203
FF204
P FF205
FF206
‫نیست‬ ‫ما‬ ‫اختیار‬ ‫در‬ ‫ما‬ ‫اختیار‬ ‫در‬
‫ا‬
‫ست‬
*P
:
‫که‬ ‫جایی‬ ‫محتوای‬
P
‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
&P
:
‫آدرس‬
P
18
‫از‬
55 ‫داده‬ ‫انواع‬
‫معمولی‬ ‫متغییر‬ ‫تعریف‬
‫آدرس‬ ‫محتوا‬
& *
FF200
X FF201
FF202
FF203
FF204
FF205
FF206
int x;
‫نیست‬ ‫ما‬ ‫اختیار‬ ‫در‬ 10
x = 10;
‫ما‬ ‫اختیار‬ ‫در‬
‫ا‬
‫ست‬
19
‫از‬
55 ‫داده‬ ‫انواع‬
‫متغییر‬ ‫تعریف‬
‫گر‬ ‫اشاره‬ ‫نوع‬ ‫از‬
‫آدرس‬ ‫محتوا‬
& *
FF200
X FF201
FF202
FF203
FF204
P FF205
FF206
int X;
*P
:
‫که‬ ‫جایی‬ ‫محتوای‬
P
‫کند‬ ‫می‬ ‫چاپ‬ ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
.
‫آدرس‬
P
‫میکند‬ ‫چاپ‬ ‫را‬
.
10
X = 10;
int *P;
P = &X;
cout<< &P;
cout<< *P;
‫محتوای‬
P
‫میکند‬ ‫چاپ‬ ‫را‬
.
cout<< P;
20
‫از‬
55 ‫داده‬ ‫انواع‬
‫گر‬ ‫اشاره‬ ‫نوع‬ ‫از‬ ‫متغییر‬ ‫مثال‬
& *
n
m 3
P
int n, m=3, *P;
P =&m;
n = *P;
*P = 10;
cout<< &P;
cout<< P;
cout<< *P;
3
10
21
‫از‬
55 ‫داده‬ ‫انواع‬
‫گر‬ ‫اشاره‬ ‫نوع‬ ‫از‬ ‫متغییر‬ ‫مثال‬
& *
b
a 5
P
S
int b, a=5, *P, *S;
P = &a;
S = &b;
*S = *P;
cout<< *S;
5
22
‫از‬
55 ‫داده‬ ‫انواع‬
‫گر‬ ‫اشاره‬ ‫نوع‬ ‫از‬ ‫متغییر‬ ‫مثال‬
& *
b
a 5
P
S
int b, a=5, *P, *S;
P = &a;
S = &b;
S = P;
cout<< *S;
3
23
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬
‫ها‬ ‫ثابت‬ ‫و‬
const int a=5;
int *P;
P = &a;
a = 20; //error
*P = 20; //OK
‫محتوای‬
‫که‬ ‫جایی‬
P
‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
‫می‬
‫دهد‬ ‫تغییر‬ ‫تواند‬
& *
a 5
P
20
‫ای‬ ‫خانه‬ ‫مشابه‬
‫باشد‬ ‫می‬ ‫در‬ ‫دو‬ ‫با‬
24
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬
‫ها‬ ‫ثابت‬ ‫و‬
const int *P;
& *
a 5
P
const int b=10, a=5;
const int *P;
P = &a; //OK
*P = 20; //error
‫خودش‬ ‫مقدار‬
،
‫تغییر‬ ‫تواند‬ ‫می‬
‫کند‬
‫اما‬
‫محتوای‬
‫که‬ ‫جایی‬
P
‫دهد‬ ‫تغییر‬ ‫تواند‬ ‫نمی‬ ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
25
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬
‫ها‬ ‫ثابت‬ ‫و‬
int * const P;
& *
b 10
a 5
P
const int b=10, a=5;
int * const P = &a;
P = &b; //error
*P = 20; //OK
‫نمی‬ ،‫خودش‬ ‫مقدار‬
‫تغییر‬ ‫تواند‬
‫کند‬
‫اما‬
‫محتوای‬
‫که‬ ‫جایی‬
P
‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
‫می‬
‫دهد‬ ‫تغییر‬ ‫تواند‬
20
‫ها‬ ‫آرایه‬ ‫گفت‬ ‫توان‬ ‫می‬
‫از‬
‫هستند‬ ‫گر‬ ‫اشاره‬ ‫نوع‬ ‫این‬
26
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬
‫ها‬ ‫ثابت‬ ‫و‬
const int * const P;
& *
b 10
a 5
P
const int b=10, a=5;
const int * const P = &a;
P = &b; //error
*P = 20; //error
‫نمی‬ ،‫خودش‬ ‫مقدار‬
‫تغییر‬ ‫تواند‬
‫کند‬
‫محتوای‬ ‫و‬
‫که‬ ‫جایی‬
P
‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
‫نمی‬ ‫نیز‬
‫دهد‬ ‫تغییر‬ ‫تواند‬
27
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬
‫گر‬ ‫اشاره‬ ‫به‬
& *
a 5
P
S
T
int a=5;
int *P = &a;
int **S = &P;
int ***T = &S;
28
‫از‬
55 ‫داده‬ ‫انواع‬
‫عملیا‬ ‫و‬ ‫گرها‬ ‫اشاره‬
‫ت‬
‫محاسباتی‬
P = P – S
P = P + 3 ‫توان‬ ‫می‬ ‫فقط‬ ‫را‬ ‫گرها‬ ‫اشاره‬
.
‫کرد‬ ‫کم‬ ‫هم‬ ‫از‬ 1
.
‫کرد‬ ‫تفریق‬ ‫یا‬ ‫جمع‬ ‫مثبت‬ ‫عدد‬ ‫یک‬ ‫با‬ 2
‫را‬ ‫گر‬ ‫اشاره‬ ‫نوع‬ ‫با‬ ‫متناسب‬ ‫عملیات‬ ‫گونه‬ ‫هر‬ ‫باشید‬ ‫داشته‬ ‫توجه‬
‫دهید‬ ‫انجام‬ ‫آن‬ ‫محتوای‬ ‫روی‬ ‫توانید‬ ‫می‬
*w = *p / *q
29
‫از‬
55 ‫داده‬ ‫انواع‬
‫ا‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫کاربر‬ ‫از‬ ‫آرایه‬ ‫یک‬ ‫محتوای‬ ‫گرفتن‬
‫گر‬ ‫شاره‬
int *P, array[10];
for (P = array ; P< &array[10] ; P++)
cin>>*P;
‫است‬ ‫باالتر‬ ‫گرها‬ ‫اشاره‬ ‫سرعت‬
.
30
‫از‬
55 ‫داده‬ ‫انواع‬
‫گر‬ ‫اشاره‬ ‫و‬ ‫آرایه‬
int *P, array[10];
for (P = array ; P< &array[10] ; P++)
cin>>*P;
P = array // P = &array[0]
cout<<P+2; // &array[2]
cout <<*(P+2); // array[2]
cout <<P[2];
cout << array[2];
‫باشد‬ ‫می‬ ‫آرایه‬ ‫عنصر‬ ‫اولین‬ ‫به‬ ‫گر‬ ‫اشاره‬ ‫آرایه‬ ‫نام‬
31
‫از‬
55 ‫داده‬ ‫انواع‬
‫گر‬ ‫اشاره‬ ‫و‬ ‫آرایه‬
#include <iostream>
using namespace std;
int main()
{
const int n = 5;
int arr[ n ] , i ;
cout << "n Enter " << n << " values : " ;
for( i = 0 ; i < n ; i ++ )
cin >> arr[ i ] ;
cout << "n The reverse output is :";
for(i = n - 1 ; i >= 0 ; i -- )
cout << *( arr + i ) << " ";
}
32
‫از‬
55 ‫داده‬ ‫انواع‬
‫ا‬ ‫آرایه‬
‫ی‬
‫گرها‬ ‫ازاشاره‬
char *P[4] = {“ali”, “hasan”, “sara”, “fatema”}
‫است‬ ‫گر‬ ‫اشاره‬ ‫یک‬ ‫آن‬ ‫خانه‬ ‫هر‬ ‫که‬ ‫ایست‬ ‫ای‬ ‫آرایه‬
P[0]  a l i 0
P[1]  h a s a n 0
P[2]  s a r a 0
P[3]  f a t e m a 0
33
‫از‬
55 ‫داده‬ ‫انواع‬
‫ا‬ ‫آرایه‬
‫ی‬
‫گرها‬ ‫ازاشاره‬
//char *P[4] = {“ali”, “hasan”, “sara”, “fatema”}
#include <iostream>
using namespace std;
int main()
{ const int k = 4;
char *list[ k ] = {“ali”, “hasan”, “sara”, “fatema”};
cout << "The strings in array are : " << endl;
for (int i = 0; i < k; i ++)
cout << list [ i ] << endl;
cin.get();
}
34
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬ ‫و‬ ‫ها‬ ‫رشته‬
char *P = “Meysam”;
for ( ; *P ; P++)
if(*P >= ‘a’ && *P <= ‘z’)
cout<<*P;
‫حرف‬ ‫گر‬ ‫اشاره‬
M
‫رشته‬ ‫در‬
Meysam
‫میکند‬ ‫اشاره‬
35
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬ ‫و‬ ‫ها‬ ‫رشته‬
#include <iostream>
using namespace std;
void ascii_to_int(int *, char *);
int main()
{
int number ;
char s[10] ;
cout << "nEnter numeric string : ";
cin >> s ;
ascii_to_int(&number, s) ;
cout << "nNumeric value is:" << number ;
cin.get();
}
36
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬ ‫و‬ ‫ها‬ ‫رشته‬
void ascii_to_int(int *value, char *str)
{ int sign = 1 ;
*value = 0 ;
while(*str == ‘ ')
str++ ;
if(*str== '-' || *str == '+')
sign = (*str ++ == '-') ? -1 : 1;
while(*str) //test all character
{ if((*str >= '0') && (*str <= '9'))
*value = (*value * 10) + (*str ++ -48) ;
else //there is an illegal character
{ cout << "nWatning : the <" << *str << "> is invalid character.n";
break ;
} //end of else
} // end of while
*value *= sign ;
}
37
‫از‬
55 ‫داده‬ ‫انواع‬
‫تابع‬ ‫ورودی‬ ‫پارامتر‬ ‫و‬ ‫گر‬ ‫اشاره‬
.
‫فراخوانی‬ 1
‫مقدار‬ ‫با‬
.
‫فراخوانی‬ 2
‫با‬
‫ارجاء‬
(
‫مرجع‬ ‫پارامتر‬
)
void func1(int x)
void func1(int &x)
{ x = 10;}
int main()
{…
int a = 5;
func1(a);
cout<<a; //a=10
…}
38
‫از‬
55 ‫داده‬ ‫انواع‬
‫تابع‬ ‫ورودی‬ ‫پارامتر‬ ‫عنوان‬ ‫به‬ ‫گر‬ ‫اشاره‬
void func1(int *x)
{ *x = 10;}
int main()
{…
int a = 5;
func1(&a);
cout<<a; //a=10
…}
39
‫از‬
55 ‫داده‬ ‫انواع‬
‫نوع‬ ‫از‬ ‫تابع‬ ‫ورودی‬ ‫مثال‬
‫گر‬ ‫اشاره‬
#include <iostream>
using namespace std;
void input(int *, int *);
void rect(int, int, int *, int *);
int main()
{ int len, wid, area, perimeter;
input(&len, &wid);
rect(len, wid, &area, &perimeter);
cout << " Length = " << len << " , Width = " << wid;
cout << "n Area = " << area << " , Perimeter = " << perimeter;
}
void input(int *p1, int *p2)
{ cout << " Enter length, width : "; cin >> *p1 >> *p2; }
void rect(int x, int y, int *a, int *p)
{ *a = x * y; *p = 2 * (x + y);}
40
‫از‬
55 ‫داده‬ ‫انواع‬
‫تابع‬ ‫به‬ ‫گر‬ ‫اشاره‬
‫است‬ ‫گری‬ ‫اشاره‬ ‫تابع‬ ‫نام‬
‫است‬ ‫شده‬ ‫ذخیره‬ ‫آنجا‬ ‫در‬ ‫تابع‬ ‫که‬ ‫حافظه‬ ‫از‬ ‫مکانی‬ ‫ابتدای‬ ‫به‬
;
(
‫تابع‬ ‫پارامتهای‬
)
)
‫تابع‬ ‫به‬ ‫گر‬ ‫اشاره‬ ‫نام‬
*
(
‫تابع‬ ‫بازگشتی‬ ‫نوع‬
int (*p) (int, float);
P
‫ورودی‬ ‫پارامتر‬ ‫دو‬ ‫با‬ ‫تابعی‬ ‫هر‬ ‫به‬ ‫میتواند‬
‫آن‬ ‫اول‬ ‫پارامتر‬ ‫نوع‬ ‫که‬
int
‫آن‬ ‫دوم‬ ‫پارامتر‬ ‫نوع‬ ‫و‬
float
‫باشد‬ ‫می‬
‫آن‬ ‫خروجی‬ ‫و‬
int
‫کند‬ ‫اشاره‬ ‫است‬
41
‫از‬
55 ‫داده‬ ‫انواع‬
‫تابع‬ ‫به‬ ‫گر‬ ‫اشاره‬
#include <iostream>
using namespace std;
int func1(int, float){…}
int func2(int, float){…}
int main ()
{
int n, (*P)(int, float);
cin>>n;
P = func1;
cout<< “func1(n,3.14)”<<P(n, 3.14);
P = func2;
cout<< “func2(n,3.14)”<<P(n, 3.14);
}
42
‫از‬
55 ‫داده‬ ‫انواع‬
‫تابع‬ ‫به‬ ‫گر‬ ‫اشاره‬
#include <iostream>
using namespace std;
int func1(int, float){…}
int func2(int, float){…}
int main ()
{
int n, (*P)(int, float), (*q)(int, float);
cin>>n;
P = func1;
cout<< “func1(n,3.14)”<<P(n, 3.14);
q = P;
cout<< “func1(n,3.14)”<<q(n, 3.14);
}
43
‫از‬
55 ‫داده‬ ‫انواع‬
‫پویا‬ ‫متغییرهای‬
‫میگیرد‬ ‫قرار‬ ‫گر‬ ‫اشاره‬ ‫در‬ ‫که‬ ‫محلی‬ ‫آدرس‬ ‫ندارد‬ ‫لزومی‬
.
‫باشد‬ ‫نام‬ ‫دارای‬
& *
a 5
P
& *
5
P
44
‫از‬
55 ‫داده‬ ‫انواع‬
‫پویا‬ ‫حافظه‬ ‫تخصیص‬
& *
5
P
;
‫نوع‬
new
=
‫گر‬ ‫اشاره‬
int *p;
p = new int;
45
‫از‬
55 ‫داده‬ ‫انواع‬
‫سیستم‬ ‫به‬ ‫حافظه‬ ‫برگرداندن‬
& *
5
P
;
‫گر‬ ‫اشاره‬
delete
delete p;
46
‫از‬
55 ‫داده‬ ‫انواع‬
‫مثال‬
‫پویا‬ ‫متغییرهای‬
#include <iostream>
using namespace std;
int main()
{
int *x, *y, s;
x = new int;
y = new int;
if(!x || !y)
{ cout << "n Allocation failure."; return 0; }
cout << "n Enter two integers : ";
cin >> *x >> *y;
s = *x * *x + *y * *y;
cout << "n Sum of square is : " << s;
delete x;
delete y;
}
47
‫از‬
55 ‫داده‬ ‫انواع‬
‫پویا‬ ‫آرایه‬
;
[n]
‫نوع‬
new
=
‫گر‬ ‫اشاره‬
int *p;
p = new int[5];
;
‫گر‬ ‫اشاره‬
[]
delete
delete [] p;
48
‫از‬
55 ‫داده‬ ‫انواع‬
‫پویا‬ ‫آرایه‬ ‫مثال‬
(
‫میانه‬
)
#include <iostream>
using namespace std;
void inputData(int *, int);
void bubbleSort(int *, int);
void median(int *, int, float *);
void outputData(int *, int);
int main()
{
int n, *p;
float mead;
cout << " Enter number of items(n) : ";
cin >> n;
p = new int[ n ];
inputData(p, n); //read data
bubbleSort(p, n); //sort data
cout << "n Sorted data are : ";
outputData(p, n); //output sorted data
median(p, n, &mead);
cout << "n Median = " << mead;
delete p;
}
49
‫از‬
55 ‫داده‬ ‫انواع‬
‫پویا‬ ‫آرایه‬ ‫مثال‬
(
‫میانه‬
)
void inputData(int *p, int n)
{
int i;
for(i = 0; i < n; i ++)
{
cout << " Enter number " << (i + 1) << " : ";
cin >> *(p + i);
}
cin.get();
}
void outputData(int *p, int n)
{
for(int i = 0; i < n; i ++)
cout << *(p + i) << " ";
cout << endl;
}
50
‫از‬
55 ‫داده‬ ‫انواع‬
‫پویا‬ ‫آرایه‬ ‫مثال‬
(
‫میانه‬
)
void bubbleSort(int *temp, int len)
{ int i, j, item;
for(i = len - 1 ; i > 0; i --)
for(j = 0; j < i ; j++)
if(*(temp + j) > *(temp + j + 1)) {
item = *(temp + j);
*(temp + j) = *(temp + j + 1);
*(temp + j + 1) = item ;
}//end of if
}
void median(int *x, int n, float *mead)
{
if(n % 2 == 0) //if n is even
*mead =(float) (*(x + ((n - 1) / 2)) + *(x + (n / 2))) / 2;
else //if n is odd
*mead = *( x + (n - 1) / 2);
}
51
‫از‬
55 ‫داده‬ ‫انواع‬
‫آرایه‬
‫پویا‬ ‫دوبعدی‬ ‫ی‬
int **p;
p = new int *[m];
for(int j = 0; j < m ; j++)
p[j] = new int [n];
52
‫از‬
55 ‫داده‬ ‫انواع‬
‫آرایه‬
‫پویا‬ ‫دوبعدی‬ ‫ی‬
for(int j = 0; j < m ; j++)
delete [] p[i];
delete [] p;
53
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬ ‫از‬ ‫استفاده‬ ‫نحوه‬ ‫به‬ ‫توجه‬
#include <iostream>
using namespace std;
int main ()
{
int n, *P;
cin>>n;
*P = n; //be careful, P refer to where????
}
‫باشد‬ ‫گرفته‬ ‫مقدار‬ ‫قبال‬ ‫گر‬ ‫اشاره‬
54
‫از‬
55 ‫داده‬ ‫انواع‬
‫گرها‬ ‫اشاره‬ ‫از‬ ‫استفاده‬ ‫نحوه‬ ‫به‬ ‫توجه‬
#include <iostream>
using namespace std;
int main ()
{
int n, *P;
cin>>n;
P = n; //error, *P=n is correct
}

5.types of variable

  • 1.
    ‫داده‬ ‫انواع‬ ‫داده‬ ‫انواع‬ mrajaati@yahoo.com ‫رجعتی‬‫میثم‬ ‫گرمسار‬ ‫دانشگاه‬ - ‫کامپیوتر‬ ‫مهندسی‬ ‫دانشکده‬ - ‫کامپیوتر‬ ‫علوم‬ ‫گروه‬ ‫پاییز‬ 1401
  • 2.
    2 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫مطالب‬‫فهرست‬  ‫ثابتها‬  ‫متغیرها‬  ‫گرها‬ ‫اشاره‬ ‫مفهوم‬  ‫اشاره‬ ‫ثابتها‬ ‫و‬ ‫گرها‬  ‫و‬ ‫ها‬ ‫آرایه‬ ‫اشاره‬ ‫گرها‬  ‫گرها‬ ‫اشاره‬ ‫و‬ ‫ها‬ ‫تابع‬ 2 ‫از‬ 28
  • 3.
    3 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫مقدمه‬ ‫در‬‫ها‬ ‫زبان‬ ‫بین‬ ‫اصلی‬ ‫تفاوت‬ ‫انواع‬ ،‫مجاز‬ ‫های‬‫داده‬ ‫نوع‬ ‫اعمال‬ ‫و‬ ‫موجود‬ ‫برای‬ ‫شده‬ ‫فراهم‬ ‫روشهای‬ ‫ترتیب‬ ‫کنترل‬ ‫کارگیری‬ ‫به‬ ‫رو‬ ‫بر‬ ‫اعمال‬ ‫ی‬ ‫ها‬‫داده‬ ‫باشد‬ ‫می‬ . ‫تعری‬ ‫امکان‬ ‫نویس‬ ‫برنامه‬ ‫به‬ ‫تا‬ ‫کند‬ ‫فراهم‬ ‫را‬ ‫امکاناتی‬ ‫باید‬ ‫زبان‬ ‫انواع‬ ‫ف‬ ‫را‬ ‫جدید‬ ‫داده‬ ‫بدهد‬ ‫انواع‬ ‫ها‬‫داده‬ : .1 ‫اصلی‬ ‫های‬‫داده‬ : ‫سازی‬ ‫شبیه‬ ‫کامپیوتر‬ ‫افزار‬ ‫سخت‬ ‫طریق‬ ‫از‬ ‫می‬ ‫شود‬ . ‫شود‬ ‫می‬ ‫دستکاری‬ ‫منفرد‬ ‫واحد‬ ‫یک‬ ‫صورت‬ ‫به‬ . ‫یافته‬ ‫ساخت‬ ‫های‬‫داده‬ 2 : ‫میشود‬ ‫سازی‬ ‫شبیه‬ ‫افزار‬ ‫نرم‬ ‫توسط‬ . ‫اشیا‬ ‫از‬ ‫ای‬ ‫محموعه‬ ‫شامل‬ ‫داده‬ ‫ساختمان‬ ‫دیگر‬ ‫داده‬ ‫است‬ .
  • 4.
    4 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫مقدمه‬ ‫داده‬‫شی‬ ‫هر‬ ‫زندگی‬ ‫دوران‬ ‫دارای‬ ‫است‬ . ‫از‬ ‫برخی‬ ‫اشیاء‬ ‫وجود‬ ‫اجرا‬ ‫شروع‬ ‫در‬ ‫داده‬ ‫و‬ ‫دارند‬ ‫برخی‬ ‫ایجاد‬ ‫اجرا‬ ‫زمان‬ ‫پویا‬ ‫صورت‬ ‫به‬ ‫میشود‬ ‫از‬ ‫برخی‬ ‫اشیاء‬ ‫روند‬‫می‬ ‫بین‬ ‫از‬ ‫اجرا‬ ‫زمان‬ ‫در‬ ‫داده‬ ‫و‬ ‫برخی‬ ‫ماند‬ ‫می‬ ‫باقی‬ ‫برنامه‬ ‫خاتمه‬ ‫تا‬
  • 5.
    5 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫مقدمه‬ ‫اشیا‬‫های‬ ‫ویژگی‬ ‫داده‬ : . ‫نوع‬ 1 : ‫مجموعه‬ ‫مقادیر‬ ‫نماید‬ ‫اختیار‬ ‫تواند‬ ‫می‬ ‫داده‬ ‫شی‬ ‫آن‬ ‫که‬ ‫هایی‬ ‫داده‬ . ‫مکان‬ 2 : ‫تقید‬ ‫به‬ ‫حافظه‬ ‫در‬ ‫مکانی‬ . ‫مقدار‬ 3 : ‫انتساب‬ ‫عمل‬ ‫نتیجه‬ . ‫نام‬ 4 : ‫رجوع‬ ‫اجرا‬ ‫زمان‬ ‫در‬ ‫داده‬ ‫شی‬ ‫به‬ ‫آنها‬ ‫توسط‬ ‫که‬ ‫نام‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫شو‬‫می‬ ‫د‬ . ‫اجزا‬ 5 : ‫شی‬ ‫تقید‬ ‫داده‬ ‫شی‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫به‬ ‫داده‬ ‫دیگر‬ . ‫اعمال‬ 6 : ‫که‬ ‫کند‬‫می‬ ‫مشخص‬ ‫داده‬ ‫نوع‬ ‫برای‬ ‫شده‬ ‫تعریف‬ ‫های‬ ‫عمل‬ ‫مجموعه‬ ‫داده‬ ‫اشیا‬ ‫چگونه‬ ‫نوع‬ ‫آن‬ ‫شود‬ ‫دستکاری‬ ‫تواند‬ ‫می‬ : int int : int int int UnaryOp BinOp   
  • 6.
    6 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫ثابتها‬ ‫یک‬‫با‬ ‫هستند‬ ‫هایی‬ ‫داده‬ ‫شی‬ ‫ها‬ ‫ثابت‬ ‫نام‬ ‫که‬ ‫به‬ ‫تغییر‬ ‫قابل‬ ‫زندگی‬ ‫دوران‬ ‫طول‬ ‫در‬ ‫که‬ ‫شوند‬‫می‬ ‫مقید‬ ‫مقادیری‬ ‫یا‬ ‫مقدار‬ ‫ن‬ ‫یستند‬ . ‫ثابت‬ ‫انواع‬ ‫ها‬ : .1 ‫ثابت‬ ‫لفظی‬ : ‫آ‬ ‫مقدار‬ ‫شده‬ ‫نوشته‬ ‫نمایش‬ ‫همان‬ ‫آن‬ ‫نام‬ ‫که‬ ‫است‬ ‫ثابتی‬ ‫ن‬ ‫است‬ . ‫عدد‬ ‫مانند‬ “25” . ‫برنامه‬ ‫توسط‬ ‫شده‬ ‫تعریف‬ ‫ثابت‬ 2 ‫نویسی‬ : ‫تو‬ ‫آن‬ ‫نام‬ ‫که‬ ‫است‬ ‫ثابتی‬ ‫برنامه‬ ‫سط‬ ‫انتخاب‬ ‫آن‬ ‫داده‬ ‫شی‬ ‫تعریف‬ ‫در‬ ‫نویس‬ ‫میشود‬ . #define one 1 #define MAX 50
  • 7.
    7 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫دودویی‬‫های‬ ‫داده‬ ‫نوع‬ ‫داده‬ ‫اشیا‬ ‫شامل‬ ‫دودویی‬ ‫داده‬ ‫که‬ ‫است‬ ‫مقدار‬ ‫دو‬ ‫از‬ ‫یکی‬ ‫غلط‬ ‫یا‬ ‫درست‬ ‫را‬ ‫دا‬ ‫رند‬ . ‫منطقی‬ ‫عملگرهای‬ ،‫ای‬ ‫مقایسه‬ ‫عملگرهای‬
  • 8.
    8 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫دودویی‬‫های‬ ‫داده‬ ‫نوع‬ ‫داده‬ ‫اشیا‬ ‫شامل‬ ‫دودویی‬ ‫داده‬ ‫که‬ ‫است‬ ‫مقدار‬ ‫دو‬ ‫از‬ ‫یکی‬ ‫غلط‬ ‫یا‬ ‫درست‬ ‫را‬ ‫دا‬ ‫رند‬ . ‫عملگرهای‬ ‫بیتی‬ ‫عملگر‬ ‫نماد‬ ‫و‬ And & ‫یا‬ Or | ‫انحصاری‬ ‫یای‬ xor ^ ‫نقیض‬ not ~ ‫راست‬ ‫به‬ ‫شیفت‬ right shift >> ‫چپ‬ ‫به‬ ‫شیفت‬ left shift <<
  • 9.
    9 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫عددی‬‫های‬ ‫داده‬ . ‫اعداد‬ 1 ‫صحیح‬ . ‫اعشاری‬ ‫اعداد‬ 2 ( ‫شناور‬ ‫ممیز‬ ‫یا‬ ‫ثابت‬ ‫ممیز‬ ) . ‫مختلط‬ ‫اعداد‬ 3
  • 10.
    10 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫متغیرها‬ ‫ال‬‫نویسی‬ ‫برنامه‬ ‫زبانهای‬ ‫در‬ ‫معموال‬ ‫متغیر‬ ‫هر‬ ‫از‬ ‫استفاده‬ ‫از‬ ‫قبل‬ ‫است‬ ‫زم‬ ، ‫داده‬ ‫نوع‬ ‫مشخص‬ ،‫شود‬ ‫ذخیره‬ ‫متغیر‬ ‫در‬ ‫است‬ ‫قرار‬ ‫که‬ ‫ای‬ ‫شود‬ . ‫نامند‬ ‫می‬ ‫متغیر‬ ‫تعریف‬ ً‫ا‬‫اصطالح‬ ‫را‬ ‫کار‬ ‫این‬ . ; ‫اند‬ ‫شده‬ ‫جدا‬ ‫هم‬ ‫از‬ ‫کاما‬ ‫با‬ ‫که‬ ‫متغیرها‬ ‫نام‬ ‫نوع‬ ‫متغیر‬ ‫متغییرها‬ ‫نام‬ ‫ویژگی‬ : • ‫کلمات‬ ‫نباشد‬ ‫زبان‬ ‫کلیدی‬ • ‫ترکیبی‬ ‫باشد‬ ‫اعداد‬ ‫و‬ ‫حروف‬ ‫از‬ • ‫یک‬ ‫شود‬ ‫شروع‬ ‫حرف‬ • ‫عالوه‬ ‫مثل‬ ‫دیگر‬ ‫نمادهای‬ ‫برخی‬ ‫توان‬ ‫می‬ ‫اعداد‬ ‫و‬ ‫حروف‬ ‫بر‬ _ ‫نام‬ ‫در‬ ‫نیز‬ ‫کرد‬ ‫استفاده‬ ‫متغیرها‬ • ‫زبانها‬ ‫معموال‬ ‫بزرگ‬ ‫حروف‬ ‫به‬ ‫وکوچک‬ ‫حساس‬ ‫هستند‬ .  int x12_s; ■ int cin, _x12s, 12x;
  • 11.
    11 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫اعالن‬ ‫متغیرها‬ Int Float Double char bool ‫صحیح‬ ‫اعشاری‬ ‫مضاعف‬‫دقت‬ ‫با‬ ‫اعشاری‬ ‫کاراکتر‬ 1 ‫دودویی‬ 1 Data type size signed names; int long unsigned A, aa2, Aa2 ; ‫را‬ ‫ای‬ ‫داده‬ ‫اشیا‬ ‫نوع‬ ‫و‬ ‫نام‬ ‫مورد‬ ‫در‬ ‫اطالعاتی‬ ‫که‬ ‫است‬ ‫برنامه‬ ‫از‬ ‫حکمی‬ ‫اعالن‬ ‫اختیار‬ ‫در‬ ‫باشد‬ ‫می‬ ‫نیاز‬ ‫مورد‬ ‫اجرا‬ ‫طول‬ ‫در‬ ‫که‬ ‫میدهد‬ ‫قرار‬ ‫مترجم‬ . . ‫صریح‬ ‫اعالن‬ 1 ; ‫اند‬ ‫شده‬ ‫جدا‬ ‫هم‬ ‫از‬ ‫کاما‬ ‫با‬ ‫که‬ ‫متغیرها‬ ‫نام‬ ‫نوع‬ ‫متغیر‬ . ‫اعالن‬ 2 ‫ضمنی‬ : ‫بسیاری‬ ‫ن‬ ‫را‬ ‫فرض‬ ‫پیش‬ ‫یا‬ ‫ضمنی‬ ‫های‬ ‫اعالن‬ ‫زبانها‬ ‫از‬ ‫یز‬ ‫فقط‬ ‫که‬ ‫آورند‬‫می‬ ‫فراهم‬ ‫انتساب‬ ‫می‬ ‫آن‬ ‫اعالن‬ ‫باعث‬ ‫متغیر‬ ‫به‬ ‫مقدار‬ ‫ش‬ ‫ود‬ .
  • 12.
    12 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫اعالن‬ ‫متغیرها‬ ‫اعالن‬‫اهداف‬ ‫ها‬ : .1 ‫های‬ ‫نمایش‬ ‫انتخاب‬ ‫حافظه‬ . ‫حافظه‬ ‫مدیریت‬ 2 : ‫زندگی‬ ‫مدت‬ ‫داده‬ ‫اشیاء‬ . ‫اعمال‬ 3 ‫چندریختی‬ : ‫مانند‬ ‫خاصی‬ ‫های‬ ‫نماد‬ ‫جمع‬ )+( ‫های‬ ‫عملیات‬ ‫اعشاری‬ ‫جمع‬ ‫یا‬ ‫صحیح‬ ‫جمع‬ ‫مانند‬ ‫کند‬‫می‬ ‫پشتیبانی‬ ‫را‬ ‫متفاوتی‬ ‫چنین‬ ، ‫نماد‬ ‫عملگری‬ ‫می‬ ‫شده‬ ‫پربار‬ ‫را‬ ‫نامند‬ . . ‫بررسی‬ 4 ‫نوع‬ : ‫است‬ ‫این‬ ‫نویس‬ ‫برنامه‬ ‫دیدگاه‬ ‫از‬ ‫اعالنها‬ ‫هدف‬ ‫مهمترین‬ ‫که‬ ‫ایجاد‬ ‫پویا‬ ‫جای‬ ‫به‬ ‫ایستا‬ ‫صورت‬ ‫به‬ ‫را‬ ‫نوع‬ ‫بررسی‬ ‫امکان‬ ‫نماید‬ ‫مانند‬ ‫ها‬ ‫زبان‬ ‫برخی‬ C ‫اجازه‬ ‫نوع‬ ‫تبدیل‬ ‫را‬ ‫می‬ ‫مانند‬ ‫ها‬ ‫زبان‬ ‫برخی‬ ‫ولی‬ ‫دهند‬ ‫پاسکال‬ ‫اجازه‬ ‫را‬ ‫نوع‬ ‫تبدیل‬ ‫دهند‬ ‫نمی‬
  • 13.
    13 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫اعالن‬ ‫متغیرها‬ – ‫نوع‬‫تبدیل‬ ‫انجام‬ ‫عملیات‬ ‫محاسباتی‬ ‫مانند‬ ‫جمع‬ ‫دو‬ ‫عدد‬ ‫صحیح‬ ‫با‬ ‫جمع‬ ‫دو‬ ‫عدد‬ ‫اعشاری‬ ‫متفاوت‬ ‫است‬ . ‫در‬ ‫زبان‬ ‫های‬ ‫برنامه‬ ‫نویسی‬ ‫این‬ ‫تفاوت‬ ‫به‬ ‫صورت‬ ‫خودکار‬ ‫لحاظ‬ ‫شده‬ ‫و‬ ‫الزم‬ ‫ن‬ ‫یست‬ ‫برنامه‬ ‫نویس‬ ‫دغدغه‬ ‫ای‬ ‫در‬ ‫این‬ ‫خصوص‬ ‫داشته‬ ‫باشد‬ . ‫در‬ ‫تعیین‬ ‫مود‬ ‫انجام‬ ،‫محاسبات‬ ‫در‬ ‫مواردی‬ ‫که‬ ‫عملوندهای‬ ‫یک‬ ‫عبارت‬ ‫محاسباتی‬ ‫از‬ ‫ا‬ ‫نواع‬ ‫مختلف‬ ،‫باشد‬ ‫نوعی‬ ‫انتخاب‬ ‫می‬ ‫شود‬ ‫که‬ ‫شامل‬ ‫سایر‬ ‫انواع‬ ‫نیز‬ ‫باشد‬ . ‫اما‬ ‫این‬ ‫قانون‬ ‫گاهی‬ ‫محاسبات‬ ‫را‬ ‫با‬ ‫مشکل‬ ‫مواجه‬ ‫می‬ ‫کند‬ . ‫به‬ ‫طور‬ ‫مثال‬ x ‫یک‬ ‫متغیر‬ ‫از‬ ‫نوع‬ ‫اعشاری‬ ‫است‬ ‫اما‬ ‫حاصل‬ x = 1 / 2 ‫برابر‬ ‫صفر‬ ‫است‬ ‫چون‬ ‫عدد‬ 1 ‫و‬ 2 ‫هر‬ ‫دو‬ ‫صحیح‬ ‫هستند‬ ‫و‬ ‫حاصل‬ ‫تقسیم‬ ‫صحیح‬ ‫خواهد‬ ‫بود‬ . ‫دو‬ ‫راهکار‬ ‫برای‬ ‫اصالح‬ ‫آن‬ ‫وجود‬ ‫دارد‬ . . ‫تغییر‬ 1 ‫مود‬ ‫متغییرها‬ x = 1.0 / 2 . ‫استفاده‬ 2 ‫از‬ ‫قالب‬ ‫ریزی‬ ‫نوع‬ typecasting x = (float) 1 / 2
  • 14.
    14 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫شمارشی‬‫های‬‫داده‬ ‫نوع‬ ‫داده‬ ‫شمارشی‬ ‫یک‬ ‫لیست‬ ‫ترتیبی‬ ‫از‬ ‫مقادیر‬ ‫مجزا‬ ،‫است‬ ‫برنامه‬ ‫نو‬ ‫یس‬ ‫نام‬ ‫های‬ ‫لفظی‬ ‫را‬ ‫به‬ ‫عنوان‬ ‫مقادیر‬ ‫متغیر‬ ‫و‬ ‫ترتیب‬ ‫آنها‬ ‫را‬ ‫با‬ ‫استفاده‬ ‫از‬ ‫اعال‬ ‫ن‬ ‫تعریف‬ ‫می‬ ‫نماید‬ .
  • 15.
    15 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫کاراکترها‬ ‫رشته‬ ‫کاراکتر‬ ‫ها‬ ‫در‬ ‫زبان‬ ‫های‬ ‫مختلف‬ ‫ممکن‬ ‫است‬ ‫به‬ ‫صورتهای‬ ‫مختلف‬ ‫پیاده‬ ‫سازی‬ ‫شوند‬ . . ‫در‬1 ‫زبان‬ ‫هایی‬ ‫مانند‬ ‫پرولوگ‬ ‫به‬ ‫صورت‬ ‫مستقیم‬ ‫از‬ ‫طریق‬ ‫نوع‬ ‫داده‬ ‫ر‬ ‫شته‬ ‫کاراکتری‬ ‫و‬ . ‫در‬ 2 ‫زبان‬ ‫هایی‬ ‫مانند‬ ‫سی‬ ‫به‬ ‫صورت‬ ‫آرایه‬ ‫خطی‬ ‫از‬ ‫کاراکترها‬ ‫در‬ ‫نظر‬ ‫گرفته‬ ‫می‬ ‫شود‬
  • 16.
    16 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫آرایه‬ ‫های‬‫داده‬‫سازی‬‫ذخیره‬ ‫برای‬ ‫نام‬ ‫یک‬ ‫تحت‬ ‫که‬ ‫گویند‬‫می‬ ‫ای‬‫داده‬ ‫ساختمان‬ ‫به‬ ‫شود‬‫می‬ ‫استفاده‬ ‫نوع‬ ‫هم‬ . ‫آرایه‬ ‫ثابتی‬ ‫تعداد‬ ‫از‬ ‫متغیر‬ ‫داده‬ ‫نوع‬ ‫یک‬ ‫تحت‬ ‫و‬ ‫نام‬ ‫یک‬ ‫است‬ . Type name[num]; char A[10]; char A[10]= {‘R’, ‘a’, ‘j’, ‘a’, ‘a’, ‘t’, ‘i’, ‘0’}; ‫هر‬ ‫یک‬ ‫از‬ ‫متغیرهای‬ ‫درون‬ ‫آرایه‬ ‫با‬ ‫یک‬ ‫شماره‬ ‫به‬ ‫نام‬ ‫اندیس‬ ‫از‬ ‫یکدیگر‬ ‫م‬ ‫تمایز‬ ‫شوند‬‫می‬ . A[2]=>‘j’
  • 17.
    17 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫آدرس‬ ‫محتوا‬ & * FF200 X FF201 10 FF202 FF203 FF204 P FF205 FF206 ‫نیست‬ ‫ما‬ ‫اختیار‬ ‫در‬ ‫ما‬ ‫اختیار‬ ‫در‬ ‫ا‬ ‫ست‬ *P : ‫که‬ ‫جایی‬ ‫محتوای‬ P ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬ &P : ‫آدرس‬ P
  • 18.
    18 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫معمولی‬‫متغییر‬ ‫تعریف‬ ‫آدرس‬ ‫محتوا‬ & * FF200 X FF201 FF202 FF203 FF204 FF205 FF206 int x; ‫نیست‬ ‫ما‬ ‫اختیار‬ ‫در‬ 10 x = 10; ‫ما‬ ‫اختیار‬ ‫در‬ ‫ا‬ ‫ست‬
  • 19.
    19 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫متغییر‬‫تعریف‬ ‫گر‬ ‫اشاره‬ ‫نوع‬ ‫از‬ ‫آدرس‬ ‫محتوا‬ & * FF200 X FF201 FF202 FF203 FF204 P FF205 FF206 int X; *P : ‫که‬ ‫جایی‬ ‫محتوای‬ P ‫کند‬ ‫می‬ ‫چاپ‬ ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬ . ‫آدرس‬ P ‫میکند‬ ‫چاپ‬ ‫را‬ . 10 X = 10; int *P; P = &X; cout<< &P; cout<< *P; ‫محتوای‬ P ‫میکند‬ ‫چاپ‬ ‫را‬ . cout<< P;
  • 20.
    20 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گر‬‫اشاره‬ ‫نوع‬ ‫از‬ ‫متغییر‬ ‫مثال‬ & * n m 3 P int n, m=3, *P; P =&m; n = *P; *P = 10; cout<< &P; cout<< P; cout<< *P; 3 10
  • 21.
    21 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گر‬‫اشاره‬ ‫نوع‬ ‫از‬ ‫متغییر‬ ‫مثال‬ & * b a 5 P S int b, a=5, *P, *S; P = &a; S = &b; *S = *P; cout<< *S; 5
  • 22.
    22 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گر‬‫اشاره‬ ‫نوع‬ ‫از‬ ‫متغییر‬ ‫مثال‬ & * b a 5 P S int b, a=5, *P, *S; P = &a; S = &b; S = P; cout<< *S; 3
  • 23.
    23 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫ها‬ ‫ثابت‬ ‫و‬ const int a=5; int *P; P = &a; a = 20; //error *P = 20; //OK ‫محتوای‬ ‫که‬ ‫جایی‬ P ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬ ‫می‬ ‫دهد‬ ‫تغییر‬ ‫تواند‬ & * a 5 P 20 ‫ای‬ ‫خانه‬ ‫مشابه‬ ‫باشد‬ ‫می‬ ‫در‬ ‫دو‬ ‫با‬
  • 24.
    24 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫ها‬ ‫ثابت‬ ‫و‬ const int *P; & * a 5 P const int b=10, a=5; const int *P; P = &a; //OK *P = 20; //error ‫خودش‬ ‫مقدار‬ ، ‫تغییر‬ ‫تواند‬ ‫می‬ ‫کند‬ ‫اما‬ ‫محتوای‬ ‫که‬ ‫جایی‬ P ‫دهد‬ ‫تغییر‬ ‫تواند‬ ‫نمی‬ ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬
  • 25.
    25 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫ها‬ ‫ثابت‬ ‫و‬ int * const P; & * b 10 a 5 P const int b=10, a=5; int * const P = &a; P = &b; //error *P = 20; //OK ‫نمی‬ ،‫خودش‬ ‫مقدار‬ ‫تغییر‬ ‫تواند‬ ‫کند‬ ‫اما‬ ‫محتوای‬ ‫که‬ ‫جایی‬ P ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬ ‫می‬ ‫دهد‬ ‫تغییر‬ ‫تواند‬ 20 ‫ها‬ ‫آرایه‬ ‫گفت‬ ‫توان‬ ‫می‬ ‫از‬ ‫هستند‬ ‫گر‬ ‫اشاره‬ ‫نوع‬ ‫این‬
  • 26.
    26 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫ها‬ ‫ثابت‬ ‫و‬ const int * const P; & * b 10 a 5 P const int b=10, a=5; const int * const P = &a; P = &b; //error *P = 20; //error ‫نمی‬ ،‫خودش‬ ‫مقدار‬ ‫تغییر‬ ‫تواند‬ ‫کند‬ ‫محتوای‬ ‫و‬ ‫که‬ ‫جایی‬ P ‫را‬ ‫کند‬ ‫می‬ ‫اشاره‬ ‫آن‬ ‫به‬ ‫نمی‬ ‫نیز‬ ‫دهد‬ ‫تغییر‬ ‫تواند‬
  • 27.
    27 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫گر‬ ‫اشاره‬ ‫به‬ & * a 5 P S T int a=5; int *P = &a; int **S = &P; int ***T = &S;
  • 28.
    28 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫عملیا‬‫و‬ ‫گرها‬ ‫اشاره‬ ‫ت‬ ‫محاسباتی‬ P = P – S P = P + 3 ‫توان‬ ‫می‬ ‫فقط‬ ‫را‬ ‫گرها‬ ‫اشاره‬ . ‫کرد‬ ‫کم‬ ‫هم‬ ‫از‬ 1 . ‫کرد‬ ‫تفریق‬ ‫یا‬ ‫جمع‬ ‫مثبت‬ ‫عدد‬ ‫یک‬ ‫با‬ 2 ‫را‬ ‫گر‬ ‫اشاره‬ ‫نوع‬ ‫با‬ ‫متناسب‬ ‫عملیات‬ ‫گونه‬ ‫هر‬ ‫باشید‬ ‫داشته‬ ‫توجه‬ ‫دهید‬ ‫انجام‬ ‫آن‬ ‫محتوای‬ ‫روی‬ ‫توانید‬ ‫می‬ *w = *p / *q
  • 29.
    29 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫ا‬‫از‬ ‫استفاده‬ ‫با‬ ‫کاربر‬ ‫از‬ ‫آرایه‬ ‫یک‬ ‫محتوای‬ ‫گرفتن‬ ‫گر‬ ‫شاره‬ int *P, array[10]; for (P = array ; P< &array[10] ; P++) cin>>*P; ‫است‬ ‫باالتر‬ ‫گرها‬ ‫اشاره‬ ‫سرعت‬ .
  • 30.
    30 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گر‬‫اشاره‬ ‫و‬ ‫آرایه‬ int *P, array[10]; for (P = array ; P< &array[10] ; P++) cin>>*P; P = array // P = &array[0] cout<<P+2; // &array[2] cout <<*(P+2); // array[2] cout <<P[2]; cout << array[2]; ‫باشد‬ ‫می‬ ‫آرایه‬ ‫عنصر‬ ‫اولین‬ ‫به‬ ‫گر‬ ‫اشاره‬ ‫آرایه‬ ‫نام‬
  • 31.
    31 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گر‬‫اشاره‬ ‫و‬ ‫آرایه‬ #include <iostream> using namespace std; int main() { const int n = 5; int arr[ n ] , i ; cout << "n Enter " << n << " values : " ; for( i = 0 ; i < n ; i ++ ) cin >> arr[ i ] ; cout << "n The reverse output is :"; for(i = n - 1 ; i >= 0 ; i -- ) cout << *( arr + i ) << " "; }
  • 32.
    32 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫ا‬‫آرایه‬ ‫ی‬ ‫گرها‬ ‫ازاشاره‬ char *P[4] = {“ali”, “hasan”, “sara”, “fatema”} ‫است‬ ‫گر‬ ‫اشاره‬ ‫یک‬ ‫آن‬ ‫خانه‬ ‫هر‬ ‫که‬ ‫ایست‬ ‫ای‬ ‫آرایه‬ P[0]  a l i 0 P[1]  h a s a n 0 P[2]  s a r a 0 P[3]  f a t e m a 0
  • 33.
    33 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫ا‬‫آرایه‬ ‫ی‬ ‫گرها‬ ‫ازاشاره‬ //char *P[4] = {“ali”, “hasan”, “sara”, “fatema”} #include <iostream> using namespace std; int main() { const int k = 4; char *list[ k ] = {“ali”, “hasan”, “sara”, “fatema”}; cout << "The strings in array are : " << endl; for (int i = 0; i < k; i ++) cout << list [ i ] << endl; cin.get(); }
  • 34.
    34 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫و‬ ‫ها‬ ‫رشته‬ char *P = “Meysam”; for ( ; *P ; P++) if(*P >= ‘a’ && *P <= ‘z’) cout<<*P; ‫حرف‬ ‫گر‬ ‫اشاره‬ M ‫رشته‬ ‫در‬ Meysam ‫میکند‬ ‫اشاره‬
  • 35.
    35 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫و‬ ‫ها‬ ‫رشته‬ #include <iostream> using namespace std; void ascii_to_int(int *, char *); int main() { int number ; char s[10] ; cout << "nEnter numeric string : "; cin >> s ; ascii_to_int(&number, s) ; cout << "nNumeric value is:" << number ; cin.get(); }
  • 36.
    36 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫و‬ ‫ها‬ ‫رشته‬ void ascii_to_int(int *value, char *str) { int sign = 1 ; *value = 0 ; while(*str == ‘ ') str++ ; if(*str== '-' || *str == '+') sign = (*str ++ == '-') ? -1 : 1; while(*str) //test all character { if((*str >= '0') && (*str <= '9')) *value = (*value * 10) + (*str ++ -48) ; else //there is an illegal character { cout << "nWatning : the <" << *str << "> is invalid character.n"; break ; } //end of else } // end of while *value *= sign ; }
  • 37.
    37 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫تابع‬‫ورودی‬ ‫پارامتر‬ ‫و‬ ‫گر‬ ‫اشاره‬ . ‫فراخوانی‬ 1 ‫مقدار‬ ‫با‬ . ‫فراخوانی‬ 2 ‫با‬ ‫ارجاء‬ ( ‫مرجع‬ ‫پارامتر‬ ) void func1(int x) void func1(int &x) { x = 10;} int main() {… int a = 5; func1(a); cout<<a; //a=10 …}
  • 38.
    38 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫تابع‬‫ورودی‬ ‫پارامتر‬ ‫عنوان‬ ‫به‬ ‫گر‬ ‫اشاره‬ void func1(int *x) { *x = 10;} int main() {… int a = 5; func1(&a); cout<<a; //a=10 …}
  • 39.
    39 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫نوع‬‫از‬ ‫تابع‬ ‫ورودی‬ ‫مثال‬ ‫گر‬ ‫اشاره‬ #include <iostream> using namespace std; void input(int *, int *); void rect(int, int, int *, int *); int main() { int len, wid, area, perimeter; input(&len, &wid); rect(len, wid, &area, &perimeter); cout << " Length = " << len << " , Width = " << wid; cout << "n Area = " << area << " , Perimeter = " << perimeter; } void input(int *p1, int *p2) { cout << " Enter length, width : "; cin >> *p1 >> *p2; } void rect(int x, int y, int *a, int *p) { *a = x * y; *p = 2 * (x + y);}
  • 40.
    40 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫تابع‬‫به‬ ‫گر‬ ‫اشاره‬ ‫است‬ ‫گری‬ ‫اشاره‬ ‫تابع‬ ‫نام‬ ‫است‬ ‫شده‬ ‫ذخیره‬ ‫آنجا‬ ‫در‬ ‫تابع‬ ‫که‬ ‫حافظه‬ ‫از‬ ‫مکانی‬ ‫ابتدای‬ ‫به‬ ; ( ‫تابع‬ ‫پارامتهای‬ ) ) ‫تابع‬ ‫به‬ ‫گر‬ ‫اشاره‬ ‫نام‬ * ( ‫تابع‬ ‫بازگشتی‬ ‫نوع‬ int (*p) (int, float); P ‫ورودی‬ ‫پارامتر‬ ‫دو‬ ‫با‬ ‫تابعی‬ ‫هر‬ ‫به‬ ‫میتواند‬ ‫آن‬ ‫اول‬ ‫پارامتر‬ ‫نوع‬ ‫که‬ int ‫آن‬ ‫دوم‬ ‫پارامتر‬ ‫نوع‬ ‫و‬ float ‫باشد‬ ‫می‬ ‫آن‬ ‫خروجی‬ ‫و‬ int ‫کند‬ ‫اشاره‬ ‫است‬
  • 41.
    41 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫تابع‬‫به‬ ‫گر‬ ‫اشاره‬ #include <iostream> using namespace std; int func1(int, float){…} int func2(int, float){…} int main () { int n, (*P)(int, float); cin>>n; P = func1; cout<< “func1(n,3.14)”<<P(n, 3.14); P = func2; cout<< “func2(n,3.14)”<<P(n, 3.14); }
  • 42.
    42 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫تابع‬‫به‬ ‫گر‬ ‫اشاره‬ #include <iostream> using namespace std; int func1(int, float){…} int func2(int, float){…} int main () { int n, (*P)(int, float), (*q)(int, float); cin>>n; P = func1; cout<< “func1(n,3.14)”<<P(n, 3.14); q = P; cout<< “func1(n,3.14)”<<q(n, 3.14); }
  • 43.
    43 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫پویا‬‫متغییرهای‬ ‫میگیرد‬ ‫قرار‬ ‫گر‬ ‫اشاره‬ ‫در‬ ‫که‬ ‫محلی‬ ‫آدرس‬ ‫ندارد‬ ‫لزومی‬ . ‫باشد‬ ‫نام‬ ‫دارای‬ & * a 5 P & * 5 P
  • 44.
    44 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫پویا‬‫حافظه‬ ‫تخصیص‬ & * 5 P ; ‫نوع‬ new = ‫گر‬ ‫اشاره‬ int *p; p = new int;
  • 45.
    45 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫سیستم‬‫به‬ ‫حافظه‬ ‫برگرداندن‬ & * 5 P ; ‫گر‬ ‫اشاره‬ delete delete p;
  • 46.
    46 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫مثال‬ ‫پویا‬‫متغییرهای‬ #include <iostream> using namespace std; int main() { int *x, *y, s; x = new int; y = new int; if(!x || !y) { cout << "n Allocation failure."; return 0; } cout << "n Enter two integers : "; cin >> *x >> *y; s = *x * *x + *y * *y; cout << "n Sum of square is : " << s; delete x; delete y; }
  • 47.
    47 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫پویا‬‫آرایه‬ ; [n] ‫نوع‬ new = ‫گر‬ ‫اشاره‬ int *p; p = new int[5]; ; ‫گر‬ ‫اشاره‬ [] delete delete [] p;
  • 48.
    48 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫پویا‬‫آرایه‬ ‫مثال‬ ( ‫میانه‬ ) #include <iostream> using namespace std; void inputData(int *, int); void bubbleSort(int *, int); void median(int *, int, float *); void outputData(int *, int); int main() { int n, *p; float mead; cout << " Enter number of items(n) : "; cin >> n; p = new int[ n ]; inputData(p, n); //read data bubbleSort(p, n); //sort data cout << "n Sorted data are : "; outputData(p, n); //output sorted data median(p, n, &mead); cout << "n Median = " << mead; delete p; }
  • 49.
    49 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫پویا‬‫آرایه‬ ‫مثال‬ ( ‫میانه‬ ) void inputData(int *p, int n) { int i; for(i = 0; i < n; i ++) { cout << " Enter number " << (i + 1) << " : "; cin >> *(p + i); } cin.get(); } void outputData(int *p, int n) { for(int i = 0; i < n; i ++) cout << *(p + i) << " "; cout << endl; }
  • 50.
    50 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫پویا‬‫آرایه‬ ‫مثال‬ ( ‫میانه‬ ) void bubbleSort(int *temp, int len) { int i, j, item; for(i = len - 1 ; i > 0; i --) for(j = 0; j < i ; j++) if(*(temp + j) > *(temp + j + 1)) { item = *(temp + j); *(temp + j) = *(temp + j + 1); *(temp + j + 1) = item ; }//end of if } void median(int *x, int n, float *mead) { if(n % 2 == 0) //if n is even *mead =(float) (*(x + ((n - 1) / 2)) + *(x + (n / 2))) / 2; else //if n is odd *mead = *( x + (n - 1) / 2); }
  • 51.
    51 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫آرایه‬ ‫پویا‬‫دوبعدی‬ ‫ی‬ int **p; p = new int *[m]; for(int j = 0; j < m ; j++) p[j] = new int [n];
  • 52.
    52 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫آرایه‬ ‫پویا‬‫دوبعدی‬ ‫ی‬ for(int j = 0; j < m ; j++) delete [] p[i]; delete [] p;
  • 53.
    53 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫از‬ ‫استفاده‬ ‫نحوه‬ ‫به‬ ‫توجه‬ #include <iostream> using namespace std; int main () { int n, *P; cin>>n; *P = n; //be careful, P refer to where???? } ‫باشد‬ ‫گرفته‬ ‫مقدار‬ ‫قبال‬ ‫گر‬ ‫اشاره‬
  • 54.
    54 ‫از‬ 55 ‫داده‬ ‫انواع‬ ‫گرها‬‫اشاره‬ ‫از‬ ‫استفاده‬ ‫نحوه‬ ‫به‬ ‫توجه‬ #include <iostream> using namespace std; int main () { int n, *P; cin>>n; P = n; //error, *P=n is correct }