ممنون عماد جان من تغییرات شما را اعمال کردم اما مشکل این جاست که هنوز به همان دو عبارت کمپایلر گیر می ده.... نمی دونم امکانشو داری که برنامه را دانلود کنی و چک کنی ...ممنون می شم ازت...
ممنون عماد جان من تغییرات شما را اعمال کردم اما مشکل این جاست که هنوز به همان دو عبارت کمپایلر گیر می ده.... نمی دونم امکانشو داری که برنامه را دانلود کنی و چک کنی ...ممنون می شم ازت...
اگه میشه برنامت رو به صورت zip بزار نه rar چون الان winrar ندارم.
مشکلش اینه هم نام با تابع ها دو تا آرایه هم به نام های nytilgammel و gammeltilny تعریف کردی که این خودش تداخل ایجاد میکنه. این آرایه ها رو حذف کردم.
ممنون عماد جان الان برنامه ارور نمی ده اما اصلا نه قسمت منوش کار می کنه نه درست مخاسبه می کنه..... جالبه چون مطمئنم که برنامه قسمت محاسبه اش درست است ... الان تابغ اول فقط یک سه عدد را بر می گردونه اونم اعداد عجیب نشون می دهد و تابع دوم یک عدد را بر می گردونه اونو هم صفر نشون می ده.... اما خیلی ممنون با این همه فکر کنم کمپایلر سی نداشتی ... .....ممنون
سلام قسمت منوش درست شد.... اما بقیش هنوز همون جوریه که بالا گفتم......... ممنون
گفتم به جای اینکه هی بیایم و بگیم کجا اشتباست بیام و کل برنامه شما را تصحیح کنم تا به پست صدمی نکشه.
البته با توضیحاتی که تو صفحه قبل به طور کامل با مثال زدید دستگیرم شد که منظورتان چه هست و در آخر تست کردم ، همه جواب می دهند. (برنامه را بگیرید و خط به خط مطالعه کنید)
حدود 30/40 اشتباه داشت که همه را درست کردم و جلوی هر خط نوشتم (البته انگلیسی)
نکات:
fscanf با حرف f متغیر double قبول نمی کنه (اصلا این تابع double قبول نمی کند) که باعث می شد غلط بشه یعنی 4 بایت را به 8 بایت می ریخت و دوباره و دوباره ، پس همه متغیر هات به float باید تغییر داده می شدند.
دوباره بعضی جا ها شما [] را یادتان رفته بود ، حتی در تابع.
در حالت نوشتن در فایل 0.04f می نوشتید که غلط است و نمی توانست بنویسد فقط 4f. کافی بود
تو حلقه ها دوبار از فایل می خواندید که غلط بود ؛ همان داخل شرط for خودش کافی بود.
کل برنامه را تو حلقه while گذاشتم تا در موقع نیاز خطا بده نه پس از هر بار اجرا.
و if های شما نیاز به else if داشتند.
و ....
با وجودی که خیلی سرم شلوغ بود و کار داشتم ، امیدوارم اینجوری وظیفه ام را انجام داده باشم.
موفق باشید و امیدوارم قبل از هر کاری مطالعه بیشتری کنید (مخصوصا که کتاب های فارسی ترجمه شده خوبی داریم)
----------------------
EDIT: فایل درست را گذاشتم
تابع اولی رو که چک کردم مشکلی نداشت مشکل توی این قسمت هست:
for (i=0; fscanf(fp1,"%lf",&nytimer)!=EOF; i++)
{
fscanf(fp1,"%lf",&nytimer[i]);
}
قسمت شرط حلقه for اشتباه هست.
برنامتو یه کم تغییر دادم. مقدار menu رو 1 وارد کن تا خروجی تابع اول رو ببینی
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
//*******************ny til gammel******************///
void nytilgammel(double *nytimer, int *gtime, int *gmin, int *gsek,int n)
{
int i;
for (i=0; i<n; i++)
{
nytimer[i] *= (24./20.);
gtime[i] = (int) nytimer[i];
nytimer[i] -= gtime[i];
nytimer[i] *= 60;
gmin[i] = (int) nytimer[i];
nytimer[i] -= gmin[i];
nytimer[i] *= 60;
gsek[i] = (int) nytimer[i];
}
}
//*********************end**************************//
//*******************gammel til ny*********************//
void gammeltilny (int *time, int *min, int *sek,double *nytid, int n)
{
int i;
for (i=0; i<n; i++)
{
nytid[i] = ((((sek[i]/60.)+ min[i])/60.)+ time[i])*(20./24.);
}
}
//**********************end************************* **//
int main()
{
FILE *fp1, *fp2;
FILE *fp3, *fp4;
int gtime[80], gmin[80], gsek[80];
double nytimer[80];
int time[80], min[80], sek[80];
double nytid [80];
int menu;
double a, b,c;
double d,e,f;
int i;
printf("\n\t1. for ny til gammel");
printf("\t2. for gammel til ny\n");
printf("\t3.for Exit");
scanf("%d",&menu);
//***********************************************//
if (menu==1)
{
fp1 = fopen("inddata1.txt","r");
fp2 = fopen("uddata.txt", "w");
for (i=0; i<10; i++)
{
fscanf(fp1,"%lf",&nytimer[i]);
}
nytilgammel( nytimer, gtime, gmin, gsek,i);
for (int j=0; j<10; j++)
fprintf(fp2,"Gammel timer: %02d %02d %02d\n\n\n\n",gtime[j],gmin[j],gsek[j]);
}
//**************************************//
else if (menu==2)
{
fp3 = fopen("ind.txt","r");
fp4 = fopen("ud.txt", "w");
for (i=0; fscanf(fp1,"%d%d%d",&time,&min,&sek)!=EOF; i++)
{
fscanf(fp3,"%d%d%d",&time[i],&min[i],&sek[i]);
}
gammeltilny (time,min,sek,nytid,i);
fprintf(fp4,"Ny tid: %0.04lf\n\n\n",nytid[i]);
}
else if (menu==3)
{
exit(0);
}
else
{
printf("Error");
}
getch();
}
ممنون نیما جان اما فکر کنم برنامه را اشتباه در سایت گذاشتی چون ای برنامه که گذاشتی هیچ float توش نیست... بعد هنوز فقط error را به خروجی می دهد..... اما هزار بار ممنون از لطفت.....
شرمنده اشتباها فایل قبلی را zip کردم ، فایل پست قبلی را edit کردم .دوباره download کنید.
error را اصلا تغییر دادم به چیز دیگری.
ضمنا هر وقت به جواب رسیدید بر روی گفتگوی مفید کلیک کنید تا پست بسته شود
ممنون نیما جان اما
اما فکر نمی کنم این درست باشه جون من قبلااستفاده کردم در تایپ قبل هم عماد جان استفاده کرد... مشکلی نداشت..نکات:
fscanf با حرف f متغیر double قبول نمی کنه (اصلا این تابع double قبول نمی کند) که باعث می شد غلط بشه یعنی 4 بایت را به 8 بایت می ریخت و دوباره و دوباره ، پس همه متغیر هات به float باید تغییر داده می شدند
هزار بار ازت ممنون.....واقعا لطف کردید...قول می دهم بیشتر کتاب بخونم..به خاطر این که خارج از ایران هستم درسترسیم به کتاب های ایرانی کمه.... بینهایت ممنون...با وجودی که خیلی سرم شلوغ بود و کار داشتم ، امیدوارم اینجوری وظیفه ام را انجام داده باشم.
موفق باشید و امیدوارم قبل از هر کاری مطالعه بیشتری کنید (مخصوصا که کتاب های فارسی ترجمه شده خوبی داریم)
اما هنوز یک کم با این برنامه کار دارم باید خروجی ها را مرتب کنم به خاطر همین ممکنه این پست بازم ادامه داشته باشه.....ببخشید
ممنون عماد جان.... آرده کاملا درست کار می کنه تابع دوم را خودم سعی می کنم درستش کنم.... ممنون با کاری که شما کردید و نیما جان سعی می کنم خودم دو تاشو قاطی کنم یک چیزی از توش در بیاورم.... اکه دوتاشونو خراب نکنم.... بی نهایت ممنون....
در ضمن اون مرتب کردنش را هم الان شروع می کنم.... اگه لطف کنی اشکالاتمو را بگیرید ممنون می شم......واقعا اگه شما نبودید نمی دونم این برنامه به این حا می رسید یا نه......ممنون
void gammeltilny (int *time, int *min, int *sek,float *nytid, int n)
{
int i;
for (i=0; i<n; i++)
نیماجان من نقش n را درست متوجه نمی شه ما جایی از برنامه مقداری برای اون در نظر نگرفنیم پس چطور برنامه مقدار را تشخیص می دهد.....ممنون
ببین من می خوام خروجی تابع اول یعنی زمان هرا مرتب کنم صعودی برای 0 0 0 تا 59 59 11 و نزولی برای 00 00 12 تا 59 59 23 پیشنهاد شما چیه می می خواستم اول اعداد را توی دو ردیف مرتب کنم یعنی بزرگ تر از 59 59 11 و کوچک تر از اون... بعد از دو تا تابع جدا استفاده کنم برای مرتب کردن..... نمی دونم فکرم درسته
عدد n فقط نام آرگومان 4 ام در داخل تابع هست و هر چیز که به این آرگومان ارسال شود جای ان قرار می گیرد ، یعنی مقدار متغیر counter را که همان i+1 را به آن ارسال کردیم. (یعنی تعداد اعدادی که قرار است بخوانیم ، با ازای هر 3 عددیکی به i اضافه شده بود )
برای من تابع دوم همه را در فایل می ریزد ، گفتید برای شما جواب نمی دهد؟
اینم اون تابع دوم:
else if (menu==2)
{
fp3 = fopen("ind.txt","r");
fp4 = fopen("ud.txt", "w");
for (i=0; i<10; i++)
{
fscanf(fp3,"%d%d%d",&time[i],&min[i],&sek[i]);
}
gammeltilny (time,min,sek,nytid,i);
for (int j=0; j<10; j++)
fprintf(fp4,"Ny tid: %0.04lf\n\n\n",nytid[j]);
}
در کل میخواستم خودت درستش کنی چون تقریبا شبیه اون یکی بود. در مورد n هم توضیح داده شد.
ممنون
البته خودم با توجه به تابع اول درستش کرده بود (خسته نباشم)....ممنون...
ببین من می خوام خروجی تابع اول یعنی زمان ها را مرتب کنم صعودی برای 0 0 0 تا 59 59 11 و نزولی برای 00 00 12 تا 59 59 23 می خواستم ببینم نظر شما چیه .....می خواستم اول اعداد را توی دو ردیف مرتب کنم یعنی بزرگ تر از 59 59 11 و کوچک تر از اون... بعد از دو تا تابع جدا استفاده کنم برای مرتب کردن..... نمی دونم فکرم درسته البته فقط روش مرتب سازی bubble sort را می شناسم...... ممنون
سلام
عماد جان و نیما جان من تابع زیر را به برنامه اضافه کردم برای مرتب کردن خروجی تابع اول... نمی دونم درست کار کردم یا نه البته در برنامه ظاهرا جواب می ده اما.....
در ضمن باید به این ترتیب مرتب کنم که اعداد صعودی باشند برای 0 0 0 تا 59 59 11 و نزولی برای 00 00 12 تا 59 59 23 که نمی دونم اون را باید چه جوری تعریف کنم.... البته تابع زیر فقط تابع صعودی است..... نمی دونم توی همین تابع می شه این کار را کرد... یا باید یه تابع جدا بنویسم..... نمی دونم جه جوری شرط بگذارم.......ممنون بازم از لطف همیشگیتون....
void bubbleSort1(int *ta11,int *ta12,int *ta13,int max)
{
int i,imax,j,k;
int save1,save2,save3;
do
{
for (j=0,i=0,k=0;i<max-1;i++)
{
if (ta11[i+1]<ta11[i])
{
save1=ta11[i];
save2=ta12[i];
save2=ta13[i];
ta11[i]=ta11[i+1];
ta12[i]=ta12[i+1];
ta13[i]=ta13[i+1];
ta11[i+1]=save1;
ta12[i+1]=save2;
ta13[i+1]=save3;
j=i=k;
}
}
imax=j=k;
}
while (imax>0);
}
سلام....
من یک دو تا تابع برای مرتب کردن خروحی به برنامه اضافه کردم اما چندان درست کار نمی کنند... یعنی فقط ساعت را مد نطر دارند و در صورتی که ساعت ها برابر باشند .... به دقیقه و ثانیه کاری ندارند.........
در ضمن من دو تا if هم استفاده کردم برای این کا باید ساعت ها برای بزرگتر از 12 به صورت صعودی و برای کوچک تر از آن به صورت نزولی مرتب شوند....... اما این ها هم درست کار نمی کنندد .... ممنون می شم یک نگاهی به برنامه بیندازید.....نمی دونم این کار را راحت تر هم می شود کرد یا با یک تابع..... .
خیلی ممنون
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
/**********************Bubble sortering1***************///
void bubbleSort1(int *ta11,int *ta12,int *ta13,int max)
{
int i,imax,j,k;
int save1,save2,save3;
do
{
for (j=0,i=0,k=0;i<max-1;i++)
{
if (ta11[i+1]<ta11[i])
{
save1=ta11[i];
save2=ta12[i];
save2=ta13[i];
ta11[i]=ta11[i+1];
ta12[i]=ta12[i+1];
ta13[i]=ta13[i+1];
ta11[i+1]=save1;
ta12[i+1]=save2;
ta13[i+1]=save3;
j=i=k;
}
}
imax=j=k;
}
while (imax>0);
}
//************************end*********************** **//
/**********************Bubble sortering2***************///
void bubbleSort2(int *ta14,int *ta15,int *ta16,int max1)
{
int i,imax,j,k;
int save4,save5,save6;
do
{
for (j=0,i=0,k=0;i<max1-1;i++)
{
if (ta14[i+1]>ta14[i])
{
save4=ta14[i];
save5=ta15[i];
save6=ta16[i];
ta14[i]=ta14[i+1];
ta15[i]=ta15[i+1];
ta16[i]=ta16[i+1];
ta14[i+1]=save4;
ta15[i+1]=save5;
ta16[i+1]=save6;
j=i=k;
}
}
imax=j=k;
}
while (imax>0);
}
//************************end*********************** **//
//*******************ny til gammel******************///
void nytilgammel(double *nytimer, int *gtime, int *gmin, int *gsek,int n)
{
int i;
for (i=0; i<n; i++)
{
nytimer[i] *= (24./20.);
gtime[i] = (int) nytimer[i];
nytimer[i] -= gtime[i];
nytimer[i] *= 60;
gmin[i] = (int) nytimer[i];
nytimer[i] -= gmin[i];
nytimer[i] *= 60;
gsek[i] = (int) nytimer[i];
/* if (nytimer[i] - gsek[i]>0.50)
gsek[i]+= 1;
//*******************/
//Retter sek og min i 100 //
/* if (gsek[i]>=60)
{
gsek[i] -=60;
gmin[i] += 1;
}
if (gmin[i]>=60)
{
gmin[i] -=60;
gtime[i] += 1;
}
*/
}
}
//*********************end**************************//
//*******************gammel til ny*********************//
void gammeltilny (int *time, int *min, int *sek,double *nytid, int n)
{
int i;
for (i=0; i<n; i++)
{
nytid[i] = ((((sek[i]/60.)+ min[i])/60.)+ time[i])*(20./24.);
}
}
//**********************end************************* **//
int main()
{
FILE *fp1, *fp2;
FILE *fp3, *fp4;
int gtime[80], gmin[80], gsek[80];
double nytimer[80];
int time[80], min[80], sek[80];
double nytid [80];
char menu;
int i, counter;
printf("\n\t*Det program regner mellem to tidsystemer\n\tv?lge sin valg til regning*\n");
printf("\n\ta. for ny til gammel");
printf("\tb. for gammel til ny\n");
printf("\n\tc.for Exit\n");
scanf("%s", &menu);
while ( true ) // just exit when number 3 is pressed
{
//***********************************************//
if( menu=='a'||menu=='A')
{
fp1 = fopen("inddata1.txt","r");
fp2 = fopen("uddata.txt", "w");
for (i=0; fscanf(fp1,"%lf",&nytimer[i])!=EOF; i++)
{
counter = i;
}
counter++ ; // counter is one more
// counter means number of data read divided by 3
nytilgammel( nytimer, gtime, gmin, gsek,counter);
fprintf(fp2,"Resultatet af convert til gammel tider er: \n\n");
for (i=0; i<counter; i++)
{
fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]);
}
fprintf(fp2,"\nResultatet af sorteringen: \n\n");
if (gtime[i]<=12)
{
bubbleSort1( gtime, gmin, gsek,counter);
for (i=0;i<counter;i++)
{
fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]);
}
}
else
{
bubbleSort2( gtime, gmin, gsek,counter);
fprintf(fp2,"\nResultatet af sorteringen: \n\n");
for (i=0;i<counter;i++)
{
fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]);
}
}
fprintf(fp2, "\nDet sorterede array er: %d",counter);
}
//**************************************//
else if(menu=='b'||menu=='B')
{
fp3 = fopen("ind.txt","r");
fp4 = fopen("ud.txt", "w");
for (i=0; fscanf(fp3,"%d%d%d",&time[i],&min[i],&sek[i])!=EOF; i++)
{
counter = i;
}
counter++ ; // counter + 1, because for the first loop get i=0
gammeltilny ( time, min ,sek, nytid, counter);
for (i=0; i<counter; i++)
{
fprintf(fp4,"Ny tid: %07.4lf\n\n\n",nytid[i]);
}
fprintf(fp4, "\n\n\n\nDet sorterede array er: %d",counter);
}
else if(menu=='c'||menu=='C')
{
exit(0);
}
else
{
printf("Wrong number Entered, try it again\n");
}
scanf("%s", &menu);
}
}
این کد رو جایگزین تابع sort در برنامه کن
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void bubbleSort1(int *ta11,int *ta12,int *ta13,int max)
{
int i,j;
for (i=0;i<max;i++)
{
for(j=0;j<max-1;j++)
{
if(ta11[j]<=11 && ta11[j+1]<=11)
{
if (ta11[j+1]<ta11[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
else if(ta11[j+1]==ta11[j] && ta12[j+1]<ta12[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
else if(ta12[j+1]==ta12[j] && ta13[j+1]<ta13[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
}
}
}
}
چون مقادیر توی 1 آرایه قرار دارن نمیشه مثلا برای ساعت های قبل از 11 رو صعودی و بعدش رو نزولی مرتب کرد. یعنی میشه ولی ترتیب آرایه کلا بهم می خوره و مثل یه آرایه مرتب نشده به نظر میاد. پس بهتر این کار رو نکنی. این تابعی که گذاشتم ترتیب دقیقه و ثانیه ها رو هم در نظر میگیره.
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
ممنون عماد جان... ببین من این قسمت از کد را نفهمیدم یعنی کجای main باید این تابع را فراخوانی کنم...بعد من خذفشم کردم اتفاقی نیفتاد.....
در ضمن عماد حان این تابع اعداد صفر را در نظر نمی گیره یعنی زمان 00 00 00 اگه باشه اون را مرتب نمی کنه...ممنون......
بعد اون کاری رو هم که گفتن باید بکنم..... خودم هم این کارو کردم اما همه چیز خراب شد.... نمی دونم راهی به نظر شما می رسه....ممنون
این دو قسمت را به برنامه اضافه کردم
for (i=0; i<counter; i++)
{
if (gtime[i]<12)
{
bubbleSort1( gtime, gmin, gsek,counter);
fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]);
}
}
که خروجی برنامه اینه (البته کد مرتب سازی همون طور که در بالا گفتم صفر را در نظر نمی گیره این جا اگه مرتبه چون توی ورودی هم مرتب بوده)
00 00 00
00 00 00
00 01 00
00 36 00
00 59 59
01 11 59
01 30 00
01 30 21
03 59 59
04 00 00
06 00 00
08 35 22
11 19 55
11 19 55
اما وقتی این رو به برنامه اضافه می کنم
for (i=0; i<counter; i++)
{
if (gtime[i]>=12)
{
bubbleSort2( gtime, gmin, gsek,counter);
fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]);
}
}
خروجی اینه
06 00 00
تابع اول صعودی مرتب می کنه و تابع دوم نزولی تابغ ها درست کار می کنند (جز همون مشکل که صفر را در نظر نمی گیرند) اما نمی دونم چرا خروجی ها این جوریه ... حرف شما هم عماد جان درسته اما باید یک راهی براش پیدا کنم......
تابع swap دو تا پارامتر میگیره و او 2 تا رو جا بجا میکنه در واقع برای اینکه همش این کد ها:
save1=ta11[i];
save2=ta12[i];
save2=ta13[i];
ta11[i]=ta11[i+1];
ta12[i]=ta12[i+1];
ta13[i]=ta13[i+1];
ta11[i+1]=save1;
ta12[i+1]=save2;
ta13[i+1]=save3;
رو تکرار نکنی این تابع رو نوشتم که کار همینا رو انجام میده.
لازم نیست فراخوانیش کنی چون تو همون تابع sort ایی که من نوشتم فراخوانی میشه. نمیدونم چیکار کردی که میگی وقتی حذفش کردی مشکلی پیش نیومده. قاعدتا اگه تابع مرتب سازی من رو کپی کرده باشی باید ارور بدهببین من این قسمت از کد را نفهمیدم یعنی کجای main باید این تابع را فراخوانی کنم...بعد من خذفشم کردم اتفاقی نیفتاد.....
تابعی که من نوشتم اعداد صفر رو هم مرتب میکنه.در ضمن عماد حان این تابع اعداد صفر را در نظر نمی گیره یعنی زمان 00 00 00 اگه باشه اون را مرتب نمی کنه.
یه بار دیگه اول تابع sort ایی رو که خودت نوشتی پاک کن و بعد کل کدی رو که گذاشتم جایگزین اون کن و برنامه رو اجرا کن.
این راه ها اشتباه هست. مثلا نوشتی که :این دو قسمت را به برنامه اضافه کردم
کد:
for (i=0; i<counter; i++) { if (gtime[i]<12) { bubbleSort1( gtime, gmin, gsek,counter); fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]); } }
که خروجی برنامه اینه (البته کد مرتب سازی همون طور که در بالا گفتم صفر را در نظر نمی گیره این جا اگه مرتبه چون توی ورودی هم مرتب بوده)
کد:
00 00 0000 00 0000 01 0000 36 0000 59 5901 11 5901 30 0001 30 2103 59 5904 00 0006 00 0008 35 2211 19 5511 19 55
اما وقتی این رو به برنامه اضافه می کنم
کد:
for (i=0; i<counter; i++) { if (gtime[i]>=12) { bubbleSort2( gtime, gmin, gsek,counter); fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]); } }
if (gtime[i]<12)
{
bubbleSort1( gtime, gmin, gsek,counter);
fprintf(fp2,"%02d %02d %02d\n",gtime[i],gmin[i],gsek[i]);
}
این کد فقط برای ساعت های کمتر از 12 یک بار مجددا کل آرایه ها رو مرتب میکنه و اصلا ربطی به صعودی یا نزولی بودن نداره چون اینکار رو باید همون تابع مرتب سازی انجام بده.
من منظورت رو درست نمی فهمم که چه جوری میخوای مرتب کنی. ولی 2 تا راه داری:
یکی اینکه ساعت ای کمتر یا بیشتر از 12 رو در یه آرا یه دیگه قرار بدی و بعد هر کدوم از آرایه ها رو به یک صورت مرتب کنی.
یا اینکه میتونی ساعت های بیشتر از 12 رو در اندیس های ابتدایی یا انتهایی آرایه قرار بدی و بعد تا اون اندیس مورد نظر مرتب سازی رو انجام بدی. یعنی ساعت های کمتر از 12 مرتب شده کنار هم قرار میگیرن و بیشتر از 12 ها هم به همین شکل. البته راه اول ساده تره
اگه منظورت چیز دیگه ای هست با مثال توضیح بده.
عماد جان .... بعد از تبدیل ساعت ها می خواهم ساعت ها به این صورت مرتب شوند اگر کم تر از 12 بودند از صفر تا دوازده مرتب شوند و اگر بیش تر از دوازده بودند از 24 تا دوازده مرتب شوند یعنی مثلا این جوری
00 00 00امیدوارم منظورم را خوب رسانده باشم.....از لطفت واقعا ممنونم
01 23 43
01 24 56
04 34 45
09 11 23
11 59 59
23 59 59
20 45 46
17 65 39
14 23 87
13 34 29
12 00 00
من برنامه را هم میگذارم گفتن شاید چک کردنش راحت تر باشه....ممنون
ساده ترین راه همینه که ساعت ها رو در 2 تا آرایه قرار بدی و بعد مرتبشون کنی. یعنی بیشتر از 12 ها در یه آرایه بقیه هم در یه آرایه دیگه.
تو در مثالی که زده بودی فقط برای اعداد بزرگتر از 12 و کوچکتر از 12 یکبار تابع sort رو فراخوانی کرده بودی، همین ولی من منظورم اینه که یه آرایه جدید تعریف کن و اعداد بزرگتر از 12 رو بریز توی اون و در واقع 2 تا آرایه خواهیم داشت یکی از اونا ساعت ها قبل 12 و دیگری بعد 12. بعد با همین روش میتونی آرایه ها رو به صورت نزولی و یا صعودی مرتب کنی البته باید 2 تا تابع sort بنویسی یا اینکه یه متغیر برای مشخص کردن نوع صعودی یا نزولی بودن اون به تابع بفرستی و در هون تابع چک کنی و ببینی که چه جوری باید مرتب بشه.
راه دیگه ای هم برای اینکه همین تابع فعلی هم به صورت صعودی و هم به صورت نزولی مرتب کنه هست که باید اشاره گر به توابع رو بلد باشی.
ببخشید من یه مقدار منظورم رو بد رسوندم. باید 3 تا آرایه جدید مثل همین gtime و ... تعریف کنی و بعد موقعی که از فایل ساعت ها رو میخونی، ساعت هایی که از 12 بیشتر هست رو در این آرایه ای جدید قرار بدی. البته یه کم برنامه شلوغ میشه ولی ساده تریت راه هست. راه دیگه ای هم به ذهنم رسید اینه که ابتدا کل آرایه رو به صورت صعودی مرتب کنی و بعد مجددا آرایه و از اون اندیسی که ساعت های 12 به بعد قرار دارن مجددا نزولی مرتب کنی. توی همین مثالی که خودت زدی ابتدا اینجوری میشه:
00 00 00
01 23 43
01 24 56
04 34 45
09 11 23
11 59 59
12 00 00
13 34 29
14 23 87
17 65 39
20 45 46
23 59 59
بعد آرایه رو باید از اعت 12 00 00 به بعد به صورت نزولی مرتب کنی. امیدوارم نظورم رو درست رسونده باشم.
سلام عماد جان ممنون از لطف زیادت
کد مرتب سازی را این جوری نوشتم.... ظاهرا جواب میده.... اما به نظر زیاد مطمئن نمی یاد چون وقتی else تبدیل به else if می کنم همه چیز به هم می ریزه... اما خروجی درسته......نمی دانم نظر تو چیه.....
void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
void bubbleSort(int *ta11,int *ta12,int *ta13,int max)
{
int i,j;
for (i=0;i<max;i++)
{
for(j=0;j<max-1;j++)
{
if(ta11[j]>=12 && ta11[j+1]>=12)
{
if (ta11[j+1]>ta11[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
else if(ta11[j+1]==ta11[j] && ta12[j+1]>ta12[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
else if(ta12[j+1]==ta12[j] && ta13[j+1]>ta13[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
}
else
if (ta11[j+1]<ta11[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
else if(ta11[j+1]==ta11[j] && ta12[j+1]<ta12[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
else if(ta12[j+1]==ta12[j] && ta13[j+1]<ta13[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
}
}
}
]
برنامت درسته، مشکلی هم نداره اگه else رو به else if تغییر بدی، اینجوری میشه دیگه:
}
}
else if (ta11[j+1]<ta11[j])
{
swap(ta11[j],ta11[j+1]);
swap(ta12[j],ta12[j+1]);
swap(ta13[j],ta13[j+1]);
}
که فرقی هم با else نداره چون اگه به صورت else هم بنویسی همون شرط رو باید در داخل بلاک بررسی کنی.
من بازم درست متوجه نشدم که منظورت از else و else if چیه؟
به هر حال برنامه مشکلی نداره
سلام عماد جان می خواستم ازت خیلی تشکر کنم به خاطر لطفی که در حقم برای نوشتم این برنامه کردی هزار بار ازت ممنونم.... البته از آقا نیما هم ممنونم..... برنامه تموم شده.... اما هنوز یه مقدار به نظرم خشک می یاد یعنی با تغییرات کوچک همه چیز به هم می ریزه ..... اما ... از لطف شماها ممنونم.