Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

C# da funksiya

+1 ovoz
426 marta ko‘rilgan
so‘radi 02 oktabr, 17 FAXRIDDIN TOJIBOYEV (306 bal)
tahrirlandi 02 oktabr, 17 Saidolim

C# da chekc nomli funksiya tuzdim ammo funksiya ishlamayapti. Nimada xato bo'lishi mumkin?

{
        static void check(int[] mm, int m1, int m, int d, int y)
        {
            if (d > mm[m1])
            {
                d -= mm[m1];
                m++;
                if (m > 12)
                {
                    m -= 12;
                    y++;
                }
            }
        }
        static void Main(string[] args)
        {
            int y1, d1, m1, y2, m2, d2, y, d, m;
            int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
            d1 = Int32.Parse(Console.ReadLine());
            m1 = Int32.Parse(Console.ReadLine());
            y1 = Int32.Parse(Console.ReadLine());
            d2 = Int32.Parse(Console.ReadLine());
            m2 = Int32.Parse(Console.ReadLine());
            y2 = Int32.Parse(Console.ReadLine());
            DateTime dt1 = new DateTime(y1, m1, d1);
            DateTime dt2 = new DateTime(y2, m2, d2);
            y = y1 + y2;
            m = m1 + m2;
            if(m>12){
                m-=12;
                y++;
            }
            if (y1 % 4 == 0) months[1]++;
            d = d1 + d2;
            check(months, m1-1, m, d, y);
            check(months, m1, m, d, y);
            DateTime dt = new DateTime(y, m, d);
            Console.WriteLine(dt);
            Console.ReadKey();
        }
    }
izoh qoldirdi 02 oktabr, 17 vejon (2,992 bal)
bu funksiyani vazifasi nima? Nimani hisoblaydi?
izoh qoldirdi 02 oktabr, 17 Saidolim (3,566 bal)
d = d1 + d2; manimcha shu yerda xato bor. Chunki kunlarni 31 dan oshib ketganini tekshirmagansiz. Kunlar months[m] dan ko`p bo`lsa, keyingi oyga o`tib ketishi kerak
izoh qoldirdi 02 oktabr, 17 FAXRIDDIN TOJIBOYEV (306 bal)
Masala shartida berilgan 2 ta sanani qo'shish kerak va yangi sana hosil qilinadi. Kunlarni qo'shganimda oyga qarab 28 yoki 29 yoki 30 yoki 31 dan oshmasligi kerak. Funksiya shu narsani tekshuradi agar oshsa oyni oshiradi oy 12 dan oshsa yilni oshiradi.
izoh qoldirdi 02 oktabr, 17 FAXRIDDIN TOJIBOYEV (306 bal)
Funksiya siz aytgandek kunlar yig'indisi(d) oy kunlaridan(months[i]) oshib ketsa kunlar miqdoridan o'sha oydagi kunlar miqdorini ayiradi va oy miqdorini(m) 1 ga oshiradi keyin esa yilni(y) ham oshirishi mukin. Funksiya shu ishni bajarmayapti lekin

1 ta javob

+1 ovoz
javob berdi 24 oktabr, 17 anorboev (124 bal)

Funksiya vazifasi uncha chunmadim, lekin u ishlasa ham ishlamasaham hech qanday tasir o'tkazmaydi. check funksiya qabul qilayotgan parametrlar maindagi variable lar bilan bog'liq emas (nomlanishi bir xil bo'lsa ham). Buni to'g'illashni ikki hil yo'li bor:

  1. Funksiya qandaydir ma'lumot qaytaradi, va main funksiyada usha ma'lumot bilan ishlash davom etiladi
  2. ref parametlari. Bunda funksiyaga parametr emas reference beriladi, shunda funksiya ichidagi barcha o'zgarishlar mainga ham tasir qiladi. Agar ref ishlatsangiz sizni metodingiz quyidagi ko'rinishda bo'ladi:
    static void check(int[] mm, int m1, ref int m, ref int d, ref int y)...
     unga murojat esa: 
    check(months, m1, ref m, ref d, ref y);

ref va out operatori haqida o'qib ko'ring))

PS: Agar sizni maqsadingizni to'g'ri tushungan bo'lsam bu ishni DateTime funksiyalari bilan qilgan ancha oson:

static void Main(string[] args)
{
   int d1 = Int32.Parse(Console.ReadLine()),
       m1 = Int32.Parse(Console.ReadLine()),
       y1 = Int32.Parse(Console.ReadLine()),
       d2 = Int32.Parse(Console.ReadLine()),
       m2 = Int32.Parse(Console.ReadLine()),
       y2 = Int32.Parse(Console.ReadLine());
    //avval DateTime yasab olasiz
    DateTime dt = new DateTime(y1, m1, d1);
    //keyin unga Add() metodlari bilan yil, oy, kun qo'shinigiz mumkin;
    dt = dt.AddYears(y2).AddMonths(m2).AddDays(d2);
    Console.WriteLine(dt);
    Console.ReadKey();
}

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...