تبلیغات
وبلاگ مهندسی عمران (مهندسی آب)
وبلاگ مهندسی عمران (مهندسی آب)
زَکاةُ العلم پَخْشُه!! البته‌با‌‌دانش‌‌وبیان‌مناسب‌و‌به‌دور‌از‌هرگونه Copy&Paste!
پاسخ به سؤال فرترن
نوشته‌شده در تاریخ دوشنبه 28 اسفند 1391 توسط محمدصادق عباسیان | نظرات ()
طبقه‌بندی: مبانی برنامه‌نویسی (فرترن)، 
برچسب‌ها: فرترن، سوال، محاسبه میانگین هندسی، مرتب کردن داده‌ها،  

سلام!
یکی از بچه‌ها توی نظرات امر فرمودن (چون جمله به حالت امری بوده عرض کردم امر فرمودن!!) که:
برنامه‌ای بنویسید که سه عدد از ورودی خوانده و میانگین حسابی و هندسی آن را محاسبه کند و در صورتی که میانگین حسابی بزرگتر از میانگین هندسی باشد اعداد را به صورت نزولی و در غیر اینصورت به صورت صعودی مرتب کرده و به همراه دو میانگین چاپ کند.
بنده هم از اونجایی که دیدم انگار این مرتب کردن (Sort) داده‌ها خیلی رو اعصاب بچه‌هاست، تصمیم گرفتم یه بار کدهاش رو توی سایت بیارم. گرچه قبلاً هم گفتم که توی فصل چهار جزوه حل تمرینی که روی همین سایت قرار داره، یک برنامه کامل با توضیحات از مرتب کردن داده‌ها آوردم. اول کدهای برنامه برای پاسخ به این سؤال رو در ادامه مطلب ببینید و بعد توضیحات رو بخونید.
توضیحات:
1- برنامه رو خیلی بهینه‌تر از این حالتی که من نوشتم می‌شه نوشت، چون که من کدهای مرتب کردن رو دو بار عیناً ‌و با یک اختلاف جزئی تکرار کردم تا مرتب کردن نزولی به صعودی تبدیل بشه. روی این قضیه فکر کنید. ضمن اینکه سعی کنید مرتب کردن رو داخل سابروتین انجام بدید.
2- دو نحوه معروف مرتب‌ کردن داده‌ها یعنی روش حبابی و روش سریع در ویراست دوم کتاب فرترن 95/90 استاد بزرگوارم دکتر موسوی اومده که می‌تونید ملاحظه کنید.
3- دقت کنید که برنامه برای سه تا عدد کار نمی‌کنه و ابتدا تعداد داده‌ها را از شما می‌پرسه و با هر تعداد داده‌ای که شما بهش بدید کار می‌کنه. لذا اگه تعداد داده‌ها زوج باشه، ضرب اعداد نباید منفی باشه، چون که در این‌صورت در محاسبه میانگین هندسی زیر رادیکال با فرجه زوج منفی می‌شه. اما جدای از این، با هر تعداد داده ورودی، هیچ‌وقت ضرب اعداد نباید منفی بشه، چون در فرترن یک عدد منفی نمی‌تونه به توان یک عدد غیرصحیح برسه. دلیل این موضوع رو می‌تونید توی کتاب دکتر موسوی ببینید.
4- دقت کنید که اگر همه داده‌ها مثبت باشند، همواره میانگین بیشتر از میانگین هندسی هست مگر اینکه همه داده‌ها برابر باشند که در این صورت دو میانگین با هم برابره.

Program Sort

Implicit None

! List of Variables

Real, Allocatable, Dimension (:) :: A !Data Array to Sort

Real :: Mean          !Arithmetic Mean

Real :: GeoMean     !Geometric Mean

Integer :: I             !Loop Index

Integer :: Iptr         !Pointer to Smallest Value

Integer :: J             !Loop Index

Integer :: Nvals = 0 !Number of Data Values to Sort

Real :: Temp         !Temporary Variable for Swapping

! Get the Name of the File Containing the Input Data

Write (*,*) "Enter Number of Input Values:"

Read*, Nvals

Allocate (A(Nvals))

Write (*,*) "Enter Input Values:"

Read (*,*) A

Mean = Sum(A) / Nvals

GeoMean = (Product(A)) ** (1./Nvals)

Compare : If (Mean > GeoMean) Then

                                      Outer : Do I = 1, Nvals - 1

                                                 !Find the Maximum

                                     !Values in A (I)

                                     !Through A (Nvals)

                                     Iptr = I

                          Inner : Do J = I + 1, Nvals

                                  If (A (J) > A (Iptr)) Then

                                     Iptr = J

                                  End If

                                  End Do Inner

                          !Iptr Now Pointer to the Minimum

                          !Value So Swap A (Iptr) With A (I)

                          !If I /= Iptr

                                      Swap : If (I /= Iptr) Then

                                    Temp = A (I) 

                                    A (I) = A (Iptr)                    

                                    A (Iptr) = Temp

                       End If Swap

                       End Do Outer

Else

                                      Outer : Do I = 1, Nvals - 1

                                                 !Find the Maximum

                                     !Values in A (I)

                                     !Through A (Nvals)

                                     Iptr = I

                          Inner : Do J = I + 1, Nvals

                                  If (A (J) < A (Iptr)) Then

                                     Iptr = J

                                  End If

                                  End Do Inner

                          !Iptr Now Pointer to the Minimum

                          !Value So Swap A (Iptr) With A (I)

                          !If I /= Iptr

                                      Swap : If (I /= Iptr) Then

                                    Temp = A (I) 

                                    A (I) = A (Iptr)                    

                                    A (Iptr) = Temp

                       End If Swap

                       End Do Outer

End IF Compare

!Write out the Sorted Data

Write (*,*) "The Arithmetic Mean =", Mean

Write (*,*) "The Geometric Mean =", GeoMean

Write (*, "(A)") "The Sorted Input Data Values Are:"

Write (*, "(4X, F10.4)") (A (I), I = 1, Nvals)

End Program



درباره‌ی وبلاگ

.::بسم الله الرحمن الرحیم::.
در این وبلاگ سعی می‌شه مطالب مختلفی در ارتباط با مهندسی عمران و به طور خاص مهندسی آب قرار داده بشه. تمام سعی بنده اینه که مطالبی رو ارائه بدم که یا حاصل تلاش خودم هست، یا اینکه مشابه اون در وبلاگ‌ها و سایت‌های فارسی پیدا نمی‌شه. بنابراین لطفاً حق کپی رایت فراموش نشه!!!

محمدصادق عباسیان
دانشجوی دکترای مهندسی عمران-آب، دانشگاه صنعتی شریف
پست الکترونیک
تماس با مدیر
RSS
ATOM
جستجو
آخرین مطالب
نوروز 1397 مبارک!
پذیرش مقاله در مجلۀ Theoretical and Applied Climatology
«یکِ عمران»: تخصصی‌ترین کانال مشاورۀ کنکور ارشد و دکتری
گفتگوی 6 از مجموعۀ «گفتگوهای آبی»
گفتگوی 5 از مجموعۀ «گفتگوهای آبی»
گفتگوی 4 از مجموعۀ «گفتگوهای آبی»
گفتگوی 3 از مجموعۀ «گفتگوهای آبی»
گفتگوی 2 از مجموعۀ «گفتگوهای آبی»
گفتگوی 1 از مجموعۀ «گفتگوهای آبی»
انتشار مقاله در مجله علمی-پژوهشی عمران مدرس
خلاصه‌های کنکور دکترای عمران آب
مشاوره رایگان کنکور کارشناسی ارشد
ارتفاع مکش کل خالص (NPSH)
رابطه بین مدت و شدت بارندگی
کلاس آموزش برنامه‌نویسی به زبان FORTRAN 90/95
آرشیو
اسفند 1396
مهر 1395
شهریور 1395
اردیبهشت 1395
فروردین 1395
بهمن 1393
مهر 1393
فروردین 1393
اسفند 1392
موضوعات
تغییر اقلیم
مقاله
«گفتگوهای آبی»
مبانی برنامه‌نویسی (فرترن)
مکانیک سیالات و هیدرولیک
هیدرولوژی
سازه
مقاومت مصالح و استاتیک
ریاضیات
مكانیك خاك
بتن
راه‌سازی و روسازی
نقشه‌برداری
اطلاع رسانی
علمی
نویسندگان
محمدصادق عباسیان
پیوندها
دانشگاه صنعتی شریف
کتاب عمران
وبلاگ فرآیندهای تصفیه‌ی آب و فاضلاب
پیوندهای روزانه
فروشگاه فایل‌های آموزشی جزوه‌ها و پروژه‌های مهندسی دانشگاه صنعتی شریف
صفحات جانبی
درباره‌ مدیر، محمدصادق عباسیان
ابر برچسب‌ها
مبانی برنامه‌نویسی فرترن سیالات هیدرولیک مقاومت مصالح و استاتیک مکانیک خاک هیدرولوژی مکانیک سیالات و هیدرولیک فرترن علمی بتن
آمار سایت
بازدیدهای امروز: نفر
بازدیدهای دیروز: نفر
كل بازدیدها: نفر
بازدید این ماه: نفر
بازدید ماه قبل: نفر
تعداد نویسندگان: عدد
كل مطالب: عدد
آخرین بازدید:
آخرین بروزرسانی:
Blog Skin