-
ماتریس
1 برنامه نوشتم که 2 تا ماتریس دریافت کنه و حاصل جمع و ترانهاده و حاصل ضرب دو ماتریس رو چاپ میکنه.ولی دو تا اشکال داره.قسمت ترانهاده با اینکه به نظر خودم کدش درسته ولی اشتباه چاپ میکنه و اینکه من این برنامه رو برای ماتریس 3 در 3 نوشتم.اگه بخام خوده کاربر بگه ک ماتریس چن در چن باشه باید چیکار کنم؟
اینم کدی که نوشتم :
کد:
#include <iostream>
using namespace std;
int a[3][3],b[3][3],c[3][3];
void sum()
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
c[i][j]=a[i][j]+b[i][j];
}
}
void taranahade()
{
int i,j,temp;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
temp=a[i][j];
a[j][i]=temp;
}
}
}
void zarb()
{
int i,j,k;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c[i][j]=0;
for(k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
}
void chap()
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<c[i][j]<<" ";
cout<<"\n";
}
}
int main()
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cin>>a[i][j];
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cin>>b[i][j];
}
sum();
chap();
taranahade();
chap();
zarb();
chap();
}
-
سلام تو قسمت ترانهاده اول یه کپی از ماتریس درست کنین بعد روی اون بنویسین:
کد:
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
temp[j][i]=a[i][j];
}
}
تا جایی که یادم میاد توی C نمیشه آرایه ی با سایز متغیر تعریف کرد... دوستان دیگه بهتره تو این مورد نظر بدن
-
سلام.
بله در C نمی توان آرایه با سایز متغیر تعریف کرد.
اما خیلی راحت در C++ میشود.
با استفاده از حافظه پویا.
-
سلام..///
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
************
تو C میشه آرایه با سایز متغییر تعریف کرد// برای تعریف و تغییر سایز این آرایه ها می تونید از توابع malloc و calloc و realloc استفاده کنید// با استفاده از تابع free هم می تونید حافظه ای که دریافت کردید رو به سیستم برگردونید../// برای استفاده از این توابع باید فایل stdlib.h رو به برنامتون اضافه کنید..///
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
****************
کد:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int size1, size2;
int *pInt;
printf("tedade andis haye araye ra vared konid : ");
scanf("%d", &size1);
//pInt = (int*)calloc(size1, sizeof(int));
pInt = (int*)malloc(size1 * sizeof(int));
for (int idx = 0; idx < size1; ++idx)
{
printf("%d : ", idx+1);
scanf("%d", &(pInt[idx]));
}
for (int idx = 0; idx < size1; ++idx)
printf("%d: %d\n", idx+1, (pInt[idx]));
printf("tedade andis haye jadid ra vared konid : ");
scanf("%d", &size2);
pInt = (int*)realloc(pInt, size2 * sizeof(int));
for (int idx = size1; idx < size2; ++idx)
{
printf("%d : ", idx+1);
scanf("%d", &(pInt[idx]));
}
for (int idx = 0; idx < size2; ++idx)
printf("%d: %d\n", idx+1, (pInt[idx]));
free(pInt);
system("PAUSE");
return 0;
}
*******************
روش استفاده از تابع malloc به این صورت هستش که فضای مورد نیاز رو به این تابع ارسال می کنید مثل مثال بالا و این تابع یه اشاره گر از نوع void بر می گردونه که می تونید به اشاره گر از هر نوعی می خواید تبدیلش کنید./// تابع realloc هم مثل تابع malloc کار می کنه و برای تغییر سایز آرایه استفاده میشه// آرگومان اول اشاره گر (یا اسم آرایتون) و آرگومان دوم رو برابر اندازه جدید قرار بدید تا سایز آرایتون مطابق اندازه جدید تغییر کنه//
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
**************
تابع calloc هم دقیقاً کار تابع malloc رو انجام میده// تنها تفاوتشون تو روش استفادشون هست// تابع calloc تعداد اندیس رو به عنوان آرگومان اول و اندازه هر اندیس رو به عنوان آرگومان دوم دریافت می کنه و فضای مورد نیاز رو در اختیارتون قرار میده..///
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
******************
موفق باشید!
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]