Presentation is loading. Please wait.

Presentation is loading. Please wait.

تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86

Similar presentations


Presentation on theme: "تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86"— Presentation transcript:

1 تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
ساختمان داده 1: آرایه تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86

2 مروری بر مطالب برای ذخیره کردن یک متغیر از نوع های ساده تنها از یک سلول حافظه استفاده می شود. نوع های ساده : Integer,real,char,boolean برای ذخیره کردن داده های وابسته باید از متغیرهای مجزا با نام های مختلف استفاده کرد. مختصات یک نقطه : x,y مختصات 100 نقطه : x1,y1,x2,y2,x3,…,x100,y100 ؟ استفاده از ساختمان داده مرکب

3 آرایه ساختمان داده ای است که تعدادی دادة هم نوع در آن ذخیره می شود.
مجموعه ای از داده ها تحت يک نام مشترک استفاده می شوند. می توان به تک تک اعضا دسترسی پیدا کرد و همانند متغیرهای ساده مورد پردازش قرار داد. برای دسترسی به هر يک از اعضای آرايه، از يک انديس استفاده می شود. انديس بايد از نوع داده های قابل شمارش باشد

4 چگونگی تعريف يک آرايه Var نام آرايه : Array [ محدوده ] of نوع داده ;

5 چگونگی تعريف يک آرايه (ادامه)
Var a : Array [ ] of Integer ; b : Array [ ] of Real; x : Array [ ] of Boolean; y : Array [ ‘a’ .. ‘z’ ] of Real;

6 چگونگی تعريف يک آرايه (ادامه)
نوع اندیس می تواند از انواع char، Boolean، نوع دادة شمارشی و یا بازه ای از اعداد انتخاب شود. از نوع های real و Integer نمی توان به عنوان اندیس استفاده کرد. اما از بازه ای از اعداد صحیح می توان به عنوان اندیس استفاده نمود. برای هر یک از اندیس های آرایه، یک عنصر می توان در نظر گرفت. نوع داده همه عناصر یکسان است و در محل های پشت سر هم در حافظه اصلی ذخیره می شوند.

7 دسترسی به اعضا نام آرایه [اندیس] :
a[100] b[-9] x[‘x’] اندیس باید با نوعی که در قسمت تعیین نوع آرایه برای اندیس تعیین شده سازگار باشد و در محدوده صدق کند.

8 دسترسی به اعضا ( ادامه) Var x : Array [1..5] of real; sum : real;
Begin writeln(x[1]); x[4] := 25.6; sun := x[2] +x[3]; x[2] := x[1+2]+x[1]/x[5]; End. X[1] X[2] X[3] X[4] X[5] 54.4 1.3 28.6 12.5 2.0

9 خطاهای دسترسی Index expression out of bound
هنگامی رخ می دهد که اندیس دسترسی خارج از محدوده باشد Index type is not compatible with declaration در صورتی که نوع داده عبارت، با اندیس همخوانی نداشته باشد

10 دسترسی ترتیبی می توان با تعریف و افزایش متغیری از نوع داده محدوده به اعضای آرایه به ترتیب دسترسی پیدا کرد. For i:=1 to n do readln(x[i])

11 بررسی مساوی بودن دو آرایه
Var n : Integer; x, y : array [ ] of Char; Is_equal : Boolean; Begin ... Is_equal := True; For n := 1 To 40 Do If x[n] <> y[n] Then begin Is_equal := False; break; end; If Is_equal Then Writeln ( ‘Equal‘) Else Writeln ( ‘Not Equal‘); End.

12 مثال : رشته ای را دریافت کند و تعداد حروف تکراری آن را مشخص نماید (حروف کوچک و بزرگ فرقی با هم نداشته باشند) Var s: string; Num_chars : Array[‘A’..’Z’] of Integer; … Begin readln(s); for i:=1 to length(s) do Inc(Num_chars[upcase(s[i])]); End

13 مثال: لیستی از مختصات نقاط را دریافت کند و با دریافت ‘R’ آن ها را حول زاویه ای که از ورودی دریافت می کند دوران دهد، ‘T’ آن ها را تحت برداری که از ورودی دریافت می کند انتقال می دهد و در نهایت با دریافت ‘X’ مختصات نهایی را چاپ می کند. Repeat readln(ch); Until upcase(ch)=‘D’ or upcase(ch)=‘R’ or upcase(ch)=‘X’; Case ch of ‘D’,’d’ : ‘R’,’r’ End;

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

15 مثال : یک عدد حداکثر 30 رقمی از ورودی دریافت کند و آن را ذخیره نماید
var s: string; num : array[1..30] of byte; i: Integer; begin readln(s); if length(s)>30 then exit; for i:=length(s) downto 1 do num1[length(s)-i+1] := ord(s[i])-ord('0'); for i:=1 to length(s) do write(num[i]); readln; end.

16 مثال : جمع دو عدد 30 رقمی … carry := 0; for i:=1 to 30 do begin
res[i] := (num1[i]+num2[i]+carry) mod 10; carry := (num1[i]+num2[i]+carry) div 10; end; for i:=max+1 downto 1 do write(res[i]);

17 مثال : تفریق دو عدد 30 رقمی با فرض بزرگتر بودن عدد اول
.... carry := 0; for i:=1 to 30 do begin if (num1[i]-num2[i]-carry)<0 then res[i]:=(num1[i]+9-num2[i]); carry:= 1; end else res[i] := num1[i]-num2[i]-carry; end; for i:=max downto 1 do write(res[i]); ...

18 مثال : شمارنده n رقمی در مبنای 2
Var A : Array [1..6] of Integer; Flag : boolean; Begin Inc(A[0]); if (A[0]>1) then for i:=0 to 5 do if A[i]=0 then begin A[i] = 0; Inc(A[i+1]) …

19 مثال : زیرمجموعه های ممکن یک مجموعه از کاراکتر را چاپ نماید
Const max = 100; Var chars : array [1..max] of char; counter : array[1..max] of Integer; … Begin …. for i:=0 to length-1 do if counter[i]=1 then write(chars[i]);

20 آرایه های ثابت Const نام آرايه : Array [ محدوده ] of نوع داده =
( مقدار اول , مقدار دوم , … , مقدار آخر ) ; مثال : Const a : Array [ ] of Integer = ( 2 , -5 , 17 , 0 ); b : Array [ ] of Char = ( ‘a’ , ‘2’ , ‘?’ ); c : Array [ ] of Char = ‘a2?’ ;

21 چاپ نام بر اساس شماره رديف
Const Name : Array [ ] of String = ( ‘Majedi’ , ‘Rahnama’ , ‘Ganji’ , ‘Miran’ , ‘Nazari’ ); Var n : Intger; Begin Readln ( n ); Writeln ( Name [ n ] ); End.

22 تعريف يک نوع داده Type نام دلخواه = نوع داده جديد ; Var
نام متغير : همان نام دلخواه ; Type Days = ; Letters = ‘A’ .. ‘Z’ , ‘a’ .. ‘z’ ; Var a, b : Days; c : Letters;

23 چند تابع بر روی string Upcase(s) Str (Integer or real, String)
حروف کوچک در رشته ورودی را به حروف بزرگ تبدیل می کند. Str (Integer or real, String) یک نوع داده صحیح را به نوع داده رشته معادلش تبدیل می کند. Str(108765,s); بعد از اجرا مقدار s برابر ‘108765’ است. Val(String, Integer or real) یک نوع داده رشته را به نوع داده صحیح با حقیقی معادلش تبدیل می کند


Download ppt "تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86"

Similar presentations


Ads by Google