صفحه 2 از 2 اولاول 12
نمایش نتایج 41 تا 74 از 74

نام تاپیک: جداسازی اعداد به صورت دو به دو

  1. #41
    ممنون عماد جان من تغییرات شما را اعمال کردم اما مشکل این جاست که هنوز به همان دو عبارت کمپایلر گیر می ده.... نمی دونم امکانشو داری که برنامه را دانلود کنی و چک کنی ...ممنون می شم ازت...

  2. #42
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    اگه میشه برنامت رو به صورت zip بزار نه rar چون الان winrar ندارم.

  3. #43
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    مشکلش اینه هم نام با تابع ها دو تا آرایه هم به نام های nytilgammel و gammeltilny تعریف کردی که این خودش تداخل ایجاد میکنه. این آرایه ها رو حذف کردم.
    فایل های ضمیمه فایل های ضمیمه

  4. #44
    ممنون عماد جان الان برنامه ارور نمی ده اما اصلا نه قسمت منوش کار می کنه نه درست مخاسبه می کنه..... جالبه چون مطمئنم که برنامه قسمت محاسبه اش درست است ... الان تابغ اول فقط یک سه عدد را بر می گردونه اونم اعداد عجیب نشون می دهد و تابع دوم یک عدد را بر می گردونه اونو هم صفر نشون می ده.... اما خیلی ممنون با این همه فکر کنم کمپایلر سی نداشتی ... .....ممنون

  5. #45
    سلام قسمت منوش درست شد.... اما بقیش هنوز همون جوریه که بالا گفتم......... ممنون

  6. #46
    گفتم به جای اینکه هی بیایم و بگیم کجا اشتباست بیام و کل برنامه شما را تصحیح کنم تا به پست صدمی نکشه.
    البته با توضیحاتی که تو صفحه قبل به طور کامل با مثال زدید دستگیرم شد که منظورتان چه هست و در آخر تست کردم ، همه جواب می دهند. (برنامه را بگیرید و خط به خط مطالعه کنید)
    حدود 30/40 اشتباه داشت که همه را درست کردم و جلوی هر خط نوشتم (البته انگلیسی)

    نکات:
    fscanf با حرف f متغیر double قبول نمی کنه (اصلا این تابع double قبول نمی کند) که باعث می شد غلط بشه یعنی 4 بایت را به 8 بایت می ریخت و دوباره و دوباره ، پس همه متغیر هات به float باید تغییر داده می شدند.
    دوباره بعضی جا ها شما [] را یادتان رفته بود ، حتی در تابع.
    در حالت نوشتن در فایل 0.04f می نوشتید که غلط است و نمی توانست بنویسد فقط 4f. کافی بود
    تو حلقه ها دوبار از فایل می خواندید که غلط بود ؛ همان داخل شرط for خودش کافی بود.
    کل برنامه را تو حلقه while گذاشتم تا در موقع نیاز خطا بده نه پس از هر بار اجرا.
    و if های شما نیاز به else if داشتند.
    و ....

    با وجودی که خیلی سرم شلوغ بود و کار داشتم ، امیدوارم اینجوری وظیفه ام را انجام داده باشم.
    موفق باشید و امیدوارم قبل از هر کاری مطالعه بیشتری کنید (مخصوصا که کتاب های فارسی ترجمه شده خوبی داریم)


    ----------------------
    EDIT: فایل درست را گذاشتم
    فایل های ضمیمه فایل های ضمیمه

  7. #47
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    تابع اولی رو که چک کردم مشکلی نداشت مشکل توی این قسمت هست:

    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();

    }

  8. #48
    ممنون نیما جان اما فکر کنم برنامه را اشتباه در سایت گذاشتی چون ای برنامه که گذاشتی هیچ float توش نیست... بعد هنوز فقط error را به خروجی می دهد..... اما هزار بار ممنون از لطفت.....

  9. #49
    شرمنده اشتباها فایل قبلی را zip کردم ، فایل پست قبلی را edit کردم .دوباره download کنید.
    error را اصلا تغییر دادم به چیز دیگری.


    ضمنا هر وقت به جواب رسیدید بر روی گفتگوی مفید کلیک کنید تا پست بسته شود

  10. #50
    ممنون نیما جان اما
    نکات:
    fscanf با حرف f متغیر double قبول نمی کنه (اصلا این تابع double قبول نمی کند) که باعث می شد غلط بشه یعنی 4 بایت را به 8 بایت می ریخت و دوباره و دوباره ، پس همه متغیر هات به float باید تغییر داده می شدند
    اما فکر نمی کنم این درست باشه جون من قبلااستفاده کردم در تایپ قبل هم عماد جان استفاده کرد... مشکلی نداشت..

    با وجودی که خیلی سرم شلوغ بود و کار داشتم ، امیدوارم اینجوری وظیفه ام را انجام داده باشم.
    موفق باشید و امیدوارم قبل از هر کاری مطالعه بیشتری کنید (مخصوصا که کتاب های فارسی ترجمه شده خوبی داریم)
    هزار بار ازت ممنون.....واقعا لطف کردید...قول می دهم بیشتر کتاب بخونم..به خاطر این که خارج از ایران هستم درسترسیم به کتاب های ایرانی کمه.... بینهایت ممنون...
    اما هنوز یک کم با این برنامه کار دارم باید خروجی ها را مرتب کنم به خاطر همین ممکنه این پست بازم ادامه داشته باشه.....ببخشید

  11. #51
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    تابع اولی رو که چک کردم مشکلی نداشت مشکل توی این قسمت هست:

    for (i=0; fscanf(fp1,"%lf",&nytimer)!=EOF; i++)
    {
    fscanf(fp1,"%lf",&nytimer[i]);
    }

    قسمت شرط حلقه for اشتباه هست.
    برنامتو یه کم تغییر دادم. مقدار menu رو 1 وارد کن تا خروجی تابع اول رو ببینی
    [/code]
    ممنون عماد جان.... آرده کاملا درست کار می کنه تابع دوم را خودم سعی می کنم درستش کنم.... ممنون با کاری که شما کردید و نیما جان سعی می کنم خودم دو تاشو قاطی کنم یک چیزی از توش در بیاورم.... اکه دوتاشونو خراب نکنم.... بی نهایت ممنون....
    در ضمن اون مرتب کردنش را هم الان شروع می کنم.... اگه لطف کنی اشکالاتمو را بگیرید ممنون می شم......واقعا اگه شما نبودید نمی دونم این برنامه به این حا می رسید یا نه......ممنون

  12. #52
    نقل قول نوشته شده توسط Nima_NF مشاهده تاپیک
    شرمنده اشتباها فایل قبلی را zip کردم ، فایل پست قبلی را edit کردم .دوباره download کنید.
    error را اصلا تغییر دادم به چیز دیگری.


    ضمنا هر وقت به جواب رسیدید بر روی گفتگوی مفید کلیک کنید تا پست بسته شود
    ممنون نیما جان تابع دوم هنوز ایراد داره دنبال اون هستم همه اعداد را بر نمی گرداند ...ممنون اما برام عجیبه چرا با double کار نمی کنه.....

    نمیدونم چرا اصلاحی که عماد انحام داده بود روی تابع اول مشکلی نداشت

  13. #53
    نقل قول نوشته شده توسط farhadamin مشاهده تاپیک
    اما فکر نمی کنم این درست باشه چون من قبلااستفاده کردم در تایپ قبل هم عماد جان استفاده کرد... مشکلی نداشت...
    درسته حق با شماست ، من L را یادم رفته بود ، همون lf% درست بود به معنی double
    ولی در هر حال وقتی 4 رقم اعشار و 2 رقم صحیح می خواهید و همان float نیز کافی هست . ولی اگر می خواهید double کنید آرگومان تابع را هم باید به double تغییر دهید

  14. #54
    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 و کوچک تر از اون... بعد از دو تا تابع جدا استفاده کنم برای مرتب کردن..... نمی دونم فکرم درسته

  15. #55
    عدد n فقط نام آرگومان 4 ام در داخل تابع هست و هر چیز که به این آرگومان ارسال شود جای ان قرار می گیرد ، یعنی مقدار متغیر counter را که همان i+1 را به آن ارسال کردیم. (یعنی تعداد اعدادی که قرار است بخوانیم ، با ازای هر 3 عددیکی به i اضافه شده بود )
    برای من تابع دوم همه را در فایل می ریزد ، گفتید برای شما جواب نمی دهد؟

  16. #56
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    اینم اون تابع دوم:

    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 هم توضیح داده شد.

  17. #57
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    در کل میخواستم خودت درستش کنی چون تقریبا شبیه اون یکی بود. در مورد n هم توضیح داده شد.
    ممنون
    البته خودم با توجه به تابع اول درستش کرده بود (خسته نباشم)....ممنون...
    ببین من می خوام خروجی تابع اول یعنی زمان ها را مرتب کنم صعودی برای 0 0 0 تا 59 59 11 و نزولی برای 00 00 12 تا 59 59 23 می خواستم ببینم نظر شما چیه .....می خواستم اول اعداد را توی دو ردیف مرتب کنم یعنی بزرگ تر از 59 59 11 و کوچک تر از اون... بعد از دو تا تابع جدا استفاده کنم برای مرتب کردن..... نمی دونم فکرم درسته البته فقط روش مرتب سازی bubble sort را می شناسم...... ممنون

  18. #58
    سلام

    عماد جان و نیما جان من تابع زیر را به برنامه اضافه کردم برای مرتب کردن خروجی تابع اول... نمی دونم درست کار کردم یا نه البته در برنامه ظاهرا جواب می ده اما.....
    در ضمن باید به این ترتیب مرتب کنم که اعداد صعودی باشند برای 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);
    }

  19. #59
    سلام....
    من یک دو تا تابع برای مرتب کردن خروحی به برنامه اضافه کردم اما چندان درست کار نمی کنند... یعنی فقط ساعت را مد نطر دارند و در صورتی که ساعت ها برابر باشند .... به دقیقه و ثانیه کاری ندارند.........

    در ضمن من دو تا 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);
    }

    }

  20. #60
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    این کد رو جایگزین تابع 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 رو صعودی و بعدش رو نزولی مرتب کرد. یعنی میشه ولی ترتیب آرایه کلا بهم می خوره و مثل یه آرایه مرتب نشده به نظر میاد. پس بهتر این کار رو نکنی. این تابعی که گذاشتم ترتیب دقیقه و ثانیه ها رو هم در نظر میگیره.

  21. #61

    void swap(int &a,int &b)
    {
    int temp=a;
    a=b;
    b=temp;
    }


    ممنون عماد جان... ببین من این قسمت از کد را نفهمیدم یعنی کجای main باید این تابع را فراخوانی کنم...بعد من خذفشم کردم اتفاقی نیفتاد.....
    در ضمن عماد حان این تابع اعداد صفر را در نظر نمی گیره یعنی زمان 00 00 00 اگه باشه اون را مرتب نمی کنه...ممنون......
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    چون مقادیر توی 1 آرایه قرار دارن نمیشه مثلا برای ساعت های قبل از 11 رو صعودی و بعدش رو نزولی مرتب کرد. یعنی میشه ولی ترتیب آرایه کلا بهم می خوره و مثل یه آرایه مرتب نشده به نظر میاد. پس بهتر این کار رو نکنی. این تابعی که گذاشتم ترتیب دقیقه و ثانیه ها رو هم در نظر میگیره.
    بعد اون کاری رو هم که گفتن باید بکنم..... خودم هم این کارو کردم اما همه چیز خراب شد.... نمی دونم راهی به نظر شما می رسه....ممنون

    این دو قسمت را به برنامه اضافه کردم
    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

    تابع اول صعودی مرتب می کنه و تابع دوم نزولی تابغ ها درست کار می کنند (جز همون مشکل که صفر را در نظر نمی گیرند) اما نمی دونم چرا خروجی ها این جوریه ... حرف شما هم عماد جان درسته اما باید یک راهی براش پیدا کنم......

  22. #62
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    تابع 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;

    رو تکرار نکنی این تابع رو نوشتم که کار همینا رو انجام میده.
    ببین من این قسمت از کد را نفهمیدم یعنی کجای main باید این تابع را فراخوانی کنم...بعد من خذفشم کردم اتفاقی نیفتاد.....
    لازم نیست فراخوانیش کنی چون تو همون تابع sort ایی که من نوشتم فراخوانی میشه. نمیدونم چیکار کردی که میگی وقتی حذفش کردی مشکلی پیش نیومده. قاعدتا اگه تابع مرتب سازی من رو کپی کرده باشی باید ارور بده
    در ضمن عماد حان این تابع اعداد صفر را در نظر نمی گیره یعنی زمان 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 ها هم به همین شکل. البته راه اول ساده تره
    اگه منظورت چیز دیگه ای هست با مثال توضیح بده.

  23. #63
    عماد جان .... بعد از تبدیل ساعت ها می خواهم ساعت ها به این صورت مرتب شوند اگر کم تر از 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
    امیدوارم منظورم را خوب رسانده باشم.....از لطفت واقعا ممنونم

  24. #64
    من برنامه را هم میگذارم گفتن شاید چک کردنش راحت تر باشه....ممنون
    فایل های ضمیمه فایل های ضمیمه

  25. #65
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    ساده ترین راه همینه که ساعت ها رو در 2 تا آرایه قرار بدی و بعد مرتبشون کنی. یعنی بیشتر از 12 ها در یه آرایه بقیه هم در یه آرایه دیگه.

  26. #66
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    ساده ترین راه همینه که ساعت ها رو در 2 تا آرایه قرار بدی و بعد مرتبشون کنی. یعنی بیشتر از 12 ها در یه آرایه بقیه هم در یه آرایه دیگه.
    عماد جان این همون کاریه که بالا سعی کردم انجام بدهم و خودت گفتی اشتباه است ....منظورت را از دو تا آرایه را درست متوجه نمی شم .... ممنون از لطفت

  27. #67
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    تو در مثالی که زده بودی فقط برای اعداد بزرگتر از 12 و کوچکتر از 12 یکبار تابع sort رو فراخوانی کرده بودی، همین ولی من منظورم اینه که یه آرایه جدید تعریف کن و اعداد بزرگتر از 12 رو بریز توی اون و در واقع 2 تا آرایه خواهیم داشت یکی از اونا ساعت ها قبل 12 و دیگری بعد 12. بعد با همین روش میتونی آرایه ها رو به صورت نزولی و یا صعودی مرتب کنی البته باید 2 تا تابع sort بنویسی یا اینکه یه متغیر برای مشخص کردن نوع صعودی یا نزولی بودن اون به تابع بفرستی و در هون تابع چک کنی و ببینی که چه جوری باید مرتب بشه.
    راه دیگه ای هم برای اینکه همین تابع فعلی هم به صورت صعودی و هم به صورت نزولی مرتب کنه هست که باید اشاره گر به توابع رو بلد باشی.

  28. #68
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    تو در مثالی که زده بودی فقط برای اعداد بزرگتر از 12 و کوچکتر از 12 یکبار تابع sort رو فراخوانی کرده بودی، همین ولی من منظورم اینه که یه آرایه جدید تعریف کن و اعداد بزرگتر از 12 رو بریز توی اون و در واقع 2 تا آرایه خواهیم داشت یکی از اونا ساعت ها قبل 12 و دیگری بعد 12. بعد با همین روش میتونی آرایه ها رو به صورت نزولی و یا صعودی مرتب کنی البته باید 2 تا تابع sort بنویسی یا اینکه یه متغیر برای مشخص کردن نوع صعودی یا نزولی بودن اون به تابع بفرستی و در هون تابع چک کنی و ببینی که چه جوری باید مرتب بشه.
    راه دیگه ای هم برای اینکه همین تابع فعلی هم به صورت صعودی و هم به صورت نزولی مرتب کنه هست که باید اشاره گر به توابع رو بلد باشی.
    ممنون عماد جان اما می شه یک مثال بزنی...شرمنده ها....نمی دونم منظروت از آرایه جدید یک تابغ جدیده....ممنون

  29. #69
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    ببخشید من یه مقدار منظورم رو بد رسوندم. باید 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 به بعد به صورت نزولی مرتب کنی. امیدوارم نظورم رو درست رسونده باشم.

  30. #70
    سلام عماد جان ممنون از لطف زیادت

    کد مرتب سازی را این جوری نوشتم.... ظاهرا جواب میده.... اما به نظر زیاد مطمئن نمی یاد چون وقتی 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]);
    }

    }
    }
    }

    ]

  31. #71
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    برنامت درسته، مشکلی هم نداره اگه 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 هم بنویسی همون شرط رو باید در داخل بلاک بررسی کنی.

  32. #72
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    برنامت درسته، مشکلی هم نداره اگه 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 هم بنویسی همون شرط رو باید در داخل بلاک بررسی کنی.
    نه عماد جان فکر کنم منظورم را بد رساندم منظورم این if


    if(ta11[j]>=12 && ta11[j+1]>=12)
    {

    و else ان بود برای مرتب کردن صعودی کوچک تر از ساعت دوازده و نزولی بزرگتر از 12 ...ممنون

  33. #73
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    من بازم درست متوجه نشدم که منظورت از else و else if چیه؟
    به هر حال برنامه مشکلی نداره

  34. #74
    سلام عماد جان می خواستم ازت خیلی تشکر کنم به خاطر لطفی که در حقم برای نوشتم این برنامه کردی هزار بار ازت ممنونم.... البته از آقا نیما هم ممنونم..... برنامه تموم شده.... اما هنوز یه مقدار به نظرم خشک می یاد یعنی با تغییرات کوچک همه چیز به هم می ریزه ..... اما ... از لطف شماها ممنونم.

صفحه 2 از 2 اولاول 12

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •