Informatică, întrebare adresată de Amerdo, 8 ani în urmă

Buna, in C++, cum imparti un sir de numere in doua? Gen am un sir de 8 elemente vreau ca 4 elemente sa le calculez intr o parte intr un fel si cealalta in partea cealalta.
Gen dupa ce citesc sirul de numere, cum il impart in doua?

Răspunsuri la întrebare

Răspuns de danboghiu66
0

Ai 2 solutii ca sa rezolvi aceasta problema.

Daca raspunsul ti se pare prea greu de inteles, marcheaza ca abuz ca sa iti recuperezi punctele.

In exemplul de mai jos. primele 7 elements fac parte din primul array, restul de elemente vor apartine celui de al doilea array.

Solutia 1: folosesti "for" ca sa generezi cele 2 array-uri, dintr-un array mare.

Metoda nu este foarte eficienta deoarece foloseste "for".

double originalArray[] = {1, 2, 3, 4, 10, 11, 12, 13, 20, 21, 22};

// observatie: 1 double = 8 bytes

int originalArrayNumberBytes = sizeof(originalArray);

int originalArrayNumberElements = originalArrayNumberBytes / sizeof(double);

int nPart1NumberElements = 7;

int nPart2NumberElements = originalArrayNumberElements - nPart1NumberElements;

// primul array de elemente

double arrayPart1[nPart1NumberElements];

for (int i = 0; i < nPart1NumberElements; i++) {

 arrayPart1[i] = originalArray[i];

}

// al doilea array de elemente

double arrayPart2[nPart2NumberElements];

for (int i = nPart1NumberElements; i < originalArrayNumberElements; i++) {

 arrayPart2[i - nPart1NumberElements] = originalArray[i];

}

// afisare array part 1

cout << "PART 1: " << endl;

for (int i = 0; i < nPart1NumberElements; i++) {

 cout << arrayPart1[i] << endl;

}

// afisare array part 2

cout << endl << "PART 2: " << endl;

for (int i = 0; i < nPart2NumberElements; i++) {

 cout << arrayPart2[i] << endl;

}

-----------------------------------------------------------------------------------

Solutia 2: nu folosesti "for", ci niste functii care permit copiere de bytes dintr-o zona de memorie in alta.

Metoda este rapida, dar un pic mai greu de urmarit.

double originalArray[] = {1, 2, 3, 4, 10, 11, 12, 13, 20, 21, 22};

// observatie: 1 double = 8 bytes

int originalArrayNumberBytes = sizeof(originalArray);

int originalArrayNumberElements = originalArrayNumberBytes / sizeof(double);

// elementele din array-ul arrayPart1

// arrayPart1 va avea 7 elemente, care in total au 7*8 = 56 bytes

int nPart1NumberElements = 7;

int nPart1NumberBytes = nPart1NumberElements * sizeof(double);

// elementele din array-ul arrayPart1

// arrayPart1 va avea 7 elemente, care in total au 7*8 = 56 bytes

int nPart2NumberElements = originalArrayNumberElements - nPart1NumberElements;

int nPart2NumberBytes = nPart2NumberElements * sizeof(double);

// definire array part1 + copiere de memorie

double arrayPart1[nPart1NumberElements];

memcpy(arrayPart1, originalArray, nPart1NumberBytes);

// definire array part2 + copiere de memorie

// arrayPart2 incepe de la elentul imediat urmator de unde se termina arrayPart1

double arrayPart2[nPart2NumberElements];

memcpy(arrayPart2, &originalArray[nPart1NumberElements], nPart2NumberBytes);

// afisare array part 1

cout << "PART 1: " << endl;

for (int i = 0; i < nPart1NumberElements; i++) {

 cout << arrayPart1[i] << endl;

}

// afisare array part 2

cout << endl << "PART 2: " << endl;

for (int i = 0; i < nPart2NumberElements; i++) {

 cout << arrayPart2[i] << endl;

}

Alte întrebări interesante