تور لحظه آخری
امروز : یکشنبه ، 11 آذر 1403    احادیث و روایات:  امام صادق (ع):خداوند روزه را واجب كرده تا بدين وسيله دارا و ندار (غنى و فقير) مساوى گردند.
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

آراد برندینگ

خرید یخچال خارجی

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

قیمت سرور dl380 g10

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

ساختمان پزشکان

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

خرید سرور مجازی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

قیمت بالابر هیدرولیکی

لوله و اتصالات آذین

قرص گلوریا

نمایندگی دوو در کرج

خرید نهال سیب

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

وکیل ایرانی در استانبول

رفع تاری و تشخیص پلاک

پرگابالین

دوره آموزش باریستا

مهاجرت به آلمان

بهترین قالیشویی تهران

 






آمار وبسایت

 تعداد کل بازدیدها : 1836201557




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

نیاز فوری(الگریتم و فلوچارت) -


واضح آرشیو وب فارسی:سایت ریسک: نیاز فوری(الگریتم و فلوچارت) pilevar 29 تير 1386, 10:18سلام کسی میتونه توی جواب این سوال کمکم کنه؟ اگر امان داره شبه کد(الگریتم) اونو برای نوشتنش بهم کمک کنید. البته من در نهایت باید فلوچارتشو رسم کنم. سوال اینه: الگریتمی بنویسید که n عدد را بگیرد آنها را به صورت سعودی مرتب کند. اگر این چور چیزی رو کد visualbasic یا ++C اش رو دارین بزارین متشکر میشم. از روی همون کد ،فلوشچارتشو در میارم. ممنون :cry::cry::cry::cry::cry::cry::cry::cry::cry::cry: :cry: hossein_salehi 29 تير 1386, 14:03سلام. اول یه توضیح در مورد مرتب سازی به روش merge یا ادغام: اصول کار : اگر مجموعه ای از اعداد داشته باشیم و آن را به 2 بخش تقسیم کنیم و هر بخش را جداگانه مرتب کنیم و حاصل را به گونه ای ادغام کنیم که این ترتیب در آن مجموعه حاصله هنوز مرتب باشد در این حالت کل مجموعه مرتب شده به حساب می آید. یه سوال که مطرح میشه اینه که خوب حالا به فرض اونو به 2 بخش تقسیم کردیم - هر بخش به چه صورت مرتب شوند؟ جواب : مشخص است هر بخش نیز به همان صورت مرتب میشود ( 2 تیکه شدن ). یعنی هر بخش کوچکتر هم باید کوچکتر شود و مرتب الی آخر. یه سوال دیگر : این تیکه تیکه کردن داده های خانه آرایه مثلا تا کجا ادامه پیدا کنه ؟ خوب مسلمه که اگر به عنصر تک عضوی رسیدیم دیگه نمیشه اونو 2 تیکه کرد. پس کار خرد شدن ادامه پیدا میکنه تا به یه عنصر ( مثلا یک عدد در خانه ای از خانه های حافظه ) برسیم. ببینید سعی میکنیم این 2 تیکه کردن ها مساوی باشند ( در هر طرف تقسیم تعداد مساوی خانه حافظه یا آرایه قرار گرفته شده باشد ) - دلیلی نداره مساوی تقسیمشون نکنه وقتی .... مراحل کار رو به صورت زیر ادامه میدهیم: - اگر تعداد داده ها یک یا کمتر شد دیگر نیازی به مرتب سازی نیست و برگرد. - وسط داده ها را پیدا کن. - نیمه اول داده ها را به روش Merge Sort مرتب کن. - نیمه دوم داده ها را به روش Merge Sort مرتب کن. - دو نیمه مرتب شده را به گونه ای ادغام کن که حاصل مرتب باشد! کد الگوریتم merge sort : void mergesort (int low,int high) { int mid; if(low<high){ mid=(low+high)/2; mergesort(low,mid) mergesort(mid+1,high); merge(low,mid,high); } زیر الگوریتم merge که در خط آخر الگوریتم بالا میبینید استفاده شده کارش اینه که دو بخش مرتب شده آرایه را با هم ادغام کند به گونه ای که حاصل هم مرتب باشد. فرض کنید شما به تعداد N تا عدد از کاربر با یه حلقه for دریافت کردین و اونو تو یه آرایه گذاشتین که اسم آرایه هم A هست. mergesort(low,mid) این کد بالا شامل بخش اول آرایه A از محل Low تا Mid و بخش دوم آن از Mid+1 تا high را شامل میشود. نکته : چون همل ادغام را نمیشود به صورت درجا انجام داد ( نمیشود همون آرایه که داریم روی آن کار میکنیم بدون خانه حافظه کمکی هم از آن بخ.انیم هم آن را ادغام کنیم ) بنابراین نیاز به یک آرایه کمکی هست به نام B از نوع A و با همان اندازه A. یه مثال میزنم : آرایه ای 10 عنصری به نام A دارم که عناصر 0 تا 4 آن مرتب و عناصر 5 تا 9 هم مرتب هستند. میخواهیم این دوبخش را ادغام کرده و در آرایه B قرار دهیم. A={350,365,390,500,700,340,400,450,490,495} در این وضعیت low=0 , mid=4 , mid+1=5 , high=9 میباشند. برای ادامه کار سه متغییر به نامهای h , i , j تعریف میکنم و نقش های زیر را به آنها میدهیم : h=low محلی از اولین بخش آرایه A که داده آن باید بررسی گردد. j=mid+1 محلی از دومین بخش آرایه A که داده آن باید بررسی گردد. i=low محلی از آرایه B که داده جدید باید در آن ریخته شود. کار : کافی است که داده محل h و داده محل j آرایه A را با هم مقایسه کنیم و آن را که کوچکتر است در محل i آرایه B قرار دهیم. سپس اگر داده محل h کوچکتر بوده است به h یکی اضافه شود و اگر داده محل j کوچکتر بوده است به j یکی اضافه شود. اگر 2 داده مساوی بودند فرقی ندارد که کدامیک انتخاب شود. وچون در آرایه B هم عددی درج شده باید به i یک واحد اضافه شود.عملیات را با h,i,j جدید ادامه میدهیم تا یکی از 2 بخش آرایه A تمام شود. مشخص است که بقیه داده های بخش نا تمام آرایه A باید به همان ترتیب به آرایه B منتقل شوند. ادامه مثال بالا : LEFT]A={350,365,390,500,700,340,400,450,490,495}[/LEFT] h=0 --- j=5 LEFT]B={ , , , , , , , , , }[/LEFT] i=0 پس از انجام اولین مقایسه نتیجه این گونه خواهد بود : LEFT]A={350,365,390,500,700,340,400,450,490,495}[/LEFT] h=0 --- j=6 LEFT]B={340, , , , , , , , , }[/LEFT] i=1 پس از انجام دومین مقایسه نتیجه این گونه خواهد بود : LEFT]A={350,365,390,500,700,340,400,450,490,495}[/LEFT] h=1 --- j=6 LEFT]B={340,350, , , , , , , , }[/LEFT] i=2 اگر این عملیات را برای 6 بار انجام دهید نتیجه زیر بدست می آید: LEFT]A={350,365,390,500,700,340,400,450,490,495}[/LEFT] h=3 --- j=10 LEFT]B={340,350,365,390,400,450,490,496, , }[/LEFT] i=8 در این مرحله بخش دوم آرایه تمام شده است و اعداد باقیمانده بخش اول که 500 و 700 میباشد باید به B منتقل شوند و حاصل به صورت زیر خواهد بود : LEFT]B={340,350,365,390,400,450,490,496,500,700}[/LEFT] حال کافی است که داده های آرایه B را به همان ترتیب به مکان A منتقل کنیم ! حالا الگوریتم merge رو مینویسیم : void mege(int low, int mid, int high) { int h,i,j,k; int B[]; h=low; i=low; j=mid+1; while(h<=mid && j<=high){ if(A[h]<=A[j]){ B[i]=A[h]; h++; } else{ B[i]=A[j]; j++; } i++; } if(h>mid) for (k=j;k<=high;k++){ B[i]=A[k]; i++; } else for(k=h;k<=mid;k++){ B[i]=A[k]; i++; } for(k=low;k<=high,k++) A[k]=B[k]; } برای استفاده از mergesort پس از دریافت داده ها و ذخیره سازی آنها در A الگوریتم را به صورت زیر اجرا کنید : mergesort(0,n-1) شاد باشید. یا علی pilevar 29 تير 1386, 19:00حسین جان ممنون از لطفتون ولی من اینو چطوری به فلوچارت در بیارم. کمی مساله پیچیده شد. درسته گفتم کد c++ بدید ولی نه تا این حد :) ممنون میشم که به زبان الگریتم و شبه کد اینو بنویسی و بهم بدی. جبران میکنم. ممنون hossein_salehi 29 تير 1386, 19:07مراحل کار رو به صورت زیر ادامه میدهیم: - اگر تعداد داده ها یک یا کمتر شد دیگر نیازی به مرتب سازی نیست و برگرد. - وسط داده ها را پیدا کن. - نیمه اول داده ها را به روش Merge Sort مرتب کن. - نیمه دوم داده ها را به روش Merge Sort مرتب کن. - دو نیمه مرتب شده را به گونه ای ادغام کن که حاصل مرتب باشد! خواهش میکنم - الگورینتمش این بالایی بود. البته سطج کاریتون رو نگفتید - منم در سطح کارشناسی دانشگاهی یا کاردانی توضیح دادم! عزیز باید اینو درش بیارین دیگه ! البته به روش ساده تری هم میشه برنامه اش رو نوشت! مثلا استفاده از 2 حلقه FOR تو در تو ... - اینو میخواید ؟ اما خوب روش استاندارد بالایی بود تقریبا ! ( البته روش Quick sort هم بود که سخت تر بود ) pilevar 29 تير 1386, 19:30خواهش میکنم - الگورینتمش این بالایی بود. مثلا استفاده از 2 حلقه FOR تو در تو ... - اینو میخواید ؟ آخ حسین جان زدی تو خال. من اینو میخام. توی فلوچارت که Merge Sort نداریم. ممنون میشم که تا امشب کمکم کنی. hossein_salehi 29 تير 1386, 19:51void bubblesort(int a[], constint n) { int i,j,t; int switched=1; for(i=n-1;i>0 && switched;i--) { switched=0; for(j=0;j<i;j++) if(a[j]>a[j+1]) { switched=1; t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } hossein_salehi 29 تير 1386, 20:28#include <stdlib.h> #include <stdio.h> #include <time.h> #define ARRAY_SIZE 20 void print_array(int *array) { int x; for(x = 0; x < ARRAY_SIZE; x++) { if(x != ARRAY_SIZE-1) fprintf(stdout, "%d, ", array[x]); else fprintf(stdout, "%d ", array[x]); } } int main() { int iarray[ARRAY_SIZE]; int x, y, holder; // Seed rand() srand((unsigned int)time(NULL)); for(x = 0; x < ARRAY_SIZE; x++) iarray[x] = (int)(rand() % 100); fprintf(stdout, "Before Sort --------------- "); print_array(iarray); // Bubble sort method. for(x = 0; x < ARRAY_SIZE; x++) for(y = 0; y < ARRAY_SIZE-1; y++) if(iarray[y] > iarray[y+1]) { holder = iarray[y+1]; iarray[y+1] = iarray[y]; iarray[y] = holder; } fprintf(stdout, " After Sort --------------- "); print_array(iarray); } pilevar 29 تير 1386, 20:37:sad: این جور چیزی رو نمیخاستم. بیخیال. hossein_salehi 29 تير 1386, 21:12از روی همون کد ،فلوشچارتشو در میارم. یا علی کدتونم = یه چیز ساده ای هست - چرا اینقدر میپیچونیدش عزیز ؟ pilevar 31 تير 1386, 16:11عزیز منظور من این بود که n عدد رو از کاربر بگیره. یعنی خود کاربر اول بزنه 5. 5 تا از اون عدد بگیره و اونا رو مرتب بچینه پشت سر هم(به صورت سعودی) برنامه شما خودش عددی رو انتخاب میکرد. ولی ممنون چیز باحالی بود. اون قضیش اصلا به کلی بیخیالش شدم.




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 505]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن