ساختمان داده :1آرایه تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86 1 مروری بر مطالب برای ذخیره کردن یک متغیر از نوع های ساده تنها از یک سلول حافظه استفاده می شود. نوع های ساده Integer,real,char,boolean : برای ذخیره کردن داده های وابسته باید از متغیرهای مجزا با نام های مختلف استفاده کرد. مختصات یک نقطه x,y : مختصات 100نقطه x1,y1,x2,y2,x3,…,x100,y100 : ؟ استفاده از ساختمان داده مرکب 2 آرایه ساختمان داده ای است که تعدادی دادة هم نوع در آن ذخیره می شود. مجموعه ای از داده ها تحت یک نام مشترک استفاده می شوند. می توان به تک تک اعضا دسترسی پیدا کرد و همانند متغیرهای ساده مورد پردازش قرار داد. برای دسترسی به هر یک از اعضای آرایه ،از یک اندیس استفاده می شود. اندیس باید از نوع داده های قابل شمارش باشد 3 چگونگی تعریف یک آرایه Var ; نوع داده ] ofمحدوده [ : Arrayنام آرایه 4 )چگونگی تعریف یک آرایه (ادامه Var a : Array [ 1 .. 100 ] of Integer ; b : Array [ -10 .. 20 ] of Real; x : Array [ 0 .. 10 ] of Boolean; y : Array [ ‘a’ .. ‘z’ ] of Real; 5 چگونگی تعریف یک آرایه (ادامه) نوع اندیس می تواند از انواع ،Boolean ،charنوع دادة شمارشی و یا بازه ای از اعداد انتخاب شود. از نوع های realو Integerنمی توان به عنوان اندیس استفاده کرد .اما از بازه ای از اعداد صحیح می توان به عنوان اندیس استفاده نمود. برای هر یک از اندیس های آرایه ،یک عنصر می توان در نظر گرفت. نوع داده همه عناصر یکسان است و در محل های پشت سر هم در حافظه اصلی ذخیره می شوند. 6 دسترسی به اعضا ] :اندیس[نام آرایه ]a[100 ]b[-9 ]’x[‘x اندیس باید با نوعی که در قسمت تعیین نوع آرایه برای اندیس تعیین شده سازگار باشد و در محدوده صدق کند. 7 )دسترسی به اعضا ( ادامه 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] 2.0 X[3] 12.5 28.6 8 X[4] 1.3 X[5] 54.4 خطاهای دسترسی Index expression out of bound هنگامی رخ می دهد که اندیس دسترسی خارج از محدوده باشد Index type is not compatible with declaration در صورتی که نوع داده عبارت ،با اندیس همخوانی نداشته باشد 9 دسترسی ترتیبی می توان با تعریف و افزایش متغیری از نوع داده محدوده به اعضای آرایه به ترتیب دسترسی پیدا کرد. For i:=1 to n do )]readln(x[i 10 بررسی مساوی بودن دو آرایه Var n : Integer; x, y : array [ 1 .. 40 ] 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. 11 رشته ای را دریافت کند و تعداد حروف: مثال تکراری آن را مشخص نماید (حروف کوچک و )بزرگ فرقی با هم نداشته باشند 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 12 مثال :لیستی از مختصات نقاط را دریافت کند و با دریافت ’ ‘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 13 مثال :یک ماشین حساب 30رقمی که قادر به انجام فقط جمع و تفریق است را شبیه سازی نمایید دو عدد حداکثر 30رقمی را دریافت و ذخیره کند دو عدد ذخیره شده را با یکدیگر جمع نماید دو عدد ذخیره شده را از هم کم کند 14 رقمی از ورودی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. 15 رقمی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]); 16 رقمی با فرض بزرگتر30 تفریق دو عدد: مثال بودن عدد اول .... carry := 0; for i:=1 to 30 do begin if (num1[i]-num2[i]-carry)<0 then begin res[i]:=(num1[i]+9-num2[i]); carry:= 1; end else begin res[i] := num1[i]-num2[i]-carry; carry := 0; end; end; for i:=max downto 1 do write(res[i]); ... 17 2 رقمی در مبنایn شمارنده: مثال 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]) … 18 زیرمجموعه های ممکن یک مجموعه از: مثال کاراکتر را چاپ نماید 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]); 19 آرایه های ثابت Const = نوع داده ] ofمحدوده [ : Arrayنام آرایه ; ) مقدار آخر , … ,مقدار دوم ,مقدار اول ( مثال : Const ;) a : Array [ 1 .. 4 ] of Integer = ( 2 , -5 , 17 , 0 ;) ’?‘ b : Array [ 0 .. 2 ] of Char = ( ‘a’ , ‘2’ , ; ’?c : Array [ 0 .. 2 ] of Char = ‘a2 20 چاپ نام بر اساس شماره ردیف Const Name : Array [ 1 .. 5 ] of String = ( ‘Majedi’ , ‘Rahnama’ , ‘Ganji’ , ‘Miran’ , ‘Nazari’ ); Var n : Intger; Begin Readln ( n ); Writeln ( Name [ n ] ); End. 21 تعریف یک نوع داده Type ; نوع داده جدید = نام دلخواه Var ; همان نام دلخواه :نام متغیر Type ; Days = 1 .. 31 ; ’Letters = ‘A’ .. ‘Z’ , ‘a’ .. ‘z Var ;a, b : Days ;c : Letters 22 چند تابع بر روی string )Upcase(s حروف کوچک در رشته ورودی را به حروف بزرگ تبدیل می کند. )Str (Integer or real, String یک نوع داده صحیح را به نوع داده رشته معادلش تبدیل می کند. ;) Str(108765,sبعد از اجرا مقدار sبرابر ’ ‘108765است. )Val(String, Integer or real یک نوع داده رشته را به نوع داده صحیح با حقیقی معادلش تبدیل می کند 23
© Copyright 2025 Paperzz