فرترن: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
بدون خلاصۀ ویرایش
برچسب‌ها: ویرایش همراه ویرایش از وبگاه همراه
Esi Gonzalez (بحث | مشارکت‌ها)
بدون خلاصۀ ویرایش
برچسب: افزودن فضای خالی زیاد
خط ۴۲:
از مزیت‌های فورترن «تعریف متغیر در این زبان» است.
در فرترن مانندسایر زبان‌های سطح بالا مثل [[پاسکال (زبان برنامه‌نویسی)|پاسکال]] یا [[سی (زبان برنامه‌نویسی)|سی]]، صحیح یا اعشاری بودن متغیر باید تعریف شود. البته در این زبان به‌طور قراردادی متغیرهایی که با یکی از حروف زیر آغاز میشوند صحیح فرض می‌شوند و سایر متغیرها اعشاری در نظر گرفته می‌شوند.
 
===گونه‌های مختلف:===
عرضه‌کنندگان کامپیوترهای علمی عملکرد بالا(مثال:[[:en:Burroughs Corporation|باروز]]، [[:en:Control Data Corporation|شرکت داده‌های کنترل]](CDC)،(به [[زبان انگلیسی|انگلیسی]] [[:en:Cray|Cray]])، [[هانی‌ول]]، [[آی‌بی‌ام]]، [[تگزاس اینسترومنتس]]، و [[:en:UNIVAC|یونی‌وک]]) افزونه‌های فورترن را اضافه کردند تا از قابلیت‌های سخت‌افزاری مانند حافظه نهان دستور، [[خط لوله (رایانش)|خط لوله‌های]] (به [[زبان انگلیسی|انگلیسی]] [[:en: pipeline (computing)| pipeline]]) [[واحد پردازش مرکزی]] ، و آرایه‌های برداری بهره ببرند. برای مثال، یکی از کامپایلرهای فورترن شرکت آی‌بی‌ام، سطحی از بهینه‌سازی را داشت که ترتیب دستورهای را عوض می‌کرد تا واحدهای محاسباتی داخلی مختلف را همزمان مشغول نگه دارد.
 
یک مثال دیگر CFD است، یک گونه‌ی خاص از فورترن که مخصوص ابرکامپیوتر ایلیاک ۴ (به [[زبان انگلیسی|انگلیسی]] [[:en:ILLIAC IV|ILLIAC IV]]) ساخته شده است. این کامپیوتر در [[مرکز تحقیقات ایمز]] متعلق به [[ناسا]] قرار دارد.هم چنین آزمایشگاه‌های تحقیقاتی آی‌بی‌ام، یک نسخه‌ی توسعه‌یافته از یک زبان مبتنی بر فورترن به نام ''وکترن'' را برای پردازش بردارها و ماتریس‌ها ایجاد کردند.
 
[[:en:Object-Oriented Fortran|فورترن شیءگرا]] یک افزونه شیءگرا از فورترن بود که در آن می توانستیم داده‌ها را در اشیاء مختلف گروه‌بندی کنیم. نمونه‌های اشیاء می‌توانستند به صورت موازی با یکدیگر ساخته شوند و توابعشان را اجرا کنند. فورترن شیءگرا برای کامپیوترهای [[سان میکروسیستمز| سان]]، [[:en:Iris|آیریس]]، [[:en:iPSC|آی‌پی‌اس‌سی]] و [[:en:NCUBE|انکیوب]] موجود بود، اما الان دیگر پیشتیبانی نمی‌شود.
 
افزونه‌های این‌چنینی که مختص یک یا چند ماشینند یا در طول زمان از بین رفتند، یا عناصری از آنها در استانداردهای اصلی گنجانده شد. مهم‌ترین افزونه‌ی باقی‌مانده [[اپن ام‌پی]] است که یک افزونه‌ی چند‌پلتفرمه برای برنامه‌نویسی با حافظه‌ی مشترک است. [[:en:Coarray Fortran|کواَرِی فورترن]] یک افزونه جدید است که برای پشتیبانی برنامه‌نویسی موازی در نظر گرفته شده.
 
===FOR TRANSIT برای ماشین آی‌بی‌ام ۶۵۰===
 
[[:en:FOR TRANSIT|فور ترنزیت]] یک نسخه ی ساده شده از زبان فورترن ماشین [[:en:IBM 704|آی‌بی‌ام ۷۰۴]]بود، که برای ماشین [[آی‌بی‌ام ۶۵۰]] پیاده‌سازی شد. برای این کار از یک برنامه‌ی مترجم ساخت دهه ۱۹۵۰ دانشگاه کارنگی استفاده شد. توضیح زیر در راهنمای مرجع آی‌بی‌ام آمده است
<ref>"Internal Translator (IT) A Compiler for the IBM 650",
by A. J. Perlis, J. W. Smith, and H. R. Van Zoeren, Computation Center,
Carnegie Institute of Technology
</ref>
( سیستم خودکار برنامه‌نویسی فور ترنزیت C28-4038 متعلق به آی‌بی‌ام، کپی رایت 1957 و 1959)
<blockquote>
سیستم فورترن برای ماشینی پیچیده‌تر از ماشین [[آی‌بی‌ام ۶۵۰]] ساخته شده بود، و بنابراین بعضی از ۳۲ دستور موجود در راهنمای برنامه‌نویسان فورترن برای سیستم فور ترنزیت مورد قبول نیستند. بعلاوه، برخی محدودیت‌ها به زبان فورترن اضافه شده‌اند. با این حال، هیچ کدام از این محدودیت‌ها موجب آن نمی‌شوند که یک کد منبع که برای فورترن نوشته شده است برای سیستم فورترن ماشین [[:en:IBM 704|آی‌بی‌ام ۷۰۴]] ناسازگار باشد.
</blockquote>
دستورهای مجاز این ها بودند:
 
* دستورهای مقداردهی محاسباتی، مثل <code>a = b</code>
* {{code|GO to n}}
* <code>GO TO (n<sub>1</sub>, n<sub>2</sub>, ..., n<sub>m</sub>), i</code>
* <code>IF (a) n<sub>1</sub>, n<sub>2</sub>, n<sub>3</sub></code>
* {{code|PAUSE}}
* {{code|STOP}}
* <code>DO n i = m1, m2</code>
* {{code|CONTINUE}}
* {{code|END}}
* {{code|READ n, list}}
* {{code|PUNCH n, list}}
* {{code|DIMENSION V, V, V, ...}}
* {{code|EQUIVALENCE (a,b,c), (d,c), ...}}
 
در هر برنامه استفاده از حداکثر ۱۰ [[رویه (علوم رایانه)|رویه (زیرروال)]] ممکن بود.
دستورهای FOR TRANSIT به ستون ۷ تا ۵۶ [[کارت پانچ]] (به [[زبان انگلیسی|انگلیسی]] [[:en:Punched Card]]) محدود می شدند.کارت پانچ‌ها به عنوان ورودی و خروجی [[آی‌بی‌ام ۶۵۰]] استفاده می شدند. سه بار عبور لازم بود تا کد منبع به زبان "IT" ترجمه شود، و بعد دستورهای IT کامپایل شده و به [[زبان اسمبلی]] سوپ(SOAP) ترجمه شود، و نهایتا برنامه به زبان مقصد ([[کد ماشین]]) تولید شود، بعد می توان آن را درون ماشین بارگذاری کرد تا برنامه را اجرا کند (برای داده ورودی از کارت پانچ استفاده می شود، نتیجه را هم روی کارت پانچ خروجی می‌دهد)
 
===زبانهای مبتنی بر فورترن===
قبل از فورترن ۷۷، به طور معمول تعدادی [[پیش‌پردازنده]] برای میسر ساختن یک زبان مناسب تر مورد استفاده قرار می گرفتند، با این مزیت که کد پیش پردازش شده می توانست روی هر ماشینی که یک کامپایلر استاندارد فورترن داشت کامپایل شود. این پیش پردازنده ها معمولا از برنامه نویسی ساختاریافته، اسامی با طول بیش از ۶ کاراکتر برای متغیرها، [[نوع داده|نوع داده‌های]] اضافه، [[کامپایل شرطی]] برنامه، و حتی قابلیت‌های [[ماکرو (رایانه)|ماکرو]] پشتیبانی می کردند. پیش‌پردازنده‌های متداول شامل {{یادکرد وب |نام خانوادگی= |نام= |عنوان=FLECS |نشانی=https://try-mts.com/ratfor-flecs-language-features/|اثر= |تاریخ= |ناشر= |نشانی بایگانی= |تاریخ بایگانی= |کد زبان=en }}, [[:en:Iftran|ایفترن]] ,[[:en:MORTRAN|مورترن]], SFtran, S-Fortran, [[رتفور (زبان برنامه‌نویسی)|رتفور]] و [[:en:Ratfiv|رتفیو]] می‌شدند. برای مثال، رتفور و رتفیو یک زبان شبیه [[سی (زبان برنامه‌نویسی)|سی]] پیاده سازی می‌کردند و کد پیش‌پردازش‌شده را به زبان فورترن ۶۶ خروجی می‌دادند. علی رغم پیشرفت‌ها در زبان فورترن، پیش‌پردازنده‌ها هم چنان برای کامپایل شرطی برنامه‌ها و جایگزینی ماکروها مورد استفاده قرار می‌گیرند.
 
یکی از افزونه های فورترن که برای پشتیبانی برنامه نویسی سیستم ها عرضه شد، زبان ‌[[LRLTRAN]] در [[آزمایشگاه ملی لارنس برکلی]] و با هدف پشتیبانی از محاسبات برداری و ذخیره‌سازی پویا ایجاد شد. این توزیع، سیستم عامل [[LTSS]] را شامل می شد.
بسیاری از کامپایلرهای فورترن، بخش هایی از[[:en:C preprocessor|پیش‌پردازنده‌ی سی]] را در خود ادغام کرده‌اند.[[:en:SIMSCRIPT|سیم‌اسکریپت]] یک پیش‌پردازنده‌ی فورترن مخصوص کاربردهای خاص برای مدلسازی و شبیه‌سازی سیستم‌های گسسته‌ (به [[زبان انگلیسی|انگلیسی]] [[:en:Discrete System]]) بزرگ است.
 
[[اف (زبان برنامه‌نویسی)|زبان برنامه نویسی F]] طراحی شد تا زیرمجموعه مرتبی از فورترن ۹۵ باشد که هدفش حذف کردن قابلیت های زائد، بدون‌ساختار و منسوخ‌شده‌ی فورترن، مثل دستور {{code|EQUIVALENCE}} بود. اف قابلیت های آرایه را که در فورترن ۹۰ اضافه شده بود حفظ می کند و دستورهای کنترلی ای که توسط مفاهیم [[برنامه‌نویسی ساخت‌یافته]] منسوخ شده بودند را حذف می کند. این دستورهای هم به فورترن ۷۷ اضافه شده بودند هم به فورترن ۹۰. سازندگان زبان اف آن را "یک زبان برنامه نویسی کامپایل شده و ساختاریافته برای آرایه‌ها توصیف کردند که "خصوصا برای آموزش و محاسبات علمی مناسب است".<ref>{{cite web | url=http://www.fortran.com/F/index.html | title= F Programming Language Homepage|publisher=Fortran.com|accessdate=19 November 2014}}</ref>
 
[[لاهی]] و [[فوجیتسو]] تیم مشترک تشکیل دادند تا یک زبان فورترن برای [[چارچوب دات‌نت]] مایکروسافت خلق کنند.
<ref>{{cite web | url=http://www.lahey.com/lf71/lfnet.htm | title=Fortran for .NET Language System | url-status=dead | archiveurl=https://web.archive.org/web/20141018201259/http://www.lahey.com/lf71/lfnet.htm | archivedate=18 October 2014 | df=dmy-all }}</ref>
زبان [[Silverfrost FTN95]] هم توانایی ایجاد کد دات‌نت را دارد.
<ref>{{cite web | url=http://www.silverfrost.com/11/ftn95_overview.aspx | title=FTN95: Fortran 95 for Windows|publisher=Silverfrost.com|accessdate=19 November 2014}}</ref>
===نمونه کد===
 
اطلاعات بیشتر در: {{یادکرد وب |نام خانوادگی= |نام= |عنوان=مثال‌های فورترن |نشانی=https://en.wikibooks.org/wiki/Fortran/Fortran_examples|اثر= |تاریخ= |ناشر= |نشانی بایگانی= |تاریخ بایگانی= |کد زبان=en }}
 
برنامه زیر تخصیص حافظه‌ی پویا و عملیات روی آرایه‌ها را شرح می‌دهد که دو قابلیت معرفی شده در فورترن ۹۰ هستند. به طور خاص نبود حلقه‌های {{code| DO}} و دستورهای {{code| IF/THEN}} برای تغییر دادن آرایه شایان ذکر است که در عوض عملیات ریاضی روی کل آرایه به عنوان یک موجودیت اعمال می‌شود. بعلاوه، نامگذاری متغیرها به گونه ای که نام متغیر، آن را توصیف کند، و قالب کلی کد که مطابق با شیوه برنامه‌نویسی امروزی است نیز آشکار است. این مثال، میانگین داده‌هایی که در تعامل با کاربر از ورودی گرفته می‌شود را محاسبه می‌کند.
 
<syntaxhighlight lang="fortran">
program average
 
! تعدادی عدد را از ورودی می‌خواند و میانگینش را می‌دهد
! همانطور که نوشته شده، اگر هیچ داده‌ای موجود نباشد، صفر را به عنوان میانگین برمی‌گرداند
! ممکن است در آن حالت برگرداندن میانگین صفر رفتار مطلوب برنامه نباشد، اما این کار باعث سادگی برنامه می شود
 
implicit none
 
real, dimension(:), allocatable :: points
integer :: number_of_points=0.0
real :: average_points=0., positive_average=0., negative_average=0.
 
! تعداد اعداد را از ورودی دریافت می‌کند و در متغیر number_of_points می ریزد
write (*,*) "Input number of points to average:"
read (*,*) number_of_points
allocate (points(number_of_points))
 
write (*,*) "Enter the points to average:"
read (*,*) points
 
! با بدست آوردن مجموع اعداد و تقسیم آن بر تعدادشان، میانگینشان را به دست می‌آورد
if (number_of_points > 0) average_points = sum(points) / number_of_points
 
! مجموع اعداد بزرگتر از صفر را پیدا می کند و تقسیم بر تعدادشان می‌کند که می شود میانگین اعداد مثبت
if (count(points > 0.) > 0) then
positive_average = sum(points, points > 0.) / count(points > 0.)
end if
 
! مجموع اعداد کوچکتر از صفر را پیدا می کند و تقسیم بر تعدادشان می‌کند که می شود میانگین اعداد منفی
if (count(points < 0.) > 0) then
negative_average = sum(points, points < 0.) / count(points < 0.)
end if
 
deallocate (points)
 
! حالا نتیجه رادر خروجی چاپ می‌کند
write (*,'(a,g12.4)') 'Average = ', average_points
write (*,'(a,g12.4)') 'Average of positive points = ', positive_average
write (*,'(a,g12.4)') 'Average of negative points = ', negative_average
 
end program average
</syntaxhighlight>
 
== جستارهای وابسته ==