View Full Version : مشکل در برنامه ماتریس مربعی
قلندری
دوشنبه 15 تیر 1388, 17:40 عصر
با سلام و خسته نباشید خدمت اساتید بنده چند تا راهنمایی داشتم (البته لازم به ذکر هست که نمیخوام مسائل را حل کنید) فقط یه مقدار راهنمایی کنید ممنون میشم چون میدونم خلاف قوانیین هست حل مسئله های دانشجویی.
1-برنامه ای بنویسید که تعداد سطر یا ستون یک ماتریس مربعی را گرفته آنرا به شکل مارپیچی پر کند.
این سوال هست بنده اصلا به این مبحث آشنایی ندارم از دوستان هر کس بتونه راهنمایی کنه یا بگه باید چکار کنم فقد در حد راهنمایی بقیشو میتونم انجام بدم با تشکر از دوستان و مدیریت محترم سایت.
قلندری
سه شنبه 16 تیر 1388, 16:30 عصر
دوستان کسی نمیتونه منو راهنمایی کنه
queen-mm
سه شنبه 16 تیر 1388, 18:01 عصر
يا من اطلاعاتم كمه يا شما خوب توضيح ندادين.به صورت مار پيچ پر كنه يعني چي؟
MOHSEN8000
جمعه 19 تیر 1388, 20:42 عصر
با سلام
این راه حلی رو که الان میگم ، به نظرم عملی می رسه. اما واقعیتش اینه که همین الان که سوالتون رو دیدم به ذهنم رسید و توصیه می کنم اگه راه حل دیگه ای به ذهن خودتون رسید از اون استفاده کنید. اگه ابعاد ماتریس رو از کاربر بگیرید و ماتریس رو با توجه به اون بسازید ، برای پر کردن کافیه یک تابع بنویسید که بیرونی ترین لایه هر ماتریسی رو که بهش میدیم پر کنه . یعنی از اول سطر اول رو بعد ستون آخر و بعد سطر آخر و بعد ستون اول. که نوشتن این تابع فکر نکنم کار سختی باشه. حالا کافیه که هر بار که این تابع رو فراخوانی می کنیم ، یک نقطه شروع به اون بدهیم. مثلا اولین نقطه شروع برای تابع [0][0]a است و نقطه بعدی [1][1]a تا این که به المان وسط ماتریس برسیم که دیگه ماتریس کاملا پر شده.
اگه توضیحاتم رو متوجه نشدید بگید تا یه جوره دیگه بگم.
قلندری
شنبه 20 تیر 1388, 07:04 صبح
دوست عزیز با تشکر از شما اگه با یه مثال توضیح بدید ممنون میشم
MOHSEN8000
شنبه 20 تیر 1388, 23:45 عصر
قسمت اصلیش اینه که همون تابع رو بنویسید ، بقیش دیگه راحته . تابع منظورم اینه که تابعی بنویسید که مثلا اعدادی رو که از کاربر می گیره ، به ترتیب بریزه داخل [0][0] , [1][0] , ... تا [9][0] و بعد [9][1] , [9][2] , ... تا [9][9] و بعد [8][9] , [7][9] و ... تا [0][9] , و آخر هم [0][8] , [0][7] , ... تا [0][1] . این مثال برای ماتریس 10 در 10 بود. اگه به اندیس ها دقت کنی ، خیلی راحت می تونی برنامشو بنویسی. اگه نوشتی در واقع مثل اینه که بیرونی ترین لایه یه ماتریس 10 در 10 رو پر کردی.
امیدوارم مثالم روشن بوده باشه. اگه توی نوشتن تابعش هم مشکل داشتید بپرسید.
javadimani
یک شنبه 21 تیر 1388, 17:48 عصر
دوست عزیز با تشکر از شما اگه با یه مثال توضیح بدید ممنون میشم
سلام
من این برنامه رو به روش خودم نوشتم
البته در پاسکال
uses crt;
var
x:array[1..100,1..100] of integer;
i,j,k,n,t:integer;
begin
clrscr;
write('Enter n :');readln(n);
if n mod 2=0 then t:=n div 2 else t:=(n div 2)+1;
k:=1;
i:=1;
while (i<=t) do
begin
for j:=i to n-i+1 do
begin
x[i,j]:=k;
inc(k);
end;
dec(k);
for j:=i to n-i+1 do
begin
x[j,n-i+1]:=k;
inc(k);
end;
dec(k);
for j:=n-i+1 downto i do
begin
x[n-i+1,j]:=k;
inc(k);
end;
dec(k);
for j:=n-i+1 downto i+1 do
begin
x[j,i]:=k;
inc(k);
end;
inc(i);
end;
for i:=1 to n do
begin
for j:=1 to n do write(x[i,j]:5);
writeln;
end;
readln;
end.
http://www.imani.tk
javadimani86@gmail.com
MOHSEN8000
دوشنبه 22 تیر 1388, 02:03 صبح
با سلام
این کد رو همین الان نوشتم. با همون راهی که خودم گفتم نوشتمش. تابع spiral اون کار رو انجام می ده. فکر کنم به دردتون بخوره
#include<iostream.h>
#include<iomanip.h>
void spiral ( int **a , int m , int row );
void matprint(int **a , int row);
void shift(int **a , int row , int s);
void main ( ){
int **a , i , j , m , row , x , s;
cout<<"Please Enter The Number Of Row : "<<endl;
cin>>row;
a = new int*[row];
for (int i = 0; i < row; i++)
a[i] = new int[row];
for( i = 0 ; i < row ; i++ ){
for( j = 0 ; j < row ; j++ ){
a[i][j] = 0;
}
}
for ( i = 0 ; i <( row/2 ) ; i++ ){
spiral ( a , i , row);
}
if ( row % 2 == 1 ){
x = (row-1) / 2;
cin>>a[x][x];
}
cout<<"\n\n\n";
matprint(a,row);
cout<<"Please Enter The Number Of Shift :"<<endl;
cin>>s;
shift(a,row,s);
cout<<"\n\n\n";
matprint(a,row);
}
void spiral ( int **a , int m , int row ){
int x , y , i ;
x = m;
y = ( row - 1 ) - m;
for ( i = m ; i <= y ; i++ ){
cin>>a[x][i];
}
for ( i = m+1 ; i < y+1 ; i++ ){
cin>>a[i][y];
}
for ( i = y-1 ; i >= m ; i-- ){
cin>>a[y][i];
}
for ( i = y-1 ; i > m ; i-- ){
cin>>a[i][x];
}
}
void matprint(int **a , int row){
int i , j;
for ( i = 0 ; i < row ; i++ ){
for ( j = 0 ; j < row ; j++ ){
cout<<setiosflags(ios::right)<<a[i][j]<<setw(3);
}
cout<<"\n";
}
}
void shift(int **a , int row , int s){
int i , j , temp2 , **temp;
temp = new int*[row];
for (int i = 0; i < row; i++){
temp[i] = new int[row];
}
for ( i = 0 ; i < row ; i++ ){
for ( j = 0 ; j < row ; j++ ){
temp[i][j] = a[i][j];
}
}
s = s % row;
temp2 = s;
for( i = 0 ; i < row ; i++ ){
temp2 %= row;
for ( j = 0 ; j < row ; j++ ){
a[j][temp2] = temp [j][i];
}
temp2++;
}
}
javadimani
دوشنبه 22 تیر 1388, 19:00 عصر
راه حل جالبی بود ازت تشکر می کنم
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.