Adaugare rand nou in matrice

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

Adaugare rand nou in matrice

Post by pmarian » 23 Feb 2011, 23:49

Sa zicem ca am urmatoarea matrice:

http://www.servergeek.ro/wp-content/upl ... matrix.jpg

Ideea e ca vreau intr randul 0 si 1, daca utilizatorul vrea, sa introduca apasand o tasta (or whatever) un nou rand cu 3 coloane (cum e declarata initial matricea).

ps. in imagine e gresit pentru ca in imaginea "Dupa", pe randul 2 trebuie sa fie 1, 2, 3

Cheers !


controlling complexity is the essence of computer programming

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Adaugare rand nou in matrice

Post by Marius Bancila » 24 Feb 2011, 01:29

Asa, si care e problema?
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

toderut
Membru
Membru
Posts: 68
Joined: 03 Aug 2009, 11:17
Judet: Bihor

Re: Adaugare rand nou in matrice

Post by toderut » 24 Feb 2011, 10:23

mai da un exemplu, ca n am inteles nimic
ce dim are aia initiala si ce dim are aia finala

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

Re: Adaugare rand nou in matrice

Post by pmarian » 24 Feb 2011, 13:30

Sa zicem ca definesc o matrice care permite stocarea a 100 de randuri iar eu am completate cu date 3 randuri pe 3 coloane.

Cum pot sa introduc un rand nou intre randul 0 si 1 spre exemplu iar valorile actuale de pe randul 1 sa mearga un rand mai jos iar unde a fost randul 1 acum sa fie noul rand cu toate valorile pe 0 (0 0 0).

Ma gandeam sa incrementez matricea si astfel sa se mute fiecare element cu cate o pozitie.

Sper ca am explicat bine :)
controlling complexity is the essence of computer programming

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Adaugare rand nou in matrice

Post by Dragos Cojocari » 24 Feb 2011, 13:39

>> Cum pot sa introduc un rand nou intre randul 0 si 1 spre exemplu iar valorile actuale de pe randul 1 sa mearga un rand mai jos iar unde a fost randul 1 acum sa fie noul rand cu toate valorile pe 0 (0 0 0).
Depinde cum e implementata matricea. Dar avand in vedere ce fel deoperatii ai de facut ( introdus linii) ar trebui sa alegi o implementare ce iti permite acest lucru usor si eficient.

>> Ma gandeam sa incrementez matricea si astfel sa se mute fiecare element cu cate o pozitie.
Ce inseamna sa "incrementezi" matricea?

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Adaugare rand nou in matrice

Post by Marius Bancila » 24 Feb 2011, 13:51

Daca matricea e un tablou 2D atunci ce trebuie sa faci ca sa introduci o linie la indexul R e sa copiezi toate liniile, incepand cu ultima, de la pozitia i la i+1, pana cand ajungi cu i la R. La final, linia R va exista duplicata si pe R si pe R+1, iar la pozitia R vei introduce noile valori. M-am facut inteles?
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

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

Re: Adaugare rand nou in matrice

Post by pmarian » 24 Feb 2011, 14:00

Nu matricea. Scuze. o variabila cu valoarea 0 (prima pozitie). Cu un ciclu for dupa care afisez matricea prin a spre exemplu. Ziceai de o implementare care imi permite acest lucru. La ce implementari 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: Adaugare rand nou in matrice

Post by pmarian » 24 Feb 2011, 14:02

Marius Bancila wrote:Daca matricea e un tablou 2D atunci ce trebuie sa faci ca sa introduci o linie la indexul R e sa copiezi toate liniile, incepand cu ultima, de la pozitia i la i+1, pana cand ajungi cu i la R. La final, linia R va exista duplicata si pe R si pe R+1, iar la pozitia R vei introduce noile valori. M-am facut inteles?
In mare parte da. Ma pun la treaba.
controlling complexity is the essence of computer programming

User avatar
Marius Bancila
Fondator
Fondator
Posts: 2344
Joined: 11 Jul 2007, 11:45
Judet: Timiş
Location: Timisoara
Contact:

Re: Adaugare rand nou in matrice

Post by Marius Bancila » 24 Feb 2011, 20:00

OK. Si daca nu te descurci arata-ne ce ai facut si ii dam cumva de capat.
Marius Bancila
Fondator Codexpert, Microsoft MVP VC++
Site personal | Blog

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

Re: Adaugare rand nou in matrice

Post by pmarian » 24 Feb 2011, 20:24

Am rezolvat algoritmul pe hartie. Maine sau sambata sper sa-l pun si in cod. Revin.
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: Adaugare rand nou in matrice

Post by pmarian » 26 Feb 2011, 20:33

Pana acum am facut asa:

Code: Select all

int main() {
	int a[6] = { 10, 15, 20, 25, 30, 0 };
	int b, c, i;
	
	for (i = 0; i < 6; i++) {
		cout << a[i] << " ";
		
	}
	
	cout << endl;
	cout << "Introduce numarul pozitiei: ";
	cin >> b;
	cout << "Inserati un numar: ";
	cin >> c;
	
	if (b < 6) {
		a[b] = c;
		cout << a[b] << " ";
	}
	else {
		cout << "Pozitia introdusa nu exista" << endl;
	}

	return 0;
	
}
Cu codul de fata inserez o valoare pe o pozitie insa distrug valoarea prestabilita. As vrea sa mut toate elementele cu o pozitie mai incolo si sa inserez valoarea stocata in variabila c pe pozitia din variabila b. Sau, ca sa fie mai simplu, sa zicem ca vreau sa introduc o valoare introdusa de utilizator pe o pozitie prestabilita, sa zicem 2.

Teoretic stiu cum trebuie facut insa nu si in cod.

Ex. a[6] = a[5]
a[5] = a[4]
...
Astfel mut toate pozitile cu o pozitie in fata. Teoria ca teoria dar codul ma omoara ... Logic acolo vine un ciclu for. Dar nu stiu cum sa fac :)

Any ideea ?
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: Adaugare rand nou in matrice

Post by pmarian » 01 Mar 2011, 11:49

Hmm, cred ca voi face aceasta mutare cu o functie prin referire. Revin :)
controlling complexity is the essence of computer programming

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Adaugare rand nou in matrice

Post by Dragos Cojocari » 01 Mar 2011, 13:21

Daca ai nevoie sa faci multe operatii de adaugare in interiorul array-ului tau ( ma rog, matrice unidimensionala) atunci mai bine ai implementa array-ul ca lista simplu ( sau dublu) inlantuita. Aceasta implementare permite adaugari "in interior" foarte eficiente, doar prin modificarea unor linkuri.

a[0] ->a[1]->a[2]

Introducerea unei valori in loc de a[1] inseamna modificarea elgaturii de la A[0] la noul a[1] si crearea unei legaturi de la noul a[1] la fostul a[1]

Code: Select all

a[0]            a[1] vechi->a[2]
      \       /
       a[1] nou

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

Re: Adaugare rand nou in matrice

Post by pmarian » 03 Mar 2011, 16:57

Da, stiu cum sa scriu pe foaie algoritmul si uite ce am facut in cod:

Code: Select all

#include <iostream>
using namespace std;

int main() {
	int a[6] = { 10, 15, 20, 25, 30, 0 };
	int b, c, i, j;
	
	for (i = 0; i < 6; i++) {
		cout << a[i] << " ";
		
	}
	
	cout << endl;
	cout << "Introduce numarul pozitiei: ";
	cin >> b;
	cout << "Inserati un numar: ";
	cin >> c;
	
	if (b < 6) {
		a[b] = c;
		for (j = a[6]; j < 6; j++)
		cout << a[j] << " ";
	}
	else {
		cout << "Pozitia introdusa nu exista" << endl;
	}

	return 0;
	
}
Singura problema e ca imi distruge valoarea initiala care era definita in sir. Eu vreau sa mut fiecare valoare incepand cu pozitia a mai in fata cu o pozitie.
controlling complexity is the essence of computer programming

toderut
Membru
Membru
Posts: 68
Joined: 03 Aug 2009, 11:17
Judet: Bihor

Re: Adaugare rand nou in matrice

Post by toderut » 03 Mar 2011, 17:47

De ce nu definesti tu o alta matrice si copiezi in aia j linii din prima, o adaugi pe aia "de incrementare" si apoi copiezi in continuare. asta asa, fara optimizari de cod si in ideea ca am inteles eu bine problema ca fiind una de inserare a unei linii intr-o matrice.
Ideea cu liste este foarte naturala si-ti incalzeste mai multi muschi din c++(c).

Post Reply