Teteus Posted May 20, 2014 Report Posted May 20, 2014 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 41 4 5 61 2 3 4care 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! Quote
alexalghisi Posted May 20, 2014 Report Posted May 20, 2014 Bun si daca ai o matrice : 1 2 3 41 4 5 61 2 3 41 2 3 3Cum ar putea fi simetrica dupa o linie/coloana ? Quote
Teteus Posted May 20, 2014 Author Report Posted May 20, 2014 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? Quote
Active Members dancezar Posted May 20, 2014 Active Members Report Posted May 20, 2014 daca am inteles bine ,dupa exemplul lui alex de mai sus este simetric fata de linia 2 spre exemplu? Quote
staticwater Posted May 20, 2014 Report Posted May 20, 2014 @Teteus Remember, google is your best friend! Incearca un search in felul urmator:"programare matrice cu linii simetrice"Rezultate:1. Intrebarea pusa de tine pe softpediaSimetrie matrice nepatratica dupa linie sau coloana2. C++(varianta de rezolvare pentru incepatori)In matrice... - Brainly.ro... Quote
Teteus Posted May 20, 2014 Author Report Posted May 20, 2014 (edited) 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 May 21, 2014 by Usr6 2 x post Quote
bcman Posted May 20, 2014 Report Posted May 20, 2014 Î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?! Quote
Active Members dancezar Posted May 20, 2014 Active Members Report Posted May 20, 2014 (edited) 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] inverseziee6354ac6a907b9e3a4895873fd9707cX Edited May 31, 2014 by danyweb09 Quote
sulea Posted May 20, 2014 Report Posted May 20, 2014 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 impardaca ai par nu poti avea simetrie ca nu ai mijloc Quote
Teteus Posted May 20, 2014 Author Report Posted May 20, 2014 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 impardaca ai par nu poti avea simetrie ca nu ai mijlocAm 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 7sa verifice toate randurile de deasupra randului de mijloc cu cele de jos ca apoi sa spun daca este simetrica Quote
sulea Posted May 21, 2014 Report Posted May 21, 2014 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;beginreadln(n);readln(m);for i:=1 to n dofor 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. Quote
Teteus Posted May 21, 2014 Author Report Posted May 21, 2014 (edited) 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<coloanefor( 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>coloanefor( 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 May 21, 2014 by Teteus Quote