Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Presbiopia - la 43 ani ?

Termen transcriere autovehicul

Cazare Timisoara pe 4-5 zile

Primele zile ale internetului per...
 Ditra 25

Casti USB-C ptr A-54

Aplicatie medicala / asistent med...

De ce vor atația politicieni...
 ERR_ADDRESS_UNREACHABLE

Legea 18/1968 Se mai aplica?

Digi conectare 2 routere prin fir

Succesiune notar versus instanta ...
 Montaj aer conditionat in balcon ...

Cont curent mulți valuta far...

Sugestii plan casa

Experiente cu firme care cumpara ...
 

Functie void returneaza matrice cu 0 si 1

- - - - -
  • Please log in to reply
3 replies to this topic

#1
Juny0r

Juny0r

    Junior Member

  • Grup: Members
  • Posts: 27
  • Înscris: 14.06.2011
Salut, am urmatoarea cerinta:

Quote

Scrieți o funcție care primește o matrice de 1 și 0, și returnează matricea modificată astfel: dacă într-o celulă se găsește 0, toată linia și coloana respectivă vor fi umplute cu 0.
Exemplu:
Pentru matricea:
[1, 0, 1]
[1, 1, 1]
[1, 1, 1]
Funcția va returna:
   [0, 0, 0]
   [1, 0, 1]
   [1, 0, 1]

void transformMatrix(char mat[1000][1000], unsigned int rows, unsigned int columns);

Am rezolvat aceasta problema insa nu inteleg cum pot returna matricea daca functia este void ? Cum ar trebui sa procedez ? Functia pe care am facut o lucreaza direct pe matrice, cineva mi-a zis ca e okei doar sa o modific si atat, ca ramane modificata si in main, dar vreau sa ma asigur totusi.

Problema rezolvata arata cam asa: (nu sunt prea multumit ca am atatea for-uri, dar sincer m-am plictisit de cand am incercat sa caut o solutie mai buna.. daca stiti si aveti un sfat, mi-ar prinde bine)
void transformMatrix(char mat[MAX_ARRAY_LENGTH_LONG][MAX_ARRAY_LENGTH_LONG],
unsigned int rows, unsigned int columns)
{
bool colFlag=false, rowFlag=false;
unsigned int i, j;
for(i=0; i<rows; i++) // aici verific daca pe prima linie exista valori de 0, daca da, rowFlag va deveni true
	 if(mat[i][0]==0)
		 rowFlag=true;
for(j=0; j<columns; j++) // aici verific daca pe prima coloana exista valori de 0, daca da, colFlag va deveni true
	 if(mat[0][j]==0)
		 colFlag=true;
for(i=1; i<rows; i++)
	 for(j=1; j<columns; j++)
	 {
		 if(mat[i][j]==0) /* parcurg matricea normal (fara prima linie si coloana) si cand gasesc un 0 modific valoarea liniei 0 si coloanei 0
							 obs: ma folosesc de prima linie si coloana pentru a stii mai tarziu unde trebuie sa pun 0 peste tot*/
		 {
			 mat[i][0]=0;
			 mat[0][j]=0;
		 }
	 }
for(i=1; i<rows; i++) // mai parcurg o data matricea ca sa inlocuiesc pe fiecare linie si coloana cu 0.
	 for(j=1; j<columns; j++)
		 if(mat[i][0]==0 || mat[0][j]==0)
			 mat[i][j]=0;
if(colFlag) // daca e true, modific si prima coloana cu 0 peste tot
	 for(i=0; i<columns; i++)
		 mat[0][i]=0;
if(rowFlag) // daca e true, modific si prima linie cu 0 peste tot
	 for(i=0; i<rows; i++)
		 mat[i][0]=0;
}



#2
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,428
  • Înscris: 10.08.2005

View PostJuny0r, on 26 octombrie 2016 - 17:07, said:

Salut, am urmatoarea cerinta:


Am rezolvat aceasta problema insa nu inteleg cum pot returna matricea daca functia este void ? Cum ar trebui sa procedez ? Functia pe care am facut o lucreaza direct pe matrice, cineva mi-a zis ca e okei doar sa o modific si atat, ca ramane modificata si in main, dar vreau sa ma asigur totusi.

Quote

Scrieți o funcție care primește o matrice de 1 și 0, și returnează matricea modificată astfel
unde spune ca trebuie sa fie VOID ?

cineva ti-a spus bine, lucrezi direct cu "materialul clientului" deci ai grija ce faci cu el
evenutual poti sa ii faci o copie intainte apelarea functiei

Edited by MarianG, 26 October 2016 - 17:28.


#3
yonut_a

yonut_a

    Trala la la la

  • Grup: Senior Members
  • Posts: 3,946
  • Înscris: 03.08.2008

View PostJuny0r, on 26 octombrie 2016 - 17:07, said:

cineva mi-a zis ca e okei doar sa o modific si atat, ca ramane modificata si in main, dar vreau sa ma asigur totusi.

Si ce te opreste sa faci o simpla afisare si sa afli ?

#4
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostJuny0r, on 26 octombrie 2016 - 17:07, said:

nu sunt prea multumit ca am atatea for-uri, dar sincer m-am plictisit de cand am incercat sa caut o solutie mai buna.. daca stiti si aveti un sfat, mi-ar prinde bine
Ma bucur ca esti nemultumit si ca vrei sa iti imbunatatesti solutia si sa iti rafinezi skillsetul.

O abordare mai curata este:

1. faci doua array-uri rows_to_zero_out si colums_to_zero_out, ambele de dimensiune MAX_ARRAY_LENGTH_LONG si cu false ca valoare (default: nu sterge nimic).
2. iterezi matricea (for in for), si cand dai de 0, setezi true rows_to_zero_out[i] si colums_to_zero_out[j]
3. iterezi rows_to_zero_out si iterezi mat[row] si setezi fiecare element din mat[row] ca 0, daca rows_to_zero_out[row] este true
4. faci acelasi lucru pentru colums_to_zero_out

Vei avea 3 for-uri primare, in loc de 6.

Sau pe scurt, rows_to_zero_out si colums_to_zero_out sunt aceste doua variabile la tine:

View PostJuny0r, on 26 octombrie 2016 - 17:07, said:

bool colFlag=false, rowFlag=false;
, dar ai nevoie de ele ca array-uri, doar un singur bool pentru fiecare nu e suficient.

Edited by OriginalCopy, 26 October 2016 - 17:53.


Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate