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

[ تمت الإجابة ]declare variable for double array in C blus blus

بدأه FAZ في 21 يونيو 2012 · 12 رد · 737 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

لوسمحتوا عندي سؤال فالسي ++ يتكون من عده خطوات :

اولا: المستخدم يدخل عدد الاعمده والصفوف ومن ثم ادخال قيم للصفوف التي يريدها لتصميم مصفوفه }read element

ثانيا: يقوم البرنامج بعرض المصفوفه التي ادخلها{ display elements

ثالثا : edit element حيث يقوم بتحديد رقم الصف والعمود للقيمه التي يريد تغيرها ويظهر القيمه ومن ثم يكتب القيمه الجديده التي يريد ادخالها

رابعا: display report بحيث يعرض المصفوفه كامل بالقيمه الجديده مع حساب المجموع للاعمده والصفوف

هذه محاولتي بس يطلع لي خطأ فتعريف المصفوفه int[][] x=new int[r][c];

فأتمنى حد يصحح الكود لي ويرسلي كيفية تعريف المصفوفه بالصوره الصحيحه

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void main()
{
     int r,c,choice,row,col;
     int total=0,temp=0;
     int[][] x;
     clrscr();
     cout<<":: TASKS ::"<<"\n";
     cout<<"[1] Read elements"<<"\n";
     cout<<"[2] List elements"<<"\n";
     cout<<"[3] Edit elements"<<"\n";
     cout<<"[4] Display elements"<<"\n";
     cout<<"[5] Exit"<<"\n";
     cout<<"Enter a task: ";
     cin>>choice;

     //press 1 for Read elements

	cout<<":: Read elements ::"<<"\n";
	cout<<"Enter number of rows: ";
	cin>>r;
	cout<<"\n";
	cout<<"                columns: ";
	cin>>c;
	x=new int[r][c];

	//for insert elements of n rows
	for(row=0;row<r;row++)
	{ cout<<"Enter elements of row "<<(row+1)<<" :";
	  cout<<"\n";
	   for(col=0;col<c;col++)
	    {
	  cout<<(col+1)<<". ";
	  cin>>x[row][col];
	 }   }

	 //for press task 2- list elements
	  cout<<":: TASKS ::"<<"\n";
     cout<<"[1] Read elements"<<"\n";
     cout<<"[2] List elements"<<"\n";
     cout<<"[3] Edit elements"<<"\n";
     cout<<"[4] Display elements"<<"\n";
     cout<<"[5] Exit"<<"\n";
     cout<<"Enter a task: ";
     cin>>choice;

	cout<<":: List elements ::"<<"\n";


	//for list elements
	for(row=0;row<r;row++)
	{
	  for(col=0;col<c;col++)
	  {
	   cout<<x[row][col]<<"\t";
	   }
	   cout<<"\n";
	   }
	   cout<<"\n";


	   //for press task-3 Edit elements
	   cout<<":: TASKS ::"<<"\n";
     cout<<"[1] Read elements"<<"\n";
     cout<<"[2] List elements"<<"\n";
     cout<<"[3] Edit elements"<<"\n";
     cout<<"[4] Display elements"<<"\n";
     cout<<"[5] Exit"<<"\n";
     cout<<"Enter a task: ";
     cin>>choice;

	cout<<":: Edit elements ::"<<"\n";

	//for edit specific element
	cout<<"Enter details of the element to edit: "<<"\n";
	cout<<"               rows: ";
	cin>>r;
	cout<<"             column: ";
	cin>>c;
	cout<<"\n";

	//search for element
	cout<<"      Old element: "<<x[r-1][c-1];
	cout<<"\n";

	int value;
	//to insert new element
	cout<<"Enter new element: ";
	cin>>value;

	x[r-1][c-1]=value;
	cout<<"\n";

	//for display report
	cout<<":: TASKS ::"<<"\n";
     cout<<"[1] Read elements"<<"\n";
     cout<<"[2] List elements"<<"\n";
     cout<<"[3] Edit elements"<<"\n";
     cout<<"[4] Display elements"<<"\n";
     cout<<"[5] Exit"<<"\n";
     cout<<"Enter a task: ";
     cin>>choice;

	cout<<":: Display a report ::"<<"\n";
	cout<<"\t\t\t\t\t\t\ttotal";

	//for display the new array with total
	int rt[]=new int[row];
	int ct[]=new int[col];
	for(r=0;r<row;r++)
	{
	 for(c=0;c<col;c++)
	 {
	 //for find total of rows
	 rt[r]=rt[r]+x[r][c];
	 }  }

	 //for find total of columns
	 for(c=0;c<col;c++)
	 {
	  for(r=0;r<row;r++)
	  {
	    ct[c]=ct[c]+x[r][c];
	    }  }

	    //for total
	    for(c=0;c<col;c++)
	    {
	    total=total+ct[c];
	    }

	    //to display new array with total
	    for(r=0;r<row;r++)
	    {
	     for(c=0;c<col;c++)
	     {
	     cout<<"\t"<<x[r][c]<<"\t";
	     }

	     //display total of row
	     cout<<"\t";
	     cout<<rt[r];
	     cout<<"\n";
	     }

	     //display total of column
	     cout<<"-----------------------------------------------------\n";
	     cout<<"Total"<<"\t";

	     for(c=0;c<col;c++)
	     {
	     cout<<ct[c]<<"\t\t";
	     }
	     cout<<total;


	     cout<<"\n";

	     //display max element
	     for(r=0;r<row;r++)
	     {
	     for(c=0;c<col;c++)
	     {

		if(x[r][c]>temp)
		{
		 temp=x[r][c];
		 }
	    }
	    }

	    cout<<"\n";
	    cout<<"Highest element: "<<temp;
	    cout<<"\n";

	    //display min element
	    for(r=0;r<row;r++)
	    {
	      for(c=0;c<col;c++)
	      {

		if(x[r][c]<temp)
		{
		 temp=x[r][c];
		 }
	     }
	     }

	     cout<<"Lowest element: "<<temp;
	     cout<<"\n";

	     //for exit
	     cout<<":: TASKS ::"<<"\n";
     cout<<"[1] Read elements"<<"\n";
     cout<<"[2] List elements"<<"\n";
     cout<<"[3] Edit elements"<<"\n";
     cout<<"[4] Display elements"<<"\n";
     cout<<"[5] Exit"<<"\n";
     cout<<"Enter a task: ";
     cin>>choice;


     getch();
     }

تحيااتــي

#2

أخى انت بحاجة للتعرفة على الحجز الديناميكى للمصفوفة ذات البعدين بأستخدام المؤشرات

يوجد بعض الاسئلة التى بها تطبيق عملى قوى تفضل:

  1. [نقاش] برنامج Kind of a Blur مناقشه للمشروع
  2. أخى تفضل الكود الآتى سيعمل ادخال المصفوفات بشكل ديناميكى

هذة الاكواد مدققة ومنقحة ان شاء الله والله ولى التوفيق

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#3

مرحبا إخوتي :)

لدي سؤال لصاحب الموضوع, هل تريد كتابة الكود بالسي أم السي++ ؟

أنصحك و بشدة بعدم الخلط بين اللغتين (خصوصا عند استخدام الحجز الديناميكي) حتى لا تقع في الــ dynamic memory allocation bug

باختصار, توجد طريقتان لإنشاء مصفوفة ديناميكية ثنائية البعد (ليكن ni هو عدد الصفوف و nc هو عدد الأعمدة) :

  • الطريقة الأولى :
    int* tableau;
    tableau = new int [ ni * nc];


    بهذه الطريقة, يمكنك الوصول إلى العنصر

    tableau[j]

    بكتابة :

    tableau( i * nc + j)


  • الطريقة الثانية تكون باستخدام مؤشر لمؤشر :
    int ** tableau;
    tableau = new int* [ni];
    for ( int i=0 ; i < ni ; i++)
    tableau = new int [nc];
    .
    .
    tableau[j]=...;
    .
    for ( int i=0 ; i < ni ; i++)
    delete [] tableau;
    delete [] tableau;


مالفرق بين الطريقتين ؟

  1. الطريقة الأولى تقوم بحجز مؤشر يشير إلى إلى مصفوفة عددية طولها ni * nc (هذه الطريقة غير عملية عند التعامل مع مصفوفات ذات أحجام كبيرة)
  2. الطريقة الثانية تقوم بحجز مصفوفة مؤشرات تحتوي على ni عنصر, كل عنصر من هذه المصفوفة عبارة عن مؤشر يشير إلى مصفوفة عددية تحتوي على nc عنصر. (إذا كان nc يختلف عن ni, نقول أن المصفوفة "متعددة الأبعاد" )
#4
أحمد الشنقيطي كتب:

مرحبا إخوتي :)

لدي سؤال لصاحب الموضوع, هل تريد كتابة الكود بالسي أم السي++ ؟

أنصحك و بشدة بعدم الخلط بين اللغتين (خصوصا عند استخدام الحجز الديناميكي) حتى لا تقع في الــ dynamic memory allocation bug

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

اولا اشكــــر كل من ساعدني

ثانيا : اخي انا كــاتب البرنامج بالسي بلس بلس

وبالنسبه للكود للمصفوفه المتعدده التي اخبرتموني عنها قمت بتجربته ولكن ما زال هناك اخطاء تظهر لي!!!!!

اتمنى ان تقوموا باعااادة كتابة الكود الذي انزلته بتعديل int x[][] =new int[r][c];

لان الخطأ يظهر لي هنا ...

عندي سؤال : انا اريد كتابة الكود(بالصوره البسيطه) بدون المؤشر هل يمكنني ذلك؟؟!

تحياااتي ...

#5

اخي المصفوقة العادية لا يمكن تغيير حجمها (وكان #c لا تزال تسيطر عليك)

يمكنك إستخدام القوائم المترابطة وهي تملك خواص التي تحتاجها

اما عن int x[][] =new int[r][c فهذا الكود غير صحيح فعليك ان تكتفي فقط بكتابة

int x[n][m]

والله اعلم.

#6

قمتُ بتعديل الكود مع تحفظي على بعض أجزاءه ! :

#include<iostream>
using namespace std;

void DisplayMenu(int* choice) {
    cout << ":: TASKS ::" << "\n";
    cout << "[1] Read elements" << "\n";
    cout << "[2] List elements" << "\n";
    cout << "[3] Edit elements" << "\n";
    cout << "[4] Display elements" << "\n";
    cout << "[5] Exit" << "\n";
    cout << "Enter a task: ";
    cin >> (*choice);
}

int main() {
    int r, c, choice, row, col;
    int total = 0, temp = 0;
    int** x;
    DisplayMenu(&choice);

    //press 1 for Read elements

    cout << ":: Read elements ::" << "\n";
    cout << "Enter number of rows: ";
    cin >> r;
    cout << "\n";
    cout << "                columns: ";
    cin >> c;
    x = new int* [r];
    for (int i = 0; i < r; i++)
        x = new int [c];
    //for insert elements of n rows
    for (row = 0; row < r; row++) {
        cout << "Enter elements of row " << (row + 1) << " :";
        cout << "\n";
        for (col = 0; col < c; col++) {
            cout << (col + 1) << ". ";
            cin >> x[row][col];
        }
    }

    //for press task 2- list elements
    DisplayMenu(&choice);
    cout << ":: List elements ::" << "\n";

    //for list elements
    for (row = 0; row < r; row++) {
        for (col = 0; col < c; col++) {
            cout << x[row][col] << "\t";
        }
        cout << "\n";
    }
    cout << "\n";


    //for press task-3 Edit elements
    DisplayMenu(&choice);

    cout << ":: Edit elements ::" << "\n";

    //for edit specific element
    cout << "Enter details of the element to edit: " << "\n";
    cout << "               rows: ";
    cin >> r;
    cout << "             column: ";
    cin >> c;
    cout << "\n";

    //search for element
    cout << "      Old element: " << x[r - 1][c - 1];
    cout << "\n";

    int value;
    //to insert new element
    cout << "Enter new element: ";
    cin >> value;

    x[r - 1][c - 1] = value;
    cout << "\n";

    //for display report
    DisplayMenu(&choice);

    cout << ":: Display a report ::" << "\n";
    cout << "\t\t\t\t\t\t\ttotal";

    //for display the new array with total
    int* rt = new int[row];
    int* ct = new int[col];
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            //for find total of rows
            rt[r] = rt[r] + x[r][c];
        }
    }

    //for find total of columns
    for (c = 0; c < col; c++) {
        for (r = 0; r < row; r++) {
            ct[c] = ct[c] + x[r][c];
        }
    }

    //for total
    for (c = 0; c < col; c++) {
        total = total + ct[c];
    }

    //to display new array with total
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            cout << "\t" << x[r][c] << "\t";
        }

        //display total of row
        cout << "\t";
        cout << rt[r];
        cout << "\n";
    }

    //display total of column
    cout << "-----------------------------------------------------\n";
    cout << "Total" << "\t";

    for (c = 0; c < col; c++) {
        cout << ct[c] << "\t\t";
    }
    cout << total;


    cout << "\n";

    //display max element
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {

            if (x[r][c] > temp) {
                temp = x[r][c];
            }
        }
    }

    cout << "\n";
    cout << "Highest element: " << temp;
    cout << "\n";

    //display min element
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {

            if (x[r][c] < temp) {
                temp = x[r][c];
            }
        }
    }

    cout << "Lowest element: " << temp;
    cout << "\n";

    //for exit
    DisplayMenu(&choice);

}

ملاحظات :

  • استخدم مساحة الأسماء std عند تضمين المكتبات.
  • يمكنك استخدام المكتبة cstdio بدلا من stdio.h (مع أنك لستَ بحاجة إلى هذه المكتبة)
  • ابتعد دائما عن الدوال الغير قياسية, يمكنك استخدام
    system("cls")

    بدلا من clrscr

  • الأجزاء التي تظهر في الكود عدة مرات, من الأفضل كتابتها في دالة منفردة و استدعائها كل ما احتجت إليها (تماما, كما فعلتُ أنا مع DisplayMenu)
  • كن حذرا جدا لأنك تستخدم الحجز الدينامكي .. مثلا, ماذا لو قام المستخدم بإدخال مصفوفة 3x4 و أراد تغيير العنصر الموجود في الصف الخامس و العمود التاسع ؟؟
  • ما فائدة المتغيرين, rt و ct ؟
#7

شكرا لك أخي أحمد والحمدلله البرنامج اشتغل معي ولكن يطلع ناتج المجموع خطأ ,,, ما المشكله؟؟؟؟

[*]ما فائدة المتغيرين, rt و ct ؟

rt متغير لحساب مجموعه كل صف

ct متغير لحساب مجموع كل عمود

..........

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

جزاك الله الف خير واسمحلي خذيت من وقتك...

#8

لا أرى فائدة في استخدام الــ menu و لا حتى في المتغير choice, لأن ترتيب العمليات سيظل ثابتا مهما كانت قيمة المتغير choice !, لذا قمتُ بحذف الدالة MenuDisplay من الكود :

#include<iostream>
using namespace std;

int main() {
    int r, c, row, col, total = 0, temp = 0;
    int** x;
    cout << ":: Read elements ::" << "\n";
    cout << "Enter number of rows: ";
    cin >> r;
    cout << "\n";
    cout << "                columns: ";
    cin >> c;
    x = new int* [r];
    for (int i = 0; i < r; i++)
        x = new int [c];
    //for insert elements of n rows
    for (row = 0; row < r; row++) {
        cout << "Enter elements of row " << (row + 1) << " :";
        cout << "\n";
        for (col = 0; col < c; col++) {
            cout << (col + 1) << ". ";
            cin >> x[row][col];
        }
    }

    cout << "\n\n:: List elements ::" << "\n";

    //for list elements
    for (row = 0; row < r; row++) {
        for (col = 0; col < c; col++) {
            cout << x[row][col] << "\t";
        }
        cout << "\n";
    }

     cout << "\n\n:: Edit elements ::" << "\n";
    //for edit specific element
    cout << "Enter details of the element to edit: " << "\n";
    cout << "               rows: ";
    cin >> r;
    cout << "             column: ";
    cin >> c;
    cout << "\n";

    //search for element
    cout << "      Old element: " << x[r - 1][c - 1];
    cout << "\n";

    int value;
    //to insert new element
    cout << "Enter new element: ";
    cin >> value;

    x[r - 1][c - 1] = value;

    cout << "\n\n:: Display a report ::" << "\n";
    cout << "\t\t\t\t\t\tTotal";

    //for display the new array with total
    int* rt = new int[row];
    int* ct = new int[col];
    for (r = 0; r < row; r++)
        rt[r] = 0;
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            //for find total of rows
            rt[r] += x[r][c];
        }
    }

    //for find total of columns
    for (c = 0; c < col; c++)
        ct[c] = 0;
    for (c = 0; c < col; c++) {
        for (r = 0; r < row; r++) {
            ct[c] += x[r][c];
        }
    }

    //for total
    for (c = 0; c < col; c++) {
        total += ct[c];
    }

    //to display new array with total
    cout << "\n-----------------------------------------------------\n\n";
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            cout << "\t" << x[r][c] << "\t";
        }
        cout << "||\t" << rt[r] << "\n";
    }
    cout << "\n-----------------------------------------------------\n";
    cout << "Total" << "\t";

    for (c = 0; c < col; c++) {
        cout << ct[c] << "\t\t";
    }
    cout << total;


    cout << "\n";

    //display max element
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {

            if (x[r][c] > temp) {
                temp = x[r][c];
            }
        }
    }

    cout << "\n";
    cout << "Highest element: " << temp;
    cout << "\n";

    //display min element
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {

            if (x[r][c] < temp) {
                temp = x[r][c];
            }
        }
    }

    cout << "Lowest element: " << temp;
    cout << "\n";
}

الخطأ كان يكمن في عدم تصفير كل من ct و rt.

أرجو لك التوفيق.

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 22 يونيو 2012 في 20:04

#9

شكـــرا لك أخي كثيرا الحمدلله اشتغلت البرنامج بشكل صحيح وبصراحة استفدت منك في ميزان حسناتك يارب ..

تحيااتي ..

#10

لا شكر على واجب, هذا واجبي :)

أرجو لك التوفيق.

#11

أود فى البداية ان اشكر اخى احمد الشنقطى على المجهود المبذول

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

النقطة الاولى:

عند استخدام كلمة new لحجز مساحة من الذاكرة نحتاجها فيجب تحريرها بــأستخدام الكلمة delete عندمنا لانعد فى حاجة اليها.

وحذف الذاكراة يكون متتالى بمعنى حذف المصفوفات كلاً على حدا ثم حذف مصفوفة المؤشرات.

انظر:

// delete A  Matrix .....this is must be last code ...
    for (x = 0; x < a_rows; x++)
        delete [] A[x];
    delete [] A;

يمكنك الاطلاع على الكود بشكل كامل من قم 34 مشاركة سابقة

النقطة الثانية: استخدام out put formating تنسيق المخرجات فى سي++ من هنا مشاركة رائعة للأحمد مجدى

هذا والله ولى التوفيق

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#12

السلام عليكم

مرحبا أخي محمد :)

اقتباس
عند استخدام كلمة new لحجز مساحة من الذاكرة نحتاجها فيجب تحريرها بــأستخدام الكلمة delete عندمنا لانعد فى حاجة اليها.

هذا ما قُلته في هذه المشاركة.

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

الكود الكامل :

#include<iostream>
using namespace std;

int main() {
    int r, c, row, col, total = 0, temp = 0;
    int** x;
    cout << ":: Read elements ::" << "\n";
    cout << "Enter number of rows: ";
    cin >> r;
    cout << "\n";
    cout << "                columns: ";
    cin >> c;
    x = new int* [r];
    for (int i = 0; i < r; i++)
        x = new int [c];
    //for insert elements of n rows
    for (row = 0; row < r; row++) {
        cout << "Enter elements of row " << (row + 1) << " :";
        cout << "\n";
        for (col = 0; col < c; col++) {
            cout << (col + 1) << ". ";
            cin >> x[row][col];
        }
    }

    cout << "\n\n:: List elements ::" << "\n";

    //for list elements
    for (row = 0; row < r; row++) {
        for (col = 0; col < c; col++) {
            cout << x[row][col] << "\t";
        }
        cout << "\n";
    }

     cout << "\n\n:: Edit elements ::" << "\n";
    //for edit specific element
    cout << "Enter details of the element to edit: " << "\n";
    cout << "               rows: ";
    cin >> r;
    cout << "             column: ";
    cin >> c;
    cout << "\n";

    //search for element
    cout << "      Old element: " << x[r - 1][c - 1];
    cout << "\n";

    int value;
    //to insert new element
    cout << "Enter new element: ";
    cin >> value;

    x[r - 1][c - 1] = value;

    cout << "\n\n:: Display a report ::" << "\n";
    cout << "\t\t\t\t\t\tTotal";

    //for display the new array with total
    int* rt = new int[row];
    int* ct = new int[col];
    for (r = 0; r < row; r++)
        rt[r] = 0;
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            //for find total of rows
            rt[r] += x[r][c];
        }
    }

    //for find total of columns
    for (c = 0; c < col; c++)
        ct[c] = 0;
    for (c = 0; c < col; c++) {
        for (r = 0; r < row; r++) {
            ct[c] += x[r][c];
        }
    }

    //for total
    for (c = 0; c < col; c++) {
        total += ct[c];
    }

    //to display new array with total
    cout << "\n-----------------------------------------------------\n\n";
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            cout << "\t" << x[r][c] << "\t";
        }
        cout << "||\t" << rt[r] << "\n";
    }
    cout << "\n-----------------------------------------------------\n";
    cout << "Total" << "\t";

    for (c = 0; c < col; c++) {
        cout << ct[c] << "\t\t";
    }
    cout << total;


    cout << "\n";

    //display max element
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {

            if (x[r][c] > temp) {
                temp = x[r][c];
            }
        }
    }

    cout << "\n";
    cout << "Highest element: " << temp;
    cout << "\n";

    //display min element
    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {

            if (x[r][c] < temp) {
                temp = x[r][c];
            }
        }
    }

    cout << "Lowest element: " << temp;
    cout << "\n";

    for ( int i=0 ; i <row ; i++)
    delete [] x;
    delete [] x;

    delete []rt;
    delete []ct;
}

بالتوفيق.

2
#13

هذا حل تان باستعمال الحجز الديناميكي و لكن بلغة c مابعرف هل يفيدك ولا لا؟؟

#include <stdio.h>
#include <stdlib.h>
#define exit() default: exit(0);

int ** t=NULL, i=0,j=0,val=0,c=0,l=0,s=0,choix=0;

void Change(void);
void Affich(void);
long Somme (void);

int main()
{
	printf("entrer nombre de lignes  :\t"); scanf("%d",&l);
	printf("entrer nombre de colonnes:\t"); scanf("%d",&c);

	// allocation dynamique

	t = calloc (l,sizeof(int));
  	for (i=0 ; i<l ; i++)
	t = calloc(c,sizeof(int));

	// saisie des données

	for(i=0;i<l;i++)
	for(j=0;j<c;j++)
	{
   	printf("t[%d][%d]=",i,j);
   	scanf("%d",&t[j]);
	}

	//affichage

	printf("affichage du tableau\n\n");  Affich();

	// changer value

	printf("\n\nvoulez-vous changer une valeur?: \n\
        	oui (1)\n\
        	non (2)\t:");	scanf("%d",&choix);

	switch(choix)
	{
    	case 1: Change(); printf("Apres le changement\n\n");Affich();printf("\nsomme=%ld",Somme()); break;
    	case 2:printf("rien a changé !!\n\n"); Affich(); printf("somme=%ld",Somme());  break;
    	exit()
	}

	//liberer memoire

	for ( i=0 ; i < l ; i++)
  	free (t);
	free(t);


	return 0;
}

void Change(void)
{
	int *p=&i, *q=&j;
	printf("ligne  :"); scanf("%d",p);
	printf("colonne:"); scanf("%d",q);
	printf("val	:"); scanf("%d",&val);
	t[*p-1][*q-1]^=val; val^=t[*p-1][*q-1]; t[*p-1][*q-1]^=val;
	return;
}

void Affich(void)
{
	for(i=0;i<l;i++)
	{
   	for(j=0;j<c;j++)  printf("%d\t",t[j]);
   	putchar('\n');
	}
	return;
}

long Somme (void)
{
	for(i=0;i<l;i++)
   	for(j=0;j<c;j++)
 		s+=t[j];
	return (long) s;
}

7GE87929.jpg

و بالتوفيق لجيمع المسلمين

تم تعديل هذه المشاركة بواسطة مومو (momo) في 24 يونيو 2012 في 01:21

1

i love you mama

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