340 likes | 600 Views
Introduction to Fortran 90/95. پاییز 1390. مشخصات درس. نام : مبانی برنامهسازی کامپیوتر (فرترن) تعداد واحد : 3 پیشنیاز : ریاضی 1 اهداف درس : آشنایی با مبانی برنامهسازی تحلیل یک مساله تهیه الگوریتم آن تبدیل آن نمودن به کد ( code ) آشنایی با یک زبان برنامهنویسی (فرترن)
E N D
Introduction to Fortran 90/95 پاییز 1390 دانشگاه صنعت آب و برق
مشخصات درس • نام: مبانی برنامهسازی کامپیوتر (فرترن) • تعداد واحد: 3 • پیشنیاز: ریاضی 1 • اهداف درس: • آشنایی با مبانی برنامهسازی • تحلیل یک مساله • تهیه الگوریتم آن • تبدیل آن نمودن به کد (code) • آشنایی با یک زبان برنامهنویسی (فرترن) • حل مسایل علمی و مهندسی به شیوه عددی دانشگاه صنعت آب و برق
نحوه ارزيابي درس • ارزیابی درس به صورت زیر انجام خواهد شد. • امتحان میان ترم: • 30 درصد • تاریخ: 1389/9/15 • امتحان پایان ترم • 70 درصد • تاریخ: 1389/10/26 • نمره نهایی: Max{0.3midterm+0.7final, final} تاریخ کلاس حل تمرین بهزودی مشخص خواهد شد. دانشگاه صنعت آب و برق
مراجع و ماخذ • مبانی کامپیوتر و الگوریتمها، نوشته جعفرنژادقمی و کریمپور، ناشر: علوم رایانه • فرترن 90، نوشته دکتر مشعل، انتشارات جهاد دانشگاهی • فرترن 90 برای رشتههای علوم و مهندسی، ترجمه: دکتر محمود صالح، ناشر: دانشگاه امام حسین • کتاب آموزشی Fortran 90/95 ترجمه امید ناصرقدسی و امید ممتاز،انتشارات ناقوس • برنامهنویسی به زبان Fortran 90/95 برای رشتههای علوم و مهندسی تالیف: موسویندوشنی، ناشر: دانشگاه صنعت آب و برق دانشگاه صنعت آب و برق
مراحل ایجاد یک برنامه • تعریف و شناخت کامل مساله • ایجاد الگوریتم برنامه • تبدیل الگوریتم به یک زبان برنامهنویسی (مثلا فرترن) یا نوشتن کدها (codes) • ترجمه کدها به زبان ماشین (compile) • ایجاد یک فایل اجرایی (*.exe) • اجرای برنامه و رفع خطاهای احتمالی آن • مستند نمودن برنامه دانشگاه صنعت آب و برق
فلوچارت (روندنما) جمع و ضرب دو عدد دانشگاه صنعت آب و برق
تاریخچه زبان فرترن FORmula TRANslation invented 1954–8 by John Backus and his team at IBM FORTRAN 66 (ISO Standard 1972) FORTRAN 77 (1980) Fortran 90 (1991) Fortran 95 (1996) Fortran 2003 (2004) Fortran 2008 (ongoing) دانشگاه صنعت آب و برق
Fortran Alphabets • حروف • A B C D E F… • a b c d e f… • فرترن نسبت به حروف کوچک و بزرگ حساس نیست. • اعداد • 0 1 2 3 4 5 6 7 8 9 • نویسههای یا کاراکترهای خاص • , “ ( ) * + - / : = - ! & $ ; < > ? . % _ blank دانشگاه صنعت آب و برق
متغیرها • در زبان برنامهنویسی از عناصری به نام متغیر استفاده میشود که در واقع برای ذخیره محلی را ایجاد میکند. متغیرها به صورت زیر ساخته میشود. • یک متغیر میتواند حداکثر دارای 31 کاراکتر باشد. • اولین کاراکتر یک متغیر الزاما باید حرف باشد. • بقیه کاراکترها میتواند فقط عدد، حرف و یا زیرخط (underline) باشد. • از واژههای رزرو شده و یا کلید واژهها، به عنوان نام متغیر نمیتوان استفاده نمود. • مثالهای درست: • Conut, Ali • X900g, I1025 • R2_D2, R2D2_ • مثالهای غلط: • M.t.u, R2-D2 • 6feet • _system • A_name_made_up_of_more_than_31_letters • too long, 38 characters دانشگاه صنعت آب و برق
انواع مشخصکنندهها • مشخصکنندهها اشیاء متفاوتی هستند که در یک زبان برنامهنویسی به کار میرود. فرترن 90 بطور کلی دارای دو نوع مشخصکننده به شرح زیر است: • مشخصکنندههای عددی • صحیح • حقیقی • مختلط • مشخصکنندههای غیرعددی • کاراکتر • منطقی دانشگاه صنعت آب و برق
انواع مشخصکنندههای عددی • integer • correct: 0, -345, 789, +1234 • incorrect: 12.0, --4, 5+ • real • correct: 123.45, .123, 123., -0.12, +0.12 • incorrect: 65 • complex • x+iy دانشگاه صنعت آب و برق
انواع مشخصکنندههای غیرعددی • character • correct: 'Ali' or "Ali" (content: Ali and length: 3), 'Ali is #2' (content: Ali is #2 and length: 9) • special case: 'Ali''s apple' (content: Ali’s apple and length: 11) • incorrect: 'you and me, 'Tech's seminar', 'have a nice day" • Correct: "Ali's apple" • مطلبی که در داخل آپاستورف قرار میگیرد، یک رشته (string) نامیده میشود. • Logical • برای مواردی مورد استفاده قرار میگیرد که شی مورد نظر درست یا غلط است. • A<0 (True or False) • .TRUE., .FALSE. دانشگاه صنعت آب و برق
اعلام نوع مشخصکنندهها • در ابتدای هر برنامه باید مشخصکنندهها را معرفی نمود وگرنه فرترن از پیشفرضهای خود استفاده میکند. گرامر (syntax) به شرح زیر است: • Integer :: j, icount • Real :: wide, angle • Logical :: try • Character(Len = 5) :: name • Character(Len = 10) :: city, nation*20, box, bug*1 • Character :: answer, marital_status • answer and marital_status are each of length 1 • علامت :: جداکننده واژههای integer، real، logical و characterاز متغیرها میباشد. دانشگاه صنعت آب و برق
دنباله اعلام نوع مشخصکنندهها • اگر از اعلان integer و یا Real استفاده نشود. متغیرهایی که با حروف i,j,k,l,m,n شروع میشوند صحیح هستند، در غیر اینصورت حقیقی میباشند. به مثالهای زیر توجه کنید: • integer • ic, kzip, name, l_geo • real • zip, code, geo • Names starting with I–N are INTEGER • Ones with A–H and O–Z are REAL دانشگاه صنعت آب و برق
دستور implicit none اگر در ابتدای یک برنامه دستور implicit none بهکار گرفته شود. پیشفرض مربوط به اعلان انواع متغیرها کار نمیکند و باید تمام متغیرها را بدون استثناء اعلان نمود در غیر اینصورت برنامه خطا میدهد. implicit none integer :: ice, coke real :: var, kind دانشگاه صنعت آب و برق
مقدار اولیه یا آغازین متغیرها با مقادیر نامعین شروع میشوند و ممکن است در مترجمهای مختلف مقادیر متفاوتی اختیار کنند. مقادیر اولیه خیلی شبیه مقادیر ثابت هستند، اما بدون داشتن خصوصیت parameter Integer :: count = 0, I = 5, J = 100 Real :: max = 1005.25, min = -0.01 Character(Len=10) :: light = ’Amber’ Logical :: red = .TRUE., blue= & .FALSE., green = .FALSE. دانشگاه صنعت آب و برق
اعلام یک پارامتر • برای نسبت دادن مقادیر ثابت به یک پارامتر میتوان از دستور Parameter استفاده نمود. • integer, parameter :: limit = 100 • real, parameter :: pi = 3.14159, twopi = 2*pi • integer, parameter :: month_in_a_year = 12 • توجه: اگر از نوع integer, real و ... بدون هیچ خصوصیتی استفاده شود، آنگاه گذاشتن (::) اختیاری است، اما اگر با خصوصیات دیگر توام شود، بهکارگیری (::) الزامی است وگرنه برنامه خطا میدهد. • Character(Len=*), parameter :: & • error = 'unknown' دانشگاه صنعت آب و برق
عملگرها و ترتیب آنها دانشگاه صنعت آب و برق
مثالهایی از عملگرها و ترتیب آنها • مثال 1: • X + Y * Z is equivalent to X + (Y * Z) • X + Y / 7.0 is equivalent to X + (Y / 7.0) • A – B + C is equivalent to (A – B) + C • A + B ** C is equivalent to A + (B ** C) • – A ** 2 is equivalent to – (A ** 2) • A – ((( B + C))) is equivalent to A – (B + C) • You can force any order you like • (X + Y) * Z • Adds X to Y and then multiplies by Z دانشگاه صنعت آب و برق
مثالهایی از عملگرها و ترتیب آنها • مثال 2: • A / B * C – is it A / (B * C) or (A / B) * C? • A ** B ** C – is it A ** (B ** C) or (A ** B) ** C? • Fortran specifies that: • A / B * C is equivalent to (A / B) * C • A ** B ** C is equivalent to A ** (B ** C) • Yes, ** binds from right to left! دانشگاه صنعت آب و برق
عبارت و نسبت دادن • عبارت: ترکیبی از عملگرها و متغیرها میباشد. • a+2 • b*b-4*a*c • A>B • با استفاده از علامت (=) میتوان یک عبارت را به متغیری نسبت داد. • Delta = b*b-4*a*c • Area = pi*r**2 • count = count+1 دانشگاه صنعت آب و برق
انواع عبارات عبارات صحیح Division always truncates towards zero If K = 4 and L = 5, then K+L/2 is 6 (-7)/3 and 7/(-3) are both -2 عبارات ترکیبی INTEGER :: K = 5 REAL :: X = 1.3 X = X+K/2 That will add 2.0 to X, not 2.5 K/2 is still an INTEGER expression دانشگاه صنعت آب و برق
مثالهای خاص راجع به انتساب • N = 10./3 (value of N is 3) • X = 10/3 (value of X is 3.0) • Y = 10/3. (value of Y is 3.33333) • 10./33.33333 N3 • 10/3 3 X 3. • 10/3. 3.33333 Y 3.33333 • در اینجا باید توجه نمود که اگر عدد صحیح بر عدد صحیح تقسیم شود، نتیجه آن صحیح خواهد بود اما اگر صورت یا مخرج کسر حقیقی باشد، آنگاه نتیجه آن حقیقی میباشد. دانشگاه صنعت آب و برق
توابع پیشساخته (1) دانشگاه صنعت آب و برق
توابع پیشساخته (2) دانشگاه صنعت آب و برق
نحوه نوشتن نتایج برنامه • برای نوشتن از دستورات print و یا write استفاده میشود. گرامر آنها به صورت زیر است: • print*, expr_1, expr_2, … • ستاره حاکی از این است که خروجی قالب خاصی (format) ندارد. • write(*,*) expr_1, expr_2, … • ستاره دوم مانند بالا عمل میکند. • ستاره اول حاکی ازاین است که نتایج روی صفحه نمایش چاپ میگردد. • در حالات زیر چیزی چاپ نمیشود و فقط یک سطر خالی ایجاد میگردد. • Print* • write(*,*) دانشگاه صنعت آب و برق
نحوه خواندن دادهها (1) • اگر دادهها داخل برنامه ارایه نشده باشد، باید دادهها را از صفحه نمایش و کلید خواند. • گرامر دستور خواندن read به شرح زیر است. • read(*,*) var_1, var_2, … • در اینجا ستاره دوم، مانند دستور write است و ستاره اول بدین معنی است که داده از صفحه کلید خوانده میشود. • هر بار که read اجرا میشود، برنامه به سطر جدید میرود. • گرامر ساده دستور read به شرح زیر است • read*, var_1, var_2, … • که ستاره حاکی از آن است که دادهها بدون قالب (format) خاصی خوانده میشود. دانشگاه صنعت آب و برق
نحوه خواندن دادهها (2) • برنامه به محض رسیدن به دستور read متوقف میشود تا دادههای مورد نظر را از طریق صفحه کلید بخواند. این دادهها را میتوان در یک سطر با فاصله تایپ نمود و یا آنها را در سطور مخلتف تایپ کرد. • تا تمام متغیرها در دستور read خوانده نشود، برنامه به کار خود ادامه نخواهد داد و نشانگر مرتب چشمک میزند. دانشگاه صنعت آب و برق
مثال یک برنامه کامل Program solve_equation Real :: a,b,c Real :: d Real :: root1, root2 ! read in coefficient a,b,c Print*,’a,b,c please:’ read*,a,b,c ! compute the square root of discriminant d d = sqrt(b*b-4*a*c) ! solve equation root1 = (-b+d)/(2*a) ! first root root2 = (-b-d)/(2*a) ! second root ! display the results write(*,*) ‘Roots are’, root1, ‘and’, root2 EndProgram solve_equation دانشگاه صنعت آب و برق
Source Code Object Code User Library Executable Code Text Editor Phase I: Translation Compiler lib Phase II: Linkage link Phase III: Execution system دانشگاه صنعت آب و برق