ویس چت امشب ساعت ۹ در پیرامون امنیت فضای سایبری خواهد بود👌
منتظر شما هستیم😃
منتظر شما هستیم😃
💬 #چالش
برنامه ای بنویسید که به ازای هر کلمه n حرفی که از کاربر دریافت میکند؛ n کلمه چاپ شود؛ بطوریکه هر بار یک حرف از اول کلمه که قبلا حذف نشده حذف می شود سپس حرف بعدی کلمه جایگزین حرف حذف شده، می شود.(برای درک بهتر سوال به عکس بالا مراجعه کنید)
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه کنید.
برنامه ای بنویسید که به ازای هر کلمه n حرفی که از کاربر دریافت میکند؛ n کلمه چاپ شود؛ بطوریکه هر بار یک حرف از اول کلمه که قبلا حذف نشده حذف می شود سپس حرف بعدی کلمه جایگزین حرف حذف شده، می شود.(برای درک بهتر سوال به عکس بالا مراجعه کنید)
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه کنید.
Tp hunters cpp
💬 #چالش برنامه ای بنویسید که به ازای هر کلمه n حرفی که از کاربر دریافت میکند؛ n کلمه چاپ شود؛ بطوریکه هر بار یک حرف از اول کلمه که قبلا حذف نشده حذف می شود سپس حرف بعدی کلمه جایگزین حرف حذف شده، می شود.(برای درک بهتر سوال به عکس بالا مراجعه کنید) 🟥درجه سختی:…
🧠 #کد_چالش
حل توسط جناب: S1N4M
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string word;
std::cin >> word;
for (unsigned i{}; i < word.size(); ++i) {
std::fill_n(word.begin(), i, word.at(i));
std::cout << word << "\n";
}
return 0;
}
🟢لطفا سوالات،نظرات و کد های خود را برای ما کامنت یا داخل گروه ارسال کنید.
حل توسط جناب: S1N4M
#include <algorithm>
#include <iostream>
#include <string>
int main() {
std::string word;
std::cin >> word;
for (unsigned i{}; i < word.size(); ++i) {
std::fill_n(word.begin(), i, word.at(i));
std::cout << word << "\n";
}
return 0;
}
🟢لطفا سوالات،نظرات و کد های خود را برای ما کامنت یا داخل گروه ارسال کنید.
Tp hunters cpp
🧠 #کد_چالش حل توسط جناب: S1N4M #include <algorithm> #include <iostream> #include <string> int main() { std::string word; std::cin >> word; for (unsigned i{}; i < word.size(); ++i) { std::fill_n(word.begin(), i, word.at(i)); std::cout << word…
💬 #شرح_کد
توضیحات توسط جناب : S1N4M
سوال گفته یه کد بنویسید که به ازای هر کلمه n حرفی, nتا کلمه چاپ بشه و در هر قدم از اندیس i به قبل، همه حروف برابر همون حرف iم از کلمه بشن.
یه کاری که میشه انجام داد
for (int j=0; j < i; j++)
word[j] = word[i];
که یکی از دوستان زحمت کد رو کشیده بودن و انصافا بهتر از اون ندیده بودم. و این بود که به دنبال توابع STL به دوتا تابع رسیدم
std::fill
و
std::fill_n
هر دو از کتابخانه algorithm استفاده میکنند و
std::fill
از c++ 17 معرفی شده و اگر کسی از ورژن های پایینتر استفاده میکنه به کار نمیاد و به اینصورت کار میکنه:
std::fill(word.begin()+a, word.begin()+b, ‘c’);
از درایه aم تا درایه (b-1)م استرینگمون رو به حرف c تغییر میده.
اگر کسی بخواد کل درایه هارو تغییر بده میتونه بنویسه
std::fill(word.begin(), word.end(), ‘c’);
هم ورودی اول و هم ورودی دوم از جنس ایتریتور هستند.
begin()
تابعی هست که به اولین عضو از آرایه یا استرینگ اشاره میکنه
end()
تابعی هست که به آخرین عضو از آرایه یا استرینگ اشاره میکنه
————————————————-
std::fill_n
از c++ 11 معرفی شده و همون کار بالارو انجام میده ولی به صورت
std::fill_n(word.begin()+a, b, ‘c’);
انجام میشه. ورودی اول از جنس ایتریتور و «ورودی دوم فقط تعداد حروف دریافت میشه».
نکته مهم اینکه اگر از تابع fill_n برای تغییر کل درایه ها استفاده میکنید باید بنویسید:
std::fill_n(word.begin(), word.size(), ‘c’);
—————————————-
حالا به عنوان جواب سوال، باید بگم که
یک حلقه مینویسیم که به تعداد n تکرار بشه
و درون حلقه برای اینکه در هر قدم تمام حروف از اول تا حرف iم تغییر کنند و حرف iم رو دریافت کنند مینویسیم:
for(int i{}; i<n; i++){
std::fill_n(word.begin()+0, i, word[i]);
std::cout << word << “\n”;
}
word.at(i)
همون کار word[i] رو انجام میده ولی safe تر هستش و اجازه دسترسی به خانه ای از حافظه خارج از چیزی که تعریف کردیم رو به ما نمیده.
مثلا
std::string word{“azade”};
word[4] -> e
و اگر بخوایم به word[5] دسترسی داشته باشم اینکار رو انجام میده، در صورتی که اشتباهه
ولی word.at(5) قطعا ارور میده و به شما میگه که به یک آدرس غیرمجاز دسترسی خواستید
🟢لطفا سوالات، نظرات و کدهای خود را برای ما کامنت یا داخل گروه ارسال کنید.
توضیحات توسط جناب : S1N4M
سوال گفته یه کد بنویسید که به ازای هر کلمه n حرفی, nتا کلمه چاپ بشه و در هر قدم از اندیس i به قبل، همه حروف برابر همون حرف iم از کلمه بشن.
یه کاری که میشه انجام داد
for (int j=0; j < i; j++)
word[j] = word[i];
که یکی از دوستان زحمت کد رو کشیده بودن و انصافا بهتر از اون ندیده بودم. و این بود که به دنبال توابع STL به دوتا تابع رسیدم
std::fill
و
std::fill_n
هر دو از کتابخانه algorithm استفاده میکنند و
std::fill
از c++ 17 معرفی شده و اگر کسی از ورژن های پایینتر استفاده میکنه به کار نمیاد و به اینصورت کار میکنه:
std::fill(word.begin()+a, word.begin()+b, ‘c’);
از درایه aم تا درایه (b-1)م استرینگمون رو به حرف c تغییر میده.
اگر کسی بخواد کل درایه هارو تغییر بده میتونه بنویسه
std::fill(word.begin(), word.end(), ‘c’);
هم ورودی اول و هم ورودی دوم از جنس ایتریتور هستند.
begin()
تابعی هست که به اولین عضو از آرایه یا استرینگ اشاره میکنه
end()
تابعی هست که به آخرین عضو از آرایه یا استرینگ اشاره میکنه
————————————————-
std::fill_n
از c++ 11 معرفی شده و همون کار بالارو انجام میده ولی به صورت
std::fill_n(word.begin()+a, b, ‘c’);
انجام میشه. ورودی اول از جنس ایتریتور و «ورودی دوم فقط تعداد حروف دریافت میشه».
نکته مهم اینکه اگر از تابع fill_n برای تغییر کل درایه ها استفاده میکنید باید بنویسید:
std::fill_n(word.begin(), word.size(), ‘c’);
—————————————-
حالا به عنوان جواب سوال، باید بگم که
یک حلقه مینویسیم که به تعداد n تکرار بشه
و درون حلقه برای اینکه در هر قدم تمام حروف از اول تا حرف iم تغییر کنند و حرف iم رو دریافت کنند مینویسیم:
for(int i{}; i<n; i++){
std::fill_n(word.begin()+0, i, word[i]);
std::cout << word << “\n”;
}
word.at(i)
همون کار word[i] رو انجام میده ولی safe تر هستش و اجازه دسترسی به خانه ای از حافظه خارج از چیزی که تعریف کردیم رو به ما نمیده.
مثلا
std::string word{“azade”};
word[4] -> e
و اگر بخوایم به word[5] دسترسی داشته باشم اینکار رو انجام میده، در صورتی که اشتباهه
ولی word.at(5) قطعا ارور میده و به شما میگه که به یک آدرس غیرمجاز دسترسی خواستید
🟢لطفا سوالات، نظرات و کدهای خود را برای ما کامنت یا داخل گروه ارسال کنید.
Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
مدرس: محمد صالح حق محمدلو
قسمت 17 : متغییر های const و اشیا const و توابع const
🟢:سوال و نظرات و کدهای خود را برای ما کامنت کنید یا در گروه بفرستید
#پیشرفته
مدرس: محمد صالح حق محمدلو
قسمت 17 : متغییر های const و اشیا const و توابع const
🟢:سوال و نظرات و کدهای خود را برای ما کامنت کنید یا در گروه بفرستید
#نکته
دستورات مهم برای git
git init -> یک مخزن لوکال
git add - git add —all - git add -A -> اضافه کردن تغیرات
git commit -m "index file created" -> ثیت تغیرات
git status -> اطلاع از آخرین وضعیت برنچ شما
git clone -> Repository دریافت
git checkout -b <new-branch> -> ساخت برنچ جدید
git checkout branchname -> رفتن به برنچ مورد نظر
git remote add origin https://remote -> ساخت مخزن ریموت برای مخازن لوکال
git branch - git branch -r -> دیدن برنچ های لوکال و ریموت
git pull -> دریافت کد از ریموت
git push -> ارسال تغیرات به ریموت
git checkout -m <new-branch-name> -> تغیر نام برنچ
git branch -d <local-branch> - git push origin —delete <remote-branch> -> حذف برنچ در لوکال و ریموت
git commit —amend -m "modified index file" -> تغیر چیزی در آخرین لحظه
git brancg -d <name-branch> -> پاک کردن برنچ
🟢لطفا سوالات, نظرات و کدهای خود را برای ما کامنت کنید
دستورات مهم برای git
git init -> یک مخزن لوکال
git add - git add —all - git add -A -> اضافه کردن تغیرات
git commit -m "index file created" -> ثیت تغیرات
git status -> اطلاع از آخرین وضعیت برنچ شما
git clone -> Repository دریافت
git checkout -b <new-branch> -> ساخت برنچ جدید
git checkout branchname -> رفتن به برنچ مورد نظر
git remote add origin https://remote -> ساخت مخزن ریموت برای مخازن لوکال
git branch - git branch -r -> دیدن برنچ های لوکال و ریموت
git pull -> دریافت کد از ریموت
git push -> ارسال تغیرات به ریموت
git checkout -m <new-branch-name> -> تغیر نام برنچ
git branch -d <local-branch> - git push origin —delete <remote-branch> -> حذف برنچ در لوکال و ریموت
git commit —amend -m "modified index file" -> تغیر چیزی در آخرین لحظه
git brancg -d <name-branch> -> پاک کردن برنچ
🟢لطفا سوالات, نظرات و کدهای خود را برای ما کامنت کنید
#نکته
Single Responsibility Principle
در مهندسی نرم افزار یکی از اصول های پنج گانه solid که باید رعایت کنیم SRP هستش
این اصل میگه که تمام متد ها و کلاس ها باید یک وظیفه داشته باشند
دلیل این کار هم خوانا بودن کد و راحت تر شدن دیباگ کردن و ... هستش
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید
Single Responsibility Principle
در مهندسی نرم افزار یکی از اصول های پنج گانه solid که باید رعایت کنیم SRP هستش
این اصل میگه که تمام متد ها و کلاس ها باید یک وظیفه داشته باشند
دلیل این کار هم خوانا بودن کد و راحت تر شدن دیباگ کردن و ... هستش
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید
#نکته
در اینجا به مفهوم const و pointer در زبان C++ اشاره میکنیم.
_قطعه کد اول
const char* ptr_a ;
در این حالت محتویات اشاره گر(اطلاعات اشاره شده توسط اشاره گر) تحت تاثیر const قرار گرفته و ثابت میماند
اما خود اشاره گر را میتوان تغییر داد
برای مثال:
✅ ptr_a = " a new value " ;
❌ *ptr_a = ' x ' ;
〰〰〰〰〰〰〰〰〰〰〰〰〰
_قطعه کد دوم
char* const ptr_b ;
اما در حالت دوم اشاره گر تحت تاثیر const قرار گرفته و ثابت میماند
بنابراین ما میتوانیم داده هایی که به آنها اشاره شده است یعنی محتویات را تغییر دهیم
برای مثال:
✅ *ptr_b = ' x ' ;
❌ ptr_b = " a new string " ;
〰〰〰〰〰〰〰〰〰〰〰〰〰
بررسی حالت اول و دوم به بیان ساده تر:
اِلِمان const از قانون نزدیکی پیروی کرده و روی نزدیکترین المان های بعد از خودش تاثیر میگذارد و آنهارا ثابت نگه میدارد.
〰〰〰〰〰〰〰〰〰〰〰〰〰
اما حالت سومی هم وجود دارد که با بهره گیری از آن میتوان هم اشاره گر و هم داده کرکتر را ثابت نگه داشت:
_قطعه کد سوم
const char* const ptr_c ;
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
در اینجا به مفهوم const و pointer در زبان C++ اشاره میکنیم.
_قطعه کد اول
const char* ptr_a ;
در این حالت محتویات اشاره گر(اطلاعات اشاره شده توسط اشاره گر) تحت تاثیر const قرار گرفته و ثابت میماند
اما خود اشاره گر را میتوان تغییر داد
برای مثال:
✅ ptr_a = " a new value " ;
❌ *ptr_a = ' x ' ;
〰〰〰〰〰〰〰〰〰〰〰〰〰
_قطعه کد دوم
char* const ptr_b ;
اما در حالت دوم اشاره گر تحت تاثیر const قرار گرفته و ثابت میماند
بنابراین ما میتوانیم داده هایی که به آنها اشاره شده است یعنی محتویات را تغییر دهیم
برای مثال:
✅ *ptr_b = ' x ' ;
❌ ptr_b = " a new string " ;
〰〰〰〰〰〰〰〰〰〰〰〰〰
بررسی حالت اول و دوم به بیان ساده تر:
اِلِمان const از قانون نزدیکی پیروی کرده و روی نزدیکترین المان های بعد از خودش تاثیر میگذارد و آنهارا ثابت نگه میدارد.
〰〰〰〰〰〰〰〰〰〰〰〰〰
اما حالت سومی هم وجود دارد که با بهره گیری از آن میتوان هم اشاره گر و هم داده کرکتر را ثابت نگه داشت:
_قطعه کد سوم
const char* const ptr_c ;
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
#نکته
Open Closed Principle
اصل دوم solid به ما میگه که برنامه برای گسترش باید باز باشه و برای تغییر بسته
یک مثال میزنیم
فرض کنید که یک متدی دارین که وظیفه ارسال پیام الکترونیکی با yahoo رو داره
برای گسترش برنامه شما میخواین امکان ارسال پیام الکترونیکی با gmail هم اضافه کنید
اینجا شما میتونید متد مربوط به ارسال با yahoo رو تغییر بدین که اینجا شما نقض میکنید اصل دوم رو چون که دارین تغییر میدین کدی که از قبل نوشته شده است
درواقع باید یک متد جداگونه برای ارسال با gmail بسازین و استفاده کنید
و همین طور وقتی این اصل رو رعایت کنید ، تا حد زیادی هم اصل اول (SRP) رو رعایت کردین
#solid
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
Open Closed Principle
اصل دوم solid به ما میگه که برنامه برای گسترش باید باز باشه و برای تغییر بسته
یک مثال میزنیم
فرض کنید که یک متدی دارین که وظیفه ارسال پیام الکترونیکی با yahoo رو داره
برای گسترش برنامه شما میخواین امکان ارسال پیام الکترونیکی با gmail هم اضافه کنید
اینجا شما میتونید متد مربوط به ارسال با yahoo رو تغییر بدین که اینجا شما نقض میکنید اصل دوم رو چون که دارین تغییر میدین کدی که از قبل نوشته شده است
درواقع باید یک متد جداگونه برای ارسال با gmail بسازین و استفاده کنید
و همین طور وقتی این اصل رو رعایت کنید ، تا حد زیادی هم اصل اول (SRP) رو رعایت کردین
#solid
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
💬 #چالش
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
Tp hunters cpp
💬 #چالش 🟥درجه سختی: آسان 🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید. @tphunterscpp
🧠 #کد_چالش
🟢 لطفا سوالات، نظرات و کدهای خود را برای ما کامنت کنید.
#include<iostream>
using namespace std;
void printPascal(int n) {
for (int line = 1; line <= n; line++) {
int C = 1;
for (int i = 1; i <= line; i++) {
cout<<C<<" ";
C = C * (line - i) / i;
}
cout<<endl;
}
}
int main(){
int n=0;
cin>>n;
printPascal(n);
}
🟢 لطفا سوالات، نظرات و کدهای خود را برای ما کامنت کنید.
Tp hunters cpp
🧠 #کد_چالش #include<iostream> using namespace std; void printPascal(int n) { for (int line = 1; line <= n; line++) { int C = 1; for (int i = 1; i <= line; i++) { cout<<C<<" "; C = C * (line - i) / i; } …
💬 #شرح_کد
توضیحات: چون کسی نتونست حلش کنه پس توسط خودم😎😂
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید یا داخل گروه بفرستید
توضیحات: چون کسی نتونست حلش کنه پس توسط خودم😎😂
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید یا داخل گروه بفرستید
Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
مدرس: محمدصالح حق محمدلو
قسمت 18: عناصر داده ای Static توابع و اشیا آن همراه با مثال های عملی از دنیای بازی و وبسایت
🟢لطفا سوالات, نظرات و کد های خود را برای ما کامنت کنید
#پیشرفته
مدرس: محمدصالح حق محمدلو
قسمت 18: عناصر داده ای Static توابع و اشیا آن همراه با مثال های عملی از دنیای بازی و وبسایت
🟢لطفا سوالات, نظرات و کد های خود را برای ما کامنت کنید
#نکته
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک struct با نام UAFME یک تابع درونش بصورت void تعریف شده که از نوع اشاره گر هستش اما در ادامه دو تابع دیگه رو داریم با نام های ()good و ()bad که یک تابع ()print درون هر کدوم تعریف شده و یک string رو قراره چاپ بکنه
اما در تابع اصلی یعنی ()main میبینیم که همون اول کار از ساختمان UAFME یک شیُ ساخته میشه که بصورت اشاره گر بوده و حافظه رو بواسطه تابع ()malloc رزرو کرده با اندازه ساختمان UAFME
اما در ادامه شیُ مربوطه یعنی malloc1* اشاره داره به تابع درون ساختمان یعنی vulnfunc که مقدار تابع good بهش پاس داده شده، در ادامه تابع ()vulnfunc فراخوانی میشه، اینجا با این تابع که در حافظه Heap هستش تماس برقرار میشه
این شیُ بواسطه تابع ()free آزاد شده است، اما در ادامه متغییر دومی که بصورت اشاره گر با نام malloc2* تعریف شده که مقدار 0 رو داره و در ادامه تابع bad بهش پاس داده شده، اینجا چون اندازه اشاره گر مربوطه به اندازه متغییر malloc2 هستش، به همون قسمت قبل در حافظه ارجاع داده شده
🟢لطفا سوالات و نظرات خود را کامنت کنید
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک struct با نام UAFME یک تابع درونش بصورت void تعریف شده که از نوع اشاره گر هستش اما در ادامه دو تابع دیگه رو داریم با نام های ()good و ()bad که یک تابع ()print درون هر کدوم تعریف شده و یک string رو قراره چاپ بکنه
اما در تابع اصلی یعنی ()main میبینیم که همون اول کار از ساختمان UAFME یک شیُ ساخته میشه که بصورت اشاره گر بوده و حافظه رو بواسطه تابع ()malloc رزرو کرده با اندازه ساختمان UAFME
اما در ادامه شیُ مربوطه یعنی malloc1* اشاره داره به تابع درون ساختمان یعنی vulnfunc که مقدار تابع good بهش پاس داده شده، در ادامه تابع ()vulnfunc فراخوانی میشه، اینجا با این تابع که در حافظه Heap هستش تماس برقرار میشه
این شیُ بواسطه تابع ()free آزاد شده است، اما در ادامه متغییر دومی که بصورت اشاره گر با نام malloc2* تعریف شده که مقدار 0 رو داره و در ادامه تابع bad بهش پاس داده شده، اینجا چون اندازه اشاره گر مربوطه به اندازه متغییر malloc2 هستش، به همون قسمت قبل در حافظه ارجاع داده شده
🟢لطفا سوالات و نظرات خود را کامنت کنید
#نکته
#تست_نویسی
تست نویسی در برنامه نویسی؟
یکی از مباحثی که تو پروژه های متوسط و بزرگ مطرح میشه تست نویسی هست.
تست نویسی چی هست؟
وقتی ما یک کدی میزنیم باید مطمئن بشیم که این کد کار میکنه
اولین راهی که انجام میدیم اینه که ران بگیریم و به صورت دستی این تست رو انجام بدیم؛ ولی یه سری مشکلاتی اینجا پیش میاد.
وقتی برنامه گسترش پیدا کنه تست کردن دستی همه برنامه سخت و زمان بر میشه
اینجاست که تست نویسی به کار میاد.
ما برای هر کاری که تو برنامه قراره انجام بگیره میایم سناریو های مختلفی رو در نظر میگیریم و طبق این سناریو تست رو مینویسیم.
و فقط کافیه این تست ها رو اجرا کنیم
به این صورت که اتوماتیک همه قسمت های برنامه که براشون تست نوشتید به نوعی تست میشند که خطا نداشته باشند.
برای مثال ما یک فیلدی داریم که کاربر باید عدد وارد کند و این عدد در متغیری ذخیره میشه و برای این کار قطعه کدی رو نوشتیم.
خب شما میتونید برای اینکه از عملکرد این کد مطمئن بشین که درست کار میکنه میاین تستی مینویسیند که یک عدد وارد بشه و سپس کد اجرا بشه
طبیعتا اینجا مشکلی پیش نمیاد و تست پاس میشه
حالا شما یک سناریو دیگه ای در نظر بگیرین به این صورت که به جای عدد یک حرف وارد بشه و اینجا باید ارور برگردونه برنامه
به همین صورت تست های مختلفی رو برای برنامه مینویسیم.
شما تجربه ای تو بحث تست نویسی دارین؟
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
#تست_نویسی
تست نویسی در برنامه نویسی؟
یکی از مباحثی که تو پروژه های متوسط و بزرگ مطرح میشه تست نویسی هست.
تست نویسی چی هست؟
وقتی ما یک کدی میزنیم باید مطمئن بشیم که این کد کار میکنه
اولین راهی که انجام میدیم اینه که ران بگیریم و به صورت دستی این تست رو انجام بدیم؛ ولی یه سری مشکلاتی اینجا پیش میاد.
وقتی برنامه گسترش پیدا کنه تست کردن دستی همه برنامه سخت و زمان بر میشه
اینجاست که تست نویسی به کار میاد.
ما برای هر کاری که تو برنامه قراره انجام بگیره میایم سناریو های مختلفی رو در نظر میگیریم و طبق این سناریو تست رو مینویسیم.
و فقط کافیه این تست ها رو اجرا کنیم
به این صورت که اتوماتیک همه قسمت های برنامه که براشون تست نوشتید به نوعی تست میشند که خطا نداشته باشند.
برای مثال ما یک فیلدی داریم که کاربر باید عدد وارد کند و این عدد در متغیری ذخیره میشه و برای این کار قطعه کدی رو نوشتیم.
خب شما میتونید برای اینکه از عملکرد این کد مطمئن بشین که درست کار میکنه میاین تستی مینویسیند که یک عدد وارد بشه و سپس کد اجرا بشه
طبیعتا اینجا مشکلی پیش نمیاد و تست پاس میشه
حالا شما یک سناریو دیگه ای در نظر بگیرین به این صورت که به جای عدد یک حرف وارد بشه و اینجا باید ارور برگردونه برنامه
به همین صورت تست های مختلفی رو برای برنامه مینویسیم.
شما تجربه ای تو بحث تست نویسی دارین؟
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
💬 #چالش
توضیحات بیشتر:
معکوس 123: 321
معکوس 221: 122
که 321 بزرگتر از 122 است طبق سوال عددی که معکوسش بزرگتر از معکوس عدد دیگر باشد، آن عدد بزرگتر است.
پس: 221 < 123
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
توضیحات بیشتر:
معکوس 123: 321
معکوس 221: 122
که 321 بزرگتر از 122 است طبق سوال عددی که معکوسش بزرگتر از معکوس عدد دیگر باشد، آن عدد بزرگتر است.
پس: 221 < 123
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
Tp hunters cpp
💬 #چالش توضیحات بیشتر: معکوس 123: 321 معکوس 221: 122 که 321 بزرگتر از 122 است طبق سوال عددی که معکوسش بزرگتر از معکوس عدد دیگر باشد، آن عدد بزرگتر است. پس: 221 < 123 🟥درجه سختی: آسان 🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال…
🧠 #کد_چالش
#include <iostream>
using namespace std;
int main(){
int n1, n2, a1, a2;
int rvrs1=0, rvrs2=0;
cin>>n1>>n2;
int num1=n1;
int num2=n2;
while (n1 > 0){
a1 = n1 % 10;
rvrs1 = rvrs1 * 10 + a1;
n1 = n1 / 10;
}
while (n2 > 0){
a2 = n2 % 10;
rvrs2 = rvrs2 * 10 + a2;
n2 = n2 / 10;
}
if( rvrs1 > rvrs2 ){
cout<<num1 << " > " <<num2;
}
else if( rvrs2 > rvrs1 ){
cout<<num2 << " > " <<num1;
}
else if (rvrs1 == rvrs2 ){
cout<<num1 << " = " <<num2;
}
}
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#include <iostream>
using namespace std;
int main(){
int n1, n2, a1, a2;
int rvrs1=0, rvrs2=0;
cin>>n1>>n2;
int num1=n1;
int num2=n2;
while (n1 > 0){
a1 = n1 % 10;
rvrs1 = rvrs1 * 10 + a1;
n1 = n1 / 10;
}
while (n2 > 0){
a2 = n2 % 10;
rvrs2 = rvrs2 * 10 + a2;
n2 = n2 / 10;
}
if( rvrs1 > rvrs2 ){
cout<<num1 << " > " <<num2;
}
else if( rvrs2 > rvrs1 ){
cout<<num2 << " > " <<num1;
}
else if (rvrs1 == rvrs2 ){
cout<<num1 << " = " <<num2;
}
}
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp