#نکته
در تصویر یک مثال ساده از نحوه رخداد این آسیب پذیری رو به نمایش گذاشتیم و همونطور که مشخصه بواسطه یک 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
#نکته
#کلین_کد
خوانایی کد یکی از مهم ترین مسائلی هست که باید برنامه نویس به اون توجه کنه
بدنه یک متد معمولا نباید بالا ۳۰ خط باشه
و اگر بیش از ۳۰ خط شد باید این متد رو به متد های بیشتری بشکونید.
به نظر شما به غیر از خوانایی کد، این کار چه مزایا دیگری داره؟
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#کلین_کد
خوانایی کد یکی از مهم ترین مسائلی هست که باید برنامه نویس به اون توجه کنه
بدنه یک متد معمولا نباید بالا ۳۰ خط باشه
و اگر بیش از ۳۰ خط شد باید این متد رو به متد های بیشتری بشکونید.
به نظر شما به غیر از خوانایی کد، این کار چه مزایا دیگری داره؟
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
💬 #چالش
این سوال بیشتر برای آشنایی با ساختار آرایه و استراکچر هستش
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
این سوال بیشتر برای آشنایی با ساختار آرایه و استراکچر هستش
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
Tp hunters cpp
💬 #چالش این سوال بیشتر برای آشنایی با ساختار آرایه و استراکچر هستش 🟥درجه سختی: آسان 🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید. @tphunterscpp
🧠 #کد_چالش
#include <stdio.h>
#include <string.h>
#define NAME 20
#define CONTENT 100
#define CAPACITY 30
struct book {
char author[NAME];
char content[CONTENT];
int year;
int flag;
};
struct library{
struct book books[CAPACITY];
char name[NAME];
};
void add_book(struct library lib , struct book book){
for(int i = 0; i < CAPACITY;i++){
if(lib.books[i].flag = 1){
strcpy(lib.books[i].author , book.author);
strcpy(lib.books[i].content , book.content);
lib.books[i].year = book.year;
lib.books[i].flag = 0;
return;
}
}
}
int search_book(struct library lib , char author[NAME] , int year){
for(int i = 0;i < CAPACITY;i++){
if((lib.books[i].flag == 1) && strcmp(lib.books[i].author , author) == 0 && (year == lib.books[i].year)){
return i;
}
}
return -1;
}
void remove_book(struct library lib , char author[NAME] , int year){
int id = search_book(lib , author , year);
if(id == -1)
return;
lib.books[id].flag = 1;
}
int main(){
struct library centeral_library;
return 0;
}
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#include <stdio.h>
#include <string.h>
#define NAME 20
#define CONTENT 100
#define CAPACITY 30
struct book {
char author[NAME];
char content[CONTENT];
int year;
int flag;
};
struct library{
struct book books[CAPACITY];
char name[NAME];
};
void add_book(struct library lib , struct book book){
for(int i = 0; i < CAPACITY;i++){
if(lib.books[i].flag = 1){
strcpy(lib.books[i].author , book.author);
strcpy(lib.books[i].content , book.content);
lib.books[i].year = book.year;
lib.books[i].flag = 0;
return;
}
}
}
int search_book(struct library lib , char author[NAME] , int year){
for(int i = 0;i < CAPACITY;i++){
if((lib.books[i].flag == 1) && strcmp(lib.books[i].author , author) == 0 && (year == lib.books[i].year)){
return i;
}
}
return -1;
}
void remove_book(struct library lib , char author[NAME] , int year){
int id = search_book(lib , author , year);
if(id == -1)
return;
lib.books[id].flag = 1;
}
int main(){
struct library centeral_library;
return 0;
}
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#نکته
#معماری
معماری به ما کمک میکنه که کد تمیز تر و حرفه تر داشته باشیم.
در معماری ما برنامه رو به لایه های مختلفی تقسیم میکنیم که در معماری های مختلف این لایه ها وظایف مشخص خودشونو دارن.
بهترین مزیتی که معماری داره اینه که اگه روزی بخواین به برنامه تون یک فیچر اضافه کنین، کد های کمتری رو تغییر میدین
دلیلش هم این هست که کد ها لایه بندی شدن.
مزیت های دیگه رو شما کامنت کنید
در ادامه به معرفی معماری های مختلف میپردازیم
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#معماری
معماری به ما کمک میکنه که کد تمیز تر و حرفه تر داشته باشیم.
در معماری ما برنامه رو به لایه های مختلفی تقسیم میکنیم که در معماری های مختلف این لایه ها وظایف مشخص خودشونو دارن.
بهترین مزیتی که معماری داره اینه که اگه روزی بخواین به برنامه تون یک فیچر اضافه کنین، کد های کمتری رو تغییر میدین
دلیلش هم این هست که کد ها لایه بندی شدن.
مزیت های دیگه رو شما کامنت کنید
در ادامه به معرفی معماری های مختلف میپردازیم
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
💬 #چالش
جمله عمومی دنباله: n^2 + 4n
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
جمله عمومی دنباله: n^2 + 4n
🟥درجه سختی: آسان
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
Tp hunters cpp
💬 #چالش جمله عمومی دنباله: n^2 + 4n 🟥درجه سختی: آسان 🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید. @tphunterscpp
🧠 #کد_چالش
#include <iostream>
using namespace std;
int main(){
int n;
cout << "Enter the number: ";
cin >> n;
for (int i=1; i<= n+2; i++){
for(int j=1; j<= n+2; j++){
if( i==1 && j==1 || i==1 && j==n+2 || i==n+2 && j==1 || i==n+2 && j==n+2){
cout<<" ";
}
else{
cout<<"*";
}
}
cout << endl;
}
}
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#include <iostream>
using namespace std;
int main(){
int n;
cout << "Enter the number: ";
cin >> n;
for (int i=1; i<= n+2; i++){
for(int j=1; j<= n+2; j++){
if( i==1 && j==1 || i==1 && j==n+2 || i==n+2 && j==1 || i==n+2 && j==n+2){
cout<<" ";
}
else{
cout<<"*";
}
}
cout << endl;
}
}
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
💬 #شرح_کد
همانطور که مشاهده میکنید برنامه فقط به یک ورودی n نیاز دارد.
حلقه for اول برای انجام دستور endl تعریف شده و حلقه داخلی برای چاپ * و space
از آنجایی که ما در خروجی مربعی به ضلع n+2
داریم (با در نظر نگرفتن گوشه های مربع) پس از شرط i<= n+2 در حلقه های for استفاده میکنیم.
برای چاپ space بجای * در گوشه های بالا و پایین از شرط استفاده میکنیم بنابراین اگر این گوشه هارا درایه هایی از ماتریس در نظر بگیریم؛ دستورهای طرفین || هر کدام به یک درایه (به یک گوشه از مربع) اشاره دارند.
برای مثال i==1 && j==1 به گوشه بالا سمت چپ اشاره دارد. پس بجای آن space چاپ میشود.
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید یا داخل گروه بفرستید.
@tphunterscpp
همانطور که مشاهده میکنید برنامه فقط به یک ورودی n نیاز دارد.
حلقه for اول برای انجام دستور endl تعریف شده و حلقه داخلی برای چاپ * و space
از آنجایی که ما در خروجی مربعی به ضلع n+2
داریم (با در نظر نگرفتن گوشه های مربع) پس از شرط i<= n+2 در حلقه های for استفاده میکنیم.
برای چاپ space بجای * در گوشه های بالا و پایین از شرط استفاده میکنیم بنابراین اگر این گوشه هارا درایه هایی از ماتریس در نظر بگیریم؛ دستورهای طرفین || هر کدام به یک درایه (به یک گوشه از مربع) اشاره دارند.
برای مثال i==1 && j==1 به گوشه بالا سمت چپ اشاره دارد. پس بجای آن space چاپ میشود.
🟢لطفا سوالات، کد و نظرات خود را برای ما کامنت کنید یا داخل گروه بفرستید.
@tphunterscpp
#نکته
#معماری_MVP
یکی از پرکاربرد ترین معماری ها در برنامه نویسی MVP هستش.
درواقع MVP مخفف عبارت زیر است.
( model - view - presenter)
در لایه presenter منطق برنامه وجود داره و در لایه view داده ها نمایش داده میشه.
رابط بین این دو تا لایه، presenter هستش.
به این صورت که لایه view یک درخواست اطلاعات ارسال میکنه به presenter و این لایه اطلاعات رو از model میگیره و به view پاس میده
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#معماری_MVP
یکی از پرکاربرد ترین معماری ها در برنامه نویسی MVP هستش.
درواقع MVP مخفف عبارت زیر است.
( model - view - presenter)
در لایه presenter منطق برنامه وجود داره و در لایه view داده ها نمایش داده میشه.
رابط بین این دو تا لایه، presenter هستش.
به این صورت که لایه view یک درخواست اطلاعات ارسال میکنه به presenter و این لایه اطلاعات رو از model میگیره و به view پاس میده
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#نکته
در ساختما داده و در درخت دودویی یا binary tree یک مفهومی هست به اسم height یا ارتفاع!
که به اشتباه اون رو تعداد کل node ها یا گره های درخت میگن یا متوجه میشن😅!
اما height یا ارتفاع یک درخت , بیشترین تعداد node ها در یک path یا مسیره!
همونطورم میدونید یک مسیر یعنی اینکه از ریشه شروع کن و همینطوری بیا پایین تا به یه گره ای برسی که نه فرزند راست داشته باشه نه فرزند چپ! پس ارتفاع شد تعداد بیشترین گره هایی که در یک مسیر وجود داره👌
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
در ساختما داده و در درخت دودویی یا binary tree یک مفهومی هست به اسم height یا ارتفاع!
که به اشتباه اون رو تعداد کل node ها یا گره های درخت میگن یا متوجه میشن😅!
اما height یا ارتفاع یک درخت , بیشترین تعداد node ها در یک path یا مسیره!
همونطورم میدونید یک مسیر یعنی اینکه از ریشه شروع کن و همینطوری بیا پایین تا به یه گره ای برسی که نه فرزند راست داشته باشه نه فرزند چپ! پس ارتفاع شد تعداد بیشترین گره هایی که در یک مسیر وجود داره👌
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#نکته
#mvp
#mvc
این دو معماری تا حدودی شبیه هم هستند
ولی یک سری تفاوت های جزئی ای تو روند انتقال دیتا بین لایه ها وجود داره
تو معماری MVP همون طور که قبلا گفته شده بود درخواست دیتا از لایه view به presenter صورت میگیره
در این مرحله لایه presenter هم به لایه model درخواست میفرسته
وقتی که لایه presenter دیتا از model دریافت کرد، اون رو به لایه view پاس میده.
اینجا میشه گفت روابط بین لایه ها در MVP دوطرفه هستش
اما در لایه mvc روابط یک طرفه هستش
درخواست دیتا از لایه view به controller صورت میگیره
از controller به model و در این مرحله لایه model دیتا رو مستقیم به view پاس میده.
البته این موارد کلی هستن و در مواقعی این روند تغییر میکنه
به نظر شما تفاوت های دیگه ای داره این دو معماری؟
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#mvp
#mvc
این دو معماری تا حدودی شبیه هم هستند
ولی یک سری تفاوت های جزئی ای تو روند انتقال دیتا بین لایه ها وجود داره
تو معماری MVP همون طور که قبلا گفته شده بود درخواست دیتا از لایه view به presenter صورت میگیره
در این مرحله لایه presenter هم به لایه model درخواست میفرسته
وقتی که لایه presenter دیتا از model دریافت کرد، اون رو به لایه view پاس میده.
اینجا میشه گفت روابط بین لایه ها در MVP دوطرفه هستش
اما در لایه mvc روابط یک طرفه هستش
درخواست دیتا از لایه view به controller صورت میگیره
از controller به model و در این مرحله لایه model دیتا رو مستقیم به view پاس میده.
البته این موارد کلی هستن و در مواقعی این روند تغییر میکنه
به نظر شما تفاوت های دیگه ای داره این دو معماری؟
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
#نکته
در برنامه نویسی و ریاضی تفاوت هایی برای حل یک سری مسایل وجود داره, مثلا شما فرض کنید ما برای بدست اوردن ب.م.م یا همون GCD داخل ریاضیات مایم تقسیم میکنیم و مشترک هارو ضرب در هم میکنیم با توان کوچکتر , حالا برای نوشتن این توی زبان های برنامه نویسی باید بیاید از چند تا فور استفاده کنید یا وایل یا .... و ممکنه منطقش اذیت کننده و سخت باشه, حالا آقای اقلیدس اومد یه الگوریتمی ارایه داد
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
در برنامه نویسی و ریاضی تفاوت هایی برای حل یک سری مسایل وجود داره, مثلا شما فرض کنید ما برای بدست اوردن ب.م.م یا همون GCD داخل ریاضیات مایم تقسیم میکنیم و مشترک هارو ضرب در هم میکنیم با توان کوچکتر , حالا برای نوشتن این توی زبان های برنامه نویسی باید بیاید از چند تا فور استفاده کنید یا وایل یا .... و ممکنه منطقش اذیت کننده و سخت باشه, حالا آقای اقلیدس اومد یه الگوریتمی ارایه داد
function GCD(int a, int b){
return b==0 ? a: GCD(b, a%b)
به همین راحتی ! ینی این داداشمون اقلیدس میاد میگه شما فرض کن دوتا عدد داری, اگر یکیش صفر بود ک خب اون یکی میشه جوابت, اما اگر نبود جای اون دوتارو عوض کن و اولی رو اونقدر به دومی تقسیم کن و باقی موندشو بدست بیار تا به صفر برسی و عددی ک میمونه بشه جوابت😆 امیدوارم استفاده کرده باشید🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
مدرس: محمدصالح حق محمدلو
قسمت 19: اشاره گر به کلاس و اشیای و عضو های آن
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
#پیشرفته
مدرس: محمدصالح حق محمدلو
قسمت 19: اشاره گر به کلاس و اشیای و عضو های آن
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
#نکته
اجرای حلقه بی نهایت یا infinity loop ها وقتی اتفاق میفتن که شرط ادامه دادن حلقه هیچوقت اشتباه یا false نشه!
این باعث میشه که حلقه تو خودش گیر کنه و هی تکرار بشه و بیرون نیاد , علاوه بر اینکه قسمت های دیگه از از کد اجرا نمیشه, حجم زیادی از رم هم گرفته میشه, برای اینکه مطمعن بشید به این مشکل نمیخورید حتما شرط حلقه رو چک کنید که همیشه به مقدار false برسه.
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
اجرای حلقه بی نهایت یا infinity loop ها وقتی اتفاق میفتن که شرط ادامه دادن حلقه هیچوقت اشتباه یا false نشه!
این باعث میشه که حلقه تو خودش گیر کنه و هی تکرار بشه و بیرون نیاد , علاوه بر اینکه قسمت های دیگه از از کد اجرا نمیشه, حجم زیادی از رم هم گرفته میشه, برای اینکه مطمعن بشید به این مشکل نمیخورید حتما شرط حلقه رو چک کنید که همیشه به مقدار false برسه.
🟢لطفا سوالات، نظرات و کد های خود را برای کامنت یا داخل گروه ارسال کنید.
@tphunterscpp
دوستان دقت داشته باشید جلساتی که از قسمت ۲۰ به بعد(که از امروز ضبط خواهند شد)، مربوط به مفاهیم پایه ای شی گرا و پیشرفته (مثل ارث بری، پولیمورفیزم کنترل جریان و سربارگزاری و.... ) هستند، که کاملا مفهومی خواهند بود و شما هر زبانی که کار میکنید میتونید ویدیو هارو ببینید و بر اساس اونها برید جلو👌
اما پیاده سازی ما با زبانی که مربوط به چنل هست خواهد بود(شما با هر زبانی دوس داشتید میتونید پیاده کنید😃)
اما پیاده سازی ما با زبانی که مربوط به چنل هست خواهد بود(شما با هر زبانی دوس داشتید میتونید پیاده کنید😃)
Media is too big
VIEW IN TELEGRAM
#سی_پلاس_ساده_و_خوشمزه
#پیشرفته
مدرس : محمدصالح حق محمدلو
قسمت 20 : مفاهیم ارث بری و انواع آن(الف)
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.
#پیشرفته
مدرس : محمدصالح حق محمدلو
قسمت 20 : مفاهیم ارث بری و انواع آن(الف)
🟢لطفا سوالات، نظرات و کد های خود را برای ما کامنت کنید.