تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




صفحه 13 از 326 اولاول ... 3910111213141516172363113 ... آخرآخر
نمايش نتايج 121 به 130 از 3257

نام تاپيک: سوالات مبتدی و عمومی (++C, C) خود را اینجا بپرسید

  1. #121
    اگه نباشه جاش خالی می مونه egoldfars's Avatar
    تاريخ عضويت
    Mar 2005
    پست ها
    205

    6

    سلام
    لطفا راهنمایی کنید. من یه برنامه نوشتم که اطلاعات یک دانشجو شامل نام و شماره دانشجویی و نمره تعدادی از دروس (5درس) دریافت میکنه ودر آخر معدلش رو چاپ میکنه.
    یه سوال داشتم که چه جوری میتونم به جای وارد کردن اطلاعات یک دانشجو اطلاعات5 نفر رو وارد کنم.......
    اینم کدی که برای یک نفر نوشتم:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    float sum;
    struct student
    {
    char name[10];
    int stno;
    float marks[5];
    }s1;
    printf("student name:");
    scanf("%s",s1.name);
    printf("student number:");
    scanf("%d",&s1.stno);
    for(int i=0;i<5;i++)
    {
    printf("student marks:");
    scanf("%f",&s1.marks[i]);
    sum+=s1.marks[i];
    }
    printf("name:%s\n",s1.name);
    printf("name:%d\n",s1.stno);
    printf("name:%f\n",sum/5);
    getch();
    }

  2. #122
    اگه نباشه جاش خالی می مونه egoldfars's Avatar
    تاريخ عضويت
    Mar 2005
    پست ها
    205

    6

    سلام
    لطفا راهنمایی کنید. من یه برنامه نوشتم که اطلاعات یک دانشجو شامل نام و شماره دانشجویی و نمره تعدادی از دروس (5درس) دریافت میکنه ودر آخر معدلش رو چاپ میکنه.
    یه سوال داشتم که چه جوری میتونم به جای وارد کردن اطلاعات یک دانشجو اطلاعات5 نفر رو وارد کنم.......
    اینم کدی که برای یک نفر نوشتم:
    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    float sum;
    struct student
    {
    char name[10];
    int stno;
    float marks[5];
    }s1;
    printf("student name:");
    scanf("%s",s1.name);
    printf("student number:");
    scanf("%d",&s1.stno);
    for(int i=0;i<5;i++)
    {
    printf("student marks:");
    scanf("%f",&s1.marks[i]);
    sum+=s1.marks[i];
    }
    printf("name:%s\n",s1.name);
    printf("name:%d\n",s1.stno);
    printf("name:%f\n",sum/5);
    getch();
    }

  3. #123
    اگه نباشه جاش خالی می مونه egoldfars's Avatar
    تاريخ عضويت
    Mar 2005
    پست ها
    205

    6

    سلام(به دلیل حذف تاپیک های اضافه ایجاد شده ویرایش کردم) با عرض پوزش.........................................
    ممنون m3hrz4d جان. یه نگاهی به کد زیر بینداز (جاهایی که خط تیره گذاشتم) برام یه سوالی هست شما گفتید که s1 رو یه آرایه ی 5 تایی از Struct Student تعریف کنیم به این صورت دیگه ورودی اول میگیره ولی با وارد کردن ورودی دوم از برنامه خارج میشه

    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    float sum=0;
    struct student
    {
    char name[10];
    int stno;
    float marks[5];
    ----------------------------- }s1[5];
    for(int j=0;j<5;j++)
    {
    printf("student name:");
    -------------------------- scanf("%s",s1[j].name);
    printf("student number:");
    ---------------------------- scanf("%d",&s1[j].stno);
    for(int i=0;i<5;i++)
    {
    printf("student marks:");
    -------------------------- scanf("%f",&s1[j].marks[i]);
    -------------------------- sum+=s1[j].marks[i];
    }
    }
    /*printf("name:%s\n",s1[j].name);
    printf("name:%d\n",s1[j].stno);
    printf("name:%f\n",sum/5);*/
    getch();
    }
    Last edited by egoldfars; 29-11-2007 at 18:49.

  4. #124
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    خوب شما اینجا s1 رو از نوع Struct Student تعریف کردی تا اطلاعات یه دانشجو رو بریزی داخلش.
    اگه میخوای این عملیات رو 5 بار برای 5 دانشجو انجام بدی کافیه از قسمت printf اول تا آخر کدت رو توی یک for قرار بدی تا این کار 5 بار تکرار بشه.اما اگه میخوای اول اطلاعات همه ی دانشجو ها رو بخونی بعد معدل ها رو چاپ کنی میتوی s1 رو یه آرایه ی 5 تایی از Struct Student تعریف کنی و یک for از printf اول تا قبل قسمتی که اطلاعات رو چاپ میکنی بگذاری و توی هر مرحله یکی از عضو های آرایه ت رو پر کنی و بعد از این for یک for دیگه بگذاری تا تک تگ اسم ها و نمره ها رو از آرایه بخونه و چاپ کنه.
    ضمن اینکه اینجا sum رو مقدار اولیه ندادی و توی برنامه مشکل ایجاد میکنه.اول کار 0 ش کن.

  5. #125
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Aug 2007
    پست ها
    486

    پيش فرض

    فکر کنم حالا درگیر Stack نشی راحتر باشی.
    صدا زدن تابع از توی خودش مثل صدا زدن یه تابع دیگه هست.مثلا اگه تابع A خود تابع A رو صدا بزنه دقیقا مسیر برنامه مثل وقتیه که ما یه تابع به اسم B داشته باشیم و توی A تابع B رو صدا بزنیم.تابع B پارامتر های خودش رو داره که تابع A موقع فراخوانی براش ارسال کرده و این ها ربطی به پارامتر های خود A ندارن.

    اگه دقیقا به تابع های بازگشتی مثل تابع های جداگانه نگاه کنی قاطی نمیکنی.این مسیر توی این 3 تا تابع مثل مسیری هست که توی کد بازگشتی و شکلی که گذشتم فقط با یک تابع انجام میشه.
    نمیشه به تابع بازگشتی مثل تابع های جداگانه نگاه کرد مثلا به این برنامه که عدد رو به مبنای 2 می بره نگاه کن:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    وقتی تابع به mabna(a) میرسه بلافاصله به اول برنمیگرده، ابتداcout<<b رو می خونه و ذخیره اش می کنه و بعد برمیگرده دوباره تابع رو اجرا می کنه. اما وقتی یه تابع جداگانه تابع دیگه ای رو صدا میزنه همه چی به ترتیب اجرا میشه درست میگم؟
    من تابع فاکتوریل رو با مفهوم stack فهمیدم و الا بدون این مفهوم که اصلا نمی فهمیدم چی به چیه!
    Last edited by amsjavan; 29-11-2007 at 18:41.

  6. #126
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Aug 2007
    پست ها
    486

    پيش فرض

    m3hrz4d جان میشه یه بار با حلقه های تو در توی for بگی چه جوری میشه همین کار رو کرد مثلا برای 2 در 2

  7. #127
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    نمیشه به تابع بازگشتی مثل تابع های جداگانه نگاه کرد مثلا به این برنامه که عدد رو به مبنای 2 می بره نگاه کن:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    وقتی تابع به mabna(a) میرسه بلافاصله به اول برنمیگرده، ابتداcout<<b رو می خونه و ذخیره اش می کنه و بعد برمیگرده دوباره تابع رو اجرا می کنه. اما وقتی یه تابع جداگانه تابع دیگه ای رو صدا میزنه همه چی به ترتیب اجرا میشه درست میگم؟
    من تابع فاکتوریل رو با مفهوم stack فهمیدم و الا بدون این مفهوم که اصلا نمی فهمیدم چی به چیه!
    اشکالت همین جاست! اگه نظر من رو میخوای دقیقا باید به تابع بازگشتی مثل یه تابع جداگانه نگاه کنی! وقتی manba توی manba فراخوانی میشه مسیر برنامه به اول manba میره و یکبار اون رو (با پارامتر جدیدش) اجرا میکنه..
    با یه IDE درست و حسابی خط به خط Step In کن و نتیجه رو ببین. این مثالت هم اصلا واضح نیست که بخوام روش توضیح بدم برات.
    به نظر من اصلا لزومی نداره توی این مبحث پای stack رو وسط بکشیم.اگه assembly بود یه چیزی..
    --
    پ.ن: برای اینکه مطمئن شی من یکبار یه تابع رو نوشتم به صورتی که خودش رو صدا میزنه:
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    یکبار هم همین تابع رو نوشتم و بجای f توش یه تابع به اسم g رو صدا زدم :
    کد:
    برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
    هر دو رو کامپایل کردم و از Disassembly ش عکس گرفتم.میبینی که هر دو کد عین هم هستن فقط یک جا به جای اینکه f فراخوانی(call) بشه g فراخوانی شده و هیچ تفاوتی توی عملکرد نیست و برای کامپایلر فرق نمیکنه که تابع ی که صدا زده میشه خود همون تابع هست یا نه.عملیات یکسانه :


    [/SIZE][/SIZE]
    Last edited by m3hrz4d; 29-11-2007 at 20:09.

  8. #128
    اگه نباشه جاش خالی می مونه egoldfars's Avatar
    تاريخ عضويت
    Mar 2005
    پست ها
    205

    پيش فرض

    خوب شما اینجا s1 رو از نوع Struct Student تعریف کردی تا اطلاعات یه دانشجو رو بریزی داخلش.
    اگه میخوای این عملیات رو 5 بار برای 5 دانشجو انجام بدی کافیه از قسمت printf اول تا آخر کدت رو توی یک for قرار بدی تا این کار 5 بار تکرار بشه.اما اگه میخوای اول اطلاعات همه ی دانشجو ها رو بخونی بعد معدل ها رو چاپ کنی میتوی s1 رو یه آرایه ی 5 تایی از Struct Student تعریف کنی و یک for از printf اول تا قبل قسمتی که اطلاعات رو چاپ میکنی بگذاری و توی هر مرحله یکی از عضو های آرایه ت رو پر کنی و بعد از این for یک for دیگه بگذاری تا تک تگ اسم ها و نمره ها رو از آرایه بخونه و چاپ کنه.
    ضمن اینکه اینجا sum رو مقدار اولیه ندادی و توی برنامه مشکل ایجاد میکنه.اول کار 0 ش کن.
    ممنون m3hrz4d جان. یه نگاهی به کد زیر بینداز (جاهایی که خط تیره گذاشتم) برام یه سوالی هست شما گفتید که s1 رو یه آرایه ی 5 تایی از Struct Student تعریف کنیم به این صورت دیگه ولی ورودی اول و دوم میگیره ولی به ورودی سومmark که میرسه از برنامه خارج میشه اشکال کارم کجاست.

    #include<stdio.h>
    #include<conio.h>
    void main()
    {
    clrscr();
    float sum=0;
    struct student
    {
    char name[10];
    int stno;
    float marks[5];
    ----------------------------- }s1[5];
    for(int j=0;j<5;j++)
    {
    printf("student name:");
    -------------------------- scanf("%s",s1[j].name);
    printf("student number:");
    ---------------------------- scanf("%d",&s1[j].stno);
    for(int i=0;i<5;i++)
    {
    printf("student marks:");
    -------------------------- scanf("%f",&s1[j].marks[i]);
    -------------------------- sum+=s1[j].marks[i];
    }
    }
    /*printf("name:%s\n",s1[j].name);
    printf("name:%d\n",s1[j].stno);
    printf("name:%f\n",sum/5);*/
    getch();
    }

  9. #129
    اگه نباشه جاش خالی می مونه shadmehrdj's Avatar
    تاريخ عضويت
    Oct 2006
    محل سكونت
    Tehran
    پست ها
    203

    پيش فرض

    سلام.میشه این برنامه را یک نگاه بهش بیندازید و تابع Sign و det را برای من توضیح بدید که چه کار میکنه.

    #include <stdio.h<

    #include <conio.h<



    int sign(int , int);

    int det(int [10][10],int);

    void input(int);



    int mat1[10][10];



    main()

    {

    int size=4;

    clrscr();

    input(size);

    printf("\n det=%d",det(mat1,size));

    getch();

    }



    int sign(int a,int b)

    {

    int s=1;

    for (int z=1 ; z<=a+b ; z++)

    s *= -1;

    return s;

    }



    int det(int mat[10][10],int n)

    {

    int matris[10][10];

    if (n==2) return mat[0][0]*mat[1][1]-mat[0][1]*mat[1][0];

    int temp=0;

    for (int i=0 ; i<n ; i++)

    {

    int k=0,j=0;

    for (int row=0 ; row<n ; row++)

    {

    j=0;

    int pass=0;

    for (int col=0 ; col<n ; col++)

    if ((row!=i) && (col!=0))

    {

    matris[k][j]=mat[row][col];

    j++;

    pass=1;

    }

    if (pass) k++;

    }

    temp += sign(i+1,1)*mat[i][0]*det(matris,n-1);

    }

    return temp;

    }



    void input(int n)

    {

    for (int i=0 ; i<n ; i++)

    for (int j=0 ; j<n ; j++)

    scanf("%d",&mat1[i][j]);

    }

  10. #130
    اگه نباشه جاش خالی می مونه
    تاريخ عضويت
    Oct 2007
    پست ها
    205

    پيش فرض

    m3hrz4d جان میشه یه بار با حلقه های تو در توی for بگی چه جوری میشه همین کار رو کرد مثلا برای 2 در 2
    با for فکر کنم برای دو در دو 4 تا حلقه ی تو در تو میخواد که اصلا جالب نمیشه الان یکم فشار آوردم نتونستم بنویسم اما نه اینکه نشه. یکم وقت میخواد اما آخرش جالب نمیشه.

Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •