مبانی برنامه نویسی
774 subscribers
4 photos
1 link
اگه سوالی بود یا مشکلی وجود داشت میتونید با آیدی زیر ارتباط بگیرید بتونم و بدونم حتما جواب میدم .موفق باشید.
@mohammadf111
Download Telegram
اگه سوالی بود یا مشکلی وجود داشت میتونید با آیدی زیر ارتباط بگیرید بتونم و بدونم حتما جواب میدم .موفق باشید.(در زمینه های برنامه نویسی و کامپیوتر و راهنمایی در مورد پروژه و ....)
@mohammadf111
👍6
#آموزش
شماره : 9
عنوان تابع(function)
توضیح:در برنامه‌نویسی، تابع یک بخش از کد است که نام دارد و می‌تواند یک وظیفه خاص را انجام دهد. توابع در برنامه‌نویسی می‌توانند ورودی‌ها را بگیرند، آن‌ها را پردازش کنند و خروجی‌ها را برگردانند. تابع می‌تواند به عنوان یک واحد مجزا از کد استفاده شود که به صورت تکراری قابل استفاده و فراخوانی باشد.

مزایای استفاده از توابع عبارتند از:
- سازماندهی بهتر کد و جدا کردن وظایف مختلف.
- قابلیت استفاده مجدد از کد.
- کاهش تکرار و تعداد خطوط کد.
- افزایش قابلیت خوانایی و درک کد.
- تسهیل در تست و اشکال‌زدایی.

در اکثر زبان‌های برنامه‌نویسی، توابع با استفاده از دستوراتی مانند def, function, sub, procedure و غیره تعریف می‌شوند.
در زبان #c و #cpp :
در زبان‌های برنامه‌نویسی C و C++، توابع با استفاده از دستور function و نحوی مشخص دیگر تعریف می‌شوند. الگوی کلی تعریف تابع در این دو زبان به صورت زیر است:

<نوع_برگشتی> نام_تابع(<پارامترها>) {
// بلاک کد تابع
// عملیات‌ها و دستورات مورد نیاز
// بازگشت مقدار در صورت نیاز
}


در این الگو، <نوع_برگشتی> نوع داده‌ای است که تابع برمی‌گرداند. نام_تابع نام تابع است. <پارامترها> پارامترهایی هستند که به تابع پاس داده می‌شوند.

برای مثال، یک تابع ساده در زبان C که دو عدد را جمع کند را می‌توان به صورت زیر نوشت:

int sum(int a, int b) {
int result = a + b;
return result;
}


در این مثال، تابع sum دو عدد را به عنوان ورودی می‌گیرد و جمع آن‌ها را بازمی‌گرداند.

در زبان C++ نیز، می‌توان توابع را به همین شکل تعریف کرد. البته، در C++ می‌توان از ویژگی‌های بیشتری مانند تابع‌های عضو کلاس، تابع‌های مبتنی بر الگو و غیره استفاده کرد.
تابع void یک نوع خاص از توابع است که هیچ مقداری را به عنوان خروجی برنگردانده و فقط برای انجام یک عملیات خاص به کار می‌رود.

مثالی از یک تابع void در زبان C برای چاپ یک پیام را می‌توان به صورت زیر نوشت:

#include <stdio.h>

void printMessage() {
printf("Hello, World!n");
}

int main() {
printMessage();
return 0;
}


در این مثال، تابع printMessage از نوع void است و هیچ مقداری را به عنوان خروجی برنمی‌گرداند. این تابع فقط پیام "Hello, World!" را در خروجی چاپ می‌کند.

در زبان C++ نیز می‌توان از توابع void استفاده کرد. به عنوان مثال، تابع void می‌تواند به عنوان یک تابع عضو یا تابع عضو استاتیک در یک کلاس تعریف شود.
در زبان #python :
در زبان برنامه‌نویسی پایتون، تابع یک بخش از کد است که نام دارد و می‌تواند وظیفه خاصی را انجام دهد. توابع در پایتون به صورت زیر تعریف می‌شوند:

def نام_تابع(پارامترها):
# بلاک کد تابع
# عملیات‌ها و دستورات مورد نیاز
# بازگشت مقدار در صورت نیاز


در این الگو، نام_تابع نام تابع است و پارامترها پارامترهایی هستند که به تابع پاس داده می‌شوند.

به عنوان مثال، یک تابع ساده در پایتون که دو عدد را جمع کند را می‌توان به صورت زیر نوشت:

def sum(a, b):
result = a + b
return result


در این مثال، تابع sum دو عدد را به عنوان ورودی می‌گیرد و جمع آن‌ها را بازمی‌گرداند.

توجه کنید که در پایتون، return اختیاری است. اگر تابع return نداشته باشد، خروجی None خواهد بود.
3
Parizad
Alireza Ghorbani @RozMusic.com
#متفرقه
Alireza Ghorbani - Parizad
4🆒1
#آموزش
شماره : 10
عنوان : Call by Reference و Call by Value
توضیح : در برنامه نویسی، منظور از Call by Reference و Call by Value روش‌هایی هستند که برای انتقال داده ها بین توابع و روال‌ها استفاده می‌شوند.

1. Call by Value: در این روش، مقدار متغیر به تابع منتقل می شود، بنابراین هر تغییری که در متغیر در داخل تابع اعمال شود، بر روی متغیر اصلی در تابع فراخواننده (کالر) تأثیری ندارد. به عبارت دیگر، تغییرات متغیر درون تابع فقط در دامنه محلی تابع هستند و بر عنصر بر جایی در حافظه شبیه متغیر خارج از تابع اثر نمی‌گذارد.

2. Call by Reference: در این روش، یک ارجاع به متغیر به تابع منتقل می شود، بنابراین هر تغییری که در متغیر در داخل تابع اعمال شود، بر روی متغیر اصلی در تابع فراخواننده تأثیر می‌گذارد.

به عبارت ساده تر، Call by Value به معنی کپی کردن مقدار یک متغیر به محل دیگری است و Call by Reference به اشاره به محل اصلی مقدار متغیر در حافظه است.
در زبان #c:
در زبان C، می‌توانید توابع را به دو روش "با ارجاع" (Call by Reference) و "با مقدار" (Call by Value) فراخوانی کنید.

### Call by Reference (با ارجاع):

در این روش، به جای ارسال کپی از مقدار، مقدار اصلی به تابع ارسال می‌شود و تابع می‌تواند مقدار آن را تغییر دهد. برای این کار از اشاره‌گرها استفاده می‌شود.
مثال:
#include <stdio.h>

// تابع با ارجاع
void increment(int *num) {
(*num)++; // افزایش مقدار عددی به عنوان ارجاع
}

int main() {
int x = 10;
printf("Before increment: %d\n", x); // چاپ مقدار x قبل از افزایش
increment(&x); // فراخوانی تابع با ارجاع
printf("After increment: %d\n", x); // چاپ مقدار x پس از افزایش
return 0;
}

خروجی:
Before increment: 10
After increment: 11

### Call by Value (با مقدار):
در این روش، فقط یک کپی از مقدار به تابع ارسال می‌شود و تغییراتی که در داخل تابع اعمال می‌شوند، بر روی متغیر اصلی تأثیری ندارند. مثال:
#include <stdio.h>

// تابع با مقدار
void increment(int num) {
num++; // افزایش مقدار عددی
}

int main() {
int x = 10;
printf("Before increment: %d\n", x); // چاپ مقدار x قبل از افزایش
increment(x); // فراخوانی تابع با مقدار
printf("After increment: %d\n", x); // چاپ مقدار x پس از افزایش
return 0;
}


خروجی:
Before increment: 10
After increment: 10

در هر دو مثال، تابع increment یک عدد را دریافت می‌کند و آن را افزایش می‌دهد. اما در مثال اول (با ارجاع)، تغییرات در متغیر اصلی (در تابع main) نیز تأثیر می‌گذارند، در حالی که در مثال دوم (با مقدار)، تغییرات تنها در داخل تابع اعمال می‌شوند و متغیر اصلی تغییر نمی‌کند.
👍1
در زبان #cpp :
در زبان C++، مفهوم "Call by Reference" و "Call by Value" همچنان وجود دارد. با Reference، متغیرها به توابع منتقل می‌شوند، در حالی که با Value، مقادیر کپی از متغیرها به توابع منتقل می‌شوند.

### Call by Reference (با ارجاع):
در این روش، آرگومان‌ها به تابع ارسال می‌شوند و از طریق آن‌ها، می‌توان به مقادیر اصلی متغیرها دسترسی داشت.

#include <iostream>

using namespace std;

// تابع با ارجاع
void increment(int &num) {
num++; // افزایش مقدار عددی با ارجاع
}

int main() {
int x = 10;
cout << "Before increment: " << x << endl; // چاپ مقدار x قبل از افزایش
increment(x); // فراخوانی تابع با ارجاع
cout << "After increment: " << x << endl; // چاپ مقدار x پس از افزایش
return 0;
}

خروجی:
Before increment: 10
After increment: 11


در اینجا، تابع increment یک مقدار عددی را به عنوان ارجاع دریافت می‌کند و مقدار آن را یک واحد افزایش می‌دهد.

### Call by Value (با مقدار):
در این روش، کپی از مقادیر متغیرها به توابع منتقل می‌شوند، بنابراین تغییراتی که در تابع انجام می‌شود، تنها در دامنه آن تابع باقی می‌ماند و بر روی متغیر اصلی تاثیری ندارد.

#include <iostream>

using namespace std;

// تابع با مقدار
void increment(int num) {
num++; // افزایش مقدار عددی
}

int main() {
int x = 10;
cout << "Before increment: " << x << endl; // چاپ مقدار x قبل از افزایش
increment(x); // فراخوانی تابع با مقدار
cout << "After increment: " << x << endl; // چاپ مقدار x پس از افزایش
return 0;
}

خروجی:
Before increment: 10
After increment: 10


در اینجا، تغییراتی که در تابع increment اعمال می‌شود، تنها بر روی مقدار کپی شده از متغیر x تاثیر می‌گذارد و متغیر اصلی x تغییر نمی‌کند.
👍2
در زبان #python :
در واقع در زبان پایتون، مفهوم تقسیم بر اساس "Call by Value" و "Call by Reference" وجود ندارد، بلکه تمام انتقال‌های پارامترها بر اساس "Call by Object Reference" انجام می‌شود. با این حال، می‌توان به این تفاوت‌ها در رفتار بین اشیاء mutable و immutable در پایتون اشاره کرد.

### مثال:

#### Call by Object Reference برای شیء mutable:

def increment(num_list):
num_list.append(4)

my_list = [1, 2, 3]
print("Before increment:", my_list)
increment(my_list)
print("After increment:", my_list)


Output:
Before increment: [1, 2, 3]
After increment: [1, 2, 3, 4]


در اینجا، لیست my_list به تابع increment با ارجاع فرستاده می‌شود. تغییری که در داخل تابع اعمال می‌شود (افزودن عدد 4 به لیست) باعث می‌شود که تغییرات در متغیر اصلی my_list نیز دیده شود.

#### Call by Object Reference برای شیء immutable:

def change_num(num):
num += 10

my_num = 5
print("Before change:", my_num)
change_num(my_num)
print("After change:", my_num)


Output:
Before change: 5
After change: 5


در اینجا، عدد my_num به تابع change_num با ارجاع فرستاده می‌شود، اما چون اعداد در پایتون immutable هستند، هیچ تغییری در متغیر اصلی اعمال نمی‌شود.
👍2
#آموزش
شماره : 11
عنوان : پوینتر (Pointer)
توضیح :پوینتر (Pointer) در برنامه‌نویسی یک متغیر است که آدرس حافظه یا مکانیزمی برای دسترسی به حافظه را نشان می‌دهد. از پوینترها برای مدیریت و کنترل حافظه و دسترسی به داده‌ها استفاده می‌شود. در زیر توضیحاتی در مورد پوینترها در برنامه‌نویسی آورده شده است:

1. آدرس حافظه: پوینتر، آدرس حافظه را نشان می‌دهد. این آدرس می‌تواند به یک متغیر، آرایه یا ساختار اشاره کند.

2. عملگرهای پوینتر: عملگرهایی مانند * و & برای عملیات روی پوینترها استفاده می‌شوند. * برای دسترسی به مقداری که پوینتر به آن اشاره می‌کند و & برای دریافت آدرس یک متغیر استفاده می‌شود.

3. تخصیص حافظه با استفاده از پوینتر: با استفاده از پوینترها می‌توانید حافظه‌ای را به صورت دستی تخصیص دهید، به عنوان مثال با استفاده از عملگر new در C++.

4. انتقال پوینتر: پوینترها به عنوان آرگومان‌های تابع و بازگشتی‌ها استفاده می‌شوند. این به برنامه‌نویس امکان می‌دهد تا به طور مستقیم با حافظه و داده‌ها در برنامه تعامل کند.

5. پوینترها و آرایه‌ها: در برنامه‌نویسی، آرایه‌ها به طور ضمنی به یک پوینتر به اولین عنصر آرایه تبدیل می‌شوند.

6. پوینترها و ساختارها: با استفاده از پوینترها می‌توانید به صورت مستقیم به عناصر ساختارها دسترسی پیدا کنید.

استفاده صحیح از پوینترها در برنامه‌نویسی می‌تواند به شما امکان کنترل دقیق‌تری بر روی حافظه و داده‌ها را بدهد و کارایی برنامه را افزایش دهد. با این حال، نادرست استفاده از پوینترها می‌تواند منجر به خطاهایی مانند خطای حافظه (Memory Error) و دسترسی به حافظه نامعتبر (Invalid Memory Access) شود. بنابراین، باید با دقت و به دقت از پوینترها استفاده کرد و از مشکلات مربوط به آن‌ها جلوگیری کرد
در زبان #c:
در زبان C، پوینترها ابزاری قدرتمند برای کنترل و مدیریت حافظه هستند. پوینترها به شما امکان می‌دهند به طور مستقیم با حافظه و داده‌ها در برنامه تعامل کنید. در زیر توضیحی در مورد پوینترها در زبان C آورده شده است همراه با مثال‌هایی:

1. تعریف پوینتر:
برای تعریف یک پوینتر در C، از علامت * استفاده می‌شود. برای مثال:
   int *ptr;

در این مثال، ptr یک پوینتر به یک متغیر از نوع int است.

2. مقداردهی به پوینتر:
برای مقداردهی به یک پوینتر، می‌توان از عملگر & برای گرفتن آدرس متغیر استفاده کرد. برای مثال:
   int num = 10;
int *ptr = &num;

در این مثال، ptr به آدرس متغیر num اشاره می‌کند.

3. دسترسی به مقدار اشاره شده توسط پوینتر:
برای دسترسی به مقداری که پوینتر به آن اشاره می‌کند، از عملگر * استفاده می‌شود. برای مثال:
   int num = 10;
int *ptr = &num;
printf("Value: %dn", *ptr);

در این مثال، *ptr مقداری که پوینتر ptr به آن اشاره می‌کند (مقدار num) را چاپ می‌کند.

4. پوینترها و آرایه‌ها:
در C، آرایه‌ها به طور ضمنی به یک پوینتر به اولین عنصر آرایه تبدیل می‌شوند. برای مثال:
   int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr; // یا int *ptr = &arr[0];
printf("First element: %dn", *ptr); // چاپ عنصر اول آرایه

در این مثال، ptr به اولین عنصر آرایه arr اشاره می‌کند.

5. پوینترها و ساختارها:
با استفاده از پوینترها، می‌توانید به صورت مستقیم به عناصر ساختارها دسترسی پیدا کنید. برای مثال:
   struct Person {
char name[20];
int age;
};
struct Person person;
struct Person *ptr = &person;

در این مثال، ptr یک پوینتر به ساختار Person است و می‌توانید با استفاده از ptr به صورت مستقیم به عناصر ساختار دسترسی پیدا کنید.
👍1
در زبان #cpp:
در زبان C++ نیز پوینترها همانند زبان C تعریف و استفاده می‌شوند. اما در زبان C++، به علاوه از قابلیت‌هایی مانند پوینترهای به همراه نوع (type-safe pointers) و پوینترهای هوشمند (smart pointers) نیز استفاده می‌شود. در زیر توضیحاتی درباره پوینترها در زبان C++ آورده شده است همراه با مثال‌هایی:

1. تعریف پوینتر:
برای تعریف یک پوینتر در C++، از علامت * استفاده می‌شود. برای مثال:
   int* ptr;

در این مثال، ptr یک پوینتر به یک متغیر از نوع int است.

2. مقداردهی به پوینتر:
برای مقداردهی به یک پوینتر، می‌توان از عملگر & برای گرفتن آدرس متغیر استفاده کرد. برای مثال:
   int num = 10;
int* ptr = &num;

در این مثال، ptr به آدرس متغیر num اشاره می‌کند.

3. دسترسی به مقدار اشاره شده توسط پوینتر:
برای دسترسی به مقداری که پوینتر به آن اشاره می‌کند، از عملگر * استفاده می‌شود. برای مثال:
   int num = 10;
int* ptr = &num;
cout << "Value: " << *ptr << endl;

در این مثال، *ptr مقداری که پوینتر ptr به آن اشاره می‌کند (مقدار num) را چاپ می‌کند.

4. پوینترها و آرایه‌ها:
در C++، آرایه‌ها به طور ضمنی به یک پوینتر به اولین عنصر آرایه تبدیل می‌شوند. برای مثال:
   int arr[5] = {1, 2, 3, 4, 5};
int* ptr = arr; // یا int* ptr = &arr[0];
cout << "First element: " << *ptr << endl; // چاپ عنصر اول آرایه

در این مثال، ptr به اولین عنصر آرایه arr اشاره می‌کند.

5. پوینترها و ساختارها:
در C++، می‌توانید با استفاده از پوینترها به صورت مستقیم به عناصر ساختارها دسترسی پیدا کنید. برای مثال:
   struct Person {
string name;
int age;
};
Person person;
Person* ptr = &person;
ptr->name = "John";
ptr->age = 25;

در این مثال، ptr یک پوینتر به ساختار Person است و می‌توانید با استفاده از ptr به صورت مستقیم به عناصر ساختار دسترسی پیدا کنید..
👍3
در زبان #python:
زبان برنامه‌نویسی پایتون از مفهوم "پوینتر" به طور مستقیم پشتیبانی نمی‌کند.
سلام وقت بخیر
امیدوارم که امتحانات رو به خوبی پشت سر گذاشته باشید
این چند روز بخاطر کار و امتحانات درگیرم و امکان پاسخگویی ندارم
چون یخرده پیام ها زیاده گفتم شرمندتون نشم
ولی اگر قولی دادم یادآوری کنید.

انشالله همگی موفق باشید ❤️
17👍4👎1
Benshin Tamashayat Konam
Arman Garshasbi
#متفرقه
عمری به هر کوی و گذر گشتم که پیدایت کنم
اکنون که پیدا کرده ام بنشین تماشایت کنم
8👍1😴1
سلام وقتتون بخیر.
قراره چند تا کانال دیگه رو شروع کنم و هر موقع وقت کردم آپدیت کنم و با هم پیش بریم.
به هر کدوم از موضوعات علاقه داشتید لینکش زیر هست .
این کانال هم بزودی آپدیت میشه.
سپاس❤️

بلاکچین
https://t.me/learn_blockchaing_channel

جاوااسکریپت
https://t.me/learn_js_chanel

تایپ اسکریپت
https://t.me/learn_typescript_channel

گیت
https://t.me/learn_git_channel
7👍3❤‍🔥1
#کد 18
سطح: متوسط
سوال :برنامه ای بنویسید که ۱۵ عدد از ورودی بگیرد و به صورت نزولی مرتب کند (‌ الگوریتم بابل سورت)

ورودی و خروجی نمونه :
ورودی نمونه ۱:
Enter 15 numbers: 1 2 2 3 4 5 2 12 3 4 21 3 4 12 1

خروجی نمونه ۱ :
Sorted array in descending order: 21 12 12 5 4 4 4 3 3 3 2 2 2 1 1


موارد استفاده شده‌ در حل سوال: آرایه / تابع

توضیح کد :
. تابع bubbleSortDescending تعریف شده است. این تابع عملیات مرتب‌سازی بابل را انجام می‌دهد. ورودی‌های این تابع شامل آرایه‌ای از اعداد صحیح (int arr[]) و تعداد عناصر آرایه (int n) است.
- متغیر swapped از نوع bool برای ذخیره وضعیت انجام عملیات جابجایی عناصر در هر گذر مورد استفاده قرار می‌گیرد.
- حلقه خارجی (for i) در هر گذر، از ابتدای آرایه شروع شده و به سمت انتها حرکت می‌کند.
- حلقه داخلی (for j) از ابتدای آرایه شروع شده و تا آخرین عنصر قبل از i در هر گذر حرکت می‌کند.
- در هر گذر اگر عنصر فعلی کوچکتر از عنصر بعدی باشد، انجام می‌شود:
- عناصر جابجا می‌شوند.
- متغیر swapped به true تغییر می‌کند.
- اگر در هر گذر هیچ جابجایی صورت نگرفته باشد، حلقه متوقف می‌شود.

. در تابع main:
- ثابت SIZE برابر با تعداد عناصر آرایه تعریف شده است.
- یک آرایه به نام arr از نوع int با اندازه SIZE تعریف شده است.
- با استفاده از حلقه for، عناصر آرایه از ورودی کاربر دریافت می‌شوند.
- سپس تابع bubbleSortDescending فراخوانی می‌شود تا آرایه را به صورت نزولی مرتب کند.
- در نهایت، آرایه مرتب‌شده چاپ می‌شود.
👍51🔥1
#include <stdio.h>
#include <stdbool.h>

// تابع مرتب‌سازی بابل برای مرتب‌سازی نزولی آرایه
void bubbleSortDescending(int arr[], int n) {
bool swapped;
// حلقه خارجی برای هر عنصر در آرایه
for (int i = 0; i < n-1; i++) {
swapped = false;
// حلقه داخلی برای مقایسه و جابجایی عناصر
for (int j = 0; j < n-i-1; j++) {
// اگر عنصر فعلی کوچکتر از عنصر بعدی است، جابجا می‌شوند
if (arr[j] < arr[j+1]) {
// جابجایی عناصر
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
swapped = true;
}
}
// اگر در این گذر هیچ جابجایی‌ای صورت نگرفته، حلقه متوقف می‌شود
if (swapped == false)
break;
}
}

int main() {
const int SIZE = 15; // تعداد عناصر آرایه
int arr[SIZE]; // تعریف آرایه‌ای با ۱۵ عنصر

// دریافت ۱۵ عدد از ورودی کاربر
printf("Enter 15 numbers: ");
for (int i = 0; i < SIZE; i++) {
scanf("%d", &arr[i]);
}

// مرتب‌سازی آرایه به صورت نزولی با استفاده از مرتب‌سازی بابل
bubbleSortDescending(arr, SIZE);

// چاپ آرایه مرتب‌شده
printf("Sorted array in descending order: ");
for (int i = 0; i < SIZE; i++) {
printf("%d ", arr[i]);
}

return 0;
}

زبان برنامه نویسی :#c
#include <iostream>

using namespace std;

// تابع مرتب‌سازی بابل برای مرتب‌سازی نزولی آرایه
void bubbleSortDescending(int arr[], int n) {
bool swapped;
// حلقه خارجی برای هر عنصر در آرایه
for (int i = 0; i < n-1; i++) {
swapped = false;
// حلقه داخلی برای مقایسه و جابجایی عناصر
for (int j = 0; j < n-i-1; j++) {
// اگر عنصر فعلی کوچکتر از عنصر بعدی است، جابجا می‌شوند
if (arr[j] < arr[j+1]) {
// جابجایی عناصر
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
swapped = true;
}
}
// اگر در این گذر هیچ جابجایی‌ای صورت نگرفته، حلقه متوقف می‌شود
if (swapped == false)
break;
}
}

int main() {
const int SIZE = 15; // تعداد عناصر آرایه
int arr[SIZE]; // تعریف آرایه‌ای با ۱۵ عنصر

// دریافت ۱۵ عدد از ورودی کاربر
cout << "Enter 15 numbers: ";
for (int i = 0; i < SIZE; i++) {
cin >> arr[i];
}

// مرتب‌سازی آرایه به صورت نزولی با استفاده از مرتب‌سازی بابل
bubbleSortDescending(arr, SIZE);

// چاپ آرایه مرتب‌شده
cout << "Sorted array in descending order: ";
for (int i = 0; i < SIZE; i++) {
cout << arr[i] << " ";
}

return 0;
}

زبان برنامه نویسی :#cpp
1