## توجه: این سوال صرفا مهارت برنامهنویسی شما به زبان جاوا را مورد بررسی قرار میدهد و ارتباطی با برنامهنویسی اندروید ندارد.
فایل [RepeatInString.java](https://www.dropbox.com/s/laesue4y2l0kodo/RepeatInString.java?dl=1) را دانلود کنید. در این فایل یک کلاس به نام RepeatInString وجود دارد که یک متد خالی با نام StringInString و به صورت زیر دارد:
```
public int StringInString(String one, String two)
```
همانطور که از امضای آن مشخص است، این متد دو رشته به عنوان ورودی میگیرد.
شما باید این متد را به نحوی کامل کنید که تعداد دفعات تکرار رشتهی دوم در رشتهی اول را بیابد و به عنوان خروجی برگرداند. به نمونه ورودی و خروجیهایی که در زیر آورده شده توجه کنید.
#### ورودی ۱:
```
StringInString("salam", "sal")
```
#### خروجی ۱:
```
1
```
#### ورودی ۲:
```
StringInString("golgoli", "gol")
```
#### خروجی ۲:
```
2
```
#### ورودی ۳:
```
StringInString("sasasas", "sas")
```
#### خروجی ۳:
```
3
```
#### نکات:
+ در صورتی که هر کدام از رشتههای ورودی null باشند، متد مورد نظر ۰ برمیگرداند.
+ در صورتی که هر کدام از رشتههای ورودی خالی باشند(یعنی رشتههایی با طول صفر باشند) متد مورد نظر ۰ برمیگرداند.
#### آنچه باید آپلود کنید:
فقط فایل RepeatInString.java را به صورت **زیپشده** آپلود کنید. یعنی وقتی فایل زیپ را باز میکنیم، فقط فایل RepeatInString.java را ببینیم.
ساختار درختی فایل ارسالی:
```
<Your-zip-name>.zip
└── RepeatInString.java
```
[دانلود فایل پروژه](http://bayanbox.ir/download/6604229077016712046/NumberGuess.zip)
جواد و صدرا دو برادر هستند. جواد بیست سال دارد و دانشجوی کامپیوتر است و صدرا نه ساله است و طبیعتا دانشآموز دبستان است!
جواد تصمیم گرفتهاست که برای تولد صدرا تبلتی بخرد که روی آن یک بازی سالم بریزد و به او هدیه دهد. از آنجایی که جواد خودش یک پا برنامهنویس است، میخواهد خودش بازی را بنویسد. امّا جواد به دلیل تجربهی کم در برنامهنویسی اندروید، پروژه را ناقص گذاشته تا شما تکمیل کنید.
جواد میخواهد یک بازی حدس عدد طبیعی بنویسد. به طوریکه ابتدا یک بازه از اعداد توسط کاربر انتخاب شود. سپس برنامه عددی در بازهی دادهشده در نظر بگیرد. سپس کاربر با حدس هر عدد توسط کاربر، جوابی از برنامه دریافت میکند با این محتوا که عدد انتخابی برابر، کمتر یا بیشتر از عدد درنظر گرفتهشده است. سپس تعداد حدسهای کاربر نمایش داده میشود.
ابتدا ```MainActivity``` اجرا شده و ```activity_main.xml``` را به نمایش میگذارد. سپس کاربر مقدار کمینه و بیشینهی بازه را در EditTextهای مربوط وارد میکند و با زدن دکمهی ```submit``` وارد ```GameActivity``` (که ```activity_game.xml``` را نمایش میدهد) میشود. سپس با واردکردن حدس خود در قسمت مربوط و زدن دکمهی ```submit```، پیام مربوط در مورد حدس نمایش داده میشود.(برابر، کمتر، بیشتر)
شما باید تغییرات زیر را در پروژه ایجاد کنید:
+ رنگ پسزمینهی ```LinearLayout```های اصلی برنامه را به ```#d3d3d3``` تغییر دهید.
+ رنگ پسزمینهی دکمهها و ```EditText``` های برنامه را به ```#ffffff``` تغییر دهید.
+ ورودی ```EditText``` ها فقط میتواند عدد باشد.
+ پیام راهنمایی ```edit_max``` و ```edit_min``` و ```edit_guess``` به ترتیب برابر ```Enter max value``` و ```Enter min value``` و ```Enter your guess``` باشد.
+ اگر پس از فشردن دکمهی ```submit``` در ```EditText``` ها مقداری وارد نشده بود، مقدار راهنمایی آنها به ```Please enter number``` با رنگ ```#DC0A14``` تغییر کند.
+ اگر مقدار واردشده در ```edit_min``` بزرگتر یا مساوی مقدار واردشده در ```edit_max``` باشد، در ```txt_warning``` عبارت ```Values are invalid``` با رنگ ```#DC0A14``` چاپ شود.
+ پس از آنکه مقادیر کمینه و بیشینه وارد شدند و دکمه فشرده شد، در صورت خطا نداشتن، باید کلاس ```GameActivity``` شروع به کار کند. شما باید با استفاده از ساختن نمونه از کلاس ```Game``` با مقادیر کمینه و بیشینه، حدسهای کاربر را مدیریت کنید.
+ اگر حدس واردشده توسط کاربر کمتر از مقدار کمینهی واردشده یا بیشتر از مقدار بیشینهی واردشده باشد، عبارت ```Number is not in range``` در ```txt_result``` نمایش داده میشود.
+ اگر حدس واردشده کمتر یا بیشتر از مقدار درنظر گرفتهشده در نمونهی ساختهشده از ```Game``` باشد، به ترتیب پیغام ```Enter bigger number!``` و ```Enter smaller number!``` در ```txt_result``` نمایش داده میشود.
+ اگر حدس واردشده درست بود، در ```txt_result``` عبارت ```You won in n tries``` چاپ شود به طوریکه n تعداد تلاشهای کاربر برای حدسزدن است. همچنین دکمه و ```EditText``` این صفحه باید ناپدید شوند.
فایل ناقص پروژه را دانلود کنید و تغییرات گفتهشده را اعمال کنید. توجه فرمایید که به فایلهای دیگر پروژه دست نزنید.
ساختار فایل ناقص پروژه (فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
```
<Your-zip-name>.zip
├───app
│ ├───libs
│ └───src
│ ├───androidTest
│ │ └───...
│ ├───main
│ │ ├───java
│ │ │ └───ir
│ │ │ └───quera
│ │ │ └───numberguess
│ │ │ ├───Game.java <----
│ │ │ ├───GameActivity.java <----
│ │ │ └───MainActivity.java <----
│ │ └───res
│ │ ├───drawable
│ │ ├───layout
│ │ ├───activity_main.xml <----
│ │ └───activity_game.xml <----
│ │ ├───mipmap-hdpi
│ │ ├───mipmap-mdpi
│ │ ├───mipmap-xhdpi
│ │ ├───mipmap-xxhdpi
│ │ ├───mipmap-xxxhdpi
│ │ └───values
│ └───test
│ └───java
│ └───ir
│ └───quera
│ └───numberguess
└───gradle
└───wrapper
```
+ تنها فایلهای موجود در آدرس زیر از پروژه شما استفاده خواهد شد بقیه فایلها از پروژه نمونه قرار داده شده خواهند بود. فایلهای اضافی شما قبل از داوری حذف میشود.
**app/src/main/***
#### **توجه: وجود پوشه ```app``` در ریشه فایل فشرده الزامی میباشد.**
ساختار درختی فایلهای مورد داوری:
```
<Your-zip-name>.zip
├───main
│ │ AndroidManifest.xml
│ │
│ ├───java
│ │ └───ir
│ │ └───quera
│ │ └───numberguess
│ │ Game.java
│ │ GameActivity.java
│ │ MainActivity.java
│ │
│ └───res
│ ├───drawable
│ ├───layout
│ │ activity_game.xml
│ │ activity_main.xml
│ │
│ ├───mipmap-hdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-mdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-xhdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-xxhdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ ├───mipmap-xxxhdpi
│ │ ic_launcher.png
│ │ ic_launcher_round.png
│ │
│ └───values
│ colors.xml
│ strings.xml
│ styles.xml
```
+ توجه کنید که پروژه zip شده باید مستقیما در ریشه فایل zip قرار گیرد.
فایل : [دانلود فایل پروژه](http://bayanbox.ir/download/1739548845967674860/LoginPage.zip)
شرکت ```Quera``` به دنبال تولید اپلیکیشن موبایل اندروید برای سایت خود است، اولین قدم برای این منظور تولید صفحه ورود کاربران است. برای این منظور طراح گرافیکی این شرکت یک قالب اولیه برای این صفحه آماده کرده و بر روی ساختار ```XML``` پیاده سازی کرده است، وظیفه شما آن است که فرآیند ```submit``` را پیاده سازی نمایید. ابتدا باید کنترل صحت داده های ورودی بررسی شود. کنترل صحت داده ها به این صورت می باشد که:
+ هر کدام از ورودی ها باید مقدار داشته باشد در غیر این صورت پیام راهنمایی درون آن به ```Enter Email``` یا ```Enter Password``` با رنگ ```#FF0000``` تغیر می کند.
![نمونه خروجی](http://bayanbox.ir/view/2282226127807162684/Untitled.jpg)
+ مقدار وارد شده در ورودی ```Email``` باید آدرس یک ایمیل بر اساس استاندارد ```RFC 5322``` باشد.
+ مقدار وارد شده در ```Password``` باید حداقل ۸ کاراکتر باشد، این کارکاتر ها می توانند حروف کوچک و بزرگ، عدد و علائم ```@#$%&``` باشد که در هر پسورد حداقل یک حرف کوچک، یک حرف بزرگ، یک عدد و یکی از علائم مجاز باید حضور داشته باشد.
+ در صورت مغایرت مقدار وارد شده درون هر ورودی با شرایط فوق پیام خطای ```Password is not valid``` یا ```Email is not valid``` در بالای صفحه و در قسمت تعیین شده نمایش داده می شود. توجه کنید که در صورت اشتباه بودن هر دو ورودی هر دو پیام باید نمایش داده شوند و با کاراکتر ```\n``` از هم جدا شوند (ترتیب اهمیتی ندارد).
پس از بررسی صحت ورودی ها در صورت صحیح بودن آنها یک درخواست ```HTTP``` به یک سرور خارجی ارسال می شود. این درخواست از نوع ```POST``` می باشد که در بدنه آن یک ```JOSN``` شامل کلید های ```email``` و ```password``` به همراه مقادیر وارد شده می باشد. این درخواست به آدرس ```quera.ir/accounts/login``` ارسال می شود و پیام بازگردانی شده با فرمت ```HTTP``` درون ```ResultActivty``` نمایش داده می شود. برای ارسال این درخواست حتما از ```HttpURLConnection``` استفاده نمایید.
برای پاسخ به این سوال ابتدا فایل زیپ مربوط به این سوال را دانلود نمایید، داخل این فایل یک پروژه اندروید وجود دارد، پس از انجام تغییرات فوق پروژه اندروید را دوباره زیپ نموده و بر روی سایت بارگذاری نمایید. توجه نمایید که بجز فایل های مشخص شده به دیگر فایل های موجود در پروژه دست نزنید.**
ساختار فایل ناقص پروژه برای دانلود (فایلهایی که باید تغییر دهید با ----> نمایش داده شده اند):
```
<Your-zip-name>.zip
└───LoginPage
├───app
│ ├───libs
│ └───src
│ ├───androidTest
│ │ └───...
│ ├───main
│ │ │ AndroidManifest.xml
│ │ ├───java
│ │ │ └───ir
│ │ │ └───quera
│ │ │ └───loginpage
│ │ │ MainActivity.java <----
│ │ │ ResultActivity.java <----
│ │ │
│ │ └───res
│ │ ├───drawable
│ │ ├───layout
│ │ │ activity_main.xml <----
│ │ │ activity_result.xml <----
│ │ │
│ │ ├───mipmap-hdpi
│ │ ├───mipmap-mdpi
│ │ ├───mipmap-xhdpi
│ │ ├───mipmap-xxhdpi
│ │ ├───mipmap-xxxhdpi
│ │ └───values
│ │ colors.xml
│ │ strings.xml
│ │ styles.xml
│ │
│ └───test
│ └───...
└───gradle
└───...
```
+ تنها فایلهای موجود در آدرس زیر از پروژه شما استفاده خواهد شد بقیه فایلها از پروژه نمونه قرار داده شده خواهند بود. فایلهای اضافی شما قبل از داوری حذف میشود.
**app/src/main/***
ساختار درختی فایل ارسالی:
```
<Your-zip-name>.zip
├───main
│ ├───java
│ │ └───ir
│ │ └───quera
│ │ └───loginpage
│ │ MainActivity.java
│ │ ResultActivity.java
│ └───res
│ ├───drawable
│ ├───layout
│ │ activity_main.xml
│ │ activity_result.xml
│ ├───mipmap-hdpi
│ │ ...
│ ├───mipmap-mdpi
│ │ ...
│ ├───mipmap-xhdpi
│ │ ...
│ ├───mipmap-xxhdpi
│ │ ...
│ ├───mipmap-xxxhdpi
│ │ ...
│ └───values
│ colors.xml
│ strings.xml
│ styles.xml
│
└───test
└───...
```
+ توجه کنید که پروژه zip شده باید مستقیما در ریشه فایل zip قرار گیرد.