السلام عليكم و رحمة الله
ســـــــــــ ;) ــــــــؤال صغير :
كيف يمكن عدد عناصر المصففة أثناء التشغيل على نمـــ :wacko: ــط
cin>>x;
int y[x];
و شكرا
السلام عليكم و رحمة الله
ســـــــــــ ;) ــــــــؤال صغير :
كيف يمكن عدد عناصر المصففة أثناء التشغيل على نمـــ :wacko: ــط
cin>>x;
int y[x];
و شكرا
و بحثت ووجدت الكود و لكني لم أفهم هل يمكنك شرحه الكود هو
int i ;
cin >> i;
int Array=new int ;
for (int j=0;j<i; j++)
cin >> Array[j];
فهل يمكن شرح هذا الكود الصعب لي لو سمحت
int *Array=new int ;
تصحيح :)
هذا يسمى الـ Dynamic Allocation انت تعرف المصفوفة بالـ heap وهي الطريقة الوحيدة الي يكون فيها تحديد الـ size حق المصفوفة خلال الـ runtime
رغم ان كومبايلر الـ Linux يقبل عادي انك تسوي الحركة الاولى :) غريبة ؟! بس يقبل
اذا كان عندك كتاب الـديتل افتح اول قسم الداتا ستركتشرز بتلقى فيه شرح
int a[5];
هنا المصفوفة يكون مكاناها في الـ Stack
في الحقيقة .. الأخ NullFlag أجاب على سؤال ..
ولكن أود أن أضيف أن المؤشرات هي من مميزات C و ++C في التعامل مع الذاكرة .
قد يستغرب البعض من طريقة ++C و C في حجز المتغيرات Dynamic Allocation وقت التشغيل. و لكنها تعطي مرونة في التعامل من قبل المبرمج ..
كثير من اللغات الأخرى تمكن المبرمج من حجز المتغيرات وقت التشغيل دون ازعاجه بالتعامل مع الذاكرة :)
تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 16 ديسمبر 2006 في 00:09
شكرا لك على الشرح لكن لماذا لا نتاعامل في بقية الكود مع *arrayy
بل نتعامل مع array بلا نجمة حيث array اسم متغير المصفوفة أهذا لسهولة الكتابة
array كذا يحتوي على عنوان اول عنصر
(array+1)
عنوان ثاني عنصر وكذا
*array يحتوي على اول قيمة
*(array+1) ثاني قيمة
وانت ماشي
array[1]= *(array+1)
شكرا لك أخي على الإجابة لدي مسألة و هي محددة بوقت معين لا أعرفه فهل هذا الطريقة تأخذ وقت إذا كانت المصفوفة تحوي 1000 عنصر
مرحبا superboy .. :)
أكيد انت تعاملت مع المصفوفات قبل اليوم ... :rolleyes:
طيب لما نعرف مصفوفة شو اللي بيصير !
خذ هذا المثال ..
int arr[5];
هذه المصفوفة ثابتة مكونة من خمس عناصر و لكن ما في شي في الكمبيوتر بيشيل خمس عناصر.. هذا نوع من تراكيب البيانات Data Structures .
طيب .. اللي بيصير انه بيتم حجز خمسة متغيرات من نوع int في الذاكرة .. طيب و بعدين .. :blink:
المتغير الذي تستخدمه عبارة عن متغير لحمل عنوان أول عنصر في المصفوفة .. بس لا تنسى ان المصفوفة تكون محجوزة ضمن Stack البرنامج نفسه .
في ++C يمكنك استخدام & للحصول على عنوان المتغير :
cout << &arr; // This will print the address of the first element of the array. cout << &arr + sizeof(int) * 3; // This will print the address of the fourth element.
الدلة sizeof بتعطيك حجم النوع مثل int أو double أو غيره عند حجزه في الذاكرة .
هذه كله تمام ما في مشاكل معاه ..
في شيء اسمه Heap .. منطقة في الذاكرة حرة مثل ساحة خردة ! تقدر تحجز فيها مكان لأي غرض بدك تخزنه أو تقدر تشيل الغرض متى ما حبيت ..
Stack البرنامج مثل الغرفة محدد بحجم معين ما فيك تغيره.
المؤشرات كل شغلتها انها تأشرلك على مكان في الذاكرة و انت بعدين تحدد المساحة المطلوبة يعني مثل ساحة الخردة بس دخلت الساحة تقدر تحط و تشيل على كيفك .
مقدمة بسيطة .. :)
نجي لسؤالك :
اقتباسشكرا لك أخي على الإجابة لدي مسألة و هي محددة بوقت معين لا أعرفه فهل هذا الطريقة تأخذ وقت إذا كانت المصفوفة تحوي 1000 عنصر
أول شي شو بتقصد بالوقت المحدد .. :blink:
ثاني شي اذا كنت تقصد التعامل مع المصفوفة المتغيرة .. فهي تعتمد على حسب ما تريد عمله فيها .. و ما أعتقد أن حجز 1000 عنصر راح تأثر على ذاكرة الجهاز بشيء...
<<< متااابعه
ويعطيكم الف عافيه
والله معلومات حلوة من جد تعطوني طموح اكبر اكمل برمجه :)
ألف شكر لك أخي خالد على الشرح الرائع فعلا لا أعلم كيف يمكنني رد الجميل لك فقد قمت بكتابة الكود لكنا و اجهتني مشكلة عندما حاولت استعادت عناصر المصفوفة ضمن الحلقة و هذا شرح أكثر for
لكن لدي مشكلة صغيرة
لقد كتبت كود لإجاد ناتج كثير حدود عندما معطي و حدث خطأ لا أعلمه :
[qoute]
error C2064: term does not evaluate to a function
[/qoute]
و السؤال ما معنى هذا الخطأ و شكرا لك و كيف حله و المثال لو سمحت
و سؤال أخير (إذا ما صار في قلة ذوق مني بسبب كثرة الأسئلة) :unsure:
هل المنطقة heap من الذاكرة تكون مساحنها بقدر مساحة الذاكرة كلها ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
أهلين أخ superboy ... :)
بالنسبة للسؤال الأول ممكن تحط الـ Code حتى نعرف من وين الغلط ..
ثاني سؤال .. الـ Heap منطقة افتراضية في الذاكرة و ما هي موجودة حقيقة ..
بس اللي يصير انه لما تطلب جزء من الذاكرة يعطيك اياها نظام التشغيل اللي تستخدمه ( لذلك السبب أنظمة التشغيل معقداً جداً رغم بساطة فكرتها و هي توفير الموارد المادية للتطبيقات ) ضمن الجزء اللي حدده ليكون ذاكرة Dynamic .
معلوماتي ليست بالكثيرة عن الموضوع , أتمنى لك التوفيق
سلام عليكم
حوار جميل بارك الله فيكم
error C2064: term does not evaluate to a function
يظهر هذا الخطأ عند تكوين شكل استدعاء دالة و هى غير معرفة وغالباً ما يكون لسبب نسيان علامة الضرب.
مثلاً
y=x*(z+2); //OK y=x(z+2); //error C2064
شكرا لكما أخي PointerVC ره الكود و ستعلم أين الخطأ
و أخي خالد ألأف شكر لك حبيب قلبي الكود هو :
#include "stdafx.h"
#include "iostream"
#include "cmath"
using namespace std;
int main()
{
int dg; // the power of the "الحد الجبري درجته"
double sol = 0; //the slove
double x; // the Variable x
int cnt;
cin>> dg;
int *par = new int[++dg];//the ByWord "الأمثال"
for(cnt = dg -1; cnt >= 0; cnt--) cin >> par[cnt];
cin >> x;
for(cnt = dg-1; cnt >= 0; cnt--)
sol += pow(x , double( cnt - 1)) * par(cnt + 1);//error C2064 here
cout<<sol;
return 0;
}تم تعديل هذه المشاركة بواسطة superboy في 22 ديسمبر 2006 في 20:45
sol += pow(x , double( cnt - 1)) * par[cnt+1];//You can't multiply Value with address
:)
اقتباس//You can't multiply Value with address
ماذا تعني
أسف جدا لأني شغلتكم يغبائي فأنا مبرمج vb سابق و المصفوفة في vb تكتب على الشكل )( و ليس على الشكل []
لذا غطت و كان هذا الخطأ و شكرا
(p+1) هذا يعطيك قيمة Address
يعني مو القيمة الي داخل الادرس هذا
|ADDRESS| -------->|VALUE|
لم أفهم لا تزعل مني لأني بليد
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…