امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
الگوریتمهای برنامه نویسی از ساده به پیشرفته
نویسنده پیام
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #1
الگوریتمهای برنامه نویسی از ساده به پیشرفته
با سلام.امیدوارم دوستان همراهی کنند تا این تاپیک بار علمی زیادی رو ایجاد کنه.سعی می کنم که از هرسه روش حل مسئله(DP.D&C.GREEDY) کدهایی رو بذارم.

الگوریتمINSERTION SORT

ابتدا لیستی از اعداد را که داده شده در نظر می گیریم و عدد مورد نظر را که باید به لیست اضافه شود در مکانی موقت (TEMP)قرار می دهیم.بعد به ترتیب از آخر لیست شروع می کنیم به مقایسه کردن عدد موجود در لیست وTEMP. اگر عدد مورد نظر از TEMPبزرگتر بود آن را یک خانه به جلو شیفت می دهیم.اما اگر کوچکتر بود آنرا جایگزین خانه ی جلویی می کنیم.

پیاده سازی در c#.net

کد php:
using system;
using system.collections.generic;
using system.text;
namespace 
insertionsort
{
class 
program
{
static 
void main(string[]args)
{
insertion();
}
//*********************insertion sort****************
public static void insertion()
{
float [] A=new float[6];
console.writeline("please enter five members:");
console.writeline("\n");
for(
int j=1;j<=5;g++)
{
string str=console.readline();
float f=float.parse(str);
A[j]=f;
console.writeline("array["+j+"]"+"="A[j]+ "\n");
}
console.writeline("your array is :"+"\n");
for (
int k=1;k<=5;k++)
{
console.writeline("array[(0)]=(1)"a[k]);
}
console.write("\n");
console.write("**************insertion sort************");
console.writeline("\n");
for(
int p=2;p<=5;p++)
{
float temp=[p];
int q=p-1;
while (
q>0&&A[q]>temp)
{
A[q+1]=A[q];
q--;
}
A[q+1]=temp;
}
for(
int q=1;q<=5;q++)
{
console.writeline("sort array[(0)] = (1)",q,A[q]);
}
console.write("\n");
console.write("*****************END*************");
console.write("\n");
console.readline();
}
}


پیاده سازی در c++
کد php:
#include<iostream.h>
#include<conio.h>
class insertionsort
{
public:
float A[5];
void sort(float *A);
};
void insertionsort::sort(floatA)_
{
for(
int p=2;p<=5;p++)
{
float temp=A[p];
int q=p-1;
while(
q>&& A[q]>temp)
{
A[q+1]=A[q];
q--;
}
A[q+1]=temp;
}
}
int main()
{
clrscr();
float A[5];
insertrionsort IS;
cout<<"please Anter 5 Number:"<<andl;
for(
int i=1;i<=5;i++)
{
int n;
cin>>n;
A[i]=n;
}
cout<<"\n";
cout<<"your array is :{";
for(
int j=1;j<5;j++)
{
cout<<A[j]<<",";
}
cout<<A[5]<<"}"<<"\n";
cout<<"\n"<<"***************insertionsort*****************"<<"\n";
cout<<"\n";
IS.sort(A);
cout<<"your sorted Array As:{";
for(
int k=1;k<5;k++)
{
cout<<A[k]<<",";
}
cout<<A[5]<<"}"<<"\n\;
getch();


زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
(آخرین ویرایش در این ارسال: ۱۲-اسفند-۱۳۸۸, ۱۹:۲۳:۱۱، توسط اشک.)
۱۲-اسفند-۱۳۸۸, ۱۹:۱۹:۳۹
ارسال‌ها
پاسخ
تشکر شده توسط : HoseinVig, Di Di, t3r!p3000, فاطمه وطن دوست, moam, sararobo
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #2
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
اینم الگوریتم binary search
کد php:
void binry serch(int *A,int n,int x,int &j)
{
int low=i;high=n;mid,j=0;
while(
low<=high){
mid=(low+high)/2;
if(
x<A[mid])
high=mid-1;
else if(
x>[mid])
low=mid+1;
else{
j=mid;
return 
n;
}
}


زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
(آخرین ویرایش در این ارسال: ۱۲-اسفند-۱۳۸۸, ۲۲:۲۹:۱۵، توسط اشک.)
۱۲-اسفند-۱۳۸۸, ۲۲:۲۸:۴۸
ارسال‌ها
پاسخ
تشکر شده توسط : Di Di, t3r!p3000, فاطمه وطن دوست, moam
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #3
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
این الگوریتم ضرب یا multهست که با استفاده از روش DANDCحل شده.و ضرب دو عدد n بیتی رو بیان می کنه.
کد php:
int mult (int x,int yint n)
{
int s;
int m1,m2,m3;
int A,B,C,D;
S=sign(x)*sign(y);
x=ABS(x);y=ABS(y);
if(
n==1){
if(
x==1)&&(y==1)
return(
S);
else
return(
0);
}
else
{
A=left(x,n/2);
B=reght(x,n/2);
C=left(y,n/2);
D=right(y,n/2);
m1=mult(A,c,n/2);
m2=mult(A-B,D-C,n/2);
m3=mult(B,D,n/2);
return(
S*leftshift(m1,n)+leftshift(m1+m2+m3,n/2)+m3));
}



الگوریتم ساین،علامت یک عدد رو محاسبه می کنه.تابعABSقدر مطلق یک عدد رو بر می کردونه.توابع لفت و رایت به ترتیب به تعداد تعیین شده ،بیتهای سمت چپ و راست رو جدا می کنند.توابع leftshiftو rightshift به ترتیب به تعداد بیتهای تعیین شده عمل شیفت به چپ و شیفت به راست رو انجام می دهند.

زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
(آخرین ویرایش در این ارسال: ۱۳-اسفند-۱۳۸۸, ۱۸:۲۲:۰۵، توسط اشک.)
۱۳-اسفند-۱۳۸۸, ۰۰:۴۲:۲۱
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, lord_viper, فاطمه وطن دوست, moam, sararobo
HoseinVig آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,165
موضوع‌ها: 97
تاریخ عضویت: مرداد ۱۳۸۵

تشکرها : 4768
( 2464 تشکر در 677 ارسال )
ارسال: #4
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
سلام کار خوبیو شروع کردی
اما یا باید عنوان تاپیک رو عوض کنی یا بجای کد الگوریتم بزاری

۱۳-اسفند-۱۳۸۸, ۰۱:۰۲:۵۰
ارسال‌ها
پاسخ
تشکر شده توسط : اشک, t3r!p3000, moam, sararobo
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #5
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
الگوریتم شبه کده.من همه رو با پیاده سازی نمی ذارم.بعضیاشون رو فقط با پی کد میذارم.دوستان خودشون زحمت پیاده سازی رو بکشن.راستی سلام.Biggrin

زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۱۳-اسفند-۱۳۸۸, ۰۱:۰۸:۴۷
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, moam, sararobo
t3r!p3000 آفلاین
         
*****

ارسال‌ها: 5,050
موضوع‌ها: 83
تاریخ عضویت: اردیبهشت ۱۳۸۵

تشکرها : 34447
( 17423 تشکر در 5116 ارسال )
ارسال: #6
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
اجازه هست سوال بپرسیم !

عدد های خیلی بزرگ رو چجوری با هم ضرب می کنن !
چون جواب تو یه متغیر جا نمیشه !! ( حتی متغیر 64 بیتی )

شنیدم با آرایه این کارو می کنن !

فقط نمی دونم چجوری ؟؟؟

یکم توضیح بدین خوبه !

طوری که من بتونم رو میکرو هم پیاده کنم !
آخه میکرو محدودیت زیاد داره !
فضای استک محدوده , تابع برگشتی نمی تونم کار کنم , متغیر هام تا 32 بیت عملکرد خوبی دارن - سرعت کمه - مقدار رم و حافظه هم محدوده و ....

یکی از جاهایی که به مشکل خوردم : http://forum.iranled.com/showthread.php?...#pid114199
۱۳-اسفند-۱۳۸۸, ۰۱:۲۷:۰۴
ارسال‌ها
پاسخ
تشکر شده توسط : اشک, sararobo
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #7
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
سلام.علی عزیز من درست نمی دونم.اما چیزی که به ذهنم خطور می کنه اینه:
می تونیم عدد رو در یک مبنای خاص مثلا 2 ببریم.و چون میگی تو میکرو محدودیت زیاده شاید بهتره از همین مبنا استفاده کنی.چون هم سمبلها کمترن و .. خلاصه برای طراحی خوبه.و بعد یک آرایه باتوجه به بزرگی عددت انتخاب کنی و هرکدوم از رقمها رو توی آرایه بچینی.بعد یک کد لازمه.که وقتی می خوای عدد رو بخونی یا ازش استفاده کنی و یا بحالت اصلی برگردونی باید اون کد اجرا شه.کار اون کد اینه که عددت رو که در مبنای 2هست و در آرایه ذخیره کردی رو به مبنای 10 میبره و عدد اصلی دوباره ایجاد میشه.و هروقت خواستی عددت رو توی آرایه ذخیره کنی باید عکس اون کد رو بذاری.یعنی بردن عدد از مبنای 10 به مبنای 2.
اینم پیاده سازی :merge sort

کد php:
#include<iostream>
using namespace std;
void merge(float *B,int i,int m,int j){
float *temp=new float[j-i+1];
int s1=i,s2=m+1
int k=0;
while((
s1<=m)&&(s2<=j)){
if(
B[s1]<B[s2])
temp[k++]=B[s1++];
else
temp[k++]=B[s2++];
}
while(
s1<=m)
temp[k++]=B[s1++];
while(
s2<=j)
temp[k++]=B[s2++];
while(
k>0)
B[j--]=temp[--k];
delete[] temp;
}
void mregesort(float *A,int p,int q){
int mid;
if(
p<q){
mid=(p+q)/2;
mergesort(A,p,mid);
mergesort(A,mid+1,q);
merge(A,p,mid,q);
}
}
int main(){
float c[]={11.2,21.3,3.4,2.1,51.7,19.2,12.8,6.3,4.8,10.9,9.6};
mergesort(c,0,10);
for(
int i=0;i<=10;i++)
cout<<endl<<"c["<<i<<"]="<<c[i];
return 
0;


در merge sort مرتب سازی صورت می گیره.بصورت زیر:
عددی رو انتخاب می کنیم.بعد اون رو در خانه ی آخر که خالی هست کپی می کنیم.حالا مقایسه انجام می گیره.عددی رو که داریم با تمامی ساب لیست مقایسش می کنیم رو توی تمپ می ذاریم.به ترتیب اعداد رو با تمپ مقایسه می کنیم.اگر عنصر مقایسه شونده کوچکتر از تمپ بود تمپ رو جلوی عنصر کپی می کنیم.اگرنه خود عنصر رو در خانه ی جلویی کپی کرده و به عنصر بعدی می پردازیم..

زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
(آخرین ویرایش در این ارسال: ۱۳-اسفند-۱۳۸۸, ۱۸:۲۳:۱۵، توسط اشک.)
۱۳-اسفند-۱۳۸۸, ۱۷:۰۹:۴۰
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, lord_viper, moam, sararobo
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #8
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
اینم الگوریتم all-paths که معروفه به floyd

کد php:
void all-paths(int *cost,int *A,int n)
{
int i,j,k;
for(
i=1;i<=n;i++)
for(
j=1;j<=n;j++)
A[i,j]=cost[i,j];
for(
k=1;k<=n;k++)
for(
i=1;i<=n;i++)
for(
j=1;j<=n;j++)
if(
A[i,j]>(A[i,k]+A[k,j]))
A[i,j]=A[i,k]+A[k,j]


زمان اجرای این الگوریتم تتای n به توان 3هست.ماتریس بدست آمده در پایان الگوریتم،همان طول کوتاهترین مسیر بین i,j می باشد.

زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۱۳-اسفند-۱۳۸۸, ۱۸:۵۰:۵۴
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, HoseinVig, فاطمه وطن دوست, moam, sararobo
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #9
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
الگوریتم یافتن ماکزیمم اول و دوم از بین عناصر یک آرایه

کد php:
void maxF_s(A,p,q,maxF,maxs){
if(
p==q){maxF=maxs=A[p];}
else if(
p==q-1){
if(
A[p]<A[q]){maxF=A[q],maxs=A[p];}
else{
maxF=A[p],maxs=A[q];}
}
else{
m=[(p+q)/2];
maxF_s(A,p,m,maxF l,maxs l);
maxF_s(A,m+1,q,maxF r,maxs r);
maxF=maximum(maxF l,maxF r);
if(
maxF==maxF r)
maxs=maximum(maxF l,maxs r);
else
maxs=maximum(maxF r,maxs l);
}


زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۱۶-اسفند-۱۳۸۸, ۰۰:۴۳:۴۰
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, HoseinVig, sararobo, Di Di, فاطمه وطن دوست, moam
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #10
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
اینم پیاده سازی الگوریتم quick sort

کد php:
#include<iostream>
using namespace std;
int partition(float*,int,int);
void swap(float *,float*);
void quicksort(floatA,int p,int q)
{
int r;
if (
p<q){
r=partition(A,p,q);
quicksort(A,p,r-1);
quicksort(A,r+1,q);
}
}
int partition(floatA,int p,int q){
float x;
int i;
x=A[q];
i=p-1;
for(
int j=p;j<=q-1;j++){
if(
A[j]<=x){
i++;
swap(&A[i],&A[j]);
}
}
swap(A[i+1],A[q]);
return 
i+1;
}
void swap(floaty1,floaty2){
float temp=*y1;
*
y1=*y2;
*
y2=temp;
}
int main(){
float B[8]={12.1,8.6,18,5,14.2,19,14.8,8.6}
for(
int i=0;i<8,i++)
cout<<endl<<"B["<<i<<"]="<<B[i];
quicksort(B,0,7);
cout<<endl<<"*****************quicksort*************";
for(
i=0;i<8;i++)
cout<<endl<<"B["<<i<<"]="<<B[i];
return 
0;


زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۱۶-اسفند-۱۳۸۸, ۱۷:۲۵:۵۲
ارسال‌ها
پاسخ
تشکر شده توسط : t3r!p3000, فاطمه وطن دوست, moam
اشک آفلاین
كاربر دو ستاره
**

ارسال‌ها: 108
موضوع‌ها: 14
تاریخ عضویت: آبان ۱۳۸۸

تشکرها : 758
( 532 تشکر در 136 ارسال )
ارسال: #11
RE: الگوریتمهای برنامه نویسی از ساده به پیشرفته
پیاده سازی الگوریتم فیبوناچی:

کد:
#include<iostream>
#include<conio>
using namespace std;
class FIBO
{
public:
int fibo(int n);
};
int FIBO::fibo(int n)
{
if(n<=2)
return 1;
else
return(fibo(n-1)+fibo(n-2));
}
int main()
{
clrscr();
int number,result;
cout<<"please enter your number:";
cin>>number;
cout<<"\n";
FIBO f;
result=f.fibo(number);
cout<<"the output of your function is:";
cout<<result;
getch();
}

زمانی که به پایان رسیدی بدان شروعی دوباره در کام تولد است.Wink
۲۱-اسفند-۱۳۸۸, ۱۷:۵۰:۱۱
ارسال‌ها
پاسخ
تشکر شده توسط : Di Di, t3r!p3000, فاطمه وطن دوست, moam


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش برنامه نویسی مبتدی mohri 19 25,674 ۰۸-شهریور-۱۳۹۵, ۲۰:۳۰:۰۶
آخرین ارسال: ssssssssss000
  برنامه نویسی سوگل 0 2,151 ۲۶-اردیبهشت-۱۳۹۰, ۱۸:۰۱:۵۴
آخرین ارسال: سوگل
  الگوریتم برنامه نویسی منا 2 6 6,798 ۰۱-بهمن-۱۳۸۹, ۰۲:۱۱:۰۲
آخرین ارسال: منا 2
Question الگوریتمهای ویندوز xp melody 1 2,448 ۰۶-دى-۱۳۸۵, ۰۹:۵۶:۰۵
آخرین ارسال: veyskarami

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS