PDA

View Full Version : الگوريتمtournament (مسابقات ورزشي)به زبان c#



dididina
یک شنبه 10 بهمن 1389, 15:46 عصر
سلام
لطفا اگه كسي اينن الگوريتمو(tournament) داره برام بزاره.خيلي فوري لازمش دارم.2-3روز ديگه بايد بدم به استاد با توضيحات كامل
خواهش ميكنم اگه كسي ميتونه كمكم كنه دريغ نكنه:بوس:

a654321
پنج شنبه 09 تیر 1390, 09:16 صبح
سلام دوستان
این برنامه تونومنتو من از کتاب طراحی الگوریتم نقیم زاده که به زبان c++ بود نوشتم ! برنامه تقریبا کامله فقط یه مشکلی که داره اینه که تو کتاب ایشون برای رسم شکل جدول زمانبندی از کاراکتر های خاصی استفاده شده بود که نمی تونستم کدشون چیه واسه همین یه توضیح جولو خط کد مورد نیاز نوشتم تا دوستان خودشون کدو به دست بیارن!
امیدوارم این هدیه ما باشه به دوستای گلمون تو برنامه نوس!(اخه 3 ساعت روش کار کردم!:ناراحت::خجالت:)
خوب تا دیدار دوباره یا حق:قلب:
// Program to schedule n teams to compete in a tournament defined
// in Section 4-8

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void dctournament(int,int);

void latinsq1 (int, int, int, int, int, int);
void latinsq2 (int, int, int, int, int, int);
void print(int,int);

int M[15][15];

void main(void)
{
int n;
clrscrt();
printf("Enter number of teams (1 < number < 15)");
while(1) {
scanf("%d", &n);
if(n < 2 || n > 14){
printf("Incorrect number of teams!\n");
printf("press a key to try again");
}
else break:
}

for (int i=0; i<=14;i++)
for (int j=0; j<=14; j++)
M[j][j] = 0;
dctournament(1, n);
if(n==n/2*2) // Number of teams is even
print(n,n-1);

else
print(n,n);
getch();
}

void print(int p, int q)
{
int i, j, k;
clrscr();
for(i=1; i<=q;i++){
gotoxy( 4+4*i,4);
printf("%d", i);
}
gotoxy( 4+4 * i, 4);
printf("Days");
for(i=l; i<=p;i++){
gotoxy( 4,4+2*i);
printf("%d", i);
}
gotoxy(2,4+2*i);
printf("Teams");
gotoxy(6,5);
for(i=l;i<=q;i++) {
if(i==1)
printf("U"); //alaeme nakhana baraye toolid jadval mibashad U perim darad
printf("AAA"); //shomare timha dar matris m ast ke dar entehaye in reval neveshte shodeand
if(i==q)
printf("?");
else
printf("A");// a alamate tavan darad ro saresh
}
for(i=2;i < =2*p;i++) {
gotoxy(6,4+i);
if(!(i%2))
for(j=1; j<=q+l j++){
printf("3");
gotoxy(6+4*j,4+i);
}
else
for(j=1; j<=q; j++){
if(j = = 1 )printf("A");//a Akolad darad
printf("AAA");//A balash 2 ta noghte darad
if(j==q)
printf("'")
else
printf("A") ; // A roah ye done sefr darad
}
}
gotoxy(6,4+i);
for(i=1; i<=q;i++){
if(i==1)
printf("A");// A babash ye a farsi darad
printf("AAA"); // A ha balash 2 noghte darad
if(i==q)
printf("U"); // U vasatsh 1 a farsi darad
else
printff("A"); // A balash ye a farsi darad
}
for(i=1;i< =p;i++)
for(j=1; j,<=q; j++){
gotoxy(4+4*j,4+2*i);
if(M[i][j] = =0)
printf("-");
else
printf("%d", M[i][j]);
}
}

void dctournament(int p, int q)
{
int m, i, j, k;
if(q==p+ 1){
M[p][1]=q;
M[q][1]=p;
}
else
if((q-p+1)==(q-p+1)/2*2) { // There are even number of teams
if((q-p+1)==(q-p+l)/4*4) { //umber of teams is multiple of four
m=(p+q/)/2;
dctourament(p,m);
for (int x=m+1;x<=m+(m-p+1);x++)
for(int y=p;y<=m;y++)
if (m[x-m][y]!= 0)
m[x][y]=m[x-m][y]+m;
latinsq1(p,m,(q-p+1)/2,q-p,m+1,q);
for(i=p;i<=m;i++) //fill he twin latin square
for(i=(q-p+1)/2;j<=q-p;j++){
k=m[i][j];
m[k][j]=i;
}
}
else { // Number of teams is even but not multiple of four
m=(p+q)/2:
dctournament(p,m);
for (int x=m+1; x<=m+(m-p+l); x++
for (int y=p; y<=m; y+ + )
if (M[x-m][y] !=Q)
M[x][y]=M[x-m][y]+m;
latinsq2(p, m, (q-p+l)/2+1, q-p+l, m+1, q);
for(i=p;i<=m;i++)
for(j=1;j<=q-1;j++)
if(M[i]fj] == 0)
M[i][j]=M[i][q];
for(i=p;i<=m;i++) // Fill the twin latin square
for(j=(q-p+1)/2+1; j<=q-p+1; j++){
k=M[i][j];
M[k]fj]=i;
}
for (i=rn+l;i<=q;i++)
for (j=p; j<=m; j++)
if(M[i][j] == 0)
M[i][j] = M[i][q];
}
else { // Number of teams is odd
dctournament(p,q+1);
for(i=p; i<q; i++)
for(j=1; j<=q-p+l;j++)
if(M[i][j]==q+1)
M[i][j]=0;
}
}
void latinsq1 (int a, int b, int c, int d, int e, int f)
{
int i, j, k, item;
int circular[15] = {O};
for (i=O); i<=f-e; i++)
circular[i] =i +e;
for (i=a; i<=b; i++){
for (j=c; j<=d; j++)
M[i][j] =circular[j-c];
item = circular[f-e];
for (k=f-e-1; k>=0; k--)
circular[k+1]=circular[k]
circular[0]=item;
}
}
void latinsq2(int a, int b, int c, int d, int e, int f)
{
int i, j, k, item;
int r, s;
int circular[15] = {O};
for (i=O; i<=f-e; i++)
circular[i]=i+e;
for(i=a; l<:b; i++){
while (1) {
for (r=l; r<=c-1;r++)
if(M[i][r]== O) break;
for(s=l; s<=f;s++)
if( circular[f-e]==M[s][r]break;
if(s>f)break;
else {
item = circular[f-e];
for(k=f-e-l; k>=0; k--)
circular[k+ 1]=circular[k];
circular[O] = item;
}
}
for(i=c; j<=d;j++)
M[i][j] = circular [j-c] ;
item = circular[f-e];
for (k=f-e-l; k>=0; k--)
circular[k+1]=circular[k];
circular[0]=item;
}
}

mahziar
جمعه 10 تیر 1390, 14:03 عصر
سلام دوستان
این برنامه تونومنتو من از کتاب طراحی الگوریتم نقیم زاده که به زبان c++ بود نوشتم ! برنامه تقریبا کامله فقط یه مشکلی که داره اینه که تو کتاب ایشون برای رسم شکل جدول زمانبندی از کاراکتر های خاصی استفاده شده بود که نمی تونستم کدشون چیه واسه همین یه توضیح جولو خط کد مورد نیاز نوشتم تا دوستان خودشون کدو به دست بیارن!
امیدوارم این هدیه ما باشه به دوستای گلمون تو برنامه نوس!(اخه 3 ساعت روش کار کردم!:ناراحت::خجالت:)
خوب تا دیدار دوباره یا حق:قلب:
[/CPP]

دوست عزیز واقعا خسته نباشی

این کدی رو که نوشتی من دو سال پیش سی شارپشو نوشتم . ولی کد ایراد داره و برای اعداد فرد مثه 5 درست کار نمیکنه . البته بغیر از این ایراد های ریز و درشت دیگه هم خیلی زیاد داره