سؤال

حصلت على الكود أدناه من كتاب C++، ولا أستطيع معرفة كيفية عمل التهيئة.

من ما يمكنني رؤيته ، هناك خارجي لركوب الدراجات في حلقة الدراجات في الصفوف ، وركوب الحلقة الداخلية للدوران.لكن تخصيص القيم في المصفوفة هو ما لا أفهمه.

#include <iostream>
using namespace std;

int main()
{
  int t,i, nums[3][4];

  for(t=0; t < 3; ++t) {
    for(i=0; i < 4; ++i) {
      nums[t][i] = (t*4)+i+1; //I don't understand this part/line
      cout << nums[t][i] << ' ';
    }
    cout << '\n';
  }

  return 0;
}

إذن هذه بعض الأسئلة.

  • لا أستطيع أن أفهم تهيئة المصفوفة ثنائية الأبعاد nums[3][4].ما يفصل (t*4)+i+1, ، حتى يعرف المترجم ما يجب تعيينه وأين؟
  • كيف أعرف القيم التي سيتم تخزينها في الصفوف والأعمدة، بناءً على القيم التي تم تعيينها؟
  • لماذا هناك النجمة؟
  • ما هي الأقواس حولها t*4 ل؟

أفهم أن تهيئة المصفوفات ثنائية الأبعاد تبدو مثل المثال التالي.

#include <iostream>
using namespace std;

int main() {
    char str[3][20] = {{"white" "rabbit"}, {"force"}, {"toad"}}; //initialize 2D character array
    cout << str[0][0] << endl; //first letter of white
    cout << str[0][5] << endl; //first letter of rabbit
    cout << str[1][0] << endl; //first letter of force
    cout << str[2][0] << endl; //first letter of toad

    return 0;
}

ومما أعرفه أن هذا في الذاكرة.

  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
0 w h i t e r a b b i t  0
1 f o r c e 0
2 t o a d 0

شكرًا لك.

هل كانت مفيدة؟

المحلول

(t*4)+i+1

هو تعبير حسابي.t وi هما ints، و* تعني مضاعفة.لذلك بالنسبة للصف 1 والعمود 2، t = 1، i = 2، والأعداد[1][2] = 1x4+2+1 = 7.

اه نسيت شيئينأولاً، () لتحديد ترتيب العمليات.لذلك يتم تنفيذ t*4 أولاً.لاحظ أنه في هذه الحالة، () غير ضروري، نظرًا لأن عامل الضرب له الأسبقية على عامل الجمع على أي حال.

أيضًا، لم أتمكن من معرفة من سؤالك ما إذا كنت تعرف هذا بالفعل أم لا، ولكن معنى الصفوف [t] [i] هو تدوين المصفوفة للوصول إلى الصفوف في الصف t والعمود i.

نصائح أخرى

بالنسبة للجزء الأول، أليس مجرد تعيين قيمة تساوي رقم الصف * 4 بالإضافة إلى رقم العمود؟أي.يجب أن تكون النتيجة النهائية للمهمة:

1  2  3  4
5  6  7  8
9 10 11 12

لذا فإن التعبير (t*4)+i+1 يعني "4 مضروبًا في رقم الصف بالإضافة إلى رقم العمود بالإضافة إلى 1".لاحظ أن رقم الصف وأرقام الأعمدة في هذه الحالة تبدأ من 0.

  1. nums[t][i] هي النقطة الوحيدة في المصفوفة التي يتم فيها تعيين قيمة (t*4)+i+1.

    لذا، إذا كان t = 1 وi = 1، فإن النقطة العددية[1][1] تساوي (1*4)+1+1 وهو ما يساوي 6.

  2. أنظر فوق.

  3. النجمة للضرب.

  4. تفعل ما هو موجود في ( ) أولاً تمامًا كما هو الحال في أي معادلة رياضية.

دعونا نرى، لقد فعلت

int t,i, nums[3][4];

حيث نحجز مساحة للمصفوفة ثنائية الأبعاد.سيكون للقيم الموجودة داخل المصفوفة قيم عشوائية نظرًا لأنك حجزت مساحة فقط.

الخط :

nums[t][i] = (t*4)+i+1; //I don't understand this part/line

يعين القيم إلى المصفوفة.لديك t وi وهما عدادان حلقيان، والسطر (t*4)+i+1 يعني أخذ قيمة t وضربها بـ 4 بالإضافة إلى i وplus 1.

لذا بالنسبة لـ t=0, i =0، تحصل على أن nums[0][0] له قيمة (0*4) + 0 + 1 وهو 1..الخ لكل شيء آخر.

وبالطبع فإن () هي مجرد أقواس رياضية أساسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top