PDA

View Full Version : مشکل در حل چند ماتریس



delphi_stu
پنج شنبه 31 فروردین 1385, 07:14 صبح
- چطوری محل های وقوع ماتریس 2*2 در ماتریس n*n چاپ کنم؟ بطوریکه محل وقوع با مختصات گوشة سمت چپ-بالای ماتریس پیدا شده مشخص می‌شود.

- ترتیب عناصر ماتریسn×n به شکل m2.jpg.

- تابعی میخوام برای ماتریس n×n که عناصر قطرها (قطرهای فرعی به موازات قطر اصلی در نظر گرفته می شوند) را مرتب نموده و ماتریس بدست اومده را چاپ کنه . شکل m3.jpg

delphi_stu
پنج شنبه 31 فروردین 1385, 20:52 عصر
کسی نیست کمکم کنه

Argonod
جمعه 01 اردیبهشت 1385, 19:06 عصر
میشه یکم بیشتر توضیح بدی؟ من نفهمیدم که میخوای قطرها رو sort کنی و نمایش بدی یا و فقط نمایششون بدی؟ از کدوم سمت باید انجام بشه این کار؟ یک مثال بد نیست بیان کنی

delphi_stu
شنبه 02 اردیبهشت 1385, 10:45 صبح
با سلام
خسته نباشی .
دوستان اگه در در حل این مشکل هم یاری کنن ممنون میشم http://www.barnamenevis.org/forum/showthread.php?p=219501
ممنونم میشم کمکم کنید .

سوال 1:
مثلا ماتریس n*n ما این باشه

1 2 3 4 5 6 7
0 1 2 4 5 8 9
3 2 4 7 9 5 6
1 0 2 4 5 6 8

ماتریس 2*2

4 5
7 9

حل جواب مساله برابر میشه با : 2.3

سوال 2 :
مثلا :
1 2 3 4
5 6 7 8
9 1 0 1

خروجی :
6 7 8 0
1 0 1 4
5 0 0 0

Argonod
شنبه 02 اردیبهشت 1385, 15:23 عصر
برای سوال اولت اینو امتحان کن
#include <conio.h>
#include <stdio.h>
void locate_ch (char x[], char a[]);
main()
{
char a[50];
char p[50];
gets(a); //to get the main string
gets(p); //to get the sub string
locate_ch(a,p);
return 0;
}
void locate_ch (char x[], char a[]) //prints ^ under special character
{
int i=0,flag=0,j=0;
printf("\n%s\n",x);
while (x[i])
{
while(a[j])
{
if (x[i++]==a[j++])
flag=0;
else
{
flag=1;
break;
}
}
if(flag==0)
{
printf("^");
for(;j>1;j--)
printf(" ");
}
else
printf(" ");
j=0;
}
}

و برای سوال دوم شما من هنوز چیزی از سوال نفهمیدم . شما میگید یک ماترس n*n دارید ولی در مثال ماتریس m*n نشان داده شده لطفا بیشتر توضیح بدید

delphi_stu
شنبه 02 اردیبهشت 1385, 17:38 عصر
با تشکر از راهنمایی شما .
در مورد ماتریس ببخشید اشتباه شد همون n*n صحیح می باشد
توضیح : منظورم اینه که مکان عنصر اول ماتریس 2*2 رو در ماتریس اصلی چاپ کنه
بازم ممنونم

delphi_stu
یک شنبه 03 اردیبهشت 1385, 19:38 عصر
بر طبق شیوه های زیر اگه میشه منو راهنمایی کنید ممنون میشم
برای حل ماتریس هم (سوال1) ابتدا مقایسه میکنه هر وقت اولین عنصر ماتریس 2*2 با n*n برابر شده تشکیل ماتریس 2*2 میدیم و مقایسه می کنیم .

Argonod
یک شنبه 03 اردیبهشت 1385, 21:28 عصر
>> سوال 1:
مثلا ماتریس n*n ما این باشه

1 2 3 4 5 6 7
0 1 2 4 5 8 9
3 2 4 7 9 5 6
1 0 2 4 5 6 8

ماتریس 2*2
4 5
7 9
حل جواب مساله برابر میشه با : 2.3

>>برای حل ماتریس هم (سوال1) ابتدا مقایسه میکنه هر وقت اولین عنصر ماتریس 2*2 با n*n برابر شده تشکیل ماتریس 2*2 میدیم و مقایسه می کنیم .

سوال کاملا نامفهوم هست. اگه کس دیگه ای از دوستان متوجه سوال شد لطفا عمومی کنید.

delphi_stu
دوشنبه 04 اردیبهشت 1385, 05:21 صبح
در مورد توضیح برنامه :
سوال 1: ما فقط می خوایم ماتریس 2*2 رو در ماتریس دیگه جستجو کنیم
در مثال بالا ماتریس 2*2 ما در ستون 2 و سطر 3 ماتریس دیگه یافت شد .
-----------------------------------
توضیح : خوب اولین عنصر ماتریس 2*2 رو با تمام عناصر ماتریس دیگه مقایسه میکنه . اگر مساوی بودند ، یک محدوده 2*2 باید تشکیل بشه اگه عناصر این محدوده با عناصر ماتریس 2*2 یکی شد . اونوقت فقط عنصر ماتریس اصلی که با اولین عنصر ماتریس 2*2 برابر میشه رو چاپ میکنه

delphi_stu
دوشنبه 04 اردیبهشت 1385, 05:22 صبح
دوستان اگه میشه کمکم کنید من فقط تا 11 امروز (دوشنبه ) وقت دارم

Mahdi_Delphi
دوشنبه 04 اردیبهشت 1385, 08:51 صبح
سلام
سوالشون درسته فقط یادشون رفته شماره سطر و ستون ها از صفر شروع میشه !

مثلا ماتریس n*n ما این باشه

1 2 3 4 5 6 7
0 1 2 4 5 8 9
3 2 4 7 9 5 6
1 0 2 4 5 6 8

ماتریس 2*2
4 5
7 9
حل جواب مساله برابر میشه با : (2و1)

این هم برنامه :


#include<iostream.h>
#include<conio.h>

const int array_size=5;
void find(int [][array_size],int,int [][2]);
int main()
{
int matrix[array_size][array_size]={1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4, 5};
int m[2][2]={3,4,3,4};
clrscr();
find(matrix,array_size,m);
getch();
return 0;
}

void find(int a[][array_size],int a_size,int b[][2])
{
int i,j;
for(i=0;i<a_size;i++)
for(j=0;j<a_size;j++)
{
if((i+1<array_size)&&(j+1<array_size))
if((a[i][j]==b[0][0])&&(a[i][j+1]==b[0][1])&&(a[i+1][j]==b[1][0])&&(a[i+1][j+1]==b[1][1]))
cout<<'('<<i<<','<<j<<')'<<endl;

}

}

Mahdi_Delphi
دوشنبه 04 اردیبهشت 1385, 09:11 صبح
البته این برنامه اگه ماتریس 2*2 در چند جای برنامه اومده باشه همه موارد رو پیدا میکنه.
اگه میخواین فقط یکی رو پیدا کنه یک break ناقابل رو در داخلی ترین دستور if قرار بدید(بعد از cout).

delphi_stu
دوشنبه 04 اردیبهشت 1385, 13:22 عصر
از همه دوستان ممنونم
برنامه خودم صحیح است؟

#include <conio.h>
#include <stdio.h>
void locate_ch (int x[40][40], int a[2][2] , int v);

main()
{
int i=0,j=0,s[40][40],g[2][2],v2;

printf("enter n:");
scanf("%i",&v2);
printf("\nEnter matris %d*%d:\n",v2,v2);
for (i=0;i<v2;i++)
{ for (j=0;j<v2;j++)
scanf("%i",&s[i][j]);
}
printf("\n matris 2*2:\n");
for (i=0;i<2;i++)
{ for (j=0;j<2;j++)
scanf("%d",&g[i][j]);
}
locate_ch ( s,g ,v2);
return 0;
}

void locate_ch (int m[40][40], int n[2][2] , int v)
{
int w=0,k=0,l=0,i=0,j=0,d=0;
clrscr ();
printf("\nMatris n*n\n");
for (i=0;i<v;i++)
{ for (j=0;j<v;j++)
{
printf("%4d",m[i][j]);
}
printf("\n");
}
printf("\nMatris 2*2\n");
for (i=0;i<2;i++)
{ for (j=0;j<2;j++)
{
printf("%4d",n[i][j]);
}
printf("\n");
}
printf("\n jayegah :");
for (i=0;i<v;i++)
{ for (j=0;j<v;j++)
if (m[i][j]==n[0][0])
for (w=i,k=0;w<i+1;k++,w++)
for (d=j,l=0;d<j+1;l++,d++)
{ if (m[w+1][d+1]==n[k+1][l+1] && m[w+1][d]==n[k+1][l] &&m[w][d+1]==n[k][l+1])
printf(" %i,%i",i+1,j+1);
break;
}
}
}

Argonod
دوشنبه 04 اردیبهشت 1385, 15:52 عصر
اگرکه خروجی مورد نظررو دریافت میکنی خب معلومه درسته