• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
337 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 (256,320 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 (256,320 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 (256,320 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 192 wizyt
0 głosów
2 odpowiedzi 1,112 wizyt
pytanie zadane 10 grudnia 2018 w C# przez Zuber Nowicjusz (230 p.)
0 głosów
0 odpowiedzi 297 wizyt

93,187 zapytań

142,201 odpowiedzi

322,012 komentarzy

62,514 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2315p. - Łukasz Eckert
  3. 2209p. - Łukasz Piwowar
  4. 2037p. - Tomasz Bielak
  5. 2006p. - rucin93
  6. 2006p. - Michal Drewniak
  7. 2005p. - Łukasz Siedlecki
  8. 1964p. - CC PL
  9. 1946p. - Adrian Wieprzkowicz
  10. 1901p. - Mikbac
  11. 1744p. - rafalszastok
  12. 1734p. - Anonim 3619784
  13. 1586p. - Dawid128
  14. 1520p. - Marcin Putra
  15. 1480p. - ssynowiec
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...