الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال حول إمكانية صنع مصفوفة متعدد الأنماط في السي

مغلق
بدأه farah_979 في 23 ديسمبر 2005 · 12 رد · 1,076 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

عندي سؤال عن المصفوفات في برمجة سي بلس بلس

انا اللي اعرفه ان المصفوفة تاخذ نوع واحد من المتغيرات اما char او int فاذا كان عندي مصفوفة فيها ارقام ( رقم الطالب) و نصوص (اسم الطالب) فكيف اصنع هذه المصفوفه ؟؟

وهل صحيح ان النوع char لا ياخذ الا حرف واحد عند اعطائه قيمة؟؟

اتمنى ان اجد الرد باسرع وقت

وشكرا

تم تعديل هذه المشاركة بواسطة Sultan_Althibity في 23 ديسمبر 2005 في 16:19

#2

عـنوان الموضوع مخالف .. لذلك سأعدله لك ....

==============

بالنسبة لسؤال:

نعـم ، المتغير char لا يقبل سوى حرف واحد فقط

======================

بالنسبة لسؤالك عـن المصفوفات ......... بإمكانك فصل هذه المصفوفة الواحد في مصفوفتين وحيدة بعـد بما أنهـا عبارة عـن مصفوفة متعددة أنماط ............

مع افتراض أن عـدد الطلاب هـو 20 طالب ؛ هكذا:

char Std_name[20][100];
int Std_no[20];

أما إذا أردتهـما في مصفوفة واحدة (متعددة أنماط) فالأمر مستحيل في لغـة السي .. ولكنه ليس مستحيلاً في لغـة السي بلس بلس .... هل تعرف هذه المواضيع جيداً حتى أفيدك: المؤشرات ..... الواجهات ... الكائنات ... الوراثـة ... تعدد الأوجـه ...

إذا لم تكن تعرفها فلن يكون بإمكانك صنع مثل هذا العـمل حسب اعتقادي...

يوجد مكتبة قوالب قياسيـة تفعل لك ذلك .. اسمها حسب ما أذكر map إن لم تخني الذاكرة ... ولكنها ليست مصفوفة .. بل شيء آخر.

#3

شكرا على المساعده اخوي

في الحقيقة لا اعلم عن لغة c++ سوى جمل التكرار for -doوالاختيار switchفقط لاني مبتدئه في هذه اللغة واحاول تعلمها

وتم اعطائنا الواجب

حاولت فيه لكن فيه اخطاء

هذا الكود اللي استخدمته و المفروض ان المصفوفه عباره عن : رقم القطعه - اسم القطعة - الكميه - السعر

#include<iostream.h>
void main(void)
{
	int xy[5][3]={101,50,25,102,60,30,103,12,550,104,8,250,105,19,400};
	int i=0,j=0,a=0,no,amunt=0,pri;
	char q,dev;
	for(i=0;i<5;i++)
	{
  cout<<"enter device number\n";
  cin>>no;
  if(no<=105&&no>=101)
 	 switch(no)
  {
 	 case 101:
    dev='m';
    break;
 	 case 102:
    dev='k';
    break;
 	 case 103:
    dev='n';
    break;
 	 case 104:
    dev='b';
    break;
 	 case 105:
    dev='p';
    break;
      }
   	 else
    cout<<"the no devise not found\n";
  {
 	 cout<<"enter amunt\n";
 	 cin>>amunt;
 	 for(i=0;i<5;i++)
 	 {
    a=xy[2];
    pri=xy[3];
    if(amunt<=a)
   	 a=a-amunt;
   	 cout<<"are you want centenue??\n";
   	 cin>>q;
   	 if(q=='y'||q=='Y')
   	 {
   	 cout<<"amunt\t"<<"device no\t"<<"device\t"<<"price\t"<<"new amunt\n";
   	 cout<<amunt<<"\t"<<no<<"\t\t"<<dev<<"\t"<<pri*a<<"\t"<<a<<endl;
   	 }
   	 else
   	 cout<<"the amunt not verable\n";
 	 }
 	 }
  }
}
#4

يمكنك عمل struct يحتوى على نوعين من المتغيرات وبعد ذلك تقوم بعلم مصفوفة تحتوى على الـstruct; وبدل char يمكنك عمل موشر لchar ولكن لابد ان تحدد حجم النص الذى تريد إستخدامه...

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

استخدم الTemplates

BEng , Electronics and communications.

Embedded systems engineer.

Graphics Programmer

عالم الكومبيوتر هو من لديه المعرفة في علوم الكومبيوتر ، الرياضيات ، هندسة الالكترونيات -احمد صالح

#6
اقتباس
هذا الكود اللي استخدمته و المفروض ان المصفوفه عباره عن : رقم القطعه - اسم القطعة - الكميه - السعر

من الأفضل هـنا استخدام مصفوفة char بما أنك لا تعرف الـ structur ....... لنقول أن البرنامج يتألف من 15 قطعـة ... كل قطعـة منها تتألف من أربعـة أشياء هي الرقم والاسم والكمية والسعر ... كل واحد من هذه الأربعـة الأشياء يتألف (لنفرض) من 10 أحرف ... إذاً المصفوفة ثلاثية أبعاد وليست ثنائية كما في الكـود الموجود

char xy[15][4][10]

بقي أن أشير هـنا إلى أنه بإمكان الـنمط char تخزين الأعداد أيضاً ولكنه سيعتبرها محارف وليست أعداد .. معـنى ذلك أنك لن تستطيع الجمع والطرح والقسمة والضرب عليها...

تم تعديل هذه المشاركة بواسطة Sultan_Althibity في 23 ديسمبر 2005 في 21:51

#7

السلام عليكم

راح اشطح فيكم عن الموضوع ولكن دائما اجد المشرف سلطان يذكر كلمة محارف (محرف) كثيرا

ولا اعلم ماهو معناها

تحياتي

#8

محارف يعنى حروف او بالانجليزية Characters

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#9

شكرا على الردود

لكن مافهمت شي

انا خلوني افهم ثنائية الابعاد علشان اعرف الثلاثية

على العموم شكرا وراح احاول اكثر وإن شاء الله انجح

#10

تصحيح يا أخي أحمد غريب:

المحارف (حسب معرفتي باللغة العربية) ليست فقط الحروف الإنجليزية بل من ضمنها الرموز والأعداد وكل شيء تستطيع تكتبه بالكيبورد ..........

#11

ادري تعبتكم معاي ... لكن اتمنى تستحملوني

اذا كنا عندنا مصفوفة ذات بعدين xy[5][4] كيف احولها الى مصفوفة مفتوحه ممكن تاخذ اكثر ممن 1000 قيمة ( في المثال السابق 1000 قطعة)

وشكرا

#12

باستخدام المؤشرات ......

ولكن لن تستطيع تحـويل نفس المصفوفة ... بل عليك أولاً الإعلان عـن مصفوفة جـديدة ووضع عـناصر المصفوفة القديمـة فيها ...

إذا استخدمت المؤشرات فسيكون بإمكان المستخدام تغيير حجم المصفوفة مرة واحدة فقط ...

أما إذا استخدمت الـ vector الموجودة في المكتبة vector أو أي شيء آخر موجود في مكتبة القوالب القياسيـة فسيكون بإمكانك تغيير حجم المصفوفة (لا تسمى مصفوفة في هذه الحالة ) متى ما أردت فبإمكانك جعل حجمها مرة 5 عـناصر ومرة مليون عـنصر

بالنسبة لمثالك السابق وهي أنها تريد ألف عـنصر

بإمكانك كتابة:

int xy[1000]

وإن كنت تريدها ذات بعـدين فاجعل مجمـوع ضرب البعـدين يساوي 1000 فقط

#13

شكرا لك اخي الكريم

و الله يعكيك العافية

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…