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

Zadanie w c++

Object Storage Arubacloud
0 głosów
544 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 (7,670 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 361 wizyt
pytanie zadane 3 stycznia 2022 w C i C++ przez olcia Nowicjusz (200 p.)
0 głosów
1 odpowiedź 367 wizyt
pytanie zadane 30 listopada 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
+1 głos
1 odpowiedź 319 wizyt
pytanie zadane 24 listopada 2022 w C i C++ przez benny13 Obywatel (1,150 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...