copiere matrice

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
Post Reply
User avatar
pmarian
Junior
Junior
Posts: 25
Joined: 26 Dec 2010, 19:36
Judet: Maramureş
Location: Ocna Șugatag
Contact:

copiere matrice

Post by pmarian » 19 Feb 2011, 16:13

Buna,

Vreau sa scriu o functie care sa copieze continutul unei matrice de tip int intr-o alta matrice, de aceeasi dimensiune si tip de baza. Functia trebuie sa preia doua argumente de tip pointer iar operatia din cadrul ciclului trebuie sa fie:

Code: Select all

*p1 = *p2;
*p1++;
*p2++;
Nu vreau sa ma ajutati cu cod ci sa-mi explicati daca se poate, unde am gresit si ce ar trebui sa fac.
Pana acum am asa:

Code: Select all

#include <iostream>
using namespace std;
	
void copy_array(int *p1, int *p2);
int a[3] = { 1, 2, 3 };
int b[3];

int main() {
	int *p1, *p2;	

	copy_array(a, b);
	
	for(p1 = a; p1 < a; p1++) 
		for(p2 = b; p2 < b; p2++) 	
		
		cout << *p2 << " ";
		
		return 0;
}

void copy_array(int *p1, int *p2) {

	while (*p1 = *p2) 
		*p1++;
	*p2++;
}
Pentru a copia doua matrici fara pointeri stiu insa vreau sa fac aceasta copiere cu pointeri si sa fie pointeri si in ciclul care afiseaza valorile matricei. Orice sfat este bine venit.

Multumesc.


controlling complexity is the essence of computer programming

User avatar
zlatomir
Membru++
Membru++
Posts: 282
Joined: 04 Jul 2009, 23:59
Location: Arad
Contact:

Re: copiere matrice

Post by zlatomir » 19 Feb 2011, 16:30

Code: Select all

void copy_array(int *p1, int *p2) { //trebuie sa pasezi si dimensiunea array-ului

   while (*p1 = *p2) //loop pana la dimensiune
      *p1++; //si aici vrei sa incrementezi pointer-ul (sa ai urmatoarea adresa)
   *p2++;    // acum aceasta instructiune e in afara loop-ului while si in plus e la fel ca si mai sus 
}

User avatar
pmarian
Junior
Junior
Posts: 25
Joined: 26 Dec 2010, 19:36
Judet: Maramureş
Location: Ocna Șugatag
Contact:

Re: copiere matrice

Post by pmarian » 19 Feb 2011, 16:47

Ok, am inclus si incrementarea lui *p2 in loop-ul while dar tot nu stiu ce sa fac cu celelalte.

- Cum sa pasez dimensiunea array-ului ?
- Nu am inteles cand ai zis "loop pana la dimensiune".

Multumesc.
controlling complexity is the essence of computer programming

User avatar
zlatomir
Membru++
Membru++
Posts: 282
Joined: 04 Jul 2009, 23:59
Location: Arad
Contact:

Re: copiere matrice

Post by zlatomir » 19 Feb 2011, 18:00

Pai dimensiunea o pasezi ca si un nou parametru (de tip int sau unsigned int)

Loop-ul trebuie sa mearga pana la dimensiune (adica sa se execute de X ori pt X elemente)

Iar incrementarea trebuie sa incrementeze pointer-ul (astfel incat sa indice inspre urmatoarea adresa) adica vei avea p1++; si p2++; in loc de *p1++;

User avatar
pmarian
Junior
Junior
Posts: 25
Joined: 26 Dec 2010, 19:36
Judet: Maramureş
Location: Ocna Șugatag
Contact:

Re: copiere matrice

Post by pmarian » 19 Feb 2011, 21:03

Desi nu doream sa vad cod furnizat de cei de pe forum, poti sa-mi dai un exemplu in cod ? Cred ca nu inteleg la ce te referi.
controlling complexity is the essence of computer programming

User avatar
pmarian
Junior
Junior
Posts: 25
Joined: 26 Dec 2010, 19:36
Judet: Maramureş
Location: Ocna Șugatag
Contact:

Re: copiere matrice

Post by pmarian » 19 Feb 2011, 21:58

I-am dat de capat pana la urma.

Ce am gresit:
- Trebuia sa declar functia copy_array cu 3 elemente. Am rescriso asa:

Code: Select all

void copy_array(int *arr1, int *arr2, int n);
iar instructiunea functiei:

Code: Select all

void copy_array(int *p1, int *p2, int n) {
	
	while (n-- > 0) {
		*p1 = *p2;
		p1++;
		p2++;
		
	}
Iar in int main() am pus asa:

Code: Select all

int main() {
	int *p;	

	copy_array(a, b, 3);
	
	for(p = a; p < a + 3; p++) 
	
		
		cout << *p << " ";
		
		return 0;
}
a este matricea in care vreau sa copiez continutul matricei b de aceea in "copy_array(a, b, 3);" ordinea este asta.

Multumesc pentru lamuriri.
controlling complexity is the essence of computer programming

Post Reply