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

المصفوفة بدون حجم []array

بدأه عبود طش أم طش في 22 يوليو 2010 · 12 رد · 1,244 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كيف بامكاني انشاء مصفوفة بدون حجم يتم ادخال القيم بها حتى يطلب المستخدم التوقف

مثال على الكود ولكنه لا يعمل اريد التعديل

#include<iostream>
using namespace std;
int main(){
int mat[];
int a=0,z;
do{
cout<<"Enter Namber :";
cin>>mat[a];
a++;
cout<<"\n 1-Continuation \t 0- stop";
cin>>z;
}while(z==1);

}

نوع الخطأ

4: error: storage size of ‘mat’ isn't known

#2

وعليكم السلام ورحمة الله وبركاته

int mat[];

هذا النوع لازم تعطيله قيمة ابتدائية عبارة عن مصفوفة ويصبح حجمها مساوي لعدد العناصر

اما بالنسبة اذا اردت مصفوفة تقدر تغير حجمها في أي وقت فتوجد حاوية stl كمكتبة معيارية في cpp انظر الرابط http://www.cplusplus.com/reference/stl/ .

2

بسم الله الرحمن الرحيم

مدونة دوال

كيوتي العربي

#3

اذا أردت جعل مصفوفة بدون حجم جرب هذا الكود :

 

#include"stafix.h"
#include<iostream> 
using namespace std; 
int main(){ 
char *st=new char; 
int a=0,z; 
do{ 
cout<<"Enter Namber :"; 
cin>>st[a] 
a++; 
cout<<"\n 1-Continuation \t 0- stop"; 
cin>>z; 
}while(z==1); 
st[a]='\0';
int array=new int[a];
for(int i=0;st!='\0';i++)
{
array=st-'0';
}

}

تم تعديل هذه المشاركة بواسطة aohammed في 23 يوليو 2010 في 04:52

−2
#4

أظن أن بعض المترجمات الحديثه تمكنت من عمل :

int x = 10;
int arr[x];
#5

استخدم ال vector وهو سهل وبسيط جداً.

او ابني ال array بطريقه dynamic بأ ستتخدام ال new او malloc . ولكن هنا بعد تعريف حجم الا array لا يمكن زياده حجمها الا بحذفها وانشائها من جديد.

ال vector افضل اذا كنت تحتاج مرونه كبيره في التعامل مع ال array

2
#6
مصفوفة كتب:

وعليكم السلام ورحمة الله وبركاته

int mat[];

هذا النوع لازم تعطيله قيمة ابتدائية عبارة عن مصفوفة ويصبح حجمها مساوي لعدد العناصر

اما بالنسبة اذا اردت مصفوفة تقدر تغير حجمها في أي وقت فتوجد حاوية stl كمكتبة معيارية في cpp انظر الرابط http://www.cplusplus.com/reference/stl/ .

نعم اخوي اريدد المصفوفة بحجم متغيير ياريت لو تديني التعديل لاني ماعندي خبره بالريفرنس

#7
aohammed كتب:

اذا أردت جعل مصفوفة بدون حجم جرب هذا الكود :

 

#include"stafix.h"
#include<iostream> 
using namespace std; 
int main(){ 
char *st=new char; 
int a=0,z; 
do{ 
cout<<"Enter Namber :"; 
cin>>st[a] 
a++; 
cout<<"\n 1-Continuation \t 0- stop"; 
cin>>z; 
}while(z==1); 
st[a]='\0';
int array=new int[a];
for(int i=0;st!='\0';i++)
{
array=st-'0';
}

}

أخوي الكود به أخطاء لم أتمكن من حلها

هويدي كتب:

أظن أن بعض المترجمات الحديثه تمكنت من عمل :

int x = 10;
int arr[x];

هذا الطريقة لتحديد الحجم اريدها متغييرة الحجم

Ali Al-Zyoud كتب:

استخدم ال vector وهو سهل وبسيط جداً.

او ابني ال array بطريقه dynamic بأ ستتخدام ال new او malloc . ولكن هنا بعد تعريف حجم الا array لا يمكن زياده حجمها الا بحذفها وانشائها من جديد.

ال vector افضل اذا كنت تحتاج مرونه كبيره في التعامل مع ال array

ما هي الطريقة أخوي

خبرتي بالريفرنس جدا محدودة

#8

قى بعض المترجمات (لا اعتقد انها معيارية) يمكن عمل variable-length array وهى مصفوفات يحدد حجمها بمتغير (ليس ثابت) وغالبا تحجز فى الstack

ولكن يبدو انك تسال عن تغيير حجم مصفوفة ويوجد بها عناصر اصلا . لا يمكن فى الarray العادى (الا بانشاء مصفوفة جديدة بحجم اكبر ونقل العناصر القديمة لها) وهى عملية ليست ذكية او مكلفة . لذلك هناك حلول تراكيب بيانات اخرى ابسطها الlinked list

تم تعديل هذه المشاركة بواسطة apex في 23 يوليو 2010 في 16:08

name : mohamedyosry

#9

كما ذكر بعض الشباب، لا تستخدم المصفوفات ، ببساطة!

استخدم الvector ... راجع الدروس في الفهرس.

@هويدي:

اقتباس
أظن أن بعض المترجمات الحديثه تمكنت من عمل :

int x = 10;

int arr[x];

هذا ليس كود سي++ قياسي ولن يعمل في أغلب المترجمات القياسية، راجع:

/index.php?showtopic=218586&view=findpost&p=1082298

بالتوفيق..

1

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#10

شكرا لك أخ وجدي :D

#11

تم حل المشكلة بناء على الكود التالي :

    #include <iostream> 
    #include <vector> 
    using namespace std;

    int main() 
    {
        vector<double> student_marks; 
        int number; 
        char answer;

        cout << "Do you want to enter numbers (y/n)? "; 
        cin >> answer;

        while (answer == 'y') 
        { 
            cout << "Enter value: "; 
            cin >> number;

                // Now that we have the number from the user, 
                // append it at the end of the vector

            student_marks.push_back(number);

            cout << "Do you want to enter more numbers (y/n)? "; 
            cin >> answer; 
        }

                // Now print all the values;  notice that we didn't need to 
                // count how many elements were entered:  we can always use 
                // the size() method to ask student_marks how many are there!

        for (int i = 0; i < student_marks.size(); i++) 
        { 
            cout << "Student #" << i+1 << '\t' << student_marks; 
        } 
                // '\t' is the code for the TAB character

        return 0; 
    }

شكرا للجميع

تم تعديل هذه المشاركة بواسطة عبود طش أم طش في 24 يوليو 2010 في 01:30

1
#12

وعليكم السلام ورحمة الله وبركاته

hG6rVm.jpg

#13
#include "stdafx.h"
#include<iostream> 
using namespace std;  
int main(){  
char *st=new char;  
int a=0,z;  
do{  
cout<<"Enter Namber :";  
cin>>st[a]; 
a++;  
cout<<"\n 1-Continuation \t 0- stop";  
cin>>z;  
}while(z==1);  
st[a]='\0'; 
int *array=new int[a]; 
for(int i=0;st!='\0';i++) 
{ 
array=st-'0'; 
} 

}

برنامجي بعد التصحيح ....

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