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

Sortowanie bombelkowe

Object Storage Arubacloud
+1 głos
468 wizyt
pytanie zadane 13 grudnia 2020 w C i C++ przez XYZ!12 Nowicjusz (130 p.)
edycja 14 grudnia 2020 przez Arkadiusz Waluk

Cześć. Napisałam taki program, ale wyskakuję mi błąd, niestety pomiomo usilnych poszukiwań nie znalazłam go. Mógłby ktoś spojrzeć i zobaczyć co zrobiłam nie tak i napisać mi poproszę. Z góry dziękuję bardzo.

#include <iostream>

#include <time.h>

using namespace std;

int sort_w();

int sort_w(){

int n;

int tab[n];

int bufor;

int i ;

srand(time(NULL));

n=(rand()%10+1);

for (i=0; i<n; i++)

tab[i]=(rand()%100+1);

for (int i=1; i<n; i++)

{

for (int z=n-1; z>=1; z--)

{

if (tab[z]>tab[z-1])

{



bufor=tab[z];

tab[z]=tab[z-1];

tab[z-1]=bufor;

}

}

}

for (i=0; i<n; i++)

cout<<tab[i]<<endl;

}

int main () {

cout << int tab(N) = ( 6, 3, 15, 9, 2 ) <<endl;

cout << int tab(N) = ( 11, 16, 8, 33, 6, 8, 1 ) <<endl;



return 0;

}
3
komentarz 14 grudnia 2020 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Proszę umieścić kod w przystosowanym do tego bloczku. Opis jak to zrobić znajduje się w FAQ. Dobrze byłoby też podawać dokładną treść błędu.

A chodziło raczej o sortowanie bąbelkowe. "Bombelkowym" to się mogą posługiwać panie w przedszkolu, jak ustawiają dzieci w kolejkę laugh

komentarz 14 grudnia 2020 przez VBService Ekspert (253,340 p.)
edycja 14 grudnia 2020 przez VBService

"Bombelkowym" to się mogą posługiwać panie w przedszkolu, jak ustawiają dzieci w kolejkę 

laughlaughlaughyes

@XYZ!12 wybacz (to nie hejt - uczysz się, masz prawo zadawać takie czy inne pytania, po to jest to forum m. in.) to nic osobistego, tylko tekst pierwsza klasa. wink

Można powiedzieć, że jesteś autorką następnego "zajedwabnistego" kawału o informatykach.

Jeden z Moich ulubionych, to też

Czym się dziewczyna informatyka w spodniach różni od dziewczyny informatyka w spódnicy?

Przychodzi administrator rano do pracy, siada do komputera, aby zobaczyć, co się działo w nocy i śpiewa:
- chcę oglądać twoje logi, logi, logi, logi. (czarno czarni - nogi)

1 odpowiedź

+3 głosów
odpowiedź 14 grudnia 2020 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Problemów z tym kodem jest kilka.

  • Kompletnie nie wiem co miał robić ten fragment kodu, ale taka składnia jest niepoprawna.
    cout << int tab(N) = ( 6, 3, 15, 9, 2 ) <<endl;
    cout << int tab(N) = ( 11, 16, 8, 33, 6, 8, 1 ) <<endl;

    Po pierwsze, definicję tablicy (tak jak każdej innej zmiennej) wypadałoby zapisać w osobnej instrukcji. Po drugie, do indeksowania tablicy oraz zdefiniowania jej rozmiaru służą nawiasy kwadratowe, a nie nawiasy okrągłe. Po trzecie, do zdefiniowania listy wartości, którą inicjalizujesz tablicę, używa się klamr. Po czwarte, nie wiem czym jest N (nie widzę nigdzie definicji takiej stałej). Ciekawi mnie to wszystko trochę, bo reszta kodu (w tym sam właściwy algorytm) używa poprawnej składni.

  • Standard języka C++ nie dopuszcza możliwości definiowania tablic o rozmiarze nieokreślonym w czasie kompilacji (a mówiąc prościej, nie można wprost utworzyć tablicy o rozmiarze określonym w wartości zmiennej). Należy zaalokować pamięć dynamicznie (new), a jeszcze lepiej będzie użycie kontenera std::vector. Niektóre kompilatory mogą taki kod przepuścić, ale radziłbym z tym uważać.
  • Funkcja sort_w() nie przyjmuje żadnego argumentu, nie sposób żeby mogła mieć dostęp do tablicy zdefiniowanej w funkcji main. Trzeba "przerobić ją" w ten sposób, aby można było taką tablicę do niej przekazać. Obecnie definiujesz taką tablicę jeszcze raz, wewnątrz funkcji, ale jej nawet nie inicjalizujesz. Będą tam śmieci.
  • Nagłówek funkcji sort_w() wskazuje na to, że zwraca ona wartość int. Jednak nie jest taka wartość w kodzie nigdzie zwracana (brak instrukcji return). Jednocześnie wydaje mi się niepotrzebne zwracanie wartości z funkcji, która ma tylko posortować pewien ciąg danych.
  • Brak wcięć skutecznie utrudnia czytanie kodu

Ogólnie to chciałbym pomóc, ale niestety błędy wskazują na to, że powinnaś doczytać jeszcze o pewnych podstawowych aspektach posługiwania się językiem. sad Bez tego będzie to trudne, bo pewne konstrukcje składniowe w tym kodzie (mam na myśli treść maina) wydają mi się "losowe", nie mam pomysłu skąd pomysł na zastosowanie takiego kodu.

1
komentarz 14 grudnia 2020 przez XYZ!12 Nowicjusz (130 p.)

Dziękuję za pomoc. Może lepiej bardziej jak napiszę tu polecenia jaki ten kod miał spełniać, wtedy będzię to chyba czytelne. Składnia tego wzrowowana była z podręcznika, więc może przy pisaniu popełniłam błąd.

Zad.1

Uzupełnij definicję funkcji sort_w(), po uruchomieniu której tablica tab zostanie posortowana metodą przez wstawianie w porządku rosnącym. Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji int tab[N] = {6, 3, 15, 9, 2} jest {2, 3, 6, 9, 15}.
  • Wynikiem funkcji int tab[N] = {11, 16, 8, 33, 6, 8, 1} jest {1, 6, 8, 8, 11, 16, 33}.
komentarz 14 grudnia 2020 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Super. Kod w zarysie może wyglądać tak:

#include <iostream>

using namespace std;

void sort(int tab[], int n) {
    // Sortuj bąbelkowo
    // Tab to tablica z liczbami do sortowania (oryginał z maina)
    // N to rozmiar tej tablicy
}

int main() {
    int tab[] = {6, 3, 15, 9, 2};
    sort(tab, 5);

    for (int i = 0; i < 5; i++) {
        cout << tab[i] << endl;
    }
}

Chodzi o to, że najpierw definiujesz tablicę, przypisujesz jej elementy. Następnie przekazujesz tablicę do funkcji sort, podając jednocześnie jej rozmiar jako drugi argument. W funkcji sort możesz się odwoływać do tej tablicy tak, jak byś ją zdefiniowała wewnątrz funkcji. Wystarczy ją posortować - tymi dwoma zagnieżdżonymi pętlami. Kodu losującego liczby i wypisującego nie warto umieszczać wewnątrz tej funkcji - ona ma tylko posortować liczby. W momencie gdy funkcja sort() skończy się wykonywać, tablica będzie już posortowana, i tylko pętla for dopełni formalności, przechodząc kolejno po wszystkich elementach i wypisując ich wartości. smiley

komentarz 14 grudnia 2020 przez VBService Ekspert (253,340 p.)

Sprawdź działanie funkcji dla podanych poniżej parametrów.

  • Wynikiem funkcji int tab[N] = {6, 3, 15, 9, 2} jest {2, 3, 6, 9, 15}.
  • Wynikiem funkcji int tab[N] = {11, 16, 8, 33, 6, 8, 1} jest {1, 6, 8, 8, 11, 16, 33}.
#include <iostream>
 
using namespace std;
 
void sort_w(int tab[], int n) {
    // Sortuj bąbelkowo
    // tab to tablica z liczbami do sortowania (oryginał z main-a)
    // N to rozmiar tej tablicy

}

void show(int tab[], int n) {
    for (int i=0; i<n; ++i) {
        cout << tab[i] << " ";
    }    
}
 
int main() {
    int *tab;
    
    tab = new int[5]{6, 3, 15, 9, 2};
    sort_w(tab, 5);
    show(tab, 5);

    delete[] tab;
    cout << endl;
    
    tab = new int[7]{11, 16, 8, 33, 6, 8, 1};
    sort_w(tab, 7);
    show(tab, 7);
    
    delete[] tab;
    cout << endl; 
    
    return 0;
}

Define array, then change its size ]

Podobne pytania

0 głosów
1 odpowiedź 770 wizyt
0 głosów
0 odpowiedzi 284 wizyt
pytanie zadane 21 czerwca 2018 w C i C++ przez siemasiema123.96 Początkujący (350 p.)
0 głosów
1 odpowiedź 1,583 wizyt
pytanie zadane 9 czerwca 2018 w C i C++ przez WhizzKid Początkujący (400 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...