Jump to content
Teteus

Ajutor Matrice Nepatratica Simetrie fata de linie sau coloana

Recommended Posts

Salutare!

As dori sa ma ajutati sa parcurg o matrice NEPATRATICA(mxn ) astfel incat sa-mi verifice matricea daca este simetrica fata linie sau coloana.Mai precis,se da o matrice nepatratica ex:

1 2 3 4

1 4 5 6

1 2 3 4

care este simetrica fata de linia a doua( linia 1 este egala cu linia 3).

Poate reuseste cineva sa ma scoata din impas.

mentionez ca plec cu i si j de la 0;

Mentionez ca am incercat toate variantele de parcurgere si nu am reusit sa ii dau de cap...sunt slab la algoritmica.

Multumesc anticipat!

Link to comment
Share on other sites

Asta este un alt caz care l am tratat..poate fi simetrica dupa diagonala fie principala fie secundara...ma intereseaza simetria fata de coloana sau linie in functie de matrice(NEPATRATICA)...eu am reusit ceva dar nu ma incanta...

Nimeni ..cu o idee stralucita?

Link to comment
Share on other sites

Alex se referea la altceva ...eu doresc sa aflu simetria unui matrice NEPATRATICE fata de linie sau coloana...Alex vb de matrice patratica.

Staticwater iti multumesc pt programel...dar l-am vazaut inainte sa postez....si este eronat in primul rand....in al doilea rand se vrea afisarea simetriei pe linie...pe mine ma intereaza toata matricea...nu doar o linie

Edited by Usr6
2 x post
Link to comment
Share on other sites

Începi parcurgerea de la linia/coloana respectiv? cu dou? for-uri, unul înspre dreapta, altul înspre stânga (la unul i-ul cre?te, la celelalt j-ul scade) si compari la fiecare pas a[p] ?i a[j][p] (sau a[p] ?i a[p][j], dup? caz),unde p e num?rul de ordine al linie/coloanei respective. Dac? începi cu i ?i j de la 0, vei folosi p-1. Declari la început o variabil? boolean? pe care o ini?ializezi cu 1 ?i în momentul în care cele 2 valori nu sunt egale îi dai valoarea 0. Toat? treaba asta o pui întru for, care parcurge liniile (dac? vrei simetrie fa?? de coloan?) sau coloanele (dac? vrei simetrie fa?? de linie). Pe lâng? condi?ia normal? din for (i<m sau j<n, dup? caz) mai pui ?i una pentru variabila boolean? (ok==1) ca s? ias? din for când g?se?te dou? numere neegale. Ok-ului o s?-i dai valoarea 1 la început, în for-ul mare. La sfâr?it mai pui if (ok==1) cout << "simetrica; else cout << "nesimetrica". Baft?!

Link to comment
Share on other sites

  • Active Members

hank12:



#include<iostream>
using namespace std;

int matrice[10][10],n,m;
int simetric_linie(int linie){
for(int i=0;i<n;i++)
if(matrice[linie-1][i]!=matrice[linie+1][i])
return 0;
return 1;
}
int main(){
int linie;
cin>>n>>m>>linie;
//citesti matricea
if(simetric_linie(linie-1)) //daca incepi cu indici de la 0
cout<<"Simetric fata de linia "<<linie;
else
cout<<"Nu";
return 0;
}

Nu l-am testat ca nu am compilator la mine dar l-am testat in php si a mers.

Si asa faci si la coloane numai ca schimbi notatiile in loc de matrice[linie-1] inversezi

ee6354ac6a907b9e3a4895873fd9707cX

Edited by danyweb09
Link to comment
Share on other sites

linia si coloana de simetrie nu ai de ce sa le citesti. pur si simplu sunt (nr linii(coloane) / 2) +1, in caz in care nr de linii(coloane) e impar

daca ai par nu poti avea simetrie ca nu ai mijloc

Am prins ideea dar daca te uiti atent la [linie-1]=[linie+1] el imi verifica doar ce se afla deasupra si in josul medianei(liniei de mijloc) si elementele de sus raman neverificate.Exemplu daca am o matrice de 5 linii pe 3 coloane: unde 1 1 1 este linia de mijloc el verifica doar 3 cu 1, 2 cu 4 si 1 cu 4...dar eu vreau ca

1 2 3

3 2 1

1 1 1

1 4 4

6 7 7

sa verifice toate randurile de deasupra randului de mijloc cu cele de jos ca apoi sa spun daca este simetrica

Link to comment
Share on other sites

program ex;
var i,j,n,m,l:integer;
a:array[1..100,1..100] of integer;

procedure simetrie_coloana(x,y,k:integer);
label finish;
begin
for i:=1 to x do
for j:=1 to k-1 do
if a[i,j]<>a[i,y-j+1] then begin
writeln('asimetrica');
goto finish;
end;
writeln('simetrica fata de coloana ',k);
finish:
end;

procedure simetrie_linie(x,y,k:integer);
label finish;
begin
for i:=1 to k-1 do
for j:=1 to y do
if a[i,j]<>a[x-i+1,j] then begin
writeln('asimetrica');
goto finish;
end;
writeln('simetrica fata de linia ',k);
finish:
end;




begin
readln(n);
readln(m);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
if m mod 2 <> 0 then
simetrie_coloana(n,m, m div 2 + 1)
else
simetrie_linie(n,m, n div 2 + 1);
end.

Link to comment
Share on other sites

Ms frumos...eu am trecut in Java dar mai genereaza cate o eroare din cand in cand...poate te poti uita peste parcurgeri 1 minut sa mi spui daca am gresit ceva.


//pentru linii<coloane
for( int i=0;i<n;i++){
for( int j=0;j<x;j++) \\x=(m+1)/2
y=(n+1)/2

if (v[i][j]!=v[i][m-j-1]){ \\in loc de +1 am pus -1 sa mi itereze tot vec
f=1;

}



//pentru linii>coloane
for( i=0;i<y;i++){
for( j=0;j<m;j++)


if (v[i][j]!=v[x-i+1][j]){ \\aici nu sunt foarte sigur daca este bine..

}}

Edited by Teteus
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...