• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie w c++

0 głosów
850 wizyt
pytanie zadane 3 stycznia 2022 w C i C++ przez olcia Nowicjusz (200 p.)

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 mi wychodzi błąd.

 

#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;

}



}

 

1 odpowiedź

+2 głosów
odpowiedź 4 stycznia 2022 przez toko Dyskutant (8,370 p.)
edycja 4 stycznia 2022 przez toko

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

Robisz odwrotnie: jeśli i%2 == 0 to znaczy, że indeks jest parzysty i ma być element z tab2, natomiast w przeciwnym wypadku powinien być element z tab1. Lekko uproszczony kod:

void fun2(unsigned int n, const double tab1[], const double tab2[], double tab3[]) { //funkcja b)

   for (int i = 0; i < 2 * n; i++) {

       if (i % 2 == 0) {

           tab3[i] = tab2[i/2];

       } else {

           tab3[i] = tab1[i/2];

       }

   }
}


Dodałbym też wypisywanie tablicy po wywołaniu fun1 i je lekko zmienił:

   fun1(n, tab1, tab2, tab3);  
 
   std::for_each(tab3, tab3 + 2 * n, [](const auto &a) { std::cout << a << ' '; }); //wyświetlenie tab3
   std::cout << std::endl;

   fun2(n, tab1, tab2, tab3);

   std::for_each(tab3, tab3 + 2 * n, [](const auto &a) { std::cout << a << ' '; }); //wyświetlenie tab3
   std::cout << std::endl;

Dodam jeszcze na koniec, że mogłabyś sama sprawdzić co nie działa. Jestem pewny, że doszłabyś do wniosku, że większość kodu działa dobrze, i że błąd jest w konkretnej funkcji/pętli. Mogłabyś to wskazać i zamiast całego kodu dać tylko tę konkretną pętlę/funkcję. Znacznie pomogło by to forumowiczom w rozwiązaniu problemu, a przy okazji poćwiczyłabyś sobie szukanie błędów w programach. Tak samo z poleceniem: nie potrzebujemy znać całego polecenia. Wystarczy część z którą sobie nie radzisz. Radziłbym też nie nazywać każdego pytania „Zadanie w C++”, bo „w C++” widac po kategorii, a że to jest zadanie to jest niepotrzebna informacja. Nie jestem mistrzem nazywania czegokolwiek, ale tytuł „Przepisywanie dwóch tablic do jednej naprzemiennie - zła kolejność elementów” jest moim zdaniem o wiele lepszy. Mogłabyś też zmienić konstrukcję pytania, bo to co jest wygląda tak:

Masz moje zadanie:

//Treść

Nie chce mi się myśleć, więc mi je zrób! A tu masz jakieś śmiecie, które nie działają:

//Kod

A w nagrodę pomarudzę, że mi się nie podoba. A jak nie zrobisz, to się usunę z forum i ci przestanę pomagać.

Trochę przesadziłem oczywiście, ale myślę, że wiesz co mam na myśli. Oczywiście osoba to pisząca nigdy nikomu z forum nie pomogła, żeby było oczywiste z tą groźbą, że się usunie.

Możnaby opisać problem, a nie robić copy&paste z treści zadania i rozwiązania, dodać jakieś powitanie, prośbę, albo podziekowanie (Cześć, mam taki problem..., Mógłby ktoś podpowiedzieć gdzie robię błąd? Z góry wszystkim dziękuję)

Podobne pytania

0 głosów
0 odpowiedzi 489 wizyt
pytanie zadane 3 stycznia 2022 w C i C++ przez olcia Nowicjusz (200 p.)
0 głosów
1 odpowiedź 906 wizyt
pytanie zadane 30 listopada 2022 w C i C++ przez Pysa6 Nowicjusz (240 p.)
+1 głos
1 odpowiedź 632 wizyt
pytanie zadane 24 listopada 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...