11.استخدامات Strings
متغيّر String وهو مصفوفةٌ من الأحرف في الذاكرة. حيث أنّها فئة مشتقّة من مساحة الاسم std. وكل حرف داخل سلسلة يحتوي على 8 بت.
الحرف char هو أصغر وحدة تتشكّل في الذّاكرة من الأحرف الأساسيّة. حيث تعتمد زيادة حجم الذّاكرة في متغير char على تحديد مساحةٍ من القيم قابلة للزيادة تلقائياً.
في لغة سي القياسيّة تم إضافة namespace يحتوي على مكتبة Strings. حيث كان المبرمجين يعتمدون قبل ذلك على إنشاء مصفوفة Static من الأحرف char. وغالباً ما يتم الإشارة إليها بمساحاتٍ محدودة.
في دورة c ++ سنتعرف على أنواع وصيغ مختلفة من استخدامات String.
هناك أكثر من طريقة في الإشارة الى متغير string، بما في ذلك:
في حوزتنا مثال يوضح لك ماهيّة النصوص وكيفية استخدامها. في دورة c ++ المستوى 1. لن يتسنّى لنا الإشارة بكافة صيغ التّعريف. حيث سنتولّى ذكر أهمّها في تعريف النصوص.
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s1("Man");
string s2 = " World";
string s3; s3 = s1;
cout << "s3 = " << s3 << endl;
s3 = "neither " + s1 + " nor";
s3 += s2;
cout << " s3 = " << s3 << endl;
s1.swap(s2);
cout << s1 << " nor " << s2 << endl;
return 0;
}
يتم الإشارة إليه بالتّعريف char بلغة C ++. وهي مساحة محجوزة مخصّصة ويمكن استخدامها كثيرًا. كما أن فئة string القياسيّة تم بناؤها في متغيّرات الحروف.
دالة Setw قادرة على اختيار جملة محددة من بين النصوص. ستختار هذه الوظيفة أول جملة مطبوعة. لكن طول الكلمة لا يتجاوز 20 حرفًا.
عند تحديد أي متغيّر من نوع char ، ننصحك بطرح الطول الإجمالي للحرف من قيمة كافية في الذاكرة. لتفادي تجاوز سعة الذاكرة التي قمت بتحديدها.
لفهمِ متغيرات char في دورة c ++ ، انسخ الكود التالي في محرر الكود الخاص بك.
include<iostream>
#include<iomanip>
using namespace std;
int main()
{
const int max = 20;
char str[max - 1];
//because null value of character
cout << "Enter An String "; cin >> setw(max) >> str; cout << "You Entered n" << str;
return 0;
}
ليس شائعاً بكثرة في أساسيات تعلم اللغة نظراً لقلة استخدامه أثناء ربط مكتبات الأطراف الثالثة. لكن نعتبره أساساً في تحليلِ البيانات. خاصّة عند بناءِ شيفرة في لغة C القياسية.
في دورة c ++.سنقدم لك الشّروحات حول طريقة استخدام وحدة الإدخال.
الجمل في C ++ سهلة التنفيذ وغير مزعجة. في الماضي ، كان استخدام لغة C ++ متطلباً في إدخال البيانات قبل تصميم واجهات رسومية. بالإضافة الى الحاجة لاستخدام جمل الإدخال المختلفة وربطها في قواعد البيانات ليتم جلب البيانات عند الحاجة.
هو بطبيعته أمرٌ برمجي يسمح لـ C ++ بقراءة معلومات الإدخال. حيث إما عرضها على الشّاشة أو الاحتفاظ بها في الذاكرة المؤقتة.
انسخ هذه الشيفرة في المحرر الخاص بك. لترى كيف تعمل وحدة الإدخال من مكتبة C++ القياسية.
#include<iostream>
using namespace std;
int main()
{
const int size = 30;
char str[size]; cout << "Enter An String : ";
cin >> str; cout << "You Entered : n" << str;
return 0;
}
في دورة c ++. سنُدلي بأهم عناصر الاستخدام وهي المعاملات.
المعاملات من أساسيات لغات البرمجة. حيث تدل على استخدام علامات الجمع والطرح والقسمة والضرب (+ ، – ، / ، *). أو أكبر من وأقل من (<،>). بالتالي غيرها من العوامل التي سيتم التطّرق لها فيما بعد.
يمكن استخدام المعاملات في C ++ لأداء العمليات الحسابية والمنطقية في المعالجة. مما تؤدي غالبًا إلى نتائج وفروقاتٍ في شاشة الكونسول.
تتوفر المعاملات في لغة C ، على شكل:
#include<iostream>
using namespace std;
int main()
{
bool c = true;
if (c) {
cout << "True" << endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int arr[10];
return 0;
}
struct foo
{ int x; float y; };
int main()
{
struct foo var;
struct foo* values;
var.x = 5; (& var)->y = 14.3;
values->y = 22.4; (*values).x = 6;
return 0;
}
int main()
{
int a = 5;
a++;
cout << a << endl;
a--; cout << a << endl;
return 0;
}
#include<iostream> using namespace std;
int main()
{
int a = 5; --a;
cout <<"This method is prefix : "<< a << endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 5;
std::cout << "This is value of a : " << a << endl;
std::cout << "This is address of a : " << &a << endl;
int *pointer = &a;
++*pointer;
// use of * Asterisk
std::cout <<"This value of a after affected by pointer : "<< a<< endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a = 5;
std::cout << "This is value of a : " << a << endl;
std::cout << "This is address of a : " << &a << endl;
int *pointer = &a;
//use of Address
++*pointer;
std::cout <<"This value of a after affected by pointer : "<< a<< endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int x = 15;
int y = 7;
int multi = x * y;
int divide = x / y;
int mod = y % x;
std::cout << "x multi y = " << multi << endl;
std::cout << "x divide y = " << divide << endl;
std::cout << "y modulus x = " << mod << endl;
return 0;
}
std::cout << "This is int a : " << 20 << endl;
std::cout << "This is int a : " << a << endl;
std::cout << "This is char z : " << z << endl;
if (x <= y) { std::cout << "Hello World"; }
if (x == y && x != z) { std::cout << "Hello World"; }
وهناك أيضا الكثير من المعاملات التي تعذّر لنا جلبها في هذه الوحدة. لكن المعاملات الرئيسية تتمثّل في إشارات الجمع والطرح والضرب والقسمة , وعلامة يساوي.
موضوع for loops مزعج قليلًا للمبتدئين ، لذلك نطلب منك التركيز جيداً. و سنحاول تبسيط المسألة قدر المستطاع.
For loop هي بالأصل دالة تبدأ بالكلمة for والشرط والتنفيذ داخل الأقواس. والحلقة for هي عصبٌ مهمّ لــ لغة البرمجة C ++ ولغات البرمجة الأخرى. فهي بمثابة حاسبة تعمل بتوالي الأرقام جمعاً أو طرحاً أو الإثنين معاً(في مراحل متقدمة).
على سبيل المثال , وفي حال أنّك تريد البحث في مصفوفة تحتوي على 8 عناصر. فسيكون ذلك على النحو التالي:
#include <string>
#include <iostream>
int main()
{
using std::string;
string str[8] = { "Welcome" , "To" , "C++" , "Hello" , "World" , "Free" , "circle" , "online"};
}
وإن كنت تريد طباعة العناصر على شاشة (الكونسول). فإنّك ستقوم بطباعة عناصر المصفوفة واحدًا تلو الآخر ، بحيث يبدو ذلك كما يلي:
#include <string>
#include <iostream>
int main()
{
using std::string;
string str[8] = { "Welcome" , "To" , "C++" , "Hello" , "World" , "Free" , "circle" , "online"};
std::cout << str[0] << std::endl;
std::cout << str[1] << std::endl;
std::cout << str[2] << std::endl;
std::cout << str[3] << std::endl;
std::cout << str[4] << std::endl;
std::cout << str[5] << std::endl;
std::cout << str[6] << std::endl;
std::cout << str[7] << std::endl;
return 0;
}
ما يصح لنا تسمية العمليّة بــ HardCoding. فهي تتعاملُ مع عددٍ من البيانات يدويًا. وهذه المسألة بالتالي قد تُجدي نفعًا في عنصرًا أو عنصرين لكنها مُرهقة للغاية إن كنت تريد طباعة 200 عنصر.
على سبيل المثال ،لن يكن الأمر مرهقًا على مستوى الطباعةِ فحسب، ولكن أيضًا في جلب البيانات ومعالجتها. بالرغم من ذلك , جاءَت دالًة for loop لتكن بذلك الحل الأمثل للتجوّل فيما بين العناصر كافةً.
مكونات دالة for loop هي:
سنعمل خطوة بخطوة في كتابة الكود أولاً:
سنقوم بإضافة مصفوفة مكونة من عناصر عدّة.
#include <string>
#include <iostream>
int main()
{
using std::string;
string str[8] = { "Welcome" , "To" , "C++" , "Hello" , "World" , "Free" , "circle" , "online"};
for (int i = 0; i < 8; i++)
{
}
return 0;
}
المتغير i هو العداد للحلقة التكرارية ، ويجب ألاّ ننسى وضع الفاصلة المنقوطة في C بالطريقة المبينة في الشيفرة.
على سبيل المثال, تخيّل أن هنالك قلم يكتب في حلقة for. وفي كل دورة يضبط من قيمة ساعة العد ومن ثمّ يعمل على زيادتها.
بعد ذلك يدخل في جسم الحلقة for. و بالتالي يعود مرة أخرى للأعلى. ثمّ يضبط قيم العداد من جديد ، وهكذا دواليك.
في الواقع ، القلم هو المترجم ، الذي يستمرّ في الدوران داخل الحلقة التكرارية حين تنتهي. ثم ينتقل إلى مهامٍ أخرى أو ينهي البرنامج.
هذا هو إيقاع البرمجة. إن أتقنتها في فهم الحلقات التكرارية ، وستفهم الكثير لاحقًا.
قم بنسخ شيفرة حلقة for:
#include <string>
#include <iostream>
int main()
{
using std::string;
string str[8] = { "Welcome" , "To" , "C++" , "Hello" , "World" , "Free" , "circle" , "online"};
for (int i = 0; i < 8; i++)
{
std::cout << str[i] << " ";
}
std::cout << "n";
system("PAUSE");
return 0;
}
من أجل تعزيز أهميّة الحلقة for. يجب أن ندرك أن المصفوفات لها عناوين وعناصر في الذاكرة. وكل عنوان في مكان مختلف في الذاكرة.
على سبيل المثال ، إذا أردنا الوصول إلى عنصر str [ 3]. التي تحتوي على القيمة “Hello” ، في عداد الحلقة التكرارية. فكل ما علينا فعله هو استخدام جملة الطباعة ليظهر العنصر على الشاشة.
يمكن تسميتها أيضا بالبوّابات المنطقيّة في لغاتِ البرمجة. حيث أنّها تحتوي على شرطٍ يحتمل الصّواب أو الخطأ. بالإضافة إلى أن استخداماتها عديدة ومتنوعة داخل الشّيفرة. فهي بمثابةِ نقطة الالتقاء والّتي من خلالها يدوّن المبرمج خياراته المُتاحة للعتاد.
تتكون الجملة الشرطيّة من صيغة عامّة . حيث تدلّ على خصائصها وهي:
if (x) { //do something }
الجمل الشرطيّة لها فوائد للمبرمج و للمشروع ، ومن أهمّها:
#include <string>
#include <iostream>
int main()
{
using std::string;
string str[8] = { "Welcome" , "To" , "C++" , "Hello" , "World" , "Free" , "circle" , "online"};
for (int i = 0; i < 8; i++)
{
if (str[i] == "Hello")
//if statement
{ std::cout << str[i] << " "; } } std::cout << "n";
system("PAUSE");
return 0;
}
المصفوفة، هي حيّز من المساحة يتم تخصيصه في الذاكرة ، حيث يتكون من متغيّر يحتوي على قيمٍ عدة من العناصر.
يعود استخدام المصفوفات لحاجة من المبرمجين في تنظيم وتنسيق العناصر في الذاكرة. فهي تعود عليهم بالفائدة في حال كان هناك أعداداً كبيرة من العناصر يصعب التّعامل معها.
على سبيل المثال ، عند تحديد 3 متغيرات ، int a = 5 ، int b = 1 ، int c = 6 ، سيتطلب ذلك منك المرور بكافة العناصر وكأنك قمت بدورٍ حسابي عوضاً عن الحاسوب.
وهذا من شأنه ضعف وهشاشة الشيفرة البرمجيّة. لذلك كان لا بد لك من بناء مصفوفة وتعبئة البيانات اللازمة. دون أدنى اكتراث لأماكن وجودها في الذاكرة.
تختلف طريقة طباعة أو قراءة المصفوفة. عن الطرق التقليدية لتعريف المتغيرات وقراءتها.
على سبيل المثال ، وعند طباعة متغير من النوع int a = 6. نسمي هذا المتغير باسم فريد من نوعه داخل المحرر.
لكن عند طباعة المتغيرات داخل المصفوفة أعلاه. نقوم بعمل حلقة تكرارية للمرور بكافة العناصر فيها وجلب البيانات اللاّزمة منها دون معرفة تفاصيلها في الذاكرة.
الفهرس هو مخزن الذاكرة الذي يحوي مكان وعنوان تلك المتغيرات. بالتالي تحدد قيمها بحريّة تامّة ودون الحاجة لاستخدام أسماء وتعريفاتٍ إضافية.
في دورة c ++ المستوى الأول سنتطرق إلى تضمين مثالٍ واحد حول المصفوفات.
#include<iostream>
using namespace std;
int main()
{
int a[4];
cout << "Please Enter Values : n";
for (int i = 0; i <= 3; i++)
{
cin >> a[i];
}
cout << "We Have Finished Fill Array";
for (int i = 0; i < 4; i++)
{
cout << "Inserted " << a[i] << endl;
}
return 0; }
قد تحتاج أحيانًا إلى كتابة الفئات أو الكائنات على صفحة واحدة. من ثمّ تنفيذها مع دوالها خارجياً وعند الحاجة. هل هذا ممكن؟.
نعم هذا ممكن. تتمثل إحدى خصائص الوظائف أو الدوال في أنه يمكن تنفيذها في طريقة الإعلان والتعريف. في هذا الدرس ، سنضع رمزًا للفئات الموجودة لدينا في مكان ما. ثم ننفّذ الوظائف خارج حدود الكائن وذلك عن طريق الاتصال المباشر به.
في بعض الأحيان تتطلب منا الشيفرة بعض التنظيم ، وحلول البرمجة متعددة آنذاك. ونحن الآن أمام لغة تتيح لنا العديد من الحلول.
لذلك كان من السهل على المبرمجين جعل الصفوف في صفحات أخرى من لغة سي. ومن ثم استدعائها وتنفيذها في مكان آخر.
الآن, سنتعلّم سويّاً إنشاء Class ووضع بعض الدوال والمتغيرات بداخله. ومن ثم نقم باستدعائه في صفحة MAIN الخاصة بلغة C++.
سنقوم بعمل Class بمتغيرين ومتغير ثالث يقوم باستقبال النتيجة. بالتالي نعمل على تنفيذها في دالّتين داخل الــ Class.
class calculate
{
private:
int x = 10;
int y = 15;
int res;
public:
void process();
int getResult();
};
لاحظ أننا صنعنا Class هنا وقمنا بتسميته calculate. وأعطيناه قيمًا داخلية للمتغيرات x و y. وسيعيد المتغير res القيمة جراء جمع المتغيرين بدالّة.
تستطيع عمل Declaration(تعيين) اسم الدالة بداخل Class. ومن ثم تقوم بالاتصال بها من الخارج. شريطة القيام بتعريف اسم Class التي أتت الدالة منه.
في دورتنا هذه (دورة c ++). نريد استخدام طريقة أخرى. ولتكن الاتصال من خارج Class. وإجراء بعض العمليّات الحسابية بنفس متغيراته.
void calculate::process() { res = x + y; }
int calculate::getResult() { return res; }
لاحظ أننّا قمنا باستدعاء دوال Class السابق. ومنها دالة الحساب process. والتي جمعنا فيها قيمة x و y ووضعناها في متغير يسمى res. والذي سيتم تطبيقه في دالة رجعية getResult.
ننتقل الآن إلى المرحلة الأخيرة ، وهي الاتصال بالكائن الذي قمنا بإنشائه . بالتالي يصبح الكود الرئيسي كما يلي:
int main()
{
calculate test;
test.process();
int val = test.getResult();
std::cout << “The Result Is : ” << val << endl;
return 0;
}
في السطر الأول ، حددنا الكائن ، وهو من نوع Calculate (الكلاس الذي قمنا ببنائه سابقًا). ثم أطلقنا عليه اسم test، وأطلقنا عليه اسم دالة process.
وبما أن وظيفة get Result هي دالة إرجاع قيمة. فقد تلقّينا قيمتها داخل متغير حدّدناه في الأساسي. وهو نوع val من نوع الدّالة تمامًا. بحيث تظهر قيمة المتغير في شاشة الكونسول.
لقد حاولنا قدر المستطاع تبسيط الشروحات حول الصفوف في دورة c++ مستوى المبتدئين. كما أن للصّفوف استخداماتٍ واسعة في لغة سي. وفي وجودها ستتمكن من عزل الكثير من القُمامة البرمجية.
المؤشرات من أهم خصائص لغة C ++. فهي تحمل بداخلها أهم عنصر من المتغيرات وهو العناوين. حيث تتحكم في عمليات الذاكرة بشكل واسع وغير محدود. وهذا ما يميز C ++ عن لغات أخرى تفتقر إلى هذه الميزة.
تؤدي المؤشرات دورها بشكل مثالي. حيث إنها قادرة على الوصول إلى عناوين المتغيرات الأخرى والتحكم في موضعها في الذاكرة. ويتم تحديد المؤشرات بواسطة هذا النحو الخاص int * p = & x.
لتفادي تعقيد المسألة . إذا نظرنا إلى المتغير عند تعريفه. فسنجد أنه مكون من:
بعد أن قمنا بشرح بسيط شكل المتغيرات في الذاكرة ومكوناتها. سنقوم بتوضيح المؤشرات بمثال عملي بسيط يتناسب مع المستوى المطروح في دورة c ++. فلا تكترث من صعوبة الخطوات السابقة.
سنقدم مثالاً لجلب عنوان المتغير الذي حددناه مسبقاً في الذاكرة:
نحدد متغير عدد صحيح .
#include<iostream>
using namespace std;
int main()
{
int a = 5;
return 0;
}
نقوم بطباعة قيمة المتغير متبوعة بعنوان محجوز في الذاكرة. بحيث يبدو الرمز كما في المثال:
#include<iostream>
using namespace std;
int main()
{
int a = 5;
std::cout << "This is value of a : " << a << endl;
std::cout << "This is address of a : " << &a << endl;
return 0;
}
قم بمعاينة وتشغيل هذا الرمز لإظهار نتيجة الكونسول كما يلي:
في حال انتابتك بعض الصعوبات في هذا المستوى ، يرجى قراءة الدرس مرة أخرى. ومن ثمّ تطبيق جميع الأمثلة في محرر الكود الخاص بك.
من أهم خصائص ووظائف المؤشرات أنها يمكن لها التأثير في قيم المتغيرات الأخرى. على سبيل المثال. الآن سنقوم بتعريف المؤشر الأول في الذاكرة وربطه بعنوان المتغير a الذي حددناه سابقًا.
نحدد المؤشر ونسميه Pointer* وهو أيضًا من نوع الأعداد الصحيحة. ومن المهم تحديد مؤشرات نوع المتغير.
#include<iostream>
using namespace std;
int main()
{
int a = 5;
std::cout << "This is value of a : " << a << endl;
std::cout << "This is address of a : " << &a << endl;
int *pointer = &a;
return 0;
}
نلاحظ هنا أن المؤشر يجب أن يأخذ عنوان المتغير أثناء التعريف. فمن غير المقبول من قبل المترجم تحديد المؤشر ثم ربطه لاحقًا في عنوان المتغير.
نقوم بزيادة قيمة المتغير a بالمؤشر باستخدام طريقة البادئة. بحيث يصبح شكل الكود كما في المثال.
#include<iostream>
using namespace std;
int main()
{
int a = 5;
std::cout << "This is value of a : " << a << endl;
std::cout << "This is address of a : " << &a << endl;
int *pointer = &a;
++*pointer;
//This is pointer and we increased a value through it using prefix method
return 0;
}
في الخطوة الأخيرة ، سنطبع قيمة المتغير a لنرى تأثير المؤشر.
من فضلك ، لفهم المؤشرات جيدًا في دورة c ++. انسخ الرموز التالية في محرر التعليمات البرمجية الخاص بك.
#include<iostream>
using namespace std;
int main()
{
int a = 5;
std::cout << "This is value of a : " << a << endl;
std::cout << "This is address of a : " << &a << endl;
int *pointer = &a; ++*pointer;
std::cout <<"This value of a after affected by pointer : "<< a<< endl;
return 0;
}
وقت النشر : 2023-12-13 14:48:04 ·
يعتمد هذا الموقع على عرض الإعلانات في تحقيق الدخل ، نشكر تفهمكم الدائم ونتمنى لكم قضاء وقت رائع ... وشكراً :D .