Napisz funkcję, która otrzymuje cztery argumenty: dodatnią liczbę całkowitą n, n-elementowe tablice tab1 i tab2 oraz 2*n-elementową tablice tab3 o elementach typu double.

0

Polecenie

Napisz funkcję, która otrzymuje cztery argumenty: dodatnią liczbę całkowitą n,
n-elementowe tablice tab1 i tab2 oraz 2*n-elementową tablice tab3 o elementach typu
double.
a) Funkcja powinna przepisywać zawartość tablic tab1 i tab2 do tablicy tab3 w taki
sposób, ze na początku tablicy tab3 powinny się znaleźć elementy tablicy tab1, a po
nich elementy tablicy tab2.
b) Funkcja powinna przepisywać zawartość tablic tab1 i tab2 do tablicy tab3 w taki
sposób, ze w komórkach tablicy tab3 o nieparzystych indeksach powinny się znaleźć
elementy tablicy tab1, a w komórkach tablicy tab3 o parzystych indeksach elementy
tablicy tab2.

Zrobiłam zgodnie z poleceniem i nie wiem czy robie to dobry spoobem




#include <iostream>
 
#include <algorithm>
 
//a)
 
void fun1(unsigned int n, const double tab1[], const double tab2[], double tab3[]) { //funkcja void
 
   for (int i = 0; i < n; i++) {
 
       tab3[i] = tab1[i]; 
 
       tab3[n + i] = tab2[i]; 
 
   }
 
}
 
void fun2(unsigned int n, const double tab1[], const double tab2[], double tab3[]) { //funkcja b)
 
   int k = 0; 
 
   int j = 0; 
 
   for (int i = 0; i < 2 * n; i++) {
 
       if (i % 2 == 0) {
 
           tab3[i] = tab1[k];
 
           k++;
 
       } else {
 
           tab3[i] = tab2[j];
 
           j++;
 
       }
 
   }
 
}
 
int main() {
 
   unsigned int n; 
 
   std::cin >> n; 
 
   auto *tab1 = new double[n];
 
   auto *tab2 = new double[n];
 
   auto *tab3 = new double[2*n];
 
   for (int i = 0; i < n; i++) { 
 
       tab1[i] = i;
 
       tab2[i] = n + i;
 
   }
 
    
 
   fun1(n, tab1, tab2, tab3); 
 
   fun2(n, tab1, tab2, tab3); 
 
   std::for_each(tab3, tab3 + 2 * n, [](const auto &a) { std::cout << a << std::endl; }); //wyświetlenie tab3
 
    
 
   delete [] tab1;
 
   delete [] tab2;
 
   delete [] tab3;
 
    
 
   return 0;
 
}
 
 
 
}
2

https://godbolt.org/z/cGqjobYsE - na szybkiego wygląda Ok - address sanitizer nie znajduje też błędów.

Kod jest brzydki, ale jak na początek jest dobrze. Sama treść zmusza do brzydkiego kodu.

Szybko napisane testy też mówią, że jet dobrze: https://godbolt.org/z/71r1f7EG5

1
void fun2(unsigned int n, const double tab1[], const double tab2[], double tab3[])
{
   for(int i=0;i<n;++i) 
   {
       tab3[(i<<1)]=tab1[i];
       tab3[(i<<1)+1]=tab2[i];
   }
}

lub:

void fun2(unsigned int n, const double tab1[], const double tab2[], double tab3[])
{
   for(int i=0,k=0;i<n;++i) 
   {
       tab3[k++]=tab1[i];
       tab3[k++]=tab2[i];
   }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1