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

Funkcje rekurencyjne - Posortować liczby w tablicy i wyświetlić liczby posortowane w programie

Object Storage Arubacloud
0 głosów
272 wizyt
pytanie zadane 4 marca 2021 w C i C++ przez NukaNuka56 Obywatel (1,080 p.)

Dzień Dobry,

Mam takie zadanie: 

Wypełnij tablicę 20 elementową liczbami z zakresu 10 -  9999 i wykorzystując funkcje rekurencyjne wykonaj następujące zadanie:

Posortować liczby w tablicy i wyświetlić liczby posortowane w programie

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

void posortowanie(int tab[])
{
    int i,j,temp=0;
    if (tab[i]>tab[j])
    {
      temp= tab[i];
      tab[i]=tab[j];
      tab[j]= temp;
    }
    cout<<tab[j]<<" ";
}
int main()
{
    int n=20;
    int tab[n],i,sum=0;
    srand(time(NULL));
    for(i=0;i<n;i++)
    {
        tab[i]=10+rand()%9990;
        cout<<tab[i]<<"  ";
    }
    cout<<endl;
    cout<<"Posortowane liczby z tablicy:"<<endl;
    posortowanie(tab);
    return 0;
}

Posortowanie i wyświetlenie liczb posortowanych nie działa.

Wyświetla się: Segmentation fault

Co trzeba zmienić w kodzie?

2 odpowiedzi

0 głosów
odpowiedź 4 marca 2021 przez Whiskey_Taster Pasjonat (15,610 p.)

Tu nie ma nigdzie rekurencji. W dodatku masz kilka błędów: 

  • w funkcji main do n przypisujesz liczbę 20, a następnie tworzysz tablicę tab[n] - to jest niepoprawne w C++. Albo użyj const n = 20, albo operatora new przy tworzeniu tablicy
  • funkcja sortująca nie jest rekurencyjna, a więc nie spełnia założeń zadania
  • w funkcji sortującej w żadnym miejscu nie deklarujesz zmiennych 'i' oraz 'j'. A tuż po ich deklaracjach używasz ich jako indeksy tablic. Jest to duży błąd, bo nigdy nie wiesz, co siedzi w takich zmiennych, przez co z dużym prawdopodobieństwem odwołujesz się do nieistniejących elementów tablicy. Mało tego, całkiem możliwe, że są tam jakieś liczby ujemne, więc to już w ogóle jest tragedia
1
komentarz 4 marca 2021 przez VBService Ekspert (254,480 p.)
edycja 4 marca 2021 przez VBService

do ostatniego punktu @Whiskey_Taster-a, dla sprawdzenia co zawierają zmienne zadeklarowane, ale bez ustanowionych wartości "początkowych" przed ich użyciem.

#include <iostream>
 
using namespace std;
 
void posortowanie(int tab[])
{
    int i,j,temp=0;

    cout << "i = " << i << endl
         << "j = " << j << endl
         << "temp = " << temp << endl;
}

int main()
{
    const int n=20;
    int tab[n] = {0};

    posortowanie(tab);
    
    return 0;
}

 

1
komentarz 4 marca 2021 przez Whiskey_Taster Pasjonat (15,610 p.)
O właśnie, bardziej dydaktycznie :)
0 głosów
odpowiedź 4 marca 2021 przez VBService Ekspert (254,480 p.)

Masz zadanie:

... wykorzystując funkcje rekurencyjne ...

zobacz dlaczego, Twój kod nie spełnia powyższego zadania:
Wywołanie funkcji. Funkcje rekurencyjne. Zwracanie wartości przez funkcję.

 

 

P.S.

... liczbami z zakresu 10 -  9999

tab[i]=10+rand()%9990;

Random number c++ in some range

 

#include <iostream>
#include <ctime>

int main()
{
    srand(time(NULL));
    
    int min = 10;
    int max = 9999;
    int rang = max - min + 1;
    
    for(int i=0;i<20;i++)
    {

        std::cout<< " " << rand() % rang + min;
    }
    return 0;
}
komentarz 4 marca 2021 przez NukaNuka56 Obywatel (1,080 p.)
Jak wrzuciłem ten kod to programu to nadal nie sortuje mi tych liczb.
komentarz 4 marca 2021 przez VBService Ekspert (254,480 p.)

Ten kod demonstruje nie sortowanie danych, tylko prawidłowe zadeklarowanie przedziału, z którego będą losowane pseudolosowe liczby.

Podobne pytania

+1 głos
2 odpowiedzi 143 wizyt
0 głosów
2 odpowiedzi 927 wizyt
pytanie zadane 10 grudnia 2018 w C# przez Zuber Nowicjusz (230 p.)
0 głosów
0 odpowiedzi 236 wizyt

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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!

...