WEBVTT

00:00.110 --> 00:00.860
خوش اومدید.

00:00.860 --> 00:06.350
توی این ویدیو می‌خوایم بفهمیم کدوم وضعیت آب‌وهوا بیشتر تکرار شده :

00:06.350 --> 00:09.050
چون ما چهار وضعیت مختلف داریم
آفتابی، بارونی، ابری و برفی.

00:09.050 --> 00:12.350
و حالا می‌خوایم بدونیم کدوم بیشتر رخ داده.

00:12.350 --> 00:17.150
برای همین یه متد جدید می‌سازم که یه رشته برگردونه.

00:17.150 --> 00:21.260
این متد استاتیک خواهد بود چون در غیر این صورت نمی‌تونم  صداش بزنم.mainداخل متد 

00:21.260 --> 00:21.950
می‌تونید امتحان کنید.

00:21.950 --> 00:22.820
کار نخواهد کرد.

00:22.820 --> 00:25.910
اسم این متد رو می‌ذارم 
mostCommonCondition.

00:25.910 --> 00:29.480
و همه‌ی شرایط رو بهش پاس می‌دم.

00:29.480 --> 00:31.400
یعنی conditions.

00:31.400 --> 00:34.880
خب حالا واضحه که باید یه مقداری برگردونه.

00:34.880 --> 00:43.490
ولی قبل از برگردوندن، یه متغیر می‌سازم که بشماره هر شرط چند بار اتفاق افتاده.

00:43.490 --> 00:44.210
همچنین.

00:44.210 --> 00:53.300
و یه متغیر دیگه هم می‌سازم برای ذخیره‌ی رایج‌ترین وضعیت، conditions که در ابتدا می‌ذارمش روی 
 در موقعیت صفر.

00:53.300 --> 00:53.990
یعنی اولین مقدار.

00:53.990 --> 01:00.590
conditions پس می‌تونم فرض کنم اولین ورودی داخل 
 همون رایج‌ترین شرطه، چون

01:00.590 --> 01:05.300
در ابتدای کار فقط همونه، وقتی شروع به مقایسه با بقیه می‌کنم می‌فهمم آیا مورد دیگه‌ای.

01:05.300 --> 01:06.620
  بیشتر تکرار شده یا نه خب حالا.

01:06.620 --> 01:13.850
for اینجا از یه حلقه 
 استفاده می‌کنم، از صفر شروع می‌کنم.

01:13.850 --> 01:17.030
و شرط می‌ذارم 
conditions.length.

01:17.030 --> 01:21.860
یعنی از اول تا آخر همه‌ی شرایط رو بررسی می‌کنم.

01:21.860 --> 01:28.700
temporary count و یه متغیر دیگه می‌سازم به اسم 
 for که فقط داخل همین حلقه 

01:28.700 --> 01:29.480
در دسترس خواهد بود.

01:29.480 --> 01:34.070
پس فقط باید بدونم برای وضعیت فعلی چند بار ظاهر شدی.

01:34.070 --> 01:38.240
بعد باید اون رو با هر شمارش دیگه مقایسه کنم.

01:38.240 --> 01:46.700
پس اگر وضعیت فعلی بیشتر از بقیه دفعات رخ داده باشه، اون‌وقت می‌فهمم   tempCountکه این وضعیت رایج‌ترینه و به‌همین‌خاطر باید شمارش رو با 
 مقایسه کنم.

01:46.700 --> 01:52.280
این وقتی کد رو ببینیم خیلی واضح‌تر میشه.

01:52.280 --> 01:55.190
خب بزن بریم و ادامه بدیم.

01:55.190 --> 01:57.110
پس یه حلقه for دیگه می‌ذارم که با j جلو میره.

01:57.110 --> 02:04.400
یعنی این یک for داخل for دیگه‌ست.

02:04.400 --> 02:06.770
این دفعه از j به‌جای i استفاده می‌کنیم تا بدونیم داریم توی تکرار داخلی هستیم.

02:06.770 --> 02:16.640
conditions حلقه دوم هم از اول تا آخر 
 رو طی می‌کنه.

02:16.640 --> 02:20.930
چرا این‌کارو می‌کنیم؟

02:20.930 --> 02:22.940
خب قضیه اینه که ما همه‌ی شرایط رو می‌گردیم،

02:22.940 --> 02:29.510
بعد تو هر تکرار برای هر شرط، دوباره همه‌ی شرایط رو می‌گذرونیم.

02:29.510 --> 02:31.610
یعنی از این برای مقایسه استفاده می‌کنیم.

02:31.610 --> 02:36.230
پس این یعنی از اون برای مقایسه استفاده می‌کنیم.

02:36.230 --> 02:44.180
پس اگر بگم اگر conditions[j] برابر با conditions[i] باشد،  tempCount رو افزایش بدم.

02:44.180 --> 02:45.890
اون‌وقت می‌دونم باید

02:45.890 --> 02:46.520
باشه.

02:46.520 --> 02:53.990
پس بیرون از این حلقه می‌تونم بررسی کنم آیا tempCount از count بزرگ‌تره یا نه.

02:54.170 --> 03:01.070
اگه این‌طور باشه، اون‌وقت می‌دونم count می‌شه tempCount و رایج‌ترین وضعیت هم می‌شه شرطِ i.

03:01.070 --> 03:02.000
پس بعدش می‌تونم mostCommon رو برگردونم.

03:02.000 --> 03:05.720
خب اینجا چه خبره؟

03:05.720 --> 03:07.940
چون کلی اتفاق داره میفته.

03:07.940 --> 03:09.320
پس فرض کنیم پنج وضعیت داریم.

03:09.320 --> 03:12.170
و اولین وضعیتی که بررسی می‌کنیم این یکی خواهد بود.

03:12.170 --> 03:16.820
پس بیایم تلاش کنیم بفهمیم اینجا چه اتفاقی داره میفته.

03:16.820 --> 03:19.520
for پس کاری که می‌کنیم اینه که با این حلقه 
 همه شرایط رو طی می‌کنیم.

03:19.520 --> 03:25.280
و بعد این متغیر رو در هر تکرار یک بار جدید ایجاد می‌کنیم.

03:25.280 --> 03:30.080
یعنی برای هر شرط، مرحله به مرحله اون رو بررسی می‌کنیم.

03:30.080 --> 03:35.030
و برای هر شرط همین روند رو انجام می‌دیم.

03:35.030 --> 03:41.510
فرض کنیم ده وضعیت آب‌وهوایی مختلف داریم، نه انواع مختلف شرایط.

03:41.510 --> 03:46.070
نه این موردی که اینجا هست، بلکه ده روز مختلف داریم که شرایط ثبت شده‌اند.

03:46.070 --> 03:53.030
پس برای هر روزی که یه وضعیت خاص داریم، اون وضعیت رو به‌طور کامل بررسی می‌کنیم.

03:53.060 --> 03:59.720
ما یه tempCount می‌سازیم که فقط نشون می‌ده اون وضعیت خاص چند بار داخل آرایه وجود داره.

03:59.720 --> 04:00.620
باشه.

04:00.620 --> 04:05.900
پس فرض کنیم در این تکرار، اولین تکرار، وضعیت آفتابیه.

04:05.990 --> 04:06.680
اوکی.

04:06.680 --> 04:09.740
 حالا با این حلقه 
 بررسی می‌کنیم.

04:09.740 --> 04:11.690
همه شرایط رو دوباره می‌گذرونیم.

04:11.690 --> 04:18.830
و بررسی می‌کنیم آیا وضعیت آفتابی با شرایطی که الان داریم نگاه می‌کنیم برابر هست یا نه.

04:18.830 --> 04:23.450
پس اگر اولی آفتابی بود، حالا دومی رو نگاه می‌کنیم.

04:23.450 --> 04:25.340
آیا اون هم آفتابیه؟

04:25.340 --> 04:26.930
سومی هم آفتابیه؟

04:26.930 --> 04:27.590
چهارمی هم آفتابیه؟

04:27.590 --> 04:32.570
tempCount و هر بار که یکی از اون‌ها آفتابیه، 
 رو افزایش می‌دیم.

04:32.570 --> 04:40.040
حالا داریم می‌گیم اوکی، در واقع آفتابی یک بار بوده و اگر دوباره آفتابی بود،

04:40.040 --> 04:41.720
رو دوباره افزایش می‌دیم.tempCount
 
04:41.720 --> 04:46.190
و بعد از اینکه مقایسه‌ی وضعیت فعلی با بقیه‌ی وضعیت‌ها تمام شد،

04:46.190 --> 04:51.410
tempCount یعنی وقتی دیدیم اون وضعیت چند بار رخ داده، 
 رو بررسی می‌کنیم.

04:51.410 --> 04:58.520
(tempCount) پس مقدار موقت 
 برای وضعیت فعلی یا به‌قولی وضعیت «امروز» 

04:58.520 --> 04:59.870
آیا بزرگ‌تر یا بیشتر است یا نه؟

04:59.990 --> 05:00.470
سپس...

05:00.470 --> 05:06.560
 (count) مقدار دیگری که ما به‌عنوان شمارش کلی
 تنظیم کرده‌ایم را بررسی می‌کنیم.

05:06.560 --> 05:10.880
اگر این‌طور باشد، شمارش کلی را بازنویسی می‌کنیم.

05:10.880 --> 05:20.120
یعنی هر مقداری که قبلاً به‌عنوان بیشترین تعداد وقوعِ یک وضعیت ثبت شده بود را با شمارشِ موقت وضعیت جاری (همان که الآن در حلقه for داریم) جایگزین می‌کنیم.

05:20.120 --> 05:21.890
و هم‌زمان...

05:21.890 --> 05:25.490
اعلام می‌کنیم که وضعیت فعلی...

05:25.490 --> 05:31.970
در همان موقعیتِ تکرار حلقه (یعنی اندیس i) همان وضعیتی است که بیشترین تکرار را دارد.

05:31.970 --> 05:34.490
را برمی‌گردانیم.mostCommon پس سپس 
 
05:34.490 --> 05:39.920
فکر می‌کنم اگه این رو مرحله‌به‌مرحله اجرا کنیم، بهتر متوجه خواهید شد.

05:39.920 --> 05:44.510
اینجا بگذارم.breakpoint  بذارید یک 

05:44.510 --> 05:49.400
و بعد بیایید این خط رو اجرا کنیم.

05:49.400 --> 05:57.590
پس از Console.WriteLine استفاده می‌کنم و می‌گم «رایج‌ترین وضعیت این است» یا «بود».

05:57.590 --> 06:02.420
اگر از همون ساختاری که قبلاً داشتم پیروی کنیم باز هم به آکولاد نیاز داریم.

06:02.420 --> 06:07.550
و متد mostCommonCondition رو با آرایهٔ conditions صدا می‌زنیم.

06:07.550 --> 06:11.210
weatherConditions و باید اینجا آرایهٔ 
 رو پاس بدیم، باشه؟

06:11.210 --> 06:15.350
رایج‌ترین وضعیت همون مقداری خواهد بود که از weatherConditions برمی‌گرده.

06:15.350 --> 06:18.620
حالا بیایم این رو اجرا کنیم.

06:18.620 --> 06:21.110
پس فرض کنیم پنج بار شبیه‌سازی می‌کنیم.

06:21.110 --> 06:26.240
را صفر می‌کنیم.tempCount می‌رویم داخل و 

06:26.240 --> 06:35.750
در این لحظه شرایط ما به‌صورت این‌ها هستند: آفتابی، بارانی، ابری، آفتابی و برفی.

06:35.750 --> 06:40.250
پس وضعیتی که بیشترین تکرار را دارد، آفتابی خواهد بود.

06:40.250 --> 06:43.400
و در تکرار اول هم آفتابی است.

06:43.400 --> 06:46.940
پس بیایید مرحله‌به‌مرحله جلو بریم.

06:46.940 --> 06:49.580
پس ما شرایط را داریم.

06:49.580 --> 06:53.420
conditions الان دارد بررسی می‌کند که آیا 
 در موقعیت صفر

06:53.420 --> 06:58.400
conditions آیا همان 
 در موقعیت صفر هم هست یا نه.

06:58.400 --> 07:02.270
پس داره بررسی می‌کنه که «آیا آفتابی برابر با آفتابی هست؟»

07:02.270 --> 07:03.590
پس می‌گه آره، درستِ.

07:03.590 --> 07:04.940
درست درمیاد.if پس این 

07:04.940 --> 07:06.560
می‌شه.if و وارد بلاک 

07:06.560 --> 07:08.840
رو یک واحد افزایش می‌ده.tempCount و 
 
07:08.840 --> 07:11.690
بعد می‌ریم مرحله بعدی.

07:11.690 --> 07:13.580
پیش می‌ریم.for دوباره توی این حلقه 

07:13.580 --> 07:15.740
J دوباره یک واحد افزایش پیدا می‌کنه.

07:15.740 --> 07:17.780
حالا قراره چک کنه...

07:17.780 --> 07:20.240
آیا هنوز آیتمی داخل آرایه‌مون هست؟

07:20.240 --> 07:22.280
بله، هنوز هست.

07:22.280 --> 07:27.230
الان داره بررسی می‌کنه آیا شرط در موقعیت یک همان شرط در موقعیت صفر هست یا نه.

07:27.230 --> 07:32.570
یعنی اساساً داره می‌پرسه «آیا آفتابی برابر با بارونی هست؟» که صادق نیست.

07:32.570 --> 07:34.670
بیرون می‌آد.if پس از این 

07:34.670 --> 07:35.810
بیایم دوباره اجراش کنیم.

07:35.810 --> 07:37.430
J دوباره افزایش پیدا می‌کنه.

07:37.430 --> 07:38.180
داره چک می‌کنه...

07:38.210 --> 07:41.330
داریم؟conditions آیا هنوز آیتم‌هایی داخل آرایه 

07:41.330 --> 07:42.170
بله داریم.

07:42.170 --> 07:49.760
پس وارد این if می‌شه که مقایسه می‌کنه: آیا شرط در موقعیت دو (جایی که الان j هست = 2)

07:49.760 --> 07:50.900
همان شرطِ موقعیت صفر هست؟

07:50.930 --> 07:54.200
یعنی می‌پرسه «آیا آفتابی برابر با ابری هست؟»

07:54.200 --> 07:56.300
نه، اینطور نیست.

07:56.300 --> 07:57.020
پس نه، برابر نیست.

07:57.020 --> 07:58.760
میاد بیرون.for پس از این 

07:58.760 --> 07:59.780
و دوباره چک می‌کنه.

07:59.780 --> 08:05.150
هنوز آیتمی داریم؟ حالا داره بررسی می‌کنه که j برابر سه هست یا نه.

08:05.150 --> 08:07.670
آره، j الان سه هست.

08:07.670 --> 08:11.630
پس بررسی می‌کنه آیا شرط در موقعیت سوم همون شرط موقعیت صفر هست؟

08:11.750 --> 08:13.730
این دقیقاً کاریه که این بررسی انجام می‌ده.

08:13.730 --> 08:14.510
بله، درسته.

08:14.510 --> 08:17.960
tempCount پس چی می‌شه؟ 
 یک واحد افزایش پیدا می‌کنه.

08:17.960 --> 08:19.640
بیایم اینجا ببینیم.

08:19.640 --> 08:21.320
tempCount می‌بینیم 
 صفر بود.

08:21.320 --> 08:24.350
tempCount و در این تکرار بعدی 
 می‌شه ۲.

08:24.350 --> 08:30.440
پس الان می‌دونیم... خوب، می‌ره سراغ آخرین تکرار، یعنی آیتم پنجم.

08:30.710 --> 08:36.110
چک می‌کنه آیا شرط در موقعیت چهار، یعنی اندیس ۴، برفی برابر با آفتابی هست؟

08:36.110 --> 08:38.420
نه، اینطور نیست.

08:38.420 --> 08:39.110
هم خارج می‌شه.if پس از این 
 
08:39.110 --> 08:40.790
for و همینطور از این 
 هم خارج می‌شه چون دیگه آیتمی نیست.

08:40.790 --> 08:43.880
J دوباره افزایش پیدا می‌کنه.

08:43.880 --> 08:45.620
چک می‌کنه...

08:45.620 --> 08:46.970
چک می‌کنه آیا آیتم دیگه‌ای وجود داره؟

08:46.970 --> 08:48.110
می‌گه نه، دیگه آیتمی نیست.

08:48.110 --> 08:54.710
پس می‌ره به این if که چک می‌کنه: آیا tempCount بزرگتر از count هست؟ یعنی آیا ۲ بزرگتر از صفر هست؟

08:55.400 --> 08:56.180
بله، همینطوره.

08:56.180 --> 09:04.040
count پس می‌ره خط بعد که می‌گه اوکی، 
 که قبلاً صفر بود...

09:04.040 --> 09:07.310
tempCount حالا قراره با 
 جدیدمون که مقدارش دوئه بازنویسی بشه.

09:07.310 --> 09:15.530
و هم‌زمان هر چیزی که قبلاً به‌عنوان رایج‌ترین وضعیت ثبت شده بود، با وضعیتِ فعلیِ ایندکس صفر جایگزین می‌شه،

09:15.530 --> 09:19.790
conditions[0] چون در این لحظه i برابر با صفره و 
 آفتابیه.

09:19.790 --> 09:23.210
پس حالا می‌دونیم رایج‌ترین وضعیت آفتابیه.

09:23.210 --> 09:28.880
این یک تکرار از حلقهٔ بیرونی for ما بود.

09:28.880 --> 09:37.190
conditions حالا همین کار رو برای هر آیتم دیگه در آرایهٔ 
 انجام می‌ده، خوب؟

09:37.190 --> 09:38.510
پس دوباره امتحان می‌کنه.

09:38.510 --> 09:40.160
حالا i رو یکی افزایش می‌ده.

09:40.160 --> 09:41.420
پس چک می‌کنه...

09:41.420 --> 09:43.730
آیا هنوز آیتم توی لیست داریم؟

09:43.730 --> 09:44.660
آره داریم.

09:44.660 --> 09:47.660
و حالا کل این فرایند رو از اول انجام می‌ده.

09:47.660 --> 09:50.900
می‌سازه.int tempCount = 0 یه متغیر 

09:50.900 --> 09:54.230
for این حلقهٔ 
 داخلی رو بارها اجرا می‌کنه.

09:54.230 --> 09:56.180
حالا مقایسه‌ش رو انجام می‌ده.

09:56.330 --> 09:59.780
آیا ورودی در موقعیت صفر...

09:59.940 --> 10:01.710
همان ورودی در موقعیت یک هست؟

10:01.710 --> 10:05.790
conditions اگه به آرایهٔ 
 نگاه کنیم می‌بینیم: آیا آفتابی برابر با بارونی هست؟

10:05.790 --> 10:06.540
خیر نیست.

10:06.540 --> 10:08.340
پس از اون بیرون می‌آد.

10:08.340 --> 10:11.220
و دوباره و دوباره این کارو تکرار می‌کنه.

10:11.220 --> 10:13.350
شد، ضمناً.true فقط یک بار هم  

10:13.350 --> 10:19.830
چون وقتی اندیس برابر با یک بود، بررسی می‌کرد آیا بارونی برابر با بارونی هست — بله.

10:19.830 --> 10:20.310
بارونی برابر با بارونی.

10:20.310 --> 10:21.570
پس همون‌جا true شد.

10:21.570 --> 10:25.650
ولی در کل هر بار مقایسه می‌کنه و می‌بینه بارونی فقط یک‌بار رخ داده.

10:25.650 --> 10:28.620
می‌شه یک.tempCount پس در این نقطه 

10:28.620 --> 10:30.840
چون بارونی فقط یک‌بار بود.

10:30.840 --> 10:35.850
و بله، بعدش از این تکرارِ حلقه بیرون پرید.

************************************
10:35.850 --> 10:38.430
و حالا همین کار رو برای همهٔ آیتم‌های دیگه هم انجام می‌ده.

10:38.430 --> 10:41.040
که شامل ابری، آفتابی و برفی هستن.

10:41.040 --> 10:45.210
پس چون آفتابی دوبار تکرار شده، دوباره اون بخش مربوط به آفتابی رو اجرا می‌کنه.

10:45.210 --> 10:46.650
و می‌بینه آفتابی دوبار وجود داره.

10:46.650 --> 10:53.670
پس در نهایت آفتابی به‌عنوان رایج‌ترین یا پرتکرارترین آیتم انتخاب می‌شه.

10:53.670 --> 10:57.900
خب، این دقیقاً همون روشیه که ما فهمیدیم کدوم آیتم بیشتر از همه تکرار شده.

10:57.900 --> 11:00.840
حالا می‌تونیم از این حلقه خارج بشیم و دوباره خارج بشیم.

11:00.840 --> 11:04.290
و بعد نتیجه رو اینجا ببینیم.

11:04.290 --> 11:06.030
رایج‌ترین وضعیت: آفتابی.

11:06.030 --> 11:06.660
خیلی خب.

11:06.660 --> 11:10.230
پس این بخش کمی پیچیده‌تر بود و کارهای بیشتری اینجا انجام شد.

11:10.230 --> 11:13.830
ولی در واقع ما چندین مفهوم رو با هم ترکیب کردیم.

11:13.830 --> 11:21.270
دیدید که حلقه‌های for رو با هم ترکیب کردیم، با افزایش شمارنده‌ها، با شرط‌ها و با متدها.

11:21.360 --> 11:27.240
و در نهایت تونستیم بفهمیم کدوم آیتم در یک آرایه بیشتر از همه تکرار شده.

11:27.240 --> 11:29.310
خب، این از این ویدیو.

11:29.310 --> 11:34.470
حالا طبیعتاً می‌تونید یک قدم جلوتر برید و بگید خب، اگه چند آیتم دقیقاً تعداد برابر 

11:34.470 --> 11:34.740
داشتن چی؟

11:34.740 --> 11:35.790
می‌شه ادامه داد.

11:35.790 --> 11:40.530
می‌تونید کد رو پیچیده‌تر کنید و بگید خب، اگه هم آفتابی و هم ابری

11:40.530 --> 11:43.860
برای مثال اگه هم آفتابی و هم ابری هر کدوم دوبار تکرار شده باشن، هر دو به یک اندازه رایج‌ترین محسوب می‌شن.

11:43.860 --> 11:47.160
پس در این حالت باید کد رو گسترش بدید، اما این بخشی هست که دیگه به شما می‌سپارم.

11:47.160 --> 11:50.100
براتون آرزوی موفقیت می‌کنم و توی ویدیوی بعدی می‌بینمتون.
