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

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

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    سلام عماد تغییراتی که گفتی را روی برنامه انجام دادم ... توی یک سایت هم یک مقدار در مورد اشاره گرها خواندم.... اما هنوز هم به همان جمله ای که در بالا گفتم ایراد می گیره می شه بک لطفی کنی دوباره یک نگاهی بهش بیندازی... خیلی ممنون....
    من در ادامه برنامه باید اهداد خروجی را مرتب کنم...که این قسمت ر ا هنوز انحام ندادم منتطرم ایرادات این قسمت ها را پیدا کنم با کمک شما....گفتم در حریان باشی.....

    ببین کد الان این جوریه...
    #include <stdio.h>
    #include <conio.h>
    //*******************صنعتی به معمولی******************///
    double nytilgammel(double nytimer[80], int *gtime[], int * gmin[], int * gsek[])
    {
    int i;
    for (i=0; i<80; 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**************************//

    //*******************معمولی به صنعتی*********************//

    double gammeltilny (int time[80], int min[80], int sek[80],double *nytid[])
    {
    int i;
    for (i=0; i<80; 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 nytilgammel[80],a, b,c;
    double gammeltilny[80],d,e,f;
    int i;

    printf("\n\t1. for ny til gammel");
    printf("\t2. for gammel til ny\n");
    printf("\t3.for Exit");

    scanf("%s",&menu);

    //***********************************************//
    if (menu==1)
    {

    fp1 = fopen("inddata1.txt","r");
    fp2 = fopen("uddata.txt", "w");
    while (fscanf(fp1,"%lf",&nytimer[i])!=EOF)
    {
    for (i=0; i<80; i++)
    {
    nytilgammel( nytimer[i], &gtime[i], &gmin[i], &gsek[i]);


    fprintf(fp2,"Gammel timer: %02d %02d %02d\n\n\n\n",gtime[i],gmin[i],gsek[i]);
    }
    }
    }

    //**************************************//

    if (menu==2)
    {
    fp3 = fopen("ind.txt","r");
    fp4 = fopen("ud.txt", "w");

    while (fscanf(fp3,"%d%d%d",&time[i],&min[i],&sek[i])!=EOF)
    {
    for (i=0; i<80; i++)
    {
    gammeltilny (time[i],min[i],sek[i],*nytid[i]);

    fprintf(fp4,"Ny tid: %0.04lf\n\n\n",nytid[i]);
    }
    }
    }

    if (menu==3)
    {
    exit(0);
    }
    else
    {
    printf("Error",);
    }
    getch();


    }


    هنوز...
    هم به این قسمت ایراد می گیره...
     nytilgammel( nytimer[i], &gtime[i], &gmin[i], &gsek[i]);


    البته حتما ایراد های دیگه ای داره هنوز....

    نمی دونم یادت هست یا نه این همون برنامه ای است که ساعت صنعتی را به ساعت معمولی و برعکس تبدیل می کرد...

    نمی دونم چه جوری ازت تشکر کنم...ممنون

  2. #2
    برنامه شما پر از اشتبا هات برنامه نویسی هست که رفع کردن همه آن ها مساوی با نوشتن دوباره برنامه.

    مثلا برای تابع nytilgammel شما تعریف کردید double مقدار برگشتی تابع در حالی که return ندارد. یا تابع را به تابع بدون مقدار برگشتی یعنی void تبدیل کنید.

    double nytilgammel(double nytimer, int *time, int * min, int * sek)
    {
    // codes
    return (any double number)
    }

    خواندن از فایل : شما با دستور fscanf فقط یک مقدار را از ورودی می خوانید پس اول همه آنها را با هما حلقه for تک تک در یک آرایه 80 تایی بریزید و سپس تابع را فراخوانی کنید. نه اینکه 80 مرتبه تابع را نیز برای هر خانه تکرار کنید.

    ضمنا تعریف توابع شما و استفاده از آن کلا غلط است.
    1- حلقه for بیرون تابع را حذف کنید.(برای scanf همچنان باقی بماند)
    2- وقتی می خواهید آرایه ای به صورت آرگومان به تابع ارسال می کنید در تابع ، آرگومان را اینگونه بنویسید:(هر چهار آرگومان را)
    double * nytimer
    3 و 4- موقع فراخوانی تابع فقط اسم انها را بدون * یا & یا [] به عنوان ارگومان ارسال کنید که این به این معنی هست که شما ادرس اول آرایه را به تابع فرستادید و حالا می توانید مثل آرایه های معمولی با [] و i در حلقه در داخل تابع از انها استفاده کنید. و اگر هم مقدارشان تغییر کند واقعا مقادیر تغییر می کنند ؛ پس برای مواقعی که نمی خواهید آرایه ها تغییر کنند در تعریف ارگومان تابع بنویسید :

    const double * nytimer






  3. #3
    سلام
    ممنون از لطفت
    ناامیدوم کردی.....
    کد را با توجه به حرف های شما تغییر دادم.... فکر کنم بهتر شده باشه... اما هنوز هم به عبارت

     nytilgammel( nytimer, gtime, gmin, gsek);

    ایراد می گیره در اصل تابع بالا یک عدد به صورت 23.2345 (nytimer) را از تابع اصلی در یافت می کنه و بعد از انحام محاسبات سه تا عدد (gtime, gmin, gsek) را به تابع اصلی برای چاپ می فرستد....

    و هم چنین به این تابع هم ایراد می گیره

    gammeltilny (time,min,sek,nytid);

    این تابع سه عدد به صورت 45 57 12 (min,sek,nytid) را از تابغ اصلی دریافت می کند و یک عدد (time) را به خروجی می فرسته
    ایرادی هم که به دو عبارت می گیره این که ....میگه این دو عبارت را به صورت تابع نمی توانی تعریف کنی یا اشتباه تعریف کرده ای...
    ممنون می شم دوباره یگ نگاهی بهش بیندازید....

    این هم کل کد برنامه

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    //*******************ny til gammel******************///
    double nytilgammel(double nytimer, int *gtime, int * gmin, int * gsek)
    {
    int i;
    for (i=0; i<80; i++)
    {
    nytimer *= (24./20.);
    *gtime = (int) nytimer;
    nytimer -= *gtime;
    nytimer *= 60;
    *gmin = (int) nytimer;
    nytimer -= *gmin;
    nytimer *= 60;
    *gsek = (int) nytimer;

    return(0);
    }
    }


    //*********************end**************************//

    //*******************gammel til ny*********************//

    double gammeltilny (int *time, int *min, int *sek,double nytid)
    {
    int i;
    for (i=0; i<80; i++)
    {
    nytid = ((((sek[i]/60.)+ min[i])/60.)+ time[i])*(20./24.);
    }
    return(0);
    }
    //**********************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 nytilgammel[80],a, b,c;
    double gammeltilny[80],d,e,f;
    int i;

    printf("\n\t1. for ny til gammel");
    printf("\t2. for gammel til ny\n");
    printf("\t3.for Exit");

    scanf("%s",&menu);

    //***********************************************//
    if (menu==1)
    {

    fp1 = fopen("inddata1.txt","r");
    fp2 = fopen("uddata.txt", "w");
    while (fscanf(fp1,"%lf",&nytimer)!=EOF)
    {
    for (i=0; i<80; i++)
    {
    fscanf(fp1,"%lf",&nytimer[i]);
    }
    nytilgammel( nytimer, gtime, gmin, gsek);

    fprintf(fp2,"Gammel timer: %02d %02d %02d\n\n\n\n",gtime[i],gmin[i],gsek[i]);

    }
    }

    //**************************************//

    if (menu==2)
    {
    fp3 = fopen("ind.txt","r");
    fp4 = fopen("ud.txt", "w");

    while (fscanf(fp3,"%d%d%d",&time,&min,&sek)!=EOF)
    {
    for (i=0; i<80; i++)
    {
    fscanf(fp3,"%d%d%d",&time[i],&min[i],&sek[i]);
    }
    gammeltilny (time,min,sek,nytid);

    fprintf(fp4,"Ny tid: %0.04lf\n\n\n",nytid[i]);
    }

    }

    if (menu==3)
    {
    exit(0);
    }
    else
    {
    printf("Error");
    }
    getch();


    }


    راستی دو تابع یک مقدار با هم فرق داره می خواستم ببینم کدوم به درست نزدیک تره.....بازم ممنون

  4. #4
    شما همه مواردی را که ذکر کردم را انجام ندادید.
    همانطور که در شماره 2 گفتم هر 4 آرگومان شما باید * باشد که برای اصلی ترین آرگومان که قرار است مقدارش تغییر کند ، شما انجام ندادید. هر دو تعریف تابع را به این شکل تغییر دهید:

    double را به void چون نیازی به مقدار برگشتی که صفر وارد کردید ندارید (و اگر void گذاشتید باید rerurn را هم حذف کنید.)

    nytimer و nytid شما هر دو آرایه هستند ، مثل 3 مورد دیگر و نه تنها باید با * آن را مشخص کنید بلکه در داخل تابع نیز باید به صورت آرگومانی از double استفاده کنید نه فقط یک متغیر double تنها. نگاهی به تعریف آن بیاندازید ، شما آن ها را مثل یک متغیر تنها در یک حلقه for گذاشته اید و [] ندارند تا آرایه پر شود.

    بعد از انحام محاسبات سه تا عدد (gtime, gmin, gsek) را به تابع اصلی برای چاپ می فرستد....
    3 مورد فوق عدد نیستند آرایه ای هستند شامل چندین زمان ، برای نمایش (print) همه آن ها باید داخل حلقه for باشند.


    void
    nytilgammel(double * nytimer, int *gtime, int * gmin, int * gsek)
    {
    // other codes
    nytimer[i] *= (24./20.);
    // other codes
    // No return
    }

    //-------------------------------
    void gammeltilny (int *time, int *min, int *sek, double * nytid)
    {
    // other codes
    nytid[i] = ((((sek[i]/60.)+ min[i])/60.)+ time[i])*(20./24.);
    // other codes
    // No return

    }

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

    ضمنا اگر همین برنامه را در یک کامپایلر تحت ویندوز و جدید مثل visual studio express می نوشتید خطا یابی ها بسیار بهتر و با شرح بیشتری بود .

  5. #5
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    سلام
    اینجوری من یا آقا نیما فقط داریم syntax برنامه رو برات درست می کنیم که بازم ممکنه چیزی که میخوای نشه. لطفا بگو تابع های nytilgammel و gammeltilny دیققا قرار چکار کنن و آیا به این تابع ها تک تک زمان رو ارسال می خوای بکنی و یا اینکه کل زمان های موجود در آرایه ها رو میخوای بفرستی به تابع؟

  6. #6
    نقل قول نوشته شده توسط emad_67 مشاهده تاپیک
    سلام
    اینجوری من یا آقا نیما فقط داریم syntax برنامه رو برات درست می کنیم که بازم ممکنه چیزی که میخوای نشه. لطفا بگو تابع های nytilgammel و gammeltilny دیققا قرار چکار کنن و آیا به این تابع ها تک تک زمان رو ارسال می خوای بکنی و یا اینکه کل زمان های موجود در آرایه ها رو میخوای بفرستی به تابع؟
    ببین تابع اول باید عددی به صورت 12.3456 را برگردونه به زمان معمولی (در برخی از دستگاه های صعنتی زمان را به صورت یک عدد نشون می دن برای راحتی کار در درون سیستم) خوب ورودی برنامه یک فایل که توش تعدادی عدد و باید همه رو دونه به دونه برگردون به زمان معمولی نشان بدهد...یعنی مثلا اگه از ورودی دو تا عدد را بخواند در خروجی هم دو تا ساعت (که البته می شود شش عدد چون هر زمان از سه عدد ساعت دقیقه و ثانیه تشکیل شده) را نشان دهد

    در کل ورودی تابع اول اعدادی به صورت 14.5967 12.3456
    و خروحی اون به صورت 45 23 12 و 44 23 09
    که مثلا اولی می شود نه و بیست و سه دقیقه و چهل و چهار ثانیه.

    در توضیح فرمولشم این که مثلا برای عدد 12.3456

    12.3456*(24/20)= 14.8147
    که 14 می شود مقدار ساعت
    0.8147*60=48.8832
    که 48 می شود مقدار دقیقه
    0.8832*60= 52.992
    که 52 می شود مقدار ثانیه


    تابع دوم هم همین کار را بر عکس انحام می دهد یعنی از ورودی زمان را می گیرد و تبدیل به عدد که در اصل زمان در دستگاه صنعتی است می کند......
    در توضیح فرمول تابع دوم هم اینه که مثلا برای زمان 45 23 12
    10.3299 = ((((45/60.)+ 23)/60.)+ 12)*(20./24.);
    که جواب عدد 10.3299 زمان در دستگاه صنعتی است.

    البته من در نهایت باید خروجی های تابع اول (زمان ها را) مرتب کنم....که البته هنوز کدش را ننوشتم .. که باید بعدا یک تابغ برای اون تعریف کنم دوباره........

    مثلا ورودی تابغ اول (inndata1.txt) این ها هستند.

    0.0000 0.0001 0.0002 0.0139 0.5000 0.8333 1.0000 1.2500 1.2550 3.3333 3.3334
    5.0000 7.1579 9.4433 9.4434 12.4456 15.4478 17.8631 17.8640 17.8684 17.8691
    18.0000 19.4999 19.5000 19.9999 20.0000


    مثلا ورودی تابغ دوم (ind.txt) این ها هستند.

    00 00 00  00 00 01  00 01 00  00 01 01  00 59 59
    01 00 00 04 16 35 12 60 23 02 34 2 22 34 59


    بازم ممنون از لطفتون نمی دونم چه جوری تشکر کنم.......

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

  7. #7
    کاربر دائمی
    تاریخ عضویت
    اسفند 1385
    محل زندگی
    تهران
    پست
    1,486
    مشکلی که هست اینه که تو نمیتونی یه مقداری رو به این شکل از تابع اولیه بر گردونی : 44 23 09
    در اینصورت مجبوری کل آرایه ها رو به تابع ارسال کنی و بعد از تغییر، مقادیر رو در خونه های هر آرایه ذخیره کنی
    اولین تابع رو با این حساب به این شکل تغییر دادم:

    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;
    gmi[i] = (int) nytimer[i];
    nytimer -= gmin[i];
    nytimer[i] *= 60;
    gsek[i] = (int) nytimer[i];

    }
    }
    یه متغیر دیگه هم به عنوان پارامتر 4 ام که مشخص کننده تعداد عناصر موجود در آرایه هست(n) به تابع فرستادم تا مشکلی پیش نیاد. درسته که آرایه تو 80 تا خونه داره ولی معلوم نیست توی فایل 80 تا عنصر وجود داشته باشه، پس اگه آرایه کامل پر نشه در زمان اجرا به مشکل بر میخوری. بنابراین باید تعداد ساعت هایی رو که از فایل میخونی با یه متغیر بشمری و اون متغیر رو به تابع ارسال کنی. پس این حلقه هم اشتباه هست و باید تغییر بدی:

    while (fscanf(fp1,"%lf",&nytimer)!=EOF)
    {
    for (i=0; i<80; i++)
    {
    fscanf(fp1,"%lf",&nytimer[i]);
    }
    nytilgammel( nytimer, gtime, gmin, gsek);

    fprintf(fp2,"Gammel timer: %02d %02d %02d\n\n\n\n",gtime[i],gmin[i],gsek[i]);

    }
    توی اینجا هم میتونی while رو حذف کنی و شرط رسیدن به پایان فایل رو به جای i<80 در حلقه for قرار بدی. البته همچنان مشکل من و تو اینه که من c بلد نیستم و اگه مشکل دستوری در اینا وجود داشته باشه نمیتونم بهت بگم. اگه دستوراتی که در این قسمت نوشتی کاملا درست باشه باید به این شکل تغییر کنه.

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

    fprintf(fp2,"Gammel timer: %02d %02d %02d\n\n\n\n",gtime[i],gmin[i],gsek[i]);
    البته بازم فکر میکنم مشکل داره بهتره برای شناسایی انتهای فایل از تابع eof استفاده کنی. مقدار i هم میشه تعداد عناصر خونده شده.
    با این صحبت ها بقیه قسمت های برنامه هم خودت تغییر بده. از جمله تابع gammeltilny و ...

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

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

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

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

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

  13. #13
    کاربر دائمی
    تاریخ عضویت
    اسفند 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();

    }

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

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

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

  15. #15
    کاربر دائمی
    تاریخ عضویت
    اسفند 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 هم توضیح داده شد.

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

  17. #17
    سلام

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

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

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

    }

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

  20. #20

    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

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

  21. #21
    کاربر دائمی
    تاریخ عضویت
    اسفند 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 ها هم به همین شکل. البته راه اول ساده تره
    اگه منظورت چیز دیگه ای هست با مثال توضیح بده.

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

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

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

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

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

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

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

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

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

    }
    }
    }

    ]

  30. #30
    کاربر دائمی
    تاریخ عضویت
    اسفند 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 هم بنویسی همون شرط رو باید در داخل بلاک بررسی کنی.

  31. #31
    نقل قول نوشته شده توسط 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 ...ممنون

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

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

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

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

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