‏إظهار الرسائل ذات التسميات Computer programming برمجة الحاسوب. إظهار كافة الرسائل
‏إظهار الرسائل ذات التسميات Computer programming برمجة الحاسوب. إظهار كافة الرسائل

برمجة الحاسوب - سلاسل النصية strings

برمجة الحاسوب - سلاسل النصية strings 





  خلال مناقشتنا حول الأحرف ، تعلمنا أن نوع بيانات الحرف يتعامل مع حرف واحد ويمكنك تعيين أي حرف من لوحة المفاتيح إلى متغير نوع الحرف.

الآن ، دعنا نتقدم قليلاً ونفكر في موقف نحتاج فيه إلى تخزين أكثر من حرف واحد في متغير. لقد رأينا أن برمجة لغة سي لا تسمح بتخزين أكثر من حرف في متغير من نوع الحرف. إذن العبارات التالية غير صالحة في برمجة لغة سي وتنتج أخطاء في بناء الجملة -

char ch1 = 'ab';
char ch2 = '10';

لقد رأينا أيضًا كيفية استخدام مفهوم المصفوفات لتخزين أكثر من قيمة واحدة من نوع بيانات مماثل في متغير. هنا بناء الجملة لتخزين وطباعة خمسة أرقام في مصفوفة من نوع int -

#include <stdio.h>

main() {
   int number[5] = {10, 20, 30, 40, 50};
   int i = 0;
        
   while( i < 5 ) {
      printf("number[%d] = %d\n", i, number[i] );
      i = i + 1;
   }
}

عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -

number[0] = 10
number[1] = 20
number[2] = 30
number[3] = 40
number[4] = 50

الآن ، دعنا نحدد مصفوفة من خمسة أحرف بنفس الطريقة كما فعلنا للأرقام ونحاول طباعتها -

#include <stdio.h>

main() {
   char ch[5] = {'H', 'e', 'l', 'l', 'o'};
   int i = 0;
        
   while( i < 5 ) {
      printf("ch[%d] = %c\n", i, ch[i] );
      i = i + 1;
   }
}

هنا ، استخدمنا٪ c لطباعة قيمة الحرف. عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -

ch[0] = H
ch[1] = e
ch[2] = l
ch[3] = l
ch[4] = o

إذا انتهيت من المثال أعلاه ، فأعتقد أنك فهمت كيفية عمل السلاسل في برمجة لغة C ، لأن السلاسل في لغة C يتم تمثيلها كمصفوفات من الأحرف . قامت برمجة C بتبسيط مهمة وطباعة السلاسل. دعنا نتحقق من نفس المثال مرة أخرى باستخدام بناء جملة مبسط -

#include <stdio.h>

main() {
   char ch[5] = "Hello";
   int i = 0;
    
   /* Print as a complete string */
   printf("String = %s\n", ch);  

   /* Print character by character */
   while( i < 5 ) {
      printf("ch[%d] = %c\n", i, ch[i] );
      i = i + 1;
   }
}

هنا ، استخدمنا٪ s لطباعة قيمة السلسلة الكاملة باستخدام اسم المصفوفة ch ، وهو في الواقع بداية عنوان الذاكرة الذي يحمل متغير ch كما هو موضح أدناه -

عرض السلسلة في C / C ++

على الرغم من أنه غير مرئي من الأمثلة المذكورة أعلاه ، إلا أن برنامج C داخليًا يعين حرفًا فارغًا '\ 0' باعتباره الحرف الأخير من كل سلسلة. يشير إلى نهاية السلسلة ويعني أنه إذا كنت تريد تخزين سلسلة أحرف مكونة من 5 أحرف في مصفوفة ، فيجب عليك تحديد حجم مصفوفة من 6 كممارسة جيدة ، على الرغم من أن C لا تشكو من ذلك.

إذا تم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -

String = Hello
ch[0] = H
ch[1] = e
ch[2] = l
ch[3] = l
ch[4] = o

مفاهيم السلسلة الأساسية

بناءً على المناقشة أعلاه ، يمكننا استنتاج النقاط المهمة التالية حول السلاسل في لغة برمجة C -

  • يتم تمثيل السلاسل في لغة C كمصفوفات من الأحرف.

  • يمكننا تكوين سلسلة في برمجة C عن طريق تخصيص حرف بحرف في مصفوفة من الأحرف.

  • يمكننا تكوين سلسلة في برمجة لغة سي عن طريق تعيين سلسلة كاملة محاطة بعلامة اقتباس مزدوجة.

  • يمكننا طباعة حرف سلسلة بحرف باستخدام مصفوفة منخفضة أو سلسلة كاملة باستخدام اسم مصفوفة بدون خط منخفض.

  • الحرف الأخير من كل سلسلة هو حرف فارغ ، أي "\ 0" .

  • توفر معظم لغات البرمجة وظائف مضمنة للتعامل مع السلاسل ، أي يمكنك تسلسل السلاسل ، ويمكنك البحث من سلسلة ، ويمكنك استخراج سلاسل فرعية من سلسلة ، وما إلى ذلك. لمزيد من المعلومات ، يمكنك التحقق من البرنامج التعليمي المفصل الخاص بنا على C البرمجة أو أي لغة برمجة أخرى.

سلاسل في جافا

على الرغم من أنه يمكنك استخدام مصفوفات الأحرف لتخزين السلاسل ، إلا أن Java هي لغة برمجة متقدمة وقد حاول مصمموها توفير وظائف إضافية. توفر Java سلاسل كنوع بيانات مضمن مثل أي نوع بيانات آخر. هذا يعني أنه يمكنك تحديد السلاسل مباشرة بدلاً من تعريفها كمصفوفة من الأحرف.

فيما يلي البرنامج المكافئ المكتوب بلغة جافا. تستخدم Java المعامل الجديد لإنشاء متغيرات سلسلة كما هو موضح في البرنامج التالي.

يمكنك محاولة تنفيذ البرنامج التالي لرؤية الإخراج -

public class DemoJava {
   public static void main(String []args) {
      String str = new String("Hello");  
      System.out.println( "String = " + str );
   }
}

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

String = Hello

الأوتار في بايثون

يعد إنشاء سلاسل في Python أمرًا بسيطًا مثل تخصيص سلسلة في متغير Python باستخدام علامات اقتباس مفردة أو مزدوجة.

يوجد أدناه برنامج بسيط يقوم بإنشاء سلسلتين ويطبعهما باستخدام وظيفة print () -

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1 = ", var1
print "var2 = ", var2

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

var1 =  Hello World!
var2 =  Python Programming

لا تدعم بايثون نوع الحرف ؛ يتم التعامل مع هذه كسلاسل بطول واحد ، وبالتالي تعتبر أيضًا سلسلة فرعية.

للوصول إلى السلاسل الفرعية ، استخدم الأقواس المربعة للتقطيع مع الفهرس أو المؤشرات للحصول على السلسلة الفرعية. ألق نظرة على مقطع الكود التالي -

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

عندما يتم تنفيذ الكود أعلاه ، فإنه ينتج النتيجة التالية -

var1[0]:  H
var2[1:5]:  ytho

برمجة الحاسوب - المصفوفات arrays

 برمجة الحاسوب - المصفوفات





فكر في موقف نحتاج فيه إلى تخزين خمسة أعداد صحيحة. إذا استخدمنا مفاهيم البرمجة البسيطة ونوع البيانات ، فسنحتاج إلى خمسة متغيرات من نوع البيانات int وسيكون البرنامج على النحو التالي -

#include <stdio.h>

int main() {
   int number1;
   int number2;
   int number3;
   int number4;
   int number5;
   
   number1 = 10;      
   number2 = 20;   
   number3 = 30;   
   number4 = 40; 
   number5 = 50;     

   printf( "number1: %d\n", number1);
   printf( "number2: %d\n", number2);
   printf( "number3: %d\n", number3);
   printf( "number4: %d\n", number4);
   printf( "number5: %d\n", number5);
}

كان الأمر بسيطًا ، لأنه كان علينا تخزين خمسة أعداد صحيحة فقط. لنفترض الآن أن علينا تخزين 5000 رقم صحيح. هل سنستخدم 5000 متغير؟

للتعامل مع مثل هذه المواقف ، توفر جميع لغات البرمجة تقريبًا مفهومًا يسمى المصفوفة . المصفوفة هي بنية بيانات يمكنها تخزين مجموعة ذات حجم ثابت من العناصر من نفس نوع البيانات. تُستخدم المصفوفة لتخزين مجموعة من البيانات ، ولكن غالبًا ما يكون من المفيد التفكير في المصفوفة كمجموعة من المتغيرات من نفس النوع.

بدلاً من التصريح عن المتغيرات الفردية ، مثل number1 ، number2 ، ... ، number99 ، يمكنك فقط تعريف رقم متغير مصفوفة واحد من نوع عدد صحيح واستخدام number1 [0] ، number1 [1] ، و ... ، number1 [99] تمثل المتغيرات الفردية. هنا ، 0 ، 1 ، 2 ، ..... 99 هي فهرس مرتبط بمتغير var ويتم استخدامها لتمثيل العناصر الفردية المتاحة في المصفوفة.

تتكون جميع المصفوفات من مواقع ذاكرة متجاورة. يتوافق العنوان الأدنى مع العنصر الأول والعنوان الأعلى للعنصر الأخير.

المصفوفات في لغة C.

إنشاء المصفوفات

لإنشاء متغير مصفوفة في لغة C ، يحدد المبرمج نوع العناصر وعدد العناصر التي سيتم تخزينها في تلك المصفوفة. فيما يلي بناء جملة بسيط لإنشاء مصفوفة في برمجة لغة سي -

type arrayName [ arraySize ];

هذا يسمى مصفوفة أحادية البعد . و arraySize يجب أن يكون ثابت أكبر عدد صحيح من الصفر و نوع يمكن أن يكون أي نوع C بيانات صالحة. على سبيل المثال ، الآن للإعلان عن مصفوفة مكونة من 10 عناصر تسمى رقم النوع int ، استخدم هذه العبارة -

int number[10];

هنا ، الرقم عبارة عن مصفوفة متغيرة ، وهي كافية لاستيعاب ما يصل إلى 10 أرقام صحيحة.

تهيئة المصفوفات

يمكنك تهيئة مصفوفة في C إما واحدًا تلو الآخر أو باستخدام جملة واحدة على النحو التالي -

int number[5] = {10, 20, 30, 40, 50};

لا يمكن أن يكون عدد القيم بين الأقواس الكبيرة {} أكبر من عدد العناصر التي نعلن عنها للمصفوفة بين قوسين مربعين [].

إذا حذفت حجم المصفوفة ، فسيتم إنشاء مصفوفة كبيرة بما يكفي لاستيعاب التهيئة. لذلك ، إذا كتبت -

int number[] = {10, 20, 30, 40, 50};

ستقوم بإنشاء نفس المصفوفة تمامًا كما فعلت في المثال السابق. فيما يلي مثال لتعيين عنصر واحد من المصفوفة -

number[4] = 50;

تعيّن العبارة أعلاه رقم العنصر الخامس في المصفوفة بقيمة 50. تحتوي جميع المصفوفات على 0 كمؤشر لعنصرها الأول الذي يُسمى أيضًا المؤشر الأساسي وسيكون المؤشر الأخير للمصفوفة هو الحجم الإجمالي للمصفوفة ناقصًا 1. توضح الصورة التالية التمثيل التصويري للمصفوفة التي ناقشناها أعلاه -

عرض صفيف

الوصول إلى عناصر المصفوفة

يتم الوصول إلى عنصر عن طريق فهرسة اسم المصفوفة. يتم ذلك بوضع فهرس العنصر بين أقواس مربعة بعد اسم المصفوفة. على سبيل المثال -

int var = number[9];

سوف تأخذ العبارة أعلاه العنصر العاشر من المصفوفة وتعيين القيمة لمتغير var . يستخدم المثال التالي جميع المفاهيم الثلاثة المذكورة أعلاه. إنشاء المصفوفات وتخصيصها والوصول إليها -

#include <stdio.h>
 
int main () {
   int number[10]; /* number is an array of 10 integers */
   int i = 0;
 
   /* Initialize elements of array n to 0 */         
   while( i < 10 ) {
	
      /* Set element at location i to i + 100 */
      number[ i ] = i + 100;
      i = i + 1;
   }
   
   /* Output each array element's value */
   i = 0;
   while( i < 10 ) {
	
      printf("number[%d] = %d\n", i, number[i] );
      i = i + 1;
   }
   
   return 0;
}

عندما يتم تجميع التعليمات البرمجية أعلاه وتنفيذها ، فإنها تنتج النتيجة التالية -

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

المصفوفات في جافا

فيما يلي البرنامج المكافئ المكتوب بلغة جافا. تدعم Java المصفوفات ، ولكن هناك اختلاف بسيط في طريقة إنشائها في Java باستخدام المشغل الجديد .

يمكنك محاولة تنفيذ البرنامج التالي لرؤية الإخراج ، والذي يجب أن يكون مطابقًا للنتيجة الناتجة عن مثال C أعلاه.

public class DemoJava {
   public static void main(String []args) {
      int[] number = new int[10];
      int i = 0;
      
      while( i < 10 ) {
		
         number[ i ] = i + 100;
         i = i + 1;
      }

      i = 0;
      while( i < 10 ) {
         System.out.format( "number[%d] = %d\n", i, number[i] );
         i = i + 1;
      }
   }
}

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

number[0] = 100
number[1] = 101
number[2] = 102
number[3] = 103
number[4] = 104
number[5] = 105
number[6] = 106
number[7] = 107
number[8] = 108
number[9] = 109

المصفوفات (القوائم) في بايثون

لا تمتلك Python مفهوم Array ، بدلاً من ذلك ، توفر Python بنية بيانات أخرى تسمى list ، والتي توفر وظائف مماثلة للمصفوفات في أي لغة أخرى.

فيما يلي البرنامج المكافئ المكتوب بلغة بايثون -

# Following defines an empty list.
number = []
i = 0

while i < 10:
   # Appending elements in the list
   number.append(i + 100)
   i = i + 1

i = 0
while i < 10:
   # Accessing elements from the list
   print "number[", i,  "] = ", number[ i ]
   i = i + 1

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

number[ 0 ] =  100
number[ 1 ] =  101
number[ 2 ] =  102
number[ 3 ] =  103
number[ 4 ] =  104
number[ 5 ] =  105
number[ 6 ] =  106
number[ 7 ] =  107
number[ 8 ] =  108
number[ 9 ] =  109

برمجة الحاسوب - الرموز والحروف char

برمجة الحاسوب - الرموز والحروف char 




اذا كان من السهل العمل مع الأرقام في برمجة الكمبيوتر ، فسيكون من الأسهل العمل مع الأحرف. الأحرف أبجدية بسيطة مثل a ، b ، c ، d .... ، A ، B ، C ، D ، ..... ، ولكن مع استثناء. في برمجة الكمبيوتر ، يتم أيضًا التعامل مع أي رقم مكون من رقم واحد مثل 0 ، 1 ، 2 ، .... وأحرف خاصة مثل $ ،٪ ، + ، ... إلخ ، كأحرف وتعيينها في نوع حرف متغير ، ما عليك سوى وضعها داخل علامات اقتباس مفردة . على سبيل المثال ، تحدد العبارة التالية متغير نوع الحرف ch ونقوم بتعيين قيمة "a" إليه -

char ch = 'a';

هنا، الفصل هو متغير من نوع الحرف التي يمكن أن تعقد شخصية من مجموعة أحرف تنفيذ و "أ" يسمى الحرفي شخصية أو ثابت حرف. ليس فقط أ ، ب ، ج ، .... ولكن عندما يتم الاحتفاظ بأي رقم مثل 1 ، 2 ، 3 .... أو أي حرف خاص مثل! ، @ ، # ، # ، $ ، .... داخل علامات الاقتباس الفردية ، ثم سيتم التعامل معها على أنها حرف حرفية ويمكن تخصيصها لمتغير من نوع الحرف ، وبالتالي فإن ما يلي عبارة صحيحة -

char ch = '1';

يستهلك نوع بيانات الحرف 8 بتات من الذاكرة مما يعني أنه يمكنك تخزين أي شيء في حرف تقع قيمته ASCII بين -127 إلى 127 ، لذلك يمكنه الاحتفاظ بأي من 256 قيمة مختلفة. يمكن لنوع بيانات الحرف تخزين أي من الأحرف المتوفرة على لوحة المفاتيح بما في ذلك الأحرف الخاصة مثل! ، @ ، # ، # ، $ ،٪ ، ^ ، & ، * ، (،) ، _ ، + ، {،} ، إلخ.

لاحظ أنه يمكنك الاحتفاظ بأحرف أبجدية واحدة فقط أو رقم مكون من رقم واحد داخل علامات اقتباس مفردة ولا يُسمح بأكثر من حرف أبجدي أو رقم واحد داخل علامات الاقتباس المفردة. إذن العبارات التالية غير صالحة في برمجة لغة سي -

char ch1 = 'ab';
char ch2 = '10';

فيما يلي مثال بسيط يوضح كيفية تحديد وتعيين وطباعة الأحرف بلغة البرمجة C -

#include <stdio.h>

int main() {
   char  ch1;
   char  ch2;
   char  ch3;
   char  ch4;
   
   ch1 = 'a';      
   ch2 = '1';
   ch3 = '$';
   ch4 = '+';  

   printf( "ch1: %c\n", ch1);
   printf( "ch2: %c\n", ch2);
   printf( "ch3: %c\n", ch3);
   printf( "ch4: %c\n", ch4);
}

هنا ، استخدمنا٪ c لطباعة نوع بيانات حرف. عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

ch1: a
ch2: 1
ch3: $
ch4: +

تسلسلات الهروب

تدعم العديد من لغات البرمجة مفهومًا يسمى Escape Sequence . عندما يسبق حرف ما بشرطة مائلة للخلف (\) ، يطلق عليه تسلسل هروب وله معنى خاص للمترجم. على سبيل المثال ، \ n في العبارة التالية حرف صالح ويسمى حرف سطر جديد -

char ch = '\n';

هنا ، يُسبَق الحرف n بشرطة مائلة للخلف (\) ، وله معنى خاص وهو سطر جديد ولكن ضع في اعتبارك أن الشرطة المائلة للخلف (\) لها معنى خاص ببضعة أحرف فقط. لن تنقل العبارة التالية أي معنى في برمجة لغة سي وسيتم افتراضها على أنها بيان غير صالح -

char ch = '\1';

يسرد الجدول التالي تسلسلات الهروب المتوفرة بلغة البرمجة C -

تسلسل الهروبوصف
\ tيُدرج علامة تبويب في النص في هذه المرحلة.
يقوم بإدراج مسافة للخلف في النص في هذه المرحلة.
يقوم بإدراج سطر جديد في النص في هذه المرحلة.
\ rيُدرج حرف إرجاع في النص في هذه المرحلة.
\Fيُدرج موجز نموذج في النص في هذه المرحلة.
\ "يُدرج حرف اقتباس مفرد في النص في هذه المرحلة.
\ "يُدرج حرف اقتباس مزدوج في النص في هذه المرحلة.
\\يدرج حرف الخط المائل للخلف في النص في هذه المرحلة.

يوضح المثال التالي كيف يفسر المترجم تسلسل هروب في جملة طباعة -

#include <stdio.h>

int main() {
   char  ch1;
   char  ch2;
   char  ch3;
   char  ch4;
   
   ch1 = '\t';      
   ch2 = '\n';

   printf( "Test for tabspace %c and a newline %c will start here", ch1, ch2);
}

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

Test for tabspace     and a newline 
will start here

الشخصيات في جافا

فيما يلي البرنامج المكافئ المكتوب بلغة جافا. تتعامل Java مع أنواع بيانات الأحرف كثيرًا بنفس الطريقة التي رأيناها في برمجة C. ومع ذلك ، توفر Java دعمًا إضافيًا لمعالجة الأحرف.

يمكنك محاولة تنفيذ البرنامج التالي لرؤية الإخراج ، والذي يجب أن يكون مطابقًا للنتيجة الناتجة عن مثال C أعلاه.

public class DemoJava {
   public static void main(String []args) {
      char  ch1;
      char  ch2;
      char  ch3;
      char  ch4;
   
      ch1 = 'a';      
      ch2 = '1';
      ch3 = '$';
      ch4 = '+';  

      System.out.format( "ch1: %c\n", ch1);
      System.out.format( "ch2: %c\n", ch2);
      System.out.format( "ch3: %c\n", ch3);
      System.out.format( "ch4: %c\n", ch4);
   }
}

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

ch1:  a
ch2:  1
ch3:  $
ch4:  +

تدعم Java أيضًا تسلسل الهروب بنفس الطريقة التي استخدمتها بها في برمجة C.

الشخصيات في بايثون

لا تدعم Python أي نوع من أنواع بيانات الأحرف ولكن يتم التعامل مع جميع الأحرف كسلسلة ، وهي سلسلة من الأحرف. سوف ندرس الأوتار في فصل منفصل. لا تحتاج إلى أي ترتيب خاص أثناء استخدام حرف واحد في بايثون.

فيما يلي البرنامج المكافئ المكتوب بلغة بايثون -

ch1 = 'a';      
ch2 = '1';
ch3 = '$';
ch4 = '+'; 

print "ch1: ", ch1
print "ch2: ", ch2
print "ch3: ", ch3
print "ch4: ", ch4

عند تنفيذ البرنامج أعلاه ، فإنه ينتج النتيجة التالية -

ch1:  a
ch2:  1
ch3:  $
ch4:  +

تدعم Python تسلسلات الهروب بنفس الطريقة التي استخدمتها بها في برمجة C.